|
@@ -122,41 +122,18 @@ vec3 shadowMask = vec3( 1.0 );
|
|
float dx1 = + texelSize.x;
|
|
float dx1 = + texelSize.x;
|
|
float dy1 = + texelSize.y;
|
|
float dy1 = + texelSize.y;
|
|
|
|
|
|
- mat3 shadowKernel;
|
|
|
|
- mat3 depthKernel;
|
|
|
|
-
|
|
|
|
- depthKernel[ 0 ][ 0 ] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );
|
|
|
|
- depthKernel[ 0 ][ 1 ] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );
|
|
|
|
- depthKernel[ 0 ][ 2 ] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );
|
|
|
|
- depthKernel[ 1 ][ 0 ] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );
|
|
|
|
- depthKernel[ 1 ][ 1 ] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );
|
|
|
|
- depthKernel[ 1 ][ 2 ] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );
|
|
|
|
- depthKernel[ 2 ][ 0 ] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );
|
|
|
|
- depthKernel[ 2 ][ 1 ] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );
|
|
|
|
- depthKernel[ 2 ][ 2 ] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );
|
|
|
|
-
|
|
|
|
- vec3 shadowZ = vec3( shadowCoord.z );
|
|
|
|
- shadowKernel[ 0 ] = vec3( lessThan( depthKernel[ 0 ], shadowZ ) );
|
|
|
|
- shadowKernel[ 0 ] *= vec3( 0.25 );
|
|
|
|
-
|
|
|
|
- shadowKernel[ 1 ] = vec3( lessThan( depthKernel[ 1 ], shadowZ ) );
|
|
|
|
- shadowKernel[ 1 ] *= vec3( 0.25 );
|
|
|
|
-
|
|
|
|
- shadowKernel[ 2 ] = vec3( lessThan( depthKernel[ 2 ], shadowZ ) );
|
|
|
|
- shadowKernel[ 2 ] *= vec3( 0.25 );
|
|
|
|
-
|
|
|
|
- vec2 fractionalCoord = 1.0 - fract( shadowCoord.xy * shadowMapSize[ i ].xy );
|
|
|
|
-
|
|
|
|
- shadowKernel[ 0 ] = mix( shadowKernel[ 1 ], shadowKernel[ 0 ], fractionalCoord.x );
|
|
|
|
- shadowKernel[ 1 ] = mix( shadowKernel[ 2 ], shadowKernel[ 1 ], fractionalCoord.x );
|
|
|
|
-
|
|
|
|
- vec4 shadowValues;
|
|
|
|
- shadowValues.x = mix( shadowKernel[ 0 ][ 1 ], shadowKernel[ 0 ][ 0 ], fractionalCoord.y );
|
|
|
|
- shadowValues.y = mix( shadowKernel[ 0 ][ 2 ], shadowKernel[ 0 ][ 1 ], fractionalCoord.y );
|
|
|
|
- shadowValues.z = mix( shadowKernel[ 1 ][ 1 ], shadowKernel[ 1 ][ 0 ], fractionalCoord.y );
|
|
|
|
- shadowValues.w = mix( shadowKernel[ 1 ][ 2 ], shadowKernel[ 1 ][ 1 ], fractionalCoord.y );
|
|
|
|
|
|
+ shadow += texture2DShadowLerp( shadowMap[ i ], shadowMapSize[ i ], shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z );
|
|
|
|
+ shadow += texture2DShadowLerp( shadowMap[ i ], shadowMapSize[ i ], shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z );
|
|
|
|
+ shadow += texture2DShadowLerp( shadowMap[ i ], shadowMapSize[ i ], shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z );
|
|
|
|
+ shadow += texture2DShadowLerp( shadowMap[ i ], shadowMapSize[ i ], shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z );
|
|
|
|
+ shadow += texture2DShadowLerp( shadowMap[ i ], shadowMapSize[ i ], shadowCoord.xy, shadowCoord.z );
|
|
|
|
+ shadow += texture2DShadowLerp( shadowMap[ i ], shadowMapSize[ i ], shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z );
|
|
|
|
+ shadow += texture2DShadowLerp( shadowMap[ i ], shadowMapSize[ i ], shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z );
|
|
|
|
+ shadow += texture2DShadowLerp( shadowMap[ i ], shadowMapSize[ i ], shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z );
|
|
|
|
+ shadow += texture2DShadowLerp( shadowMap[ i ], shadowMapSize[ i ], shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z );
|
|
|
|
+ shadow *= 1.0 / 9.0;
|
|
|
|
|
|
- shadow = dot( shadowValues, vec4( 1.0 ) ) * shadowDarkness[ i ];
|
|
|
|
|
|
+ shadow *= shadowDarkness[ i ];
|
|
|
|
|
|
#else // no percentage-closer filtering:
|
|
#else // no percentage-closer filtering:
|
|
|
|
|