Skip to content

Commit e90650f

Browse files
authored
WebGLRenderer: Fix pointlight shadows with reversed depth buffer. (#32749)
1 parent da6895d commit e90650f

File tree

1 file changed

+24
-6
lines changed

1 file changed

+24
-6
lines changed

src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -262,9 +262,18 @@ export default /* glsl */`
262262
263263
if ( viewSpaceZ - shadowCameraFar <= 0.0 && viewSpaceZ - shadowCameraNear >= 0.0 ) {
264264
265-
// Calculate perspective depth for cube shadow map
266-
// Standard perspective depth formula: depth = (far * (z - near)) / (z * (far - near))
267-
float dp = ( shadowCameraFar * ( viewSpaceZ - shadowCameraNear ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );
265+
// viewZ to perspective depth
266+
267+
#ifdef USE_REVERSED_DEPTH_BUFFER
268+
269+
float dp = ( shadowCameraNear * ( shadowCameraFar - viewSpaceZ ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );
270+
271+
#else
272+
273+
float dp = ( shadowCameraFar * ( viewSpaceZ - shadowCameraNear ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );
274+
275+
#endif
276+
268277
dp += shadowBias;
269278
270279
// Hardware PCF with LinearFilter gives us 4-tap filtering per sample
@@ -317,9 +326,18 @@ export default /* glsl */`
317326
318327
if ( viewSpaceZ - shadowCameraFar <= 0.0 && viewSpaceZ - shadowCameraNear >= 0.0 ) {
319328
320-
// Calculate perspective depth for cube shadow map
321-
// Standard perspective depth formula: depth = (far * (z - near)) / (z * (far - near))
322-
float dp = ( shadowCameraFar * ( viewSpaceZ - shadowCameraNear ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );
329+
// viewZ to perspective depth
330+
331+
#ifdef USE_REVERSED_DEPTH_BUFFER
332+
333+
float dp = ( shadowCameraNear * ( shadowCameraFar - viewSpaceZ ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );
334+
335+
#else
336+
337+
float dp = ( shadowCameraFar * ( viewSpaceZ - shadowCameraNear ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );
338+
339+
#endif
340+
323341
dp += shadowBias;
324342
325343
// Direction from light to fragment

0 commit comments

Comments
 (0)