diff options
| author | Michael Pohoreski <ptolemy@lindenlab.com> | 2020-08-17 22:56:18 +0000 | 
|---|---|---|
| committer | Michael Pohoreski <ptolemy@lindenlab.com> | 2020-08-17 22:56:18 +0000 | 
| commit | 2c964e82f5ac42fbb86f551783dfb04fcdfaf460 (patch) | |
| tree | 8cdec4b516c7e5ffb49bc030ebfc6233f64c3c3c /indra | |
| parent | 8189c900d840705255ee8c4ae9acbcd9d31c16e0 (diff) | |
| parent | f156730f3b3671be15bc769c0f17c5a7f4cb3faa (diff) | |
Merged in SL-13465 (pull request #239)
Approved-by: Dave Houlton
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/app_settings/shaders/class1/deferred/moonF.glsl | 16 | ||||
| -rw-r--r-- | indra/newview/app_settings/shaders/class1/windlight/moonF.glsl | 13 | 
2 files changed, 25 insertions, 4 deletions
| diff --git a/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl b/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl index 80f232948a..4366945214 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl @@ -45,6 +45,12 @@ uniform float blend_factor; // interp factor between moon A/B  VARYING vec2 vary_texcoord0;  vec3 srgb_to_linear(vec3 c); + +vec3 getAdditiveColor(); + +/// Soft clips the light with a gamma correction +vec3 scaleSoftClip(vec3 light); +  void main()   {      vec4 moonA = texture2D(diffuseMap, vary_texcoord0.xy); @@ -58,13 +64,19 @@ void main()      vec3 luma_weights = vec3(0.3, 0.5, 0.3);      vec4 light_color = max(sunlight_color, moonlight_color); -    float mix = 1.0 - dot(normalize(light_color.rgb), luma_weights); +    float blend = 1.0 - dot(normalize(light_color.rgb), luma_weights); -    vec3 exp = vec3(1.0 - mix * moon_brightness) * 2.0  - 1.0; +    vec3 exp = vec3(1.0 - blend * moon_brightness) * 2.0  - 1.0;      c.rgb = pow(c.rgb, exp);      //c.rgb *= moonlight_color.rgb; +    // Partial atmospherics calculation +    vec3 ac = getAdditiveColor(); +    c.rgb += ac; + +    c.rgb = scaleSoftClip(c.rgb); +      frag_data[0] = vec4(c.rgb, c.a);      frag_data[1] = vec4(0.0);      frag_data[2] = vec4(0.0f); diff --git a/indra/newview/app_settings/shaders/class1/windlight/moonF.glsl b/indra/newview/app_settings/shaders/class1/windlight/moonF.glsl index 24f3992e32..72d2c4cdfa 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/moonF.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/moonF.glsl @@ -44,6 +44,9 @@ uniform sampler2D altDiffuseMap;  uniform float blend_factor; // interp factor between moon A/B  VARYING vec2 vary_texcoord0; +vec3 getAdditiveColor(); +vec3 scaleSoftClip(vec3 light); +  void main()   {      vec4 moonA = texture2D(diffuseMap, vary_texcoord0.xy); @@ -53,12 +56,18 @@ void main()      // mix factor which blends when sunlight is brighter      // and shows true moon color at night      vec3 luma_weights = vec3(0.3, 0.5, 0.3); -    float mix = 1.0f - dot(normalize(sunlight_color.rgb), luma_weights); +    float blend = 1.0f - dot(normalize(sunlight_color.rgb), luma_weights); -    vec3 exp = vec3(1.0 - mix * moon_brightness) * 2.0 - 1.0; +    vec3 exp = vec3(1.0 - blend * moon_brightness) * 2.0 - 1.0;      c.rgb = pow(c.rgb, exp);      //c.rgb *= moonlight_color.rgb; +    // Partial atmospherics calculation +    vec3 ac = getAdditiveColor(); +    c.rgb += ac; + +    c.rgb = scaleSoftClip(c.rgb); +      frag_color = vec4(c.rgb, c.a);  } | 
