From c3e5e3b533b84b6c1f07714277982e4c6e8aea09 Mon Sep 17 00:00:00 2001 From: Rye Mutt <rye@alchemyviewer.org> Date: Tue, 14 Sep 2021 00:29:03 -0400 Subject: [PATCH] HDR lighting --- .../newview/app_settings/settings_alchemy.xml | 6 ++-- .../shaders/class1/alchemy/toneMapF.glsl | 33 ++++++++++--------- .../shaders/class1/deferred/materialF.glsl | 2 +- .../class1/deferred/multiSpotLightF.glsl | 5 +-- .../shaders/class1/deferred/spotLightF.glsl | 5 +-- .../shaders/class1/environment/srgbF.glsl | 1 - .../class2/deferred/multiSpotLightF.glsl | 5 +-- .../shaders/class2/deferred/spotLightF.glsl | 3 +- 8 files changed, 32 insertions(+), 28 deletions(-) diff --git a/indra/newview/app_settings/settings_alchemy.xml b/indra/newview/app_settings/settings_alchemy.xml index 574a39fdbbf..051dbb72657 100644 --- a/indra/newview/app_settings/settings_alchemy.xml +++ b/indra/newview/app_settings/settings_alchemy.xml @@ -769,13 +769,13 @@ <key>RenderToneMapType</key> <map> <key>Comment</key> - <string>Tonemapping type 0 - None, 1 - Linear, 2 - Reinhard, 3 - Reinhard2, 4 - Filmic, 5 - Unreal, 6 - ACES, 7 - Uchimura, 8 - Lottes, 9 - Uncharted</string> + <string>Tonemapping type 0 - HDR Debug, 1 - Linear, 2 - Reinhard, 3 - Reinhard2, 4 - Filmic, 5 - Unreal, 6 - ACES, 7 - Uchimura, 8 - Lottes, 9 - Uncharted</string> <key>Persist</key> <integer>1</integer> <key>Type</key> <string>U32</string> <key>Value</key> - <integer>0</integer> + <integer>7</integer> </map> <key>RenderToneMapUchimuraA</key> <map> @@ -803,7 +803,7 @@ <key>Value</key> <array> <real>0.4</real> - <real>1.33</real> + <real>1.13</real> <real>0.0</real> </array> </map> diff --git a/indra/newview/app_settings/shaders/class1/alchemy/toneMapF.glsl b/indra/newview/app_settings/shaders/class1/alchemy/toneMapF.glsl index 2955f24cd07..989c44c8665 100644 --- a/indra/newview/app_settings/shaders/class1/alchemy/toneMapF.glsl +++ b/indra/newview/app_settings/shaders/class1/alchemy/toneMapF.glsl @@ -46,7 +46,7 @@ vec3 linear_to_srgb(vec3 cl); vec3 reinhard(vec3 x) { - return x/(1+x); + return x/(1+x); } vec3 reinhard2(vec3 x) { @@ -56,9 +56,9 @@ vec3 reinhard2(vec3 x) { vec3 filmic(vec3 color) { - color = max(vec3(0.), color - vec3(0.004)); - color = (color * (6.2 * color + .5)) / (color * (6.2 * color + 1.7) + 0.06); - return color; + color = max(vec3(0.), color - vec3(0.004)); + color = (color * (6.2 * color + .5)) / (color * (6.2 * color + 1.7) + 0.06); + return color; } vec3 unreal(vec3 x) @@ -178,8 +178,9 @@ void main() #if TONEMAP_METHOD == 0 // None, Gamma Correct Only #define NEEDS_GAMMA_CORRECT 1 -#elif TONEMAP_METHOD == 1 // Linear +#elif TONEMAP_METHOD == 1 // Linear #define NEEDS_GAMMA_CORRECT 1 + diff.rgb = clamp(diff.rgb, 0, 1); #elif TONEMAP_METHOD == 2 // Reinhard method #define NEEDS_GAMMA_CORRECT 1 diff.rgb = reinhard(diff.rgb); @@ -212,25 +213,25 @@ void main() #if COLOR_GRADE_LUT // Invert coord for compat with DX-style LUT - diff.y = 1.0 - diff.y; + diff.y = 1.0 - diff.y; - // Convert to texel coords - vec3 lutRange = diff.rgb * ( colorgrade_lut_size.w - 1); + // Convert to texel coords + vec3 lutRange = diff.rgb * ( colorgrade_lut_size.w - 1); // Calculate coords in texel space - vec2 lutX = vec2(floor(lutRange.z)*colorgrade_lut_size.w+lutRange.x, lutRange.y); - vec2 lutY = vec2(ceil(lutRange.z)*colorgrade_lut_size.w+lutRange.x, lutRange.y); + vec2 lutX = vec2(floor(lutRange.z)*colorgrade_lut_size.w+lutRange.x, lutRange.y); + vec2 lutY = vec2(ceil(lutRange.z)*colorgrade_lut_size.w+lutRange.x, lutRange.y); - // texel to ndc - lutX = (lutX+0.5)*colorgrade_lut_size.xy; - lutY = (lutY+0.5)*colorgrade_lut_size.xy; + // texel to ndc + lutX = (lutX+0.5)*colorgrade_lut_size.xy; + lutY = (lutY+0.5)*colorgrade_lut_size.xy; - // LUT interpolation - diff.rgb = mix( + // LUT interpolation + diff.rgb = mix( texture2D(colorgrade_lut, lutX).rgb, texture2D(colorgrade_lut, lutY).rgb, fract(lutRange.z) - ); + ); #endif frag_color = diff; diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl index 2b0ded0f808..46af11ebaa9 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl @@ -158,7 +158,7 @@ vec3 calcPointLightOrSpotLight(vec3 light_col, vec3 npos, vec3 diffuse, vec4 spe { float scol = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt / (nh*da); vec3 speccol = lit*scol*light_col.rgb*spec.rgb; - speccol = clamp(speccol, vec3(0), vec3(1)); + speccol = max(speccol, vec3(0)); col += speccol; float cur_glare = max(speccol.r, speccol.g); diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl index 42c0a7ba253..b80ff45b0c3 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl @@ -229,8 +229,9 @@ void main() if (nh > 0.0) { float scol = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt/(nh*da); - col += dlit*scol*spec.rgb; - //col += spec.rgb; + vec3 speccol = dlit*scol*spec.rgb; + speccol = max(speccol, vec3(0)); + col += speccol; } } diff --git a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl index c68a4c3a401..22e079cec6b 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl @@ -229,8 +229,9 @@ void main() if (nh > 0.0) { float scol = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt/(nh*da); - col += dlit*scol*spec.rgb; - //col += spec.rgb; + vec3 speccol = dlit*scol*spec.rgb; + speccol = max(speccol, vec3(0)); + col += speccol; } } diff --git a/indra/newview/app_settings/shaders/class1/environment/srgbF.glsl b/indra/newview/app_settings/shaders/class1/environment/srgbF.glsl index 4a8b892c3ae..97201607637 100644 --- a/indra/newview/app_settings/shaders/class1/environment/srgbF.glsl +++ b/indra/newview/app_settings/shaders/class1/environment/srgbF.glsl @@ -43,7 +43,6 @@ vec3 srgb_to_linear(vec3 cs) vec3 linear_to_srgb(vec3 cl) { - cl = clamp(cl, vec3(0), vec3(1)); vec3 low_range = cl * 12.92; vec3 high_range = 1.055 * pow(cl, vec3(0.41666)) - 0.055; bvec3 lt = lessThan(cl,vec3(0.0031308)); diff --git a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl index 97925822076..2ddecd5aef6 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl @@ -225,9 +225,10 @@ void main() vec4 spec = texture2DRect(specularRect, frag.xy); if (spec.a > 0.0) { - vec3 npos = -normalize(pos); dlit *= min(da*6.0, 1.0) * dist_atten; + vec3 npos = -normalize(pos); + //vec3 ref = dot(pos+lv, norm); vec3 h = normalize(lv+npos); float nh = dot(norm, h); @@ -243,7 +244,7 @@ void main() { float scol = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt/(nh*da); vec3 speccol = dlit*scol*spec.rgb*shadow; - speccol = clamp(speccol, vec3(0), vec3(1)); + speccol = max(speccol, vec3(0)); col += speccol; } } diff --git a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl index 8d836686a16..9f0ae224b7e 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl @@ -225,6 +225,7 @@ void main() if (spec.a > 0.0) { dlit *= min(da*6.0, 1.0) * dist_atten; + vec3 npos = -normalize(pos); //vec3 ref = dot(pos+lv, norm); @@ -242,7 +243,7 @@ void main() { float scol = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt/(nh*da); vec3 speccol = dlit*scol*spec.rgb*shadow; - speccol = clamp(speccol, vec3(0), vec3(1)); + speccol = max(speccol, vec3(0)); col += speccol; } } -- GitLab