summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/moonF.glsl16
-rw-r--r--indra/newview/app_settings/shaders/class1/windlight/moonF.glsl13
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);
}