diff options
Diffstat (limited to 'indra/newview/app_settings/shaders')
-rw-r--r-- | indra/newview/app_settings/shaders/class1/deferred/materialF.glsl | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl index 80a2e16fb0..d28fc128b6 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl @@ -249,24 +249,25 @@ void main() vec4 spec = vec4(specular_color.rgb, 1.0); #endif - vec4 norm = vec4(0,0,0,1.0); - vec3 tnorm; + vec3 norm = vec3(0); + float bmap_specular = 1.0; #ifdef HAS_NORMAL_MAP - norm = texture2D(bumpMap, vary_texcoord1.xy); - norm.xyz = norm.xyz * 2 - 1; - - // tangent space norm - tnorm = vec3(dot(norm.xyz,vary_mat0), - dot(norm.xyz,vary_mat1), - dot(norm.xyz,vary_mat2)); + vec4 bump_sample = texture2D(bumpMap, vary_texcoord1.xy); + norm = (bump_sample.xyz * 2) - vec3(1); + bmap_specular = bump_sample.w; + + // convert sampled normal to tangent space normal + norm = vec3(dot(norm, vary_mat0), + dot(norm, vary_mat1), + dot(norm, vary_mat2)); #else - tnorm = vary_normal; + norm = vary_normal; #endif - norm.xyz = normalize(tnorm.xyz); + norm = normalize(norm); - vec2 abnormal = encode_normal(norm.xyz); + vec2 abnormal = encode_normal(norm); vec4 final_color = vec4(diffuse_linear.rgb, 0.0); @@ -311,7 +312,7 @@ void main() final_specular.a = specular_color.a; #ifdef HAS_SPECULAR_MAP - final_specular.a *= norm.a; + final_specular.a *= bmap_specular; final_normal.z *= spec.a; #endif @@ -325,7 +326,7 @@ void main() float shadow = 1.0f; #ifdef HAS_SUN_SHADOW - shadow = sampleDirectionalShadow(pos.xyz, norm.xyz, pos_screen); + shadow = sampleDirectionalShadow(pos.xyz, norm, pos_screen); #endif spec = final_specular; @@ -342,18 +343,17 @@ void main() calcAtmosphericVars(pos.xyz, light_dir, 1.0, sunlit, amblit, additive, atten, false); - vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz)); - + vec3 refnormpersp = normalize(reflect(pos.xyz, norm)); - float da = dot(norm.xyz, normalize(light_dir.xyz)); - float final_da = clamp(da, 0.0, 1.0); + float da = dot(norm, normalize(light_dir)); + da = clamp(da, 0.0, 1.0); // No negative light contributions float ambient = da; ambient *= 0.5; ambient *= ambient; ambient = (1.0 - ambient); - vec3 sun_contrib = min(final_da, shadow) * sunlit; + vec3 sun_contrib = min(da, shadow) * sunlit; // vec3 debug_sun_contrib = sun_contrib; @@ -383,8 +383,8 @@ void main() //vec3 ref = dot(pos+lv, norm); vec3 h = normalize(light_dir.xyz+npos); - float nh = dot(norm.xyz, h); - float nv = dot(norm.xyz, npos); + float nh = dot(norm, h); + float nv = dot(norm, npos); float vh = dot(npos, h); float sa = nh; float fres = pow(1 - dot(h, npos), 5)*0.4+0.5; @@ -435,7 +435,7 @@ void main() vec3 light = vec3(0,0,0); -#define LIGHT_LOOP(i) light.rgb += calcPointLightOrSpotLight(light_diffuse[i].rgb, npos, diffuse_linear.rgb, final_specular, pos.xyz, norm.xyz, light_position[i], light_direction[i].xyz, light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z, glare, light_attenuation[i].w ); +#define LIGHT_LOOP(i) light.rgb += calcPointLightOrSpotLight(light_diffuse[i].rgb, npos, diffuse_linear.rgb, final_specular, pos.xyz, norm, light_position[i], light_direction[i].xyz, light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z, glare, light_attenuation[i].w ); LIGHT_LOOP(1) LIGHT_LOOP(2) @@ -461,7 +461,7 @@ void main() //color.rgb = vec3(ambient); //color.rgb = sunlit; //color.rgb = debug_post_ambient; -//color.rgb = vec3(final_da); +//color.rgb = vec3(da); //color.rgb = debug_sun_contrib; //color.rgb = debug_post_sunlight; //color.rgb = diffuse_srgb.rgb; |