Skip to content

Commit b3d5641

Browse files
committed
Change the roughness limiter constants to perform better.
Use the roughness amount and roughness constants from Filament.
1 parent 920ca62 commit b3d5641

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
@@ -1576,7 +1576,7 @@
15761576
</member>
15771577
<member name="rendering/anti_aliasing/quality/use_debanding" type="bool" setter="" getter="" default="false">
15781578
</member>
1579-
<member name="rendering/anti_aliasing/screen_space_roughness_limiter/amount" type="float" setter="" getter="" default="0.25">
1579+
<member name="rendering/anti_aliasing/screen_space_roughness_limiter/amount" type="float" setter="" getter="" default="0.159155">
15801580
</member>
15811581
<member name="rendering/anti_aliasing/screen_space_roughness_limiter/enabled" type="bool" setter="" getter="" default="true">
15821582
</member>

servers/rendering/renderer_rd/renderer_scene_render_rd.h

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

599599
/* GI */
600600
bool screen_space_roughness_limiter = false;
601-
float screen_space_roughness_limiter_amount = 0.25;
601+
float screen_space_roughness_limiter_amount = 0.15915494;
602602
float screen_space_roughness_limiter_limit = 0.18;
603603

604604
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
@@ -930,12 +930,13 @@ void main() {
930930

931931
#ifdef NORMAL_USED
932932
if (scene_data.roughness_limiter_enabled) {
933-
//https://www.jp.square-enix.com/tech/library/pdf/ImprovedGeometricSpecularAA.pdf
933+
// https://www.jp.square-enix.com/tech/library/pdf/ImprovedGeometricSpecularAA.pdf
934+
// https://www.jcgt.org/published/0010/02/02/paper.pdf
934935
float roughness2 = roughness * roughness;
935936
vec3 dndu = dFdx(normal), dndv = dFdy(normal);
936-
float variance = scene_data.roughness_limiter_amount * (dot(dndu, dndu) + dot(dndv, dndv));
937-
float kernelRoughness2 = min(2.0 * variance, scene_data.roughness_limiter_limit); //limit effect
938-
float filteredRoughness2 = min(1.0, roughness2 + kernelRoughness2);
937+
float variance = 2.0 * scene_data.roughness_limiter_amount * (dot(dndu, dndu) + dot(dndv, dndv));
938+
float kernelRoughness2 = min(variance, scene_data.roughness_limiter_limit);
939+
float filteredRoughness2 = clamp(roughness2 + kernelRoughness2, 0.0, 1.0);
939940
roughness = sqrt(filteredRoughness2);
940941
}
941942
#endif

servers/rendering_server.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -2922,9 +2922,9 @@ RenderingServer::RenderingServer() {
29222922
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"));
29232923

29242924
GLOBAL_DEF("rendering/anti_aliasing/screen_space_roughness_limiter/enabled", true);
2925-
GLOBAL_DEF("rendering/anti_aliasing/screen_space_roughness_limiter/amount", 0.25);
2925+
GLOBAL_DEF("rendering/anti_aliasing/screen_space_roughness_limiter/amount", 0.15915494);
29262926
GLOBAL_DEF("rendering/anti_aliasing/screen_space_roughness_limiter/limit", 0.18);
2927-
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"));
2927+
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"));
29282928
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"));
29292929

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

0 commit comments

Comments
 (0)