Bläddra i källkod

WebGLRenderer: Fix pointlight shadows with reversed depth buffer. (#32749)

Michael Herzog 1 månad sedan
förälder
incheckning
e90650f919
1 ändrade filer med 24 tillägg och 6 borttagningar
  1. 24 6
      src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js

+ 24 - 6
src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js

@@ -262,9 +262,18 @@ export default /* glsl */`
 
 		if ( viewSpaceZ - shadowCameraFar <= 0.0 && viewSpaceZ - shadowCameraNear >= 0.0 ) {
 
-			// Calculate perspective depth for cube shadow map
-			// Standard perspective depth formula: depth = (far * (z - near)) / (z * (far - near))
-			float dp = ( shadowCameraFar * ( viewSpaceZ - shadowCameraNear ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );
+			// viewZ to perspective depth
+
+			#ifdef USE_REVERSED_DEPTH_BUFFER
+
+				float dp = ( shadowCameraNear * ( shadowCameraFar - viewSpaceZ ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );
+
+			#else
+
+				float dp = ( shadowCameraFar * ( viewSpaceZ - shadowCameraNear ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );
+
+			#endif
+			
 			dp += shadowBias;
 
 			// Hardware PCF with LinearFilter gives us 4-tap filtering per sample
@@ -317,9 +326,18 @@ export default /* glsl */`
 
 		if ( viewSpaceZ - shadowCameraFar <= 0.0 && viewSpaceZ - shadowCameraNear >= 0.0 ) {
 
-			// Calculate perspective depth for cube shadow map
-			// Standard perspective depth formula: depth = (far * (z - near)) / (z * (far - near))
-			float dp = ( shadowCameraFar * ( viewSpaceZ - shadowCameraNear ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );
+			// viewZ to perspective depth
+
+			#ifdef USE_REVERSED_DEPTH_BUFFER
+
+				float dp = ( shadowCameraNear * ( shadowCameraFar - viewSpaceZ ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );
+
+			#else
+
+				float dp = ( shadowCameraFar * ( viewSpaceZ - shadowCameraNear ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );
+
+			#endif
+
 			dp += shadowBias;
 
 			// Direction from light to fragment

粤ICP备19079148号