From 72d069325293549277197ae02e1303f8a557ca3e Mon Sep 17 00:00:00 2001 From: Olivier Prat Date: Tue, 2 Oct 2018 18:46:01 +0200 Subject: [PATCH] Clean up for stereo --- .../render-utils/src/ssao_makeOcclusion.slf | 77 ++++++++++--------- 1 file changed, 40 insertions(+), 37 deletions(-) diff --git a/libraries/render-utils/src/ssao_makeOcclusion.slf b/libraries/render-utils/src/ssao_makeOcclusion.slf index ec747062e8..8b44fd8301 100644 --- a/libraries/render-utils/src/ssao_makeOcclusion.slf +++ b/libraries/render-utils/src/ssao_makeOcclusion.slf @@ -56,51 +56,54 @@ void main(void) { vec3 fragNormalES = buildNormal(side, fragUVPos, fragPositionES, deltaDepthUV); #endif - // Choose the screen-space sample radius - float diskPixelRadius = evalDiskRadius(fragPositionES.z, sideDepthSize); - if (isHorizonBased()) { - diskPixelRadius = min(diskPixelRadius, SSAO_HBAO_MAX_RADIUS); - } + float occlusion = 1.0; - // Let's make noise - float randomPatternRotationAngle = 0.0; - - // Accumulate the obscurance for each samples - float obscuranceSum = 0.0; - int numSamples = int(getNumSamples()); - float invNumSamples = getInvNumSamples(); - - if (isHorizonBased()) { - randomPatternRotationAngle = getAngleDithering(fragPixelPos); - - for (int i = 0; i < numSamples; ++i) { - vec3 deltaTap = getUnitTapLocation(i, 1.0, randomPatternRotationAngle, PI); - obscuranceSum += evalVisibilityHBAO(side, fragUVPos, deltaDepthUV, deltaTap.xy, diskPixelRadius, fragPositionES, fragNormalES); + if (fragPositionES.z > (1.0-getPosLinearDepthFar())) { + // Choose the screen-space sample radius + float diskPixelRadius = evalDiskRadius(fragPositionES.z, sideDepthSize); + if (isHorizonBased()) { + diskPixelRadius = min(diskPixelRadius, SSAO_HBAO_MAX_RADIUS); } - obscuranceSum *= invNumSamples; + + // Let's make noise + float randomPatternRotationAngle = 0.0; + + // Accumulate the obscurance for each samples + float obscuranceSum = 0.0; + int numSamples = int(getNumSamples()); + float invNumSamples = getInvNumSamples(); + + if (isHorizonBased()) { + randomPatternRotationAngle = getAngleDithering(fragPixelPos); + + for (int i = 0; i < numSamples; ++i) { + vec3 deltaTap = getUnitTapLocation(i, 1.0, randomPatternRotationAngle, PI); + obscuranceSum += evalVisibilityHBAO(side, fragUVPos, deltaDepthUV, deltaTap.xy, diskPixelRadius, fragPositionES, fragNormalES); + } + obscuranceSum *= invNumSamples; #if HBAO_USE_COS_ANGLE - obscuranceSum = 1.0 - obscuranceSum * getObscuranceScaling(); + obscuranceSum = 1.0 - obscuranceSum * getObscuranceScaling(); #else - obscuranceSum = mix(1.0, obscuranceSum, getObscuranceScaling()); + obscuranceSum = mix(1.0, obscuranceSum, getObscuranceScaling()); #endif - } else { - // Steps are in the depth texture resolution - vec2 depthTexFragPixelPos = fragUVPos * sideDepthSize; + } else { + // Steps are in the depth texture resolution + vec2 depthTexFragPixelPos = fragUVPos * sideDepthSize; - randomPatternRotationAngle = getAngleDitheringPixelPos(fragPixelPos) + getAngleDitheringSplit(); + randomPatternRotationAngle = getAngleDitheringPixelPos(fragPixelPos) + getAngleDitheringSplit(); - for (int i = 0; i < numSamples; ++i) { - vec3 tap = getTapLocationClampedSSAO(i, randomPatternRotationAngle, diskPixelRadius, depthTexFragPixelPos, sideDepthSize); - vec2 tapUV = fragUVPos + tap.xy * deltaDepthUV; - vec2 tapMipZ = fetchTap(side, tapUV, tap.z); - vec3 tapPositionES = evalEyePositionFromZeye(side.x, tapMipZ.y, tapUV); - obscuranceSum += float(tap.z > 0.0) * evalVisibilitySSAO(fragPositionES, fragNormalES, tapPositionES); + for (int i = 0; i < numSamples; ++i) { + vec3 tap = getTapLocationClampedSSAO(i, randomPatternRotationAngle, diskPixelRadius, depthTexFragPixelPos, sideDepthSize); + vec2 tapUV = fragUVPos + tap.xy * deltaDepthUV; + vec2 tapMipZ = fetchTap(side, tapUV, tap.z); + vec3 tapPositionES = evalEyePositionFromZeye(side.x, tapMipZ.y, tapUV); + obscuranceSum += float(tap.z > 0.0) * evalVisibilitySSAO(fragPositionES, fragNormalES, tapPositionES); + } + obscuranceSum *= invNumSamples; + obscuranceSum = 1.0 - obscuranceSum * getObscuranceScaling(); } - obscuranceSum *= invNumSamples; - obscuranceSum = 1.0 - obscuranceSum * getObscuranceScaling(); - } - float occlusion = clamp(obscuranceSum, 0.0, 1.0); - + occlusion = clamp(obscuranceSum, 0.0, 1.0); + } outFragColor = packOcclusionOutput(occlusion, fragPositionES.z, fragNormalES); }