Skip to content

Commit da3bdac

Browse files
committed
Merge pull request godotengine#111210 from blueskythlikesclouds/ssr-overhaul
Overhaul screen space reflections.
2 parents 1bae99a + c128886 commit da3bdac

31 files changed

+1134
-883
lines changed

doc/classes/Environment.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@
298298
<member name="ssil_sharpness" type="float" setter="set_ssil_sharpness" getter="get_ssil_sharpness" default="0.98">
299299
The amount that the screen-space indirect lighting effect is allowed to blur over the edges of objects. Setting too high will result in aliasing around the edges of objects. Setting too low will make object edges appear blurry.
300300
</member>
301-
<member name="ssr_depth_tolerance" type="float" setter="set_ssr_depth_tolerance" getter="get_ssr_depth_tolerance" default="0.2">
301+
<member name="ssr_depth_tolerance" type="float" setter="set_ssr_depth_tolerance" getter="get_ssr_depth_tolerance" default="0.5">
302302
The depth tolerance for screen-space reflections.
303303
</member>
304304
<member name="ssr_enabled" type="bool" setter="set_ssr_enabled" getter="is_ssr_enabled" default="false">

doc/classes/ProjectSettings.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2838,8 +2838,8 @@
28382838
<member name="rendering/environment/glow/upscale_mode.mobile" type="int" setter="" getter="" default="0">
28392839
Lower-end override for [member rendering/environment/glow/upscale_mode] on mobile devices, due to performance concerns or driver support.
28402840
</member>
2841-
<member name="rendering/environment/screen_space_reflection/roughness_quality" type="int" setter="" getter="" default="1">
2842-
Sets the quality for rough screen-space reflections. Turning off will make all screen space reflections sharp, while higher values make rough reflections look better.
2841+
<member name="rendering/environment/screen_space_reflection/half_size" type="bool" setter="" getter="" default="true">
2842+
If [code]true[/code], screen-space reflections will be rendered at half size and then upscaled before being added to the scene. This is faster but may look pixelated or cause flickering. If [code]false[/code], screen-space reflections will be rendered at full size.
28432843
</member>
28442844
<member name="rendering/environment/ssao/adaptive_target" type="float" setter="" getter="" default="0.5">
28452845
Quality target to use when [member rendering/environment/ssao/quality] is set to [code]Ultra[/code]. A value of [code]0.0[/code] provides a quality and speed similar to [code]Medium[/code] while a value of [code]1.0[/code] provides much higher quality than any of the other settings at the cost of performance.

doc/classes/RenderingServer.xml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1500,7 +1500,14 @@
15001500
Sets the variables to be used with the screen-space reflections (SSR) post-process effect. See [Environment] for more details.
15011501
</description>
15021502
</method>
1503-
<method name="environment_set_ssr_roughness_quality">
1503+
<method name="environment_set_ssr_half_size">
1504+
<return type="void" />
1505+
<param index="0" name="half_size" type="bool" />
1506+
<description>
1507+
Sets whether screen-space reflections will be rendered at full or half size. Half size is faster, but may look pixelated or cause flickering.
1508+
</description>
1509+
</method>
1510+
<method name="environment_set_ssr_roughness_quality" deprecated="This option no longer does anything.">
15041511
<return type="void" />
15051512
<param index="0" name="quality" type="int" enum="RenderingServer.EnvironmentSSRRoughnessQuality" />
15061513
<description>

drivers/gles3/rasterizer_scene_gles3.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1107,6 +1107,9 @@ void RasterizerSceneGLES3::environment_glow_set_use_bicubic_upscale(bool p_enabl
11071107
glow_bicubic_upscale = p_enable;
11081108
}
11091109

1110+
void RasterizerSceneGLES3::environment_set_ssr_half_size(bool p_half_size) {
1111+
}
1112+
11101113
void RasterizerSceneGLES3::environment_set_ssr_roughness_quality(RS::EnvironmentSSRRoughnessQuality p_quality) {
11111114
}
11121115

drivers/gles3/rasterizer_scene_gles3.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -757,7 +757,6 @@ class RasterizerSceneGLES3 : public RendererSceneRender {
757757
float ssao_fadeout_to = 300.0;
758758

759759
bool glow_bicubic_upscale = false;
760-
RS::EnvironmentSSRRoughnessQuality ssr_roughness_quality = RS::ENV_SSR_ROUGHNESS_QUALITY_LOW;
761760

762761
bool lightmap_bicubic_upscale = false;
763762

@@ -878,6 +877,7 @@ class RasterizerSceneGLES3 : public RendererSceneRender {
878877

879878
void environment_glow_set_use_bicubic_upscale(bool p_enable) override;
880879

880+
void environment_set_ssr_half_size(bool p_half_size) override;
881881
void environment_set_ssr_roughness_quality(RS::EnvironmentSSRRoughnessQuality p_quality) override;
882882

883883
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;

editor/editor_node.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -472,8 +472,7 @@ void EditorNode::_update_from_settings() {
472472
bool glow_bicubic = int(GLOBAL_GET("rendering/environment/glow/upscale_mode")) > 0;
473473
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"));
474474
RS::get_singleton()->environment_glow_set_use_bicubic_upscale(glow_bicubic);
475-
RS::EnvironmentSSRRoughnessQuality ssr_roughness_quality = RS::EnvironmentSSRRoughnessQuality(int(GLOBAL_GET("rendering/environment/screen_space_reflection/roughness_quality")));
476-
RS::get_singleton()->environment_set_ssr_roughness_quality(ssr_roughness_quality);
475+
RS::get_singleton()->environment_set_ssr_half_size(GLOBAL_GET("rendering/environment/screen_space_reflection/half_size"));
477476
RS::SubSurfaceScatteringQuality sss_quality = RS::SubSurfaceScatteringQuality(int(GLOBAL_GET("rendering/environment/subsurface_scattering/subsurface_scattering_quality")));
478477
RS::get_singleton()->sub_surface_scattering_set_quality(sss_quality);
479478
float sss_scale = GLOBAL_GET("rendering/environment/subsurface_scattering/subsurface_scattering_scale");

scene/resources/environment.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1264,7 +1264,7 @@ void Environment::_bind_methods() {
12641264

12651265
ADD_GROUP("SSR", "ssr_");
12661266
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "ssr_enabled", PROPERTY_HINT_GROUP_ENABLE), "set_ssr_enabled", "is_ssr_enabled");
1267-
ADD_PROPERTY(PropertyInfo(Variant::INT, "ssr_max_steps", PROPERTY_HINT_RANGE, "1,512,1"), "set_ssr_max_steps", "get_ssr_max_steps");
1267+
ADD_PROPERTY(PropertyInfo(Variant::INT, "ssr_max_steps", PROPERTY_HINT_RANGE, "32,512,1"), "set_ssr_max_steps", "get_ssr_max_steps");
12681268
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ssr_fade_in", PROPERTY_HINT_EXP_EASING, "positive_only"), "set_ssr_fade_in", "get_ssr_fade_in");
12691269
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ssr_fade_out", PROPERTY_HINT_EXP_EASING, "positive_only"), "set_ssr_fade_out", "get_ssr_fade_out");
12701270
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ssr_depth_tolerance", PROPERTY_HINT_RANGE, "0.01,128,0.1"), "set_ssr_depth_tolerance", "get_ssr_depth_tolerance");

scene/resources/environment.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ class Environment : public Resource {
122122
int ssr_max_steps = 64;
123123
float ssr_fade_in = 0.15;
124124
float ssr_fade_out = 2.0;
125-
float ssr_depth_tolerance = 0.2;
125+
float ssr_depth_tolerance = 0.5;
126126
void _update_ssr();
127127

128128
// SSAO

servers/rendering/dummy/rasterizer_scene_dummy.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ class RasterizerSceneDummy : public RendererSceneRender {
120120

121121
void environment_glow_set_use_bicubic_upscale(bool p_enable) override {}
122122

123+
void environment_set_ssr_half_size(bool p_half_size) override {}
123124
void environment_set_ssr_roughness_quality(RS::EnvironmentSSRRoughnessQuality p_quality) override {}
124125

125126
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 {}

0 commit comments

Comments
 (0)