|
@@ -1586,37 +1586,63 @@ THREE.ShaderChunk = {
|
|
"float xPixelOffset = 1.0 / shadowMapSize[ i ].x;",
|
|
"float xPixelOffset = 1.0 / shadowMapSize[ i ].x;",
|
|
"float yPixelOffset = 1.0 / shadowMapSize[ i ].y;",
|
|
"float yPixelOffset = 1.0 / shadowMapSize[ i ].y;",
|
|
|
|
|
|
- "float dx0 = -1.25 * xPixelOffset;",
|
|
|
|
- "float dy0 = -1.25 * yPixelOffset;",
|
|
|
|
- "float dx1 = 1.25 * xPixelOffset;",
|
|
|
|
- "float dy1 = 1.25 * yPixelOffset;",
|
|
|
|
|
|
+ "float dx0 = -1.0 * xPixelOffset;",
|
|
|
|
+ "float dy0 = -1.0 * yPixelOffset;",
|
|
|
|
+ "float dx1 = 1.0 * xPixelOffset;",
|
|
|
|
+ "float dy1 = 1.0 * yPixelOffset;",
|
|
|
|
|
|
- "fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );",
|
|
|
|
- "if ( fDepth < shadowCoord.z ) shadow += shadowDelta;",
|
|
|
|
|
|
+ "mat3 shadowKernel;",
|
|
|
|
+ "mat3 depthKernel;",
|
|
|
|
|
|
- "fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );",
|
|
|
|
- "if ( fDepth < shadowCoord.z ) shadow += shadowDelta;",
|
|
|
|
|
|
+ "depthKernel[0][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );",
|
|
|
|
+ "if ( depthKernel[0][0] < shadowCoord.z ) shadowKernel[0][0] = 0.25;",
|
|
|
|
+ "else shadowKernel[0][0] = 0.0;",
|
|
|
|
|
|
- "fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );",
|
|
|
|
- "if ( fDepth < shadowCoord.z ) shadow += shadowDelta;",
|
|
|
|
|
|
+ "depthKernel[0][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );",
|
|
|
|
+ "if ( depthKernel[0][1] < shadowCoord.z ) shadowKernel[0][1] = 0.25;",
|
|
|
|
+ "else shadowKernel[0][1] = 0.0;",
|
|
|
|
|
|
- "fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );",
|
|
|
|
- "if ( fDepth < shadowCoord.z ) shadow += shadowDelta;",
|
|
|
|
|
|
+ "depthKernel[0][2] = unpackDepth( texture2D( shadowMap[ i], shadowCoord.xy + vec2( dx0, dy1 ) ) );",
|
|
|
|
+ "if ( depthKernel[0][2] < shadowCoord.z ) shadowKernel[0][2] = 0.25;",
|
|
|
|
+ "else shadowKernel[0][2] = 0.0;",
|
|
|
|
|
|
- "fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );",
|
|
|
|
- "if ( fDepth < shadowCoord.z ) shadow += shadowDelta;",
|
|
|
|
|
|
+ "depthKernel[1][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );",
|
|
|
|
+ "if ( depthKernel[1][0] < shadowCoord.z ) shadowKernel[1][0] = 0.25;",
|
|
|
|
+ "else shadowKernel[1][0] = 0.0;",
|
|
|
|
|
|
- "fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );",
|
|
|
|
- "if ( fDepth < shadowCoord.z ) shadow += shadowDelta;",
|
|
|
|
|
|
+ "depthKernel[1][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );",
|
|
|
|
+ "if ( depthKernel[1][1] < shadowCoord.z ) shadowKernel[1][1] = 0.25;",
|
|
|
|
+ "else shadowKernel[1][1] = 0.0;",
|
|
|
|
|
|
- "fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );",
|
|
|
|
- "if ( fDepth < shadowCoord.z ) shadow += shadowDelta;",
|
|
|
|
|
|
+ "depthKernel[1][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );",
|
|
|
|
+ "if ( depthKernel[1][2] < shadowCoord.z ) shadowKernel[1][2] = 0.25;",
|
|
|
|
+ "else shadowKernel[1][2] = 0.0;",
|
|
|
|
|
|
- "fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );",
|
|
|
|
- "if ( fDepth < shadowCoord.z ) shadow += shadowDelta;",
|
|
|
|
|
|
+ "depthKernel[2][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );",
|
|
|
|
+ "if ( depthKernel[2][0] < shadowCoord.z ) shadowKernel[2][0] = 0.25;",
|
|
|
|
+ "else shadowKernel[2][0] = 0.0;",
|
|
|
|
|
|
- "fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );",
|
|
|
|
- "if ( fDepth < shadowCoord.z ) shadow += shadowDelta;",
|
|
|
|
|
|
+ "depthKernel[2][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );",
|
|
|
|
+ "if ( depthKernel[2][1] < shadowCoord.z ) shadowKernel[2][1] = 0.25;",
|
|
|
|
+ "else shadowKernel[2][1] = 0.0;",
|
|
|
|
+
|
|
|
|
+ "depthKernel[2][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );",
|
|
|
|
+ "if ( depthKernel[2][2] < shadowCoord.z ) shadowKernel[2][2] = 0.25;",
|
|
|
|
+ "else shadowKernel[2][2] = 0.0;",
|
|
|
|
+
|
|
|
|
+ "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 = dot(shadowValues, vec4(1.0));",
|
|
|
|
|
|
"shadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );",
|
|
"shadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );",
|
|
|
|
|