Przeglądaj źródła

Toggle logarithmic depth buffer based on camera type

Garrett Johnson 5 lat temu
rodzic
commit
8d00c49c4d

+ 9 - 1
src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js

@@ -1,7 +1,15 @@
 export default /* glsl */`
 #if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )
 
-	gl_FragDepthEXT = log2( vFragDepth ) * logDepthBufFC * 0.5;
+	if ( skipLogDepth == 1.0 ) {
+
+		gl_FragDepthEXT = gl_FragCoord.z;
+
+	} else {
+
+		gl_FragDepthEXT = log2( vFragDepth ) * logDepthBufFC * 0.5;
+
+	}
 
 #endif
 `;

+ 1 - 0
src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js

@@ -3,6 +3,7 @@ export default /* glsl */`
 
 	uniform float logDepthBufFC;
 	varying float vFragDepth;
+	varying float skipLogDepth;
 
 #endif
 `;

+ 1 - 0
src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js

@@ -4,6 +4,7 @@ export default /* glsl */`
 	#ifdef USE_LOGDEPTHBUF_EXT
 
 		varying float vFragDepth;
+		varying float skipLogDepth;
 
 	#else
 

+ 7 - 2
src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js

@@ -4,12 +4,17 @@ export default /* glsl */`
 	#ifdef USE_LOGDEPTHBUF_EXT
 
 		vFragDepth = 1.0 + gl_Position.w;
+		skipLogDepth = isPerspectiveMatrix( projectionMatrix ) ? 0.0 : 1.0;
 
 	#else
 
-		gl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;
+		if ( isPerspectiveMatrix( projectionMatrix ) ) {
 
-		gl_Position.z *= gl_Position.w;
+			gl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;
+
+			gl_Position.z *= gl_Position.w;
+
+		}
 
 	#endif