From 7defff4de756f9d1040ff2113fdfd9a91c374f60 Mon Sep 17 00:00:00 2001 From: Rye Mutt <rye@alchemyviewer.org> Date: Mon, 22 Nov 2021 17:05:17 -0500 Subject: [PATCH] Fix nan in lighting breaking tonemapping and color grading --- .../shaders/class1/deferred/multiSpotLightF.glsl | 7 ++++++- .../app_settings/shaders/class1/deferred/spotLightF.glsl | 5 ++++- .../shaders/class2/deferred/multiSpotLightF.glsl | 7 +++---- .../app_settings/shaders/class2/deferred/spotLightF.glsl | 5 +---- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl index 14efbf717e7..5daeb2827cc 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl @@ -131,6 +131,7 @@ void main() vec3 pos = getPosition(frag.xy).xyz; vec3 lv = center.xyz-pos.xyz; float dist = length(lv); + dist /= size; if (dist > 1.0) { @@ -191,7 +192,8 @@ void main() lit = da * dist_atten * noise; col = dlit*lit*diff_tex; - amb_da += (da*0.5)*proj_ambiance; + + amb_da += (da*0.5+0.5)*proj_ambiance; } //float diff = clamp((proj_range-proj_focus)/proj_range, 0.0, 1.0); vec4 amb_plcol = texture2DLodAmbient(projectionMap, proj_tc.xy, proj_lod); @@ -201,6 +203,9 @@ void main() amb_da *= dist_atten * noise; amb_da = min(amb_da, 1.0-lit); + + amb_da = max(amb_da, 0.0); // Prevent nan in lighting + col += amb_da*color.rgb*diff_tex.rgb*amb_plcol.rgb*amb_plcol.a; } diff --git a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl index 8b9ae587486..4e8ddfb2777 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl @@ -191,7 +191,7 @@ void main() lit = da * dist_atten * noise; col = dlit*lit*diff_tex; - amb_da += (da*0.5)*proj_ambiance; + amb_da += (da*0.5+0.5)*proj_ambiance; } //float diff = clamp((proj_range-proj_focus)/proj_range, 0.0, 1.0); vec4 amb_plcol = texture2DLodAmbient(projectionMap, proj_tc.xy, proj_lod); @@ -201,6 +201,9 @@ void main() amb_da *= dist_atten * noise; amb_da = min(amb_da, 1.0-lit); + + amb_da = max(amb_da, 0.0); // Prevent nan in lighting + col += amb_da*color.rgb*diff_tex.rgb*amb_plcol.rgb*amb_plcol.a; } diff --git a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl index f295a7c2faf..c4018825920 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl @@ -215,6 +215,8 @@ void main() amb_da *= dist_atten * noise; amb_da = min(amb_da, 1.0-lit); + amb_da = max(amb_da, 0.0); // Prevent nan in lighting + col += amb_da*color.rgb*diff_tex.rgb*amb_plcol.rgb*amb_plcol.a; } @@ -275,10 +277,7 @@ void main() } #endif - //not sure why, but this line prevents MATBUG-194 - col = max(col, vec3(0.0)); - - //output linear + //output linear, sum of lights will be gamma corrected later frag_color.rgb = col; frag_color.a = 0.0; } diff --git a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl index 44b34061ffe..30db661534d 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl @@ -213,6 +213,7 @@ void main() amb_da += (da*da*0.5+0.5) /* * (1.0-shadow) */ * proj_ambiance; amb_da *= dist_atten * noise; amb_da = min(amb_da, 1.0-lit); + amb_da = max(amb_da, 0.0); // Prevent nan in lighting col += amb_da*color.rgb*diff_tex.rgb*amb_plcol.rgb*amb_plcol.a; } @@ -273,10 +274,6 @@ void main() } } #endif - - //not sure why, but this line prevents MATBUG-194 - col = max(col, vec3(0.0)); - //output linear colors as gamma correction happens down stream frag_color.rgb = col; frag_color.a = 0.0; -- GitLab