diff --git a/indra/llinventory/llsettingssky.cpp b/indra/llinventory/llsettingssky.cpp
index cfca2d0d78c10b1261fcb63f2d8dc232d412d2b1..211af6a7ae0d9eba15221e065569ca7bd95212db 100644
--- a/indra/llinventory/llsettingssky.cpp
+++ b/indra/llinventory/llsettingssky.cpp
@@ -32,6 +32,10 @@
 #include "llfasttimer.h"
 #include "v3colorutil.h"
 
+#if LL_WINDOWS
+#pragma optimize("", off)
+#endif
+
 //=========================================================================
 namespace
 {
@@ -1276,8 +1280,10 @@ void LLSettingsSky::calculateLightSettings() const
     LLColor3 tmpAmbient = ambient + (smear(1.f) - ambient) * cloud_shadow;
 
     //brightness of surface both sunlight and ambient
-    mSunDiffuse = gammaCorrect(componentMult(sunlight,   light_transmittance));
-    mSunAmbient = gammaCorrect(componentMult(tmpAmbient, light_transmittance));
+    // reduce range to 0 - 1 before gamma correct to prevent clipping
+    // then restore to full 0 - 3 range before storage
+    mSunDiffuse = gammaCorrect(componentMult(sunlight * 0.33333f,   light_transmittance)) * 3.0f;
+    mSunAmbient = gammaCorrect(componentMult(tmpAmbient * 0.33333f, light_transmittance)) * 3.0f;
 
     F32 moon_brightness = getIsMoonUp() ? getMoonBrightness() : 0.001f;
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
index dbd7abd7e50ff7ae3a21add0650499d547bbddb0..b439fbbff6c690a764f7087765aa781c02e367db 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
@@ -223,8 +223,7 @@ void main()
     float ambient = da;
     ambient *= 0.5;
     ambient *= ambient;
-    //ambient = max(getAmbientClamp(), ambient); // keeps shadows dark
-    ambient = 1.0 - ambient;
+    ambient = min(getAmbientClamp(), 1.0 - ambient);
 
     vec3 sun_contrib = min(final_da, shadow) * sunlit;
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl
index 7533762a9696b81a4c994de95555f195d8a4af22..274d1818f0b660da83b155b6eb5d25611f6cca64 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl
@@ -320,8 +320,7 @@ void main()
     float ambient = da;
     ambient *= 0.5;
     ambient *= ambient;
-    //ambient = max(getAmbientClamp(), ambient);
-    ambient = 1.0 - ambient;
+    ambient = min(getAmbientClamp(), 1.0 - ambient);
 
     vec3 sun_contrib = min(final_da, shadow) * sunlit;
    
diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
index b6e3951ee328ebe7b25650bbaa9c5b922f817208..2a24915ade579decf5844732697d0e4f4f9f6985 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
@@ -106,8 +106,7 @@ void main()
         float ambient = da;
         ambient *= 0.5;
         ambient *= ambient;
-        //ambient = max(getAmbientClamp(), ambient);
-        ambient = 1.0 - ambient;
+        ambient = min(getAmbientClamp(), 1.0 - ambient);
 
         vec3 sun_contrib = final_da * sunlit;
 
diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl
index 6788cc1f6303923e653143de47713d5db32f10a1..7f5ac00963ba098318e247dde22b29f8f6c2e101 100644
--- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl
+++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl
@@ -44,7 +44,7 @@ uniform float sun_moon_glow_factor;
 
 float getAmbientClamp()
 {
-    return 0.66f;
+    return 0.2f;
 }
 
 void calcAtmosphericVars(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten) {
@@ -137,7 +137,7 @@ void calcAtmosphericVars(vec3 inPositionEye, float ambFactor, out vec3 sunlit, o
           + tmpAmbient));
 
     //brightness of surface both sunlight and ambient
-    sunlit = sunlight.rgb * 0.5;
-    amblit = tmpAmbient.rgb * .25;
+    sunlit = sunlight.rgb;
+    amblit = tmpAmbient.rgb;
     additive *= vec3(1.0 - temp1);
 }
diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
index e41b4b99a3f8d8b96a0853991532bb77b2826013..39b13b46cc9975e8ee55505431d99c920d0f754d 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
@@ -116,8 +116,7 @@ void main()
         float ambient = da;
         ambient *= 0.5;
         ambient *= ambient;
-        //ambient = max(getAmbientClamp(), ambient);
-        ambient = 1.0 - ambient;
+        ambient = min(getAmbientClamp(), 1.0 - ambient);
 
         vec3 sun_contrib = min(scol, final_da) * sunlit;
 
diff --git a/indra/newview/app_settings/shaders/class3/lighting/lightV.glsl b/indra/newview/app_settings/shaders/class3/lighting/lightV.glsl
index 48c883d98acc8fd54325d5712ff4e3c5a7b82b45..2f64ab25cb1bad5ce8b1ece8fda907d4b6db4f37 100644
--- a/indra/newview/app_settings/shaders/class3/lighting/lightV.glsl
+++ b/indra/newview/app_settings/shaders/class3/lighting/lightV.glsl
@@ -32,7 +32,7 @@ vec4 sumLights(vec3 pos, vec3 norm, vec4 color);
 vec4 calcLighting(vec3 pos, vec3 norm, vec4 color)
 {
 	vec4 c = sumLights(pos, norm, color);
-    c.rgb += atmosAmbient() * color.rgb;
+    c.rgb += atmosAmbient() * color.rgb * 0.25;
     return c; 
 }