Pārlūkot izejas kodu

Added logarithmic depth buffer support to SSAO postprocessing shader

James Baicoianu 8 gadi atpakaļ
vecāks
revīzija
6e7d31277c
1 mainītis faili ar 16 papildinājumiem un 2 dzēšanām
  1. 16 2
      examples/js/shaders/SSAOShader.js

+ 16 - 2
examples/js/shaders/SSAOShader.js

@@ -44,6 +44,9 @@ THREE.SSAOShader = {
 
 		"uniform float cameraNear;",
 		"uniform float cameraFar;",
+		"#ifdef USE_LOGDEPTHBUF",
+			"uniform float logDepthBufFC;",
+		"#endif",
 
 		"uniform bool onlyAO;",      // use only ambient occlusion pass?
 
@@ -109,8 +112,19 @@ THREE.SSAOShader = {
 			"float cameraFarMinusNear = cameraFar - cameraNear;",
 			"float cameraCoef = 2.0 * cameraNear;",
 
-			// "return ( 2.0 * cameraNear ) / ( cameraFar + cameraNear - unpackDepth( texture2D( tDepth, coord ) ) * ( cameraFar - cameraNear ) );",
-			"return cameraCoef / ( cameraFarPlusNear - unpackRGBAToDepth( texture2D( tDepth, coord ) ) * cameraFarMinusNear );",
+			"#ifdef USE_LOGDEPTHBUF",
+
+				"float logz = unpackRGBAToDepth( texture2D( tDepth, coord ) );",
+				"float w = pow(2.0, (logz / logDepthBufFC)) - 1.0;",
+				"float z = (logz / w) + 1.0;",
+
+			"#else",
+
+				"float z = unpackRGBAToDepth( texture2D( tDepth, coord ) );",
+
+			"#endif",
+
+			"return cameraCoef / ( cameraFarPlusNear - z * cameraFarMinusNear );",
 
 
 		"}",