Skip to content

Commit 4ec19f1

Browse files
committed
Change the roughness limiter constants to perform better.
Use the roughness amount and roughness constants from Filament.
1 parent f91e5ba commit 4ec19f1

File tree

4 files changed

+9
-8
lines changed

4 files changed

+9
-8
lines changed

doc/classes/ProjectSettings.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1558,7 +1558,7 @@
15581558
</member>
15591559
<member name="rendering/anti_aliasing/quality/use_debanding" type="bool" setter="" getter="" default="false">
15601560
</member>
1561-
<member name="rendering/anti_aliasing/screen_space_roughness_limiter/amount" type="float" setter="" getter="" default="0.25">
1561+
<member name="rendering/anti_aliasing/screen_space_roughness_limiter/amount" type="float" setter="" getter="" default="0.159155">
15621562
</member>
15631563
<member name="rendering/anti_aliasing/screen_space_roughness_limiter/enabled" type="bool" setter="" getter="" default="true">
15641564
</member>

servers/rendering/renderer_rd/renderer_scene_render_rd.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -589,7 +589,7 @@ class RendererSceneRenderRD : public RendererSceneRender {
589589

590590
/* GI */
591591
bool screen_space_roughness_limiter = false;
592-
float screen_space_roughness_limiter_amount = 0.25;
592+
float screen_space_roughness_limiter_amount = 0.15915494;
593593
float screen_space_roughness_limiter_limit = 0.18;
594594

595595
mutable RID_Owner<RenderBuffers> render_buffers_owner;

servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl

+5-4
Original file line numberDiff line numberDiff line change
@@ -895,12 +895,13 @@ void main() {
895895

896896
#ifdef NORMAL_USED
897897
if (scene_data.roughness_limiter_enabled) {
898-
//https://www.jp.square-enix.com/tech/library/pdf/ImprovedGeometricSpecularAA.pdf
898+
// https://www.jp.square-enix.com/tech/library/pdf/ImprovedGeometricSpecularAA.pdf
899+
// https://www.jcgt.org/published/0010/02/02/paper.pdf
899900
float roughness2 = roughness * roughness;
900901
vec3 dndu = dFdx(normal), dndv = dFdy(normal);
901-
float variance = scene_data.roughness_limiter_amount * (dot(dndu, dndu) + dot(dndv, dndv));
902-
float kernelRoughness2 = min(2.0 * variance, scene_data.roughness_limiter_limit); //limit effect
903-
float filteredRoughness2 = min(1.0, roughness2 + kernelRoughness2);
902+
float variance = 2.0 * scene_data.roughness_limiter_amount * (dot(dndu, dndu) + dot(dndv, dndv));
903+
float kernelRoughness2 = min(variance, scene_data.roughness_limiter_limit);
904+
float filteredRoughness2 = clamp(roughness2 + kernelRoughness2, 0.0, 1.0);
904905
roughness = sqrt(filteredRoughness2);
905906
}
906907
#endif

servers/rendering_server.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -2920,9 +2920,9 @@ RenderingServer::RenderingServer() {
29202920
ProjectSettings::get_singleton()->set_custom_property_info("rendering/environment/ssil/fadeout_to", PropertyInfo(Variant::FLOAT, "rendering/environment/ssil/fadeout_to", PROPERTY_HINT_RANGE, "64,65536,0.1,or_greater"));
29212921

29222922
GLOBAL_DEF("rendering/anti_aliasing/screen_space_roughness_limiter/enabled", true);
2923-
GLOBAL_DEF("rendering/anti_aliasing/screen_space_roughness_limiter/amount", 0.25);
2923+
GLOBAL_DEF("rendering/anti_aliasing/screen_space_roughness_limiter/amount", 0.15915494);
29242924
GLOBAL_DEF("rendering/anti_aliasing/screen_space_roughness_limiter/limit", 0.18);
2925-
ProjectSettings::get_singleton()->set_custom_property_info("rendering/anti_aliasing/screen_space_roughness_limiter/amount", PropertyInfo(Variant::FLOAT, "rendering/anti_aliasing/screen_space_roughness_limiter/amount", PROPERTY_HINT_RANGE, "0.01,4.0,0.01"));
2925+
ProjectSettings::get_singleton()->set_custom_property_info("rendering/anti_aliasing/screen_space_roughness_limiter/amount", PropertyInfo(Variant::FLOAT, "rendering/anti_aliasing/screen_space_roughness_limiter/amount", PROPERTY_HINT_RANGE, "0.01,4.0,0.00000001"));
29262926
ProjectSettings::get_singleton()->set_custom_property_info("rendering/anti_aliasing/screen_space_roughness_limiter/limit", PropertyInfo(Variant::FLOAT, "rendering/anti_aliasing/screen_space_roughness_limiter/limit", PROPERTY_HINT_RANGE, "0.01,1.0,0.01"));
29272927

29282928
GLOBAL_DEF_RST("rendering/scaling_3d/mode", 0);

0 commit comments

Comments
 (0)