From 379c8828348b444899594f10fff9a1cc0d292b45 Mon Sep 17 00:00:00 2001 From: samcake Date: Wed, 20 Jan 2016 02:03:09 -0800 Subject: [PATCH] Debugging the darkness and pointing out bugs --- examples/utilities/tools/renderEngineDebug.js | 2 +- .../src/AmbientOcclusionEffect.cpp | 26 ++++++++++--------- .../render-utils/src/DebugDeferredBuffer.cpp | 6 +++-- .../src/DeferredLightingEffect.cpp | 2 ++ .../render-utils/src/FramebufferCache.cpp | 3 ++- .../render-utils/src/ssao_makeOcclusion.slf | 14 ++++++++-- 6 files changed, 35 insertions(+), 18 deletions(-) diff --git a/examples/utilities/tools/renderEngineDebug.js b/examples/utilities/tools/renderEngineDebug.js index f57f451e61..645982ff2c 100755 --- a/examples/utilities/tools/renderEngineDebug.js +++ b/examples/utilities/tools/renderEngineDebug.js @@ -52,7 +52,7 @@ var overlaysCounter = new CounterWidget(panel, "Overlays", Render.overlay3D); var resizing = false; var previousMode = Settings.getValue(SETTINGS_KEY, -1); -previousMode = -1; +previousMode = 8; Menu.addActionGroup(MENU, ACTIONS, ACTIONS[previousMode + 1]); Render.deferredDebugMode = previousMode; Render.deferredDebugSize = { x: 0.0, y: -1.0, z: 1.0, w: 1.0 }; // Reset to default size diff --git a/libraries/render-utils/src/AmbientOcclusionEffect.cpp b/libraries/render-utils/src/AmbientOcclusionEffect.cpp index bbe0485760..2fa8571575 100644 --- a/libraries/render-utils/src/AmbientOcclusionEffect.cpp +++ b/libraries/render-utils/src/AmbientOcclusionEffect.cpp @@ -391,20 +391,22 @@ void AmbientOcclusionEffect::run(const render::SceneContextPointer& sceneContext batch.setPipeline(occlusionPipeline); batch.setResourceTexture(AmbientOcclusionEffect_PyramidMapSlot, pyramidFBO->getRenderBuffer(0)); batch.draw(gpu::TRIANGLE_STRIP, 4); - batch.setResourceTexture(AmbientOcclusionEffect_PyramidMapSlot + 1, gpu::TexturePointer()); + - // Blur 1st pass - batch.setFramebuffer(occlusionBlurredFBO); - batch.setPipeline(firstHBlurPipeline); - batch.setResourceTexture(AmbientOcclusionEffect_OcclusionMapSlot, occlusionFBO->getRenderBuffer(0)); - batch.draw(gpu::TRIANGLE_STRIP, 4); - - // Blur 2nd pass - batch.setFramebuffer(occlusionFBO); - batch.setPipeline(lastVBlurPipeline); - batch.setResourceTexture(AmbientOcclusionEffect_OcclusionMapSlot, occlusionBlurredFBO->getRenderBuffer(0)); - batch.draw(gpu::TRIANGLE_STRIP, 4); + if (getBlurRadius() > 0) { + // Blur 1st pass + batch.setFramebuffer(occlusionBlurredFBO); + batch.setPipeline(firstHBlurPipeline); + batch.setResourceTexture(AmbientOcclusionEffect_OcclusionMapSlot, occlusionFBO->getRenderBuffer(0)); + batch.draw(gpu::TRIANGLE_STRIP, 4); + // Blur 2nd pass + batch.setFramebuffer(occlusionFBO); + batch.setPipeline(lastVBlurPipeline); + batch.setResourceTexture(AmbientOcclusionEffect_OcclusionMapSlot, occlusionBlurredFBO->getRenderBuffer(0)); + batch.draw(gpu::TRIANGLE_STRIP, 4); + } + _gpuTimer.end(batch); }); diff --git a/libraries/render-utils/src/DebugDeferredBuffer.cpp b/libraries/render-utils/src/DebugDeferredBuffer.cpp index c504a58848..75664c1849 100644 --- a/libraries/render-utils/src/DebugDeferredBuffer.cpp +++ b/libraries/render-utils/src/DebugDeferredBuffer.cpp @@ -57,7 +57,7 @@ static const std::string DEFAULT_ROUGHNESS_SHADER { }; static const std::string DEFAULT_NORMAL_SHADER { "vec4 getFragmentColor() {" - " return vec4(normalize(texture(normalMap, uv).xyz), 1.0);" + " return vec4(normalize(texture(normalMap, uv).xyz * 2.0 - vec3(1.0)), 1.0);" " }" }; static const std::string DEFAULT_DEPTH_SHADER { @@ -88,7 +88,9 @@ static const std::string DEFAULT_PYRAMID_DEPTH_SHADER { static const std::string DEFAULT_AMBIENT_OCCLUSION_SHADER{ "vec4 getFragmentColor() {" - " return vec4(vec3(texture(occlusionMap, uv).x), 1.0);" + //" return vec4(vec3(texture(occlusionMap, uv).x), 1.0);" + " return vec4(vec3(texture(occlusionMap, uv).xyz), 1.0);" + // when drawing normal " return vec4(normalize(texture(occlusionMap, uv).xyz * 2.0 - vec3(1.0)), 1.0);" " }" }; static const std::string DEFAULT_AMBIENT_OCCLUSION_BLURRED_SHADER{ diff --git a/libraries/render-utils/src/DeferredLightingEffect.cpp b/libraries/render-utils/src/DeferredLightingEffect.cpp index e43e76c87a..eea8f9e27e 100644 --- a/libraries/render-utils/src/DeferredLightingEffect.cpp +++ b/libraries/render-utils/src/DeferredLightingEffect.cpp @@ -185,6 +185,8 @@ void DeferredLightingEffect::render(RenderArgs* args) { batch.setResourceTexture(DEFERRED_BUFFER_NORMAL_UNIT, framebufferCache->getDeferredNormalTexture()); batch.setResourceTexture(DEFERRED_BUFFER_EMISSIVE_UNIT, framebufferCache->getDeferredSpecularTexture()); batch.setResourceTexture(DEFERRED_BUFFER_DEPTH_UNIT, framebufferCache->getPrimaryDepthTexture()); + + // need to assign the white texture if ao is off batch.setResourceTexture(DEFERRED_BUFFER_OBSCURANCE_UNIT, framebufferCache->getOcclusionTexture()); assert(_lightStage.lights.size() > 0); diff --git a/libraries/render-utils/src/FramebufferCache.cpp b/libraries/render-utils/src/FramebufferCache.cpp index 025c0285d4..cc2a057379 100644 --- a/libraries/render-utils/src/FramebufferCache.cpp +++ b/libraries/render-utils/src/FramebufferCache.cpp @@ -105,7 +105,8 @@ void FramebufferCache::createPrimaryFramebuffer() { // For AO: - _depthPyramidTexture = gpu::TexturePointer(gpu::Texture::create2D(gpu::Element(gpu::SCALAR, gpu::FLOAT, gpu::RGB), width, height, smoothSampler)); + auto pointMipSampler = gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_MIP_POINT); + _depthPyramidTexture = gpu::TexturePointer(gpu::Texture::create2D(gpu::Element(gpu::SCALAR, gpu::FLOAT, gpu::RGB), width, height, pointMipSampler)); _depthPyramidFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create()); _depthPyramidFramebuffer->setRenderBuffer(0, _depthPyramidTexture); _depthPyramidFramebuffer->setDepthStencilBuffer(_primaryDepthTexture, depthFormat); diff --git a/libraries/render-utils/src/ssao_makeOcclusion.slf b/libraries/render-utils/src/ssao_makeOcclusion.slf index 1cfef02ba5..9ca1e4ad07 100644 --- a/libraries/render-utils/src/ssao_makeOcclusion.slf +++ b/libraries/render-utils/src/ssao_makeOcclusion.slf @@ -64,7 +64,6 @@ vec3 getOffsetPosition(ivec2 side, ivec2 ssC, vec2 unitOffset, float ssR) { // Manually clamp to the texture size because texelFetch bypasses the texture unit ivec2 mipP = clamp(ssPFull >> mipLevel, ivec2(0), textureSize(pyramidMap, getResolutionLevel() + mipLevel) - ivec2(1)); P.z = -texelFetch(pyramidMap, mipP, getResolutionLevel() + mipLevel).r; -// P.z = -texelFetch(pyramidMap, ssPFull, 0).r; // Offset to pixel center vec2 tapUV = (vec2(ssP) + vec2(0.5)) / getStereoSideWidth(); @@ -136,5 +135,16 @@ void main(void) { A -= dFdy(A) * ((ssC.y & 1) - 0.5); } - outFragColor = vec4(packOcclusionDepth(A, CSZToDephtKey(Cp.z)), 1.0); + // Debug Normal: outFragColor = vec4((Cn + vec3(1.0))* 0.5, 1.0); + // Debug Radius outFragColor = vec4(vec3(ssDiskRadius / 100.0), 1.0); + // Debug MaxMiplevel outFragColor = vec4(1.0 - vec3(float(clamp(findMSB(int(ssDiskRadius)) - LOG_MAX_OFFSET, 0, MAX_MIP_LEVEL))/ float(MAX_MIP_LEVEL)), 1.0); + // Debug OffsetPosition + float ssR; + vec2 unitOffset = tapLocation(int(getNumSamples() - 1), 0, ssR); + vec3 Q = getOffsetPosition(side, ssC, unitOffset, ssR * ssDiskRadius); + //outFragColor = vec4(vec3(Q.x / 10.0, Q.y / 2.0, -Q.z/ 3.0), 1.0); + vec3 v = normalize(Q - Cp); + outFragColor = vec4((v + vec3(1.0))* 0.5, 1.0); + + //outFragColor = vec4(packOcclusionDepth(A, CSZToDephtKey(Cp.z)), 1.0); }