diff options
| author | Graham Linden <graham@lindenlab.com> | 2013-07-12 06:45:49 -0700 | 
|---|---|---|
| committer | Graham Linden <graham@lindenlab.com> | 2013-07-12 06:45:49 -0700 | 
| commit | a8c9d81a376244a372de60b8c2af44c577ee51e0 (patch) | |
| tree | 5a9ce9a5f98b11373774f81c475c588a8ca7e3a8 /indra/newview/app_settings/shaders/class2 | |
| parent | d07ba61a850d926eda3e6a9abe54465c7a462676 (diff) | |
NORSPEC-291 WIP fix materials underwater with shadows on
Diffstat (limited to 'indra/newview/app_settings/shaders/class2')
| -rwxr-xr-x | indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl | 53 | 
1 files changed, 53 insertions, 0 deletions
| diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl index 08aaa2237d..9b72c5b57d 100755 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl @@ -266,6 +266,52 @@ void calcAtmospherics(vec3 inPositionEye, float ambFactor) {  	setAdditiveColor(getAdditiveColor() * vec3(1.0 - temp1));  } +#ifdef WATER_FOG +uniform vec4 waterPlane; +uniform vec4 waterFogColor; +uniform float waterFogDensity; +uniform float waterFogKS; + +vec4 applyWaterFogDeferred(vec3 pos, vec4 color) +{ +	//normalize view vector +	vec3 view = normalize(pos); +	float es = -(dot(view, waterPlane.xyz)); + +	//find intersection point with water plane and eye vector +	 +	//get eye depth +	float e0 = max(-waterPlane.w, 0.0); +	 +	vec3 int_v = waterPlane.w > 0.0 ? view * waterPlane.w/es : vec3(0.0, 0.0, 0.0); +	 +	//get object depth +	float depth = length(pos - int_v); +		 +	//get "thickness" of water +	float l = max(depth, 0.1); + +	float kd = waterFogDensity; +	float ks = waterFogKS; +	vec4 kc = waterFogColor; +	 +	float F = 0.98; +	 +	float t1 = -kd * pow(F, ks * e0); +	float t2 = kd + ks * es; +	float t3 = pow(F, t2*l) - 1.0; +	 +	float L = min(t1/t2*t3, 1.0); +	 +	float D = pow(0.98, l*kd); +	 +	color.rgb = color.rgb * D + kc.rgb * L; +	color.a = kc.a + color.a; +	 +	return color; +} +#endif +  vec3 atmosLighting(vec3 light)  {  	light *= getAtmosAttenuation().r; @@ -409,6 +455,13 @@ void main()  		if (norm.w < 0.5)  		{  			col = mix(atmosLighting(col), fullbrightAtmosTransport(col), diffuse.a); + +			#ifdef WATER_FOG +				vec4 fogged = applyWaterFogDeferred(pos,vec4(col, bloom)); +				col = fogged.rgb; +				bloom = fogged.a; +			#endif +  			col = mix(scaleSoftClip(col), fullbrightScaleSoftClip(col), diffuse.a);  		} | 
