diff options
Diffstat (limited to 'indra/newview/app_settings/shaders')
7 files changed, 115 insertions, 105 deletions
| diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl index cf8cf8364a..bced4a5577 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl @@ -29,11 +29,11 @@ out vec4 frag_color;  #define frag_color gl_FragColor  #endif -uniform float minimum_alpha; -  uniform sampler2D diffuseMap; -VARYING vec4 post_pos; +VARYING float pos_zd2; +VARYING float pos_w; +VARYING float target_pos_x;  VARYING vec4 vertex_color;  VARYING vec2 vary_texcoord0; @@ -41,12 +41,20 @@ void main()  {  	float alpha = diffuseLookup(vary_texcoord0.xy).a * vertex_color.a; -	if (alpha < minimum_alpha) +	if (alpha < 0.05) // treat as totally transparent  	{  		discard;  	} +	if (alpha < 0.88) // treat as semi-transparent +	{ +	  if (fract(0.5*floor(target_pos_x / pos_w )) < 0.25) +	  { +	    discard; +	  } +	} +  	frag_color = vec4(1,1,1,1); -	gl_FragDepth = max(post_pos.z/post_pos.w*0.5+0.5, 0.0); +	gl_FragDepth = max(pos_zd2/pos_w+0.5, 0.0);  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl index 7d3b06c56e..c1f2d90712 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl @@ -25,12 +25,15 @@  uniform mat4 texture_matrix0;  uniform mat4 modelview_projection_matrix; +uniform float shadow_target_width;  ATTRIBUTE vec3 position;  ATTRIBUTE vec4 diffuse_color;  ATTRIBUTE vec2 texcoord0; -VARYING vec4 post_pos; +VARYING float pos_zd2; +VARYING float pos_w; +VARYING float target_pos_x;  VARYING vec4 vertex_color;  VARYING vec2 vary_texcoord0; @@ -39,8 +42,11 @@ void passTextureIndex();  void main()  {  	//transform vertex -	vec4 pos = modelview_projection_matrix*vec4(position.xyz, 1.0); -	post_pos = pos; +	vec4 pre_pos = vec4(position.xyz, 1.0); +	vec4 pos = modelview_projection_matrix * pre_pos; +	target_pos_x = 0.5 * (shadow_target_width - 1.0) * pos.x; +	pos_w = pos.w; +	pos_zd2 = pos.z * 0.5;  	gl_Position = vec4(pos.x, pos.y, pos.w*0.5, pos.w); diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl index 99bf03ceca..813cfb605b 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl @@ -58,23 +58,22 @@ uniform float shadow_bias;  uniform mat4 inv_proj; -float pcfShadow(sampler2DShadow shadowMap, vec4 stc, float scl) +float pcfShadow(sampler2DShadow shadowMap, vec4 stc)  {  	stc.xyz /= stc.w;  	stc.z += shadow_bias; +	stc.x = floor(stc.x + fract(stc.y*12345)); // add some chaotic jitter to X sample pos according to Y to disguise the snapping going on here +	  	float cs = shadow2D(shadowMap, stc.xyz).x;  	float shadow = cs; - -	vec2 off = scl/shadow_res; - -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(off.x, off.y, 0.0)).x, cs); -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(off.x, -off.y, 0.0)).x, cs); -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(-off.x, off.y, 0.0)).x, cs); -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(-off.x, -off.y, 0.0)).x, cs); -			 -	return shadow/5.0; +        shadow += shadow2DRect(shadowMap, stc.xyz+vec3(2.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x; +        shadow += shadow2DRect(shadowMap, stc.xyz+vec3(1.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x; +        shadow += shadow2DRect(shadowMap, stc.xyz+vec3(-1.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x; +        shadow += shadow2DRect(shadowMap, stc.xyz+vec3(-2.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x; +                        +        return shadow*0.2;  } @@ -103,7 +102,7 @@ void main()  			float w = 1.0;  			w -= max(spos.z-far_split.z, 0.0)/transition_domain.z; -			shadow += pcfShadow(shadowMap3, lpos, 0.25)*w; +			shadow += pcfShadow(shadowMap3, lpos)*w;  			weight += w;  			shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0);  		} @@ -115,7 +114,7 @@ void main()  			float w = 1.0;  			w -= max(spos.z-far_split.y, 0.0)/transition_domain.y;  			w -= max(near_split.z-spos.z, 0.0)/transition_domain.z; -			shadow += pcfShadow(shadowMap2, lpos, 0.75)*w; +			shadow += pcfShadow(shadowMap2, lpos)*w;  			weight += w;  		} @@ -126,7 +125,7 @@ void main()  			float w = 1.0;  			w -= max(spos.z-far_split.x, 0.0)/transition_domain.x;  			w -= max(near_split.y-spos.z, 0.0)/transition_domain.y; -			shadow += pcfShadow(shadowMap1, lpos, 0.75)*w; +			shadow += pcfShadow(shadowMap1, lpos)*w;  			weight += w;  		} @@ -137,7 +136,7 @@ void main()  			float w = 1.0;  			w -= max(near_split.x-spos.z, 0.0)/transition_domain.x; -			shadow += pcfShadow(shadowMap0, lpos, 1.0)*w; +			shadow += pcfShadow(shadowMap0, lpos)*w;  			weight += w;  		} diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl index 4f6a88961b..f77d0ae398 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl @@ -71,22 +71,22 @@ vec4 getPosition(vec2 pos_screen)  	return pos;  } -float pcfShadow(sampler2DShadow shadowMap, vec4 stc, float scl) +float pcfShadow(sampler2DShadow shadowMap, vec4 stc)  {  	stc.xyz /= stc.w;  	stc.z += shadow_bias; -		 -	float cs = shadow2DRect(shadowMap, stc.xyz).x; + +	stc.x = floor(stc.x + fract(stc.y*12345)); // add some chaotic jitter to X sample pos according to Y to disguise the snapping going on here +	 +	float cs = shadow2D(shadowMap, stc.xyz).x;  	float shadow = cs; -	vec2 off = scl/shadow_res; - -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(off.x, off.y, 0.0)).x, cs); -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(off.x, -off.y, 0.0)).x, cs); -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(-off.x, off.y, 0.0)).x, cs); -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(-off.x, -off.y, 0.0)).x, cs); -			 -	return shadow/5.0; +        shadow += shadow2D(shadowMap, stc.xyz+vec3(2.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x; +        shadow += shadow2D(shadowMap, stc.xyz+vec3(1.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x; +        shadow += shadow2D(shadowMap, stc.xyz+vec3(-1.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x; +        shadow += shadow2D(shadowMap, stc.xyz+vec3(-2.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x; +                         +        return shadow*0.2;  } @@ -115,7 +115,7 @@ void main()  			float w = 1.0;  			w -= max(spos.z-far_split.z, 0.0)/transition_domain.z; -			shadow += pcfShadow(shadowMap3, lpos, 0.25)*w; +			shadow += pcfShadow(shadowMap3, lpos)*w;  			weight += w;  			shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0);  		} @@ -127,7 +127,7 @@ void main()  			float w = 1.0;  			w -= max(spos.z-far_split.y, 0.0)/transition_domain.y;  			w -= max(near_split.z-spos.z, 0.0)/transition_domain.z; -			shadow += pcfShadow(shadowMap2, lpos, 0.75)*w; +			shadow += pcfShadow(shadowMap2, lpos)*w;  			weight += w;  		} @@ -138,7 +138,7 @@ void main()  			float w = 1.0;  			w -= max(spos.z-far_split.x, 0.0)/transition_domain.x;  			w -= max(near_split.y-spos.z, 0.0)/transition_domain.y; -			shadow += pcfShadow(shadowMap1, lpos, 0.75)*w; +			shadow += pcfShadow(shadowMap1, lpos)*w;  			weight += w;  		} @@ -149,7 +149,7 @@ void main()  			float w = 1.0;  			w -= max(near_split.x-spos.z, 0.0)/transition_domain.x; -			shadow += pcfShadow(shadowMap0, lpos, 1.0)*w; +			shadow += pcfShadow(shadowMap0, lpos)*w;  			weight += w;  		} diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedNoColorF.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedNoColorF.glsl index 90cd0f8602..cce510d406 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedNoColorF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedNoColorF.glsl @@ -73,22 +73,22 @@ vec4 getPosition(vec2 pos_screen)  	return pos;  } -float pcfShadow(sampler2DShadow shadowMap, vec4 stc, float scl) +float pcfShadow(sampler2DShadow shadowMap, vec4 stc)  {  	stc.xyz /= stc.w;  	stc.z += shadow_bias; -		 + +	stc.x = floor(stc.x + fract(stc.y*12345)); // add some chaotic jitter to X sample pos according to Y to disguise the snapping going on here  	float cs = shadow2D(shadowMap, stc.xyz).x; +	  	float shadow = cs; -	vec2 off = scl/shadow_res; - -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(off.x, off.y, 0.0)).x, cs); -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(off.x, -off.y, 0.0)).x, cs); -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(-off.x, off.y, 0.0)).x, cs); -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(-off.x, -off.y, 0.0)).x, cs); -			 -	return shadow/5.0; +        shadow += shadow2D(shadowMap, stc.xyz+vec3(2.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x; +        shadow += shadow2D(shadowMap, stc.xyz+vec3(1.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x; +        shadow += shadow2D(shadowMap, stc.xyz+vec3(-1.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x; +        shadow += shadow2D(shadowMap, stc.xyz+vec3(-2.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x; +                         +        return shadow*0.2;  } @@ -124,7 +124,7 @@ void main()  			float w = 1.0;  			w -= max(spos.z-far_split.z, 0.0)/transition_domain.z; -			shadow += pcfShadow(shadowMap3, lpos, 0.25)*w; +			shadow += pcfShadow(shadowMap3, lpos)*w;  			weight += w;  			shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0);  		} @@ -136,7 +136,7 @@ void main()  			float w = 1.0;  			w -= max(spos.z-far_split.y, 0.0)/transition_domain.y;  			w -= max(near_split.z-spos.z, 0.0)/transition_domain.z; -			shadow += pcfShadow(shadowMap2, lpos, 0.75)*w; +			shadow += pcfShadow(shadowMap2, lpos)*w;  			weight += w;  		} @@ -147,7 +147,7 @@ void main()  			float w = 1.0;  			w -= max(spos.z-far_split.x, 0.0)/transition_domain.x;  			w -= max(near_split.y-spos.z, 0.0)/transition_domain.y; -			shadow += pcfShadow(shadowMap1, lpos, 0.75)*w; +			shadow += pcfShadow(shadowMap1, lpos)*w;  			weight += w;  		} @@ -158,7 +158,7 @@ void main()  			float w = 1.0;  			w -= max(near_split.x-spos.z, 0.0)/transition_domain.x; -			shadow += pcfShadow(shadowMap0, lpos, 1.0)*w; +			shadow += pcfShadow(shadowMap0, lpos)*w;  			weight += w;  		} diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl index 219ae687d5..20ff0c3402 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl @@ -78,45 +78,43 @@ vec4 getPosition(vec2 pos_screen)  	return pos;  } -float pcfShadow(sampler2DShadow shadowMap, vec4 stc, float scl) +float pcfShadow(sampler2DShadow shadowMap, vec4 stc, float scl, vec2 pos_screen)  {  	stc.xyz /= stc.w;  	stc.z += shadow_bias; +	stc.x = floor(stc.x + fract(pos_screen.y*0.666666666)); // add some jitter to X sample pos according to Y to disguise the snapping going on here  	float cs = shadow2D(shadowMap, stc.xyz).x; +  	float shadow = cs; -	 -	vec2 off = 1.5/shadow_res; +	shadow += shadow2D(shadowMap, stc.xyz+vec3(2.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x; +	shadow += shadow2D(shadowMap, stc.xyz+vec3(1.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x; +	shadow += shadow2D(shadowMap, stc.xyz+vec3(-2.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x; +	shadow += shadow2D(shadowMap, stc.xyz+vec3(-1.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x; -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(off.x, off.y, 0.0)).x, cs); -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(off.x, -off.y, 0.0)).x, cs); -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(-off.x, off.y, 0.0)).x, cs); -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(-off.x, -off.y, 0.0)).x, cs); -	return shadow/5.0; -	 -	//return shadow; +        return shadow*0.2;  } -float pcfSpotShadow(sampler2DShadow shadowMap, vec4 stc, float scl) +float pcfSpotShadow(sampler2DShadow shadowMap, vec4 stc, float scl, vec2 pos_screen)  {  	stc.xyz /= stc.w;  	stc.z += spot_shadow_bias*scl; +	stc.x = floor(proj_shadow_res.x * stc.x + fract(pos_screen.y*0.666666666)) / proj_shadow_res.x; // snap  	float cs = shadow2D(shadowMap, stc.xyz).x;  	float shadow = cs; -	vec2 off = 1.5/proj_shadow_res; +	vec2 off = 1.0/proj_shadow_res; +	off.y *= 1.5; -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(off.x, off.y, 0.0)).x, cs); -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(off.x, -off.y, 0.0)).x, cs); -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(-off.x, off.y, 0.0)).x, cs); -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(-off.x, -off.y, 0.0)).x, cs); -				 -	return shadow/5.0; -	 -	//return shadow; +	shadow += shadow2D(shadowMap, stc.xyz+vec3(off.x*2.0, off.y, 0.0)).x; +	shadow += shadow2D(shadowMap, stc.xyz+vec3(off.x, -off.y, 0.0)).x; +	shadow += shadow2D(shadowMap, stc.xyz+vec3(-off.x, off.y, 0.0)).x; +	shadow += shadow2D(shadowMap, stc.xyz+vec3(-off.x*2.0, -off.y, 0.0)).x; + +        return shadow*0.2;  }  void main()  @@ -168,7 +166,7 @@ void main()  				float w = 1.0;  				w -= max(spos.z-far_split.z, 0.0)/transition_domain.z; -				shadow += pcfShadow(shadowMap3, lpos, 0.25)*w; +				shadow += pcfShadow(shadowMap3, lpos, 0.25, pos_screen)*w;  				weight += w;  				shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0);  			} @@ -180,7 +178,7 @@ void main()  				float w = 1.0;  				w -= max(spos.z-far_split.y, 0.0)/transition_domain.y;  				w -= max(near_split.z-spos.z, 0.0)/transition_domain.z; -				shadow += pcfShadow(shadowMap2, lpos, 0.75)*w; +				shadow += pcfShadow(shadowMap2, lpos, 0.5, pos_screen)*w;  				weight += w;  			} @@ -191,7 +189,7 @@ void main()  				float w = 1.0;  				w -= max(spos.z-far_split.x, 0.0)/transition_domain.x;  				w -= max(near_split.y-spos.z, 0.0)/transition_domain.y; -				shadow += pcfShadow(shadowMap1, lpos, 0.75)*w; +				shadow += pcfShadow(shadowMap1, lpos, 0.75, pos_screen)*w;  				weight += w;  			} @@ -202,7 +200,7 @@ void main()  				float w = 1.0;  				w -= max(near_split.x-spos.z, 0.0)/transition_domain.x; -				shadow += pcfShadow(shadowMap0, lpos, 1.0)*w; +				shadow += pcfShadow(shadowMap0, lpos, 1.0, pos_screen)*w;  				weight += w;  			} @@ -236,11 +234,11 @@ void main()  	//spotlight shadow 1  	vec4 lpos = shadow_matrix[4]*spos; -	frag_color[2] = pcfSpotShadow(shadowMap4, lpos, 0.8);  +	frag_color[2] = pcfSpotShadow(shadowMap4, lpos, 0.8, pos_screen);   	//spotlight shadow 2  	lpos = shadow_matrix[5]*spos; -	frag_color[3] = pcfSpotShadow(shadowMap5, lpos, 0.8);  +	frag_color[3] = pcfSpotShadow(shadowMap5, lpos, 0.8, pos_screen);   	//frag_color.rgb = pos.xyz;  	//frag_color.b = shadow; diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl index f6b009577a..37689bef4f 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl @@ -91,7 +91,7 @@ vec2 getKern(int i)  	kern[5] = vec2(-0.7071, -0.7071) * 0.750*0.750;  	kern[6] = vec2(-0.7071, 0.7071) * 0.875*0.875;  	kern[7] = vec2(0.7071, -0.7071) * 1.000*1.000; -	 +         	return kern[i];  } @@ -140,44 +140,43 @@ float calcAmbientOcclusion(vec4 pos, vec3 norm)  	return min(ret, 1.0);  } -float pcfShadow(sampler2DShadow shadowMap, vec4 stc, float scl) +float pcfShadow(sampler2DShadow shadowMap, vec4 stc, float scl, vec2 pos_screen)  {  	stc.xyz /= stc.w;  	stc.z += shadow_bias; +	stc.x = floor(stc.x + fract(pos_screen.y*0.666666666));  	float cs = shadow2D(shadowMap, stc.xyz).x; +	  	float shadow = cs; - -	vec2 off = 1.5/shadow_res; - -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(off.x, off.y, 0.0)).x, cs); -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(off.x, -off.y, 0.0)).x, cs); -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(-off.x, off.y, 0.0)).x, cs); -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(-off.x, -off.y, 0.0)).x, cs); -			 -	return shadow/5.0; -	//return shadow; +	shadow += shadow2D(shadowMap, stc.xyz+vec3(2.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x; +        shadow += shadow2D(shadowMap, stc.xyz+vec3(1.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x; +        shadow += shadow2D(shadowMap, stc.xyz+vec3(-1.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x; +        shadow += shadow2D(shadowMap, stc.xyz+vec3(-2.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x; + +                         +        return shadow*0.2;  } -float pcfSpotShadow(sampler2DShadow shadowMap, vec4 stc, float scl) +float pcfSpotShadow(sampler2DShadow shadowMap, vec4 stc, float scl, vec2 pos_screen)  {  	stc.xyz /= stc.w;  	stc.z += spot_shadow_bias*scl; +	stc.x = floor(proj_shadow_res.x * stc.x + fract(pos_screen.y*0.666666666)) / proj_shadow_res.x; // snap  	float cs = shadow2D(shadowMap, stc.xyz).x;  	float shadow = cs; -	vec2 off = 1.5/proj_shadow_res; -	 -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(off.x, off.y, 0.0)).x, cs); -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(off.x, -off.y, 0.0)).x, cs); -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(-off.x, off.y, 0.0)).x, cs); -	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(-off.x, -off.y, 0.0)).x, cs); +	vec2 off = 1.0/proj_shadow_res; +	off.y *= 1.5; -	return shadow/5.0; -	 -	//return shadow; +	shadow += shadow2D(shadowMap, stc.xyz+vec3(off.x*2.0, off.y, 0.0)).x; +	shadow += shadow2D(shadowMap, stc.xyz+vec3(off.x, -off.y, 0.0)).x; +	shadow += shadow2D(shadowMap, stc.xyz+vec3(-off.x, off.y, 0.0)).x; +	shadow += shadow2D(shadowMap, stc.xyz+vec3(-off.x*2.0, -off.y, 0.0)).x; + +        return shadow*0.2;  }  void main()  @@ -229,7 +228,7 @@ void main()  				float w = 1.0;  				w -= max(spos.z-far_split.z, 0.0)/transition_domain.z; -				shadow += pcfShadow(shadowMap3, lpos, 0.25)*w; +				shadow += pcfShadow(shadowMap3, lpos, 0.25, pos_screen)*w;  				weight += w;  				shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0);  			} @@ -241,7 +240,7 @@ void main()  				float w = 1.0;  				w -= max(spos.z-far_split.y, 0.0)/transition_domain.y;  				w -= max(near_split.z-spos.z, 0.0)/transition_domain.z; -				shadow += pcfShadow(shadowMap2, lpos, 0.75)*w; +				shadow += pcfShadow(shadowMap2, lpos, 0.5, pos_screen)*w;  				weight += w;  			} @@ -252,7 +251,7 @@ void main()  				float w = 1.0;  				w -= max(spos.z-far_split.x, 0.0)/transition_domain.x;  				w -= max(near_split.y-spos.z, 0.0)/transition_domain.y; -				shadow += pcfShadow(shadowMap1, lpos, 0.75)*w; +				shadow += pcfShadow(shadowMap1, lpos, 0.75, pos_screen)*w;  				weight += w;  			} @@ -263,7 +262,7 @@ void main()  				float w = 1.0;  				w -= max(near_split.x-spos.z, 0.0)/transition_domain.x; -				shadow += pcfShadow(shadowMap0, lpos, 1.0)*w; +				shadow += pcfShadow(shadowMap0, lpos, 1.0, pos_screen)*w;  				weight += w;  			} @@ -297,11 +296,11 @@ void main()  	//spotlight shadow 1  	vec4 lpos = shadow_matrix[4]*spos; -	frag_color[2] = pcfSpotShadow(shadowMap4, lpos, 0.8);  +	frag_color[2] = pcfSpotShadow(shadowMap4, lpos, 0.8, pos_screen);  	//spotlight shadow 2  	lpos = shadow_matrix[5]*spos; -	frag_color[3] = pcfSpotShadow(shadowMap5, lpos, 0.8);  +	frag_color[3] = pcfSpotShadow(shadowMap5, lpos, 0.8, pos_screen);  	//frag_color.rgb = pos.xyz;  	//frag_color.b = shadow; | 
