From 6e7d31277c199366cb2c2de2518b8eea91611d02 Mon Sep 17 00:00:00 2001 From: James Baicoianu Date: Wed, 23 Nov 2016 21:37:25 -0800 Subject: [PATCH] Added logarithmic depth buffer support to SSAO postprocessing shader --- examples/js/shaders/SSAOShader.js | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/examples/js/shaders/SSAOShader.js b/examples/js/shaders/SSAOShader.js index b086c1ec91..c786f6075b 100644 --- a/examples/js/shaders/SSAOShader.js +++ b/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 );", "}", -- GitLab