diff --git a/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl b/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl
index 80f232948acd4a3d1bdc4e60e83c95d555c36941..436694521423f16a8b171a988d72f0388a93746f 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 24f3992e32fa6fbbdb3c419816f5b134af9598a1..72d2c4cdfae4b73ebfddade235d517c691b48ed9 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);
 }