diff options
Diffstat (limited to 'indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl')
-rwxr-xr-x | indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl index 77a53a71aa..0899caa2af 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl @@ -78,6 +78,7 @@ uniform vec2 screen_res; vec3 calcDirectionalLight(vec3 n, vec3 l) { float a = max(dot(n,l),0.0); + a = pow(a, 1.0/1.3); return vec3(a,a,a); } @@ -87,7 +88,7 @@ vec3 calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float vec3 lv = lp.xyz-v; //get distance - float d = dot(lv,lv); + float d = length(lv); float da = 0.0; @@ -97,9 +98,11 @@ vec3 calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float lv = normalize(lv); //distance attenuation - float dist2 = d/la; - da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); - da = pow(da, 2.2) * 2.2; + float dist = d/la; + da = clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0); + da *= da; + da *= 1.4; + // spotlight coefficient. float spot = max(dot(-ln, lv), is_pointlight); @@ -212,6 +215,7 @@ void main() #else vec4 diff = texture2D(diffuseMap,vary_texcoord0.xy); #endif + vec4 gamma_diff = diff; diff.rgb = pow(diff.rgb, vec3(2.2f, 2.2f, 2.2f)); @@ -224,7 +228,7 @@ void main() vec3 normal = vary_norm; vec3 l = light_position[0].xyz; - vec3 dlight = calcDirectionalLight(normal, l) * 2.6; + vec3 dlight = calcDirectionalLight(normal, l); dlight = dlight * vary_directional.rgb * vary_pointlight_col; #if HAS_SHADOW @@ -233,13 +237,16 @@ void main() vec4 col = vec4(vary_ambient + dlight, vertex_color_alpha); #endif - vec4 color = diff * col; + vec4 color = gamma_diff * col; color.rgb = atmosLighting(color.rgb); color.rgb = scaleSoftClip(color.rgb); + + color.rgb = pow(color.rgb, vec3(2.2)); col = vec4(0,0,0,0); + #define LIGHT_LOOP(i) col.rgb += light_diffuse[i].rgb * calcPointLightOrSpotLight(pos.xyz, normal, light_position[i], light_direction[i].xyz, light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z); LIGHT_LOOP(1) @@ -250,7 +257,7 @@ void main() LIGHT_LOOP(6) LIGHT_LOOP(7) - color.rgb += diff.rgb * vary_pointlight_col * col.rgb; + color.rgb += diff.rgb * pow(vary_pointlight_col, vec3(2.2)) * col.rgb; color.rgb = pow(color.rgb, vec3(1.0/2.2)); |