Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions COPYRIGHT.txt
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,11 @@ Comment: Intel ASSAO and related files
Copyright: 2016, Intel Corporation
License: Expat

Files: ./servers/rendering/renderer_rd/shaders/ssao.glsl
Comment: Intel XeGTAO
Copyright: 2021, Intel Corporation
License: Expat

Files: servers/rendering/renderer_rd/shaders/effects/taa_resolve.glsl
Comment: Temporal Anti-Aliasing resolve implementation
Copyright: 2016, Panos Karabelas
Expand Down
2 changes: 1 addition & 1 deletion drivers/gles3/rasterizer_scene_gles3.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1113,7 +1113,7 @@ void RasterizerSceneGLES3::environment_set_ssr_half_size(bool p_half_size) {
void RasterizerSceneGLES3::environment_set_ssr_roughness_quality(RS::EnvironmentSSRRoughnessQuality p_quality) {
}

void RasterizerSceneGLES3::environment_set_ssao_quality(RS::EnvironmentSSAOQuality p_quality, bool p_half_size, float p_adaptive_target, int p_blur_passes, float p_fadeout_from, float p_fadeout_to) {
void RasterizerSceneGLES3::environment_set_ssao_quality(RS::EnvironmentSSAOQuality p_quality, RS::EnvironmentSSAOType p_type, bool p_half_size, float p_adaptive_target, int p_blur_passes, float p_fadeout_from, float p_fadeout_to) {
}

void RasterizerSceneGLES3::environment_set_ssil_quality(RS::EnvironmentSSILQuality p_quality, bool p_half_size, float p_adaptive_target, int p_blur_passes, float p_fadeout_from, float p_fadeout_to) {
Expand Down
2 changes: 1 addition & 1 deletion drivers/gles3/rasterizer_scene_gles3.h
Original file line number Diff line number Diff line change
Expand Up @@ -880,7 +880,7 @@ class RasterizerSceneGLES3 : public RendererSceneRender {
void environment_set_ssr_half_size(bool p_half_size) override;
void environment_set_ssr_roughness_quality(RS::EnvironmentSSRRoughnessQuality p_quality) override;

void environment_set_ssao_quality(RS::EnvironmentSSAOQuality p_quality, bool p_half_size, float p_adaptive_target, int p_blur_passes, float p_fadeout_from, float p_fadeout_to) override;
void environment_set_ssao_quality(RS::EnvironmentSSAOQuality p_quality, RS::EnvironmentSSAOType p_type, bool p_half_size, float p_adaptive_target, int p_blur_passes, float p_fadeout_from, float p_fadeout_to) override;

void environment_set_ssil_quality(RS::EnvironmentSSILQuality p_quality, bool p_half_size, float p_adaptive_target, int p_blur_passes, float p_fadeout_from, float p_fadeout_to) override;

Expand Down
2 changes: 1 addition & 1 deletion editor/editor_node.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -467,7 +467,7 @@ void EditorNode::_update_from_settings() {
RS::DOFBlurQuality dof_quality = RS::DOFBlurQuality(int(GLOBAL_GET("rendering/camera/depth_of_field/depth_of_field_bokeh_quality")));
bool dof_jitter = GLOBAL_GET("rendering/camera/depth_of_field/depth_of_field_use_jitter");
RS::get_singleton()->camera_attributes_set_dof_blur_quality(dof_quality, dof_jitter);
RS::get_singleton()->environment_set_ssao_quality(RS::EnvironmentSSAOQuality(int(GLOBAL_GET("rendering/environment/ssao/quality"))), GLOBAL_GET("rendering/environment/ssao/half_size"), GLOBAL_GET("rendering/environment/ssao/adaptive_target"), GLOBAL_GET("rendering/environment/ssao/blur_passes"), GLOBAL_GET("rendering/environment/ssao/fadeout_from"), GLOBAL_GET("rendering/environment/ssao/fadeout_to"));
RS::get_singleton()->environment_set_ssao_quality(RS::EnvironmentSSAOQuality(int(GLOBAL_GET("rendering/environment/ssao/quality"))), RS::EnvironmentSSAOType(int(GLOBAL_GET("rendering/environment/ssao/type"))), GLOBAL_GET("rendering/environment/ssao/half_size"), GLOBAL_GET("rendering/environment/ssao/adaptive_target"), GLOBAL_GET("rendering/environment/ssao/blur_passes"), GLOBAL_GET("rendering/environment/ssao/fadeout_from"), GLOBAL_GET("rendering/environment/ssao/fadeout_to"));
RS::get_singleton()->screen_space_roughness_limiter_set_active(GLOBAL_GET("rendering/anti_aliasing/screen_space_roughness_limiter/enabled"), GLOBAL_GET("rendering/anti_aliasing/screen_space_roughness_limiter/amount"), GLOBAL_GET("rendering/anti_aliasing/screen_space_roughness_limiter/limit"));
bool glow_bicubic = int(GLOBAL_GET("rendering/environment/glow/upscale_mode")) > 0;
RS::get_singleton()->environment_set_ssil_quality(RS::EnvironmentSSILQuality(int(GLOBAL_GET("rendering/environment/ssil/quality"))), GLOBAL_GET("rendering/environment/ssil/half_size"), GLOBAL_GET("rendering/environment/ssil/adaptive_target"), GLOBAL_GET("rendering/environment/ssil/blur_passes"), GLOBAL_GET("rendering/environment/ssil/fadeout_from"), GLOBAL_GET("rendering/environment/ssil/fadeout_to"));
Expand Down
13 changes: 13 additions & 0 deletions scene/resources/environment.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -357,6 +357,15 @@ float Environment::get_ssao_sharpness() const {
return ssao_sharpness;
}

void Environment::set_ssao_thickness_heuristic(float p_thickness_heuristic) {
ssao_thickness_heuristic = p_thickness_heuristic;
_update_ssao();
}

float Environment::get_ssao_thickness_heuristic() const {
return ssao_thickness_heuristic;
}

void Environment::set_ssao_direct_light_affect(float p_direct_light_affect) {
ssao_direct_light_affect = p_direct_light_affect;
_update_ssao();
Expand Down Expand Up @@ -385,6 +394,7 @@ void Environment::_update_ssao() {
ssao_detail,
ssao_horizon,
ssao_sharpness,
ssao_thickness_heuristic,
ssao_direct_light_affect,
ssao_ao_channel_affect);
}
Expand Down Expand Up @@ -1284,6 +1294,8 @@ void Environment::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_ssao_horizon"), &Environment::get_ssao_horizon);
ClassDB::bind_method(D_METHOD("set_ssao_sharpness", "sharpness"), &Environment::set_ssao_sharpness);
ClassDB::bind_method(D_METHOD("get_ssao_sharpness"), &Environment::get_ssao_sharpness);
ClassDB::bind_method(D_METHOD("set_ssao_thickness_heuristic", "thickness_heuristic"), &Environment::set_ssao_thickness_heuristic);
ClassDB::bind_method(D_METHOD("get_ssao_thickness_heuristic"), &Environment::get_ssao_thickness_heuristic);
ClassDB::bind_method(D_METHOD("set_ssao_direct_light_affect", "amount"), &Environment::set_ssao_direct_light_affect);
ClassDB::bind_method(D_METHOD("get_ssao_direct_light_affect"), &Environment::get_ssao_direct_light_affect);
ClassDB::bind_method(D_METHOD("set_ssao_ao_channel_affect", "amount"), &Environment::set_ssao_ao_channel_affect);
Expand All @@ -1297,6 +1309,7 @@ void Environment::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ssao_detail", PROPERTY_HINT_RANGE, "0,5,0.01"), "set_ssao_detail", "get_ssao_detail");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ssao_horizon", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_ssao_horizon", "get_ssao_horizon");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ssao_sharpness", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_ssao_sharpness", "get_ssao_sharpness");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ssao_thickness_heuristic", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_ssao_thickness_heuristic", "get_ssao_thickness_heuristic");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ssao_light_affect", PROPERTY_HINT_RANGE, "0.00,1,0.01"), "set_ssao_direct_light_affect", "get_ssao_direct_light_affect");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ssao_ao_channel_affect", PROPERTY_HINT_RANGE, "0.00,1,0.01"), "set_ssao_ao_channel_affect", "get_ssao_ao_channel_affect");

Expand Down
4 changes: 4 additions & 0 deletions scene/resources/environment.h
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,8 @@ class Environment : public Resource {
float ssao_detail = 0.5;
float ssao_horizon = 0.06;
float ssao_sharpness = 0.98;
// Only used for GTAO
float ssao_thickness_heuristic = 0.5;
float ssao_direct_light_affect = 0.0;
float ssao_ao_channel_affect = 0.0;
void _update_ssao();
Expand Down Expand Up @@ -299,6 +301,8 @@ class Environment : public Resource {
float get_ssao_horizon() const;
void set_ssao_sharpness(float p_sharpness);
float get_ssao_sharpness() const;
void set_ssao_thickness_heuristic(float p_thickness_heuristic);
float get_ssao_thickness_heuristic() const;
void set_ssao_direct_light_affect(float p_direct_light_affect);
float get_ssao_direct_light_affect() const;
void set_ssao_ao_channel_affect(float p_ao_channel_affect);
Expand Down
2 changes: 1 addition & 1 deletion servers/rendering/dummy/rasterizer_scene_dummy.h
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ class RasterizerSceneDummy : public RendererSceneRender {
void environment_set_ssr_half_size(bool p_half_size) override {}
void environment_set_ssr_roughness_quality(RS::EnvironmentSSRRoughnessQuality p_quality) override {}

void environment_set_ssao_quality(RS::EnvironmentSSAOQuality p_quality, bool p_half_size, float p_adaptive_target, int p_blur_passes, float p_fadeout_from, float p_fadeout_to) override {}
void environment_set_ssao_quality(RS::EnvironmentSSAOQuality p_quality, RS::EnvironmentSSAOType p_type, bool p_half_size, float p_adaptive_target, int p_blur_passes, float p_fadeout_from, float p_fadeout_to) override {}

void environment_set_ssil_quality(RS::EnvironmentSSILQuality p_quality, bool p_half_size, float p_adaptive_target, int p_blur_passes, float p_fadeout_from, float p_fadeout_to) override {}

Expand Down
62 changes: 46 additions & 16 deletions servers/rendering/renderer_rd/effects/ss_effects.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ SSEffects::SSEffects() {
}

// Initialize Screen Space Ambient Occlusion (SSAO)
ssao_set_quality(RS::EnvironmentSSAOQuality(int(GLOBAL_GET("rendering/environment/ssao/quality"))), GLOBAL_GET("rendering/environment/ssao/half_size"), GLOBAL_GET("rendering/environment/ssao/adaptive_target"), GLOBAL_GET("rendering/environment/ssao/blur_passes"), GLOBAL_GET("rendering/environment/ssao/fadeout_from"), GLOBAL_GET("rendering/environment/ssao/fadeout_to"));
ssao_set_quality(RS::EnvironmentSSAOQuality(int(GLOBAL_GET("rendering/environment/ssao/quality"))), RS::EnvironmentSSAOType(int(GLOBAL_GET("rendering/environment/ssao/type"))), GLOBAL_GET("rendering/environment/ssao/half_size"), GLOBAL_GET("rendering/environment/ssao/adaptive_target"), GLOBAL_GET("rendering/environment/ssao/blur_passes"), GLOBAL_GET("rendering/environment/ssao/fadeout_from"), GLOBAL_GET("rendering/environment/ssao/fadeout_to"));

{
RD::SamplerState sampler;
Expand All @@ -196,12 +196,13 @@ SSEffects::SSEffects() {
ssao_modes.push_back("\n");
ssao_modes.push_back("\n#define SSAO_BASE\n");
ssao_modes.push_back("\n#define ADAPTIVE\n");
ssao_modes.push_back("\n#define SSAO_TYPE_GTAO\n");

ssao.gather_shader.initialize(ssao_modes);

ssao.gather_shader_version = ssao.gather_shader.version_create();

for (int i = 0; i <= SSAO_GATHER_ADAPTIVE; i++) {
for (int i = 0; i <= SSAO_GATHER_GTAO; i++) {
ssao.pipelines[pipeline].create_compute_pipeline(ssao.gather_shader.version_get_shader(ssao.gather_shader_version, i));
pipeline++;
}
Expand Down Expand Up @@ -705,7 +706,8 @@ void SSEffects::ssil_allocate_buffers(Ref<RenderSceneBuffersRD> p_render_buffers
// These are automatically cached and cleaned up when our viewport resizes
// or when our viewport gets destroyed.

if (!p_render_buffers->has_texture(RB_SCOPE_SSIL, RB_FINAL)) { // We don't strictly have to check if it exists but we only want to clear it when we create it...
if (!p_render_buffers->has_texture(RB_SCOPE_SSIL, RB_FINAL)) {
// We don't strictly have to check if it exists but we only want to clear it when we create it...
RID final = p_render_buffers->create_texture(RB_SCOPE_SSIL, RB_FINAL, RD::DATA_FORMAT_R16G16B16A16_SFLOAT, RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_STORAGE_BIT | RD::TEXTURE_USAGE_CAN_COPY_TO_BIT);
RD::get_singleton()->texture_clear(final, Color(0, 0, 0, 0), 0, 1, 0, view_count);
}
Expand Down Expand Up @@ -1045,8 +1047,9 @@ void SSEffects::screen_space_indirect_lighting(Ref<RenderSceneBuffersRD> p_rende

/* SSAO */

void SSEffects::ssao_set_quality(RS::EnvironmentSSAOQuality p_quality, bool p_half_size, float p_adaptive_target, int p_blur_passes, float p_fadeout_from, float p_fadeout_to) {
void SSEffects::ssao_set_quality(RS::EnvironmentSSAOQuality p_quality, RS::EnvironmentSSAOType p_type, bool p_half_size, float p_adaptive_target, int p_blur_passes, float p_fadeout_from, float p_fadeout_to) {
ssao_quality = p_quality;
ssao_type = p_type;
ssao_half_size = p_half_size;
ssao_adaptive_target = p_adaptive_target;
ssao_blur_passes = p_blur_passes;
Expand All @@ -1063,9 +1066,20 @@ void SSEffects::gather_ssao(RD::ComputeListID p_compute_list, const RID *p_ao_sl
RD::get_singleton()->compute_list_bind_uniform_set(p_compute_list, p_importance_map_uniform_set, 1);
}

RID shader = ssao.gather_shader.version_get_shader(ssao.gather_shader_version, 1); //
int variant_id;
if (ssao_type == RS::ENV_SSAO_TYPE_GTAO) {
variant_id = 3;
} else {
variant_id = 1;
}
RID shader = ssao.gather_shader.version_get_shader(ssao.gather_shader_version, variant_id); //

for (int i = 0; i < 4; i++) {
// Only do two pass for GTAO
if ((ssao_type == RS::ENV_SSAO_TYPE_GTAO) && ((i == 1) || (i == 2))) {
continue;
}

if ((ssao_quality == RS::ENV_SSAO_QUALITY_VERY_LOW) && ((i == 1) || (i == 2))) {
continue;
}
Expand Down Expand Up @@ -1151,7 +1165,7 @@ void SSEffects::generate_ssao(Ref<RenderSceneBuffersRD> p_render_buffers, SSAORe
memset(&ssao.gather_push_constant, 0, sizeof(SSAOGatherPushConstant));
/* FIRST PASS */

RID shader = ssao.gather_shader.version_get_shader(ssao.gather_shader_version, SSAO_GATHER);
RID shader = ssao.gather_shader.version_get_shader(ssao.gather_shader_version, SSAO_GATHER_ASSAO);
RID default_sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);

RD::get_singleton()->draw_command_begin_label("Process Screen-Space Ambient Occlusion");
Expand Down Expand Up @@ -1204,6 +1218,12 @@ void SSEffects::generate_ssao(Ref<RenderSceneBuffersRD> p_render_buffers, SSAORe
ssao.gather_push_constant.quality = MAX(0, ssao_quality - 1);
ssao.gather_push_constant.size_multiplier = ssao_half_size ? 2 : 1;

if (ssao_type == RS::ENV_SSAO_TYPE_GTAO) {
float inv_tan_half_fov_x = p_projection.columns[0][0];
ssao.gather_push_constant.fov_scale = inv_tan_half_fov_x * p_ssao_buffers.buffer_height;
ssao.gather_push_constant.thickness_heuristic = p_settings.thickness_heuristic;
}

// We are using our uniform cache so our uniform sets are automatically freed when our textures are freed.
// It also ensures that we're reusing the right cached entry in a multiview situation without us having to
// remember each instance of the uniform set.
Expand Down Expand Up @@ -1248,19 +1268,19 @@ void SSEffects::generate_ssao(Ref<RenderSceneBuffersRD> p_render_buffers, SSAORe
u_load_counter.binding = 2;
u_load_counter.append_id(ssao.importance_map_load_counter);

RID shader_adaptive = ssao.gather_shader.version_get_shader(ssao.gather_shader_version, SSAO_GATHER_ADAPTIVE);
RID shader_adaptive = ssao.gather_shader.version_get_shader(ssao.gather_shader_version, SSAO_GATHER_ASSAO_ADAPTIVE);
importance_map_uniform_set = uniform_set_cache->get_cache(shader_adaptive, 1, u_pong, u_importance_map, u_load_counter);
}

if (ssao_quality == RS::ENV_SSAO_QUALITY_ULTRA) {
if (ssao_type == RS::ENV_SSAO_TYPE_ASSAO && ssao_quality == RS::ENV_SSAO_QUALITY_ULTRA) {
RD::get_singleton()->draw_command_begin_label("Generate Importance Map");
ssao.importance_map_push_constant.half_screen_pixel_size[0] = 1.0 / p_ssao_buffers.buffer_width;
ssao.importance_map_push_constant.half_screen_pixel_size[1] = 1.0 / p_ssao_buffers.buffer_height;
ssao.importance_map_push_constant.intensity = p_settings.intensity;
ssao.importance_map_push_constant.power = p_settings.power;

//base pass
RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, ssao.pipelines[SSAO_GATHER_BASE].get_rid());
RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, ssao.pipelines[SSAO_GATHER_ASSAO_BASE].get_rid());
gather_ssao(compute_list, ao_pong_slices, p_settings, true, gather_uniform_set, RID());

//generate importance map
Expand Down Expand Up @@ -1304,10 +1324,16 @@ void SSEffects::generate_ssao(Ref<RenderSceneBuffersRD> p_render_buffers, SSAORe
RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_ssao_buffers.half_buffer_width, p_ssao_buffers.half_buffer_height, 1);
RD::get_singleton()->compute_list_add_barrier(compute_list);

RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, ssao.pipelines[SSAO_GATHER_ADAPTIVE].get_rid());
RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, ssao.pipelines[SSAO_GATHER_ASSAO_ADAPTIVE].get_rid());
RD::get_singleton()->draw_command_end_label(); // Importance Map
} else {
RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, ssao.pipelines[SSAO_GATHER].get_rid());
int pipeline_id;
if (ssao_type == RS::ENV_SSAO_TYPE_GTAO) {
pipeline_id = SSAO_GATHER_GTAO;
} else {
pipeline_id = SSAO_GATHER_ASSAO;
}
RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, ssao.pipelines[pipeline_id].get_rid());
}

gather_ssao(compute_list, ao_deinterleaved_slices, p_settings, false, gather_uniform_set, importance_map_uniform_set);
Expand Down Expand Up @@ -1390,10 +1416,13 @@ void SSEffects::generate_ssao(Ref<RenderSceneBuffersRD> p_render_buffers, SSAORe
shader = ssao.interleave_shader.version_get_shader(ssao.interleave_shader_version, 0);

int interleave_pipeline = SSAO_INTERLEAVE_HALF;
if (ssao_quality == RS::ENV_SSAO_QUALITY_LOW) {
interleave_pipeline = SSAO_INTERLEAVE;
} else if (ssao_quality >= RS::ENV_SSAO_QUALITY_MEDIUM) {
interleave_pipeline = SSAO_INTERLEAVE_SMART;
// Always do half sample interleave for GTAO
if (ssao_type == RS::ENV_SSAO_TYPE_ASSAO) {
if (ssao_quality == RS::ENV_SSAO_QUALITY_LOW) {
interleave_pipeline = SSAO_INTERLEAVE;
} else if (ssao_quality >= RS::ENV_SSAO_QUALITY_MEDIUM) {
interleave_pipeline = SSAO_INTERLEAVE_SMART;
}
}

RID interleave_shader = ssao.interleave_shader.version_get_shader(ssao.interleave_shader_version, interleave_pipeline - SSAO_INTERLEAVE);
Expand Down Expand Up @@ -1765,7 +1794,8 @@ void SSEffects::sub_surface_scattering(Ref<RenderSceneBuffersRD> p_render_buffer
p.normal /= p.d;
float unit_size = p.normal.x;

{ //scale color and depth to half
{
//scale color and depth to half
RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin();

sss.push_constant.camera_z_far = p_camera.get_z_far();
Expand Down
19 changes: 14 additions & 5 deletions servers/rendering/renderer_rd/effects/ss_effects.h
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ class SSEffects {
void screen_space_indirect_lighting(Ref<RenderSceneBuffersRD> p_render_buffers, SSILRenderBuffers &p_ssil_buffers, uint32_t p_view, RID p_normal_buffer, const Projection &p_projection, const Projection &p_last_projection, const SSILSettings &p_settings);

/* SSAO */
void ssao_set_quality(RS::EnvironmentSSAOQuality p_quality, bool p_half_size, float p_adaptive_target, int p_blur_passes, float p_fadeout_from, float p_fadeout_to);
void ssao_set_quality(RS::EnvironmentSSAOQuality p_quality, RS::EnvironmentSSAOType p_type, bool p_half_size, float p_adaptive_target, int p_blur_passes, float p_fadeout_from, float p_fadeout_to);

struct SSAORenderBuffers {
bool half_size = false;
Expand All @@ -134,6 +134,8 @@ class SSEffects {
float detail = 0.5;
float horizon = 0.06;
float sharpness = 0.98;
// Only used for GTAO
float thickness_heuristic = 0.5;

Size2i full_screen_size;
};
Expand Down Expand Up @@ -164,6 +166,8 @@ class SSEffects {
/* Settings */

RS::EnvironmentSSAOQuality ssao_quality = RS::ENV_SSAO_QUALITY_MEDIUM;
RS::EnvironmentSSAOType ssao_type = RS::ENV_SSAO_TYPE_ASSAO;

bool ssao_half_size = false;
float ssao_adaptive_target = 0.5;
int ssao_blur_passes = 2;
Expand Down Expand Up @@ -326,9 +330,10 @@ class SSEffects {
/* SSAO */

enum SSAOMode {
SSAO_GATHER,
SSAO_GATHER_BASE,
SSAO_GATHER_ADAPTIVE,
SSAO_GATHER_ASSAO,
SSAO_GATHER_ASSAO_BASE,
SSAO_GATHER_ASSAO_ADAPTIVE,
SSAO_GATHER_GTAO,
SSAO_GENERATE_IMPORTANCE_MAP,
SSAO_PROCESS_IMPORTANCE_MAPA,
SSAO_PROCESS_IMPORTANCE_MAPB,
Expand All @@ -353,7 +358,6 @@ class SSEffects {
float NDC_to_view_mul[2];
float NDC_to_view_add[2];

float pad[2];
float half_screen_pixel_size_x025[2];

float radius;
Expand All @@ -363,8 +367,13 @@ class SSEffects {

float fade_out_mul;
float fade_out_add;

// ASSAO-specific
float horizon_angle_threshold;
float inv_radius_near_limit;
// GTAO-specific
float thickness_heuristic;
float fov_scale;

uint32_t is_orthogonal;
float neg_inv_radius;
Expand Down
Loading
Loading