|
@@ -119,6 +119,39 @@ export default /* glsl */`
|
|
texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )
|
|
texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )
|
|
) * ( 1.0 / 9.0 );
|
|
) * ( 1.0 / 9.0 );
|
|
|
|
|
|
|
|
+ #elif defined( SHADOWMAP_TYPE_PCF_SOFT_FAST )
|
|
|
|
+
|
|
|
|
+ vec2 texelSize = vec2( 1.0 ) / shadowMapSize;
|
|
|
|
+
|
|
|
|
+ float dx0 = - texelSize.x * shadowRadius;
|
|
|
|
+ float dy0 = - texelSize.y * shadowRadius;
|
|
|
|
+ float dx1 = + texelSize.x * shadowRadius;
|
|
|
|
+ float dy1 = + texelSize.y * shadowRadius;
|
|
|
|
+ float dx2 = dx0 / 2.0;
|
|
|
|
+ float dy2 = dy0 / 2.0;
|
|
|
|
+ float dx3 = dx1 / 2.0;
|
|
|
|
+ float dy3 = dy1 / 2.0;
|
|
|
|
+
|
|
|
|
+ shadow = (
|
|
|
|
+ texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +
|
|
|
|
+ texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +
|
|
|
|
+ texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +
|
|
|
|
+ texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +
|
|
|
|
+ texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +
|
|
|
|
+ texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +
|
|
|
|
+ texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +
|
|
|
|
+ texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +
|
|
|
|
+ texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +
|
|
|
|
+ texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +
|
|
|
|
+ texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +
|
|
|
|
+ texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +
|
|
|
|
+ texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +
|
|
|
|
+ texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +
|
|
|
|
+ texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +
|
|
|
|
+ texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +
|
|
|
|
+ texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )
|
|
|
|
+ ) * ( 1.0 / 17.0 );
|
|
|
|
+
|
|
#else // no percentage-closer filtering:
|
|
#else // no percentage-closer filtering:
|
|
|
|
|
|
shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );
|
|
shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );
|