From 3ed249cba5134cc5e6dee3b3d5c32558008f6ecb Mon Sep 17 00:00:00 2001 From: Shyotl Date: Wed, 13 Nov 2013 01:35:31 -0600 Subject: [PATCH] Retain cubemap reflection on shiny faces while in shadowed, but don't bloom the sun reflection. --- .../shaders/class1/deferred/softenLightF.glsl | 13 ++++++------- .../shaders/class2/deferred/softenLightF.glsl | 16 ++++++++-------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl index edab4d4e8..430bad84a 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl @@ -391,24 +391,23 @@ void main() float envIntensity = norm.z; norm.xyz = decode_normal(norm.xy); // unpack norm - float da = dot(norm.xyz, sun_dir.xyz); - - float final_da = max(0.0,da); - final_da = min(final_da, 1.0f); - final_da = pow(final_da, 1.0/1.3); - vec4 diffuse = texture2DRect(diffuseRect, tc); //convert to gamma space diffuse.rgb = linear_to_srgb(diffuse.rgb); - vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy); vec3 col; float bloom = 0.0; { + vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy); bloom = spec.r*norm.w; if (norm.w < 0.5) { + float da = dot(norm.xyz, sun_dir.xyz); + + float final_da = max(0.0,da); + final_da = min(final_da, 1.0f); + final_da = pow(final_da, 1.0/1.3); calcAtmospherics(pos.xyz, 1.0); col = atmosAmbient(vec3(0)); diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl index efcb2f189..08c235e2b 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl @@ -400,12 +400,6 @@ void main() float envIntensity = norm.z; norm.xyz = decode_normal(norm.xy); // unpack norm - float da = max(dot(norm.xyz, sun_dir.xyz), 0.0); - - float light_gamma = 1.0/1.3; - da = pow(da, light_gamma); - - vec4 diffuse = texture2DRect(diffuseRect, tc); //convert to gamma space @@ -419,6 +413,12 @@ void main() if (norm.w < 0.5) { + + float da = max(dot(norm.xyz, sun_dir.xyz), 0.0); + + float light_gamma = 1.0/1.3; + da = pow(da, light_gamma); + vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg; scol_ambocc = pow(scol_ambocc, vec2(light_gamma)); @@ -466,8 +466,8 @@ void main() { //add environmentmap vec3 env_vec = env_mat * refnormpersp; - vec3 refcol = textureCube(environmentMap, env_vec).rgb*scol_ambocc.r; - bloom = (luminance(refcol) - .45)*.25; + vec3 refcol = textureCube(environmentMap, env_vec).rgb; //Perhaps mix with a cubemap without sun, in the future. + bloom = (luminance(refcol) - .45)*.25*scol_ambocc.r; col = mix(col.rgb, refcol, envIntensity);