Skip to content

Commit 866094d

Browse files
fireSaracenOne
authored andcommitted
Change the roughness limiter constants to perform better.
Use the roughness amount and roughness constants from Filament.
1 parent 60eec78 commit 866094d

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
@@ -1597,7 +1597,7 @@
15971597
Enables Temporal Anti-Aliasing for the default screen [Viewport]. TAA works by jittering the camera and accumulating the images of the last rendered frames, motion vector rendering is used to account for camera and object motion.
15981598
[b]Note:[/b] The implementation is not complete yet, some visual instances such as particles and skinned meshes may show artifacts.
15991599
</member>
1600-
<member name="rendering/anti_aliasing/screen_space_roughness_limiter/amount" type="float" setter="" getter="" default="0.25">
1600+
<member name="rendering/anti_aliasing/screen_space_roughness_limiter/amount" type="float" setter="" getter="" default="0.159155">
16011601
</member>
16021602
<member name="rendering/anti_aliasing/screen_space_roughness_limiter/enabled" type="bool" setter="" getter="" default="true">
16031603
</member>

servers/rendering/renderer_rd/renderer_scene_render_rd.h

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

613613
/* GI */
614614
bool screen_space_roughness_limiter = false;
615-
float screen_space_roughness_limiter_amount = 0.25;
615+
float screen_space_roughness_limiter_amount = 0.15915494;
616616
float screen_space_roughness_limiter_limit = 0.18;
617617

618618
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
@@ -961,12 +961,13 @@ void main() {
961961

962962
#ifdef NORMAL_USED
963963
if (scene_data.roughness_limiter_enabled) {
964-
//https://www.jp.square-enix.com/tech/library/pdf/ImprovedGeometricSpecularAA.pdf
964+
// https://www.jp.square-enix.com/tech/library/pdf/ImprovedGeometricSpecularAA.pdf
965+
// https://www.jcgt.org/published/0010/02/02/paper.pdf
965966
float roughness2 = roughness * roughness;
966967
vec3 dndu = dFdx(normal), dndv = dFdy(normal);
967-
float variance = scene_data.roughness_limiter_amount * (dot(dndu, dndu) + dot(dndv, dndv));
968-
float kernelRoughness2 = min(2.0 * variance, scene_data.roughness_limiter_limit); //limit effect
969-
float filteredRoughness2 = min(1.0, roughness2 + kernelRoughness2);
968+
float variance = 2.0 * scene_data.roughness_limiter_amount * (dot(dndu, dndu) + dot(dndv, dndv));
969+
float kernelRoughness2 = min(variance, scene_data.roughness_limiter_limit);
970+
float filteredRoughness2 = clamp(roughness2 + kernelRoughness2, 0.0, 1.0);
970971
roughness = sqrt(filteredRoughness2);
971972
}
972973
#endif

servers/rendering_server.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -2929,9 +2929,9 @@ void RenderingServer::init() {
29292929
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"));
29302930

29312931
GLOBAL_DEF("rendering/anti_aliasing/screen_space_roughness_limiter/enabled", true);
2932-
GLOBAL_DEF("rendering/anti_aliasing/screen_space_roughness_limiter/amount", 0.25);
2932+
GLOBAL_DEF("rendering/anti_aliasing/screen_space_roughness_limiter/amount", 0.15915494);
29332933
GLOBAL_DEF("rendering/anti_aliasing/screen_space_roughness_limiter/limit", 0.18);
2934-
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"));
2934+
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"));
29352935
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"));
29362936

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

0 commit comments

Comments
 (0)