From 199809663050202472a26be68d46c1d9f7369609 Mon Sep 17 00:00:00 2001 From: Olivier Prat Date: Thu, 27 Sep 2018 17:03:14 +0200 Subject: [PATCH] On single bilateral blur shader --- .../src/AmbientOcclusionEffect.cpp | 33 +++++-------------- .../render-utils/src/AmbientOcclusionEffect.h | 6 ++-- .../src/render-utils/ssao_bilateralBlur.slp | 1 + .../render-utils/ssao_makeHorizontalBlur.slp | 1 - .../render-utils/ssao_makeVerticalBlur.slp | 1 - ...erticalBlur.slf => ssao_bilateralBlur.slf} | 3 +- .../{ssao_blur.slv => ssao_bilateralBlur.slv} | 2 +- .../src/ssao_makeHorizontalBlur.slf | 26 --------------- 8 files changed, 14 insertions(+), 59 deletions(-) create mode 100644 libraries/render-utils/src/render-utils/ssao_bilateralBlur.slp delete mode 100644 libraries/render-utils/src/render-utils/ssao_makeHorizontalBlur.slp delete mode 100644 libraries/render-utils/src/render-utils/ssao_makeVerticalBlur.slp rename libraries/render-utils/src/{ssao_makeVerticalBlur.slf => ssao_bilateralBlur.slf} (94%) rename libraries/render-utils/src/{ssao_blur.slv => ssao_bilateralBlur.slv} (97%) delete mode 100644 libraries/render-utils/src/ssao_makeHorizontalBlur.slf diff --git a/libraries/render-utils/src/AmbientOcclusionEffect.cpp b/libraries/render-utils/src/AmbientOcclusionEffect.cpp index b56da99ee6..6084fc8f14 100644 --- a/libraries/render-utils/src/AmbientOcclusionEffect.cpp +++ b/libraries/render-utils/src/AmbientOcclusionEffect.cpp @@ -32,8 +32,7 @@ #include "ViewFrustum.h" gpu::PipelinePointer AmbientOcclusionEffect::_occlusionPipeline; -gpu::PipelinePointer AmbientOcclusionEffect::_hBlurPipeline; -gpu::PipelinePointer AmbientOcclusionEffect::_vBlurPipeline; +gpu::PipelinePointer AmbientOcclusionEffect::_bilateralBlurPipeline; gpu::PipelinePointer AmbientOcclusionEffect::_mipCreationPipeline; gpu::PipelinePointer AmbientOcclusionEffect::_gatherPipeline; gpu::PipelinePointer AmbientOcclusionEffect::_buildNormalsPipeline; @@ -415,31 +414,17 @@ const gpu::PipelinePointer& AmbientOcclusionEffect::getOcclusionPipeline() { return _occlusionPipeline; } -const gpu::PipelinePointer& AmbientOcclusionEffect::getHBlurPipeline() { - if (!_hBlurPipeline) { - gpu::ShaderPointer program = gpu::Shader::createProgram(shader::render_utils::program::ssao_makeHorizontalBlur); +const gpu::PipelinePointer& AmbientOcclusionEffect::getBilateralBlurPipeline() { + if (!_bilateralBlurPipeline) { + gpu::ShaderPointer program = gpu::Shader::createProgram(shader::render_utils::program::ssao_bilateralBlur); gpu::StatePointer state = gpu::StatePointer(new gpu::State()); state->setColorWriteMask(true, true, true, false); // Good to go add the brand new pipeline - _hBlurPipeline = gpu::Pipeline::create(program, state); + _bilateralBlurPipeline = gpu::Pipeline::create(program, state); } - return _hBlurPipeline; -} - -const gpu::PipelinePointer& AmbientOcclusionEffect::getVBlurPipeline() { - if (!_vBlurPipeline) { - gpu::ShaderPointer program = gpu::Shader::createProgram(shader::render_utils::program::ssao_makeVerticalBlur); - gpu::StatePointer state = gpu::StatePointer(new gpu::State()); - - // Vertical blur write just the final result Occlusion value in the alpha channel - state->setColorWriteMask(true, true, true, false); - - // Good to go add the brand new pipeline - _vBlurPipeline = gpu::Pipeline::create(program, state); - } - return _vBlurPipeline; + return _bilateralBlurPipeline; } const gpu::PipelinePointer& AmbientOcclusionEffect::getMipCreationPipeline() { @@ -530,8 +515,7 @@ void AmbientOcclusionEffect::run(const render::RenderContextPointer& renderConte auto framebufferSize = _framebuffer->getSourceFrameSize(); auto occlusionPipeline = getOcclusionPipeline(); - auto firstHBlurPipeline = getHBlurPipeline(); - auto lastVBlurPipeline = getVBlurPipeline(); + auto bilateralBlurPipeline = getBilateralBlurPipeline(); auto mipCreationPipeline = getMipCreationPipeline(); #if SSAO_USE_QUAD_SPLIT auto gatherPipeline = getGatherPipeline(); @@ -680,12 +664,12 @@ void AmbientOcclusionEffect::run(const render::RenderContextPointer& renderConte model.setScale(uvScale); batch.setModelTransform(model); } + batch.setPipeline(bilateralBlurPipeline); batch.setViewportTransform(firstBlurViewport); batch.setFramebuffer(occlusionBlurredFBO); // Use full resolution depth and normal for bilateral upscaling and blur batch.setResourceTexture(render_utils::slot::texture::SsaoDepth, linearDepthTexture); batch.setUniformBuffer(render_utils::slot::buffer::SsaoBlurParams, _hblurParametersBuffer); - batch.setPipeline(firstHBlurPipeline); batch.setResourceTexture(render_utils::slot::texture::SsaoOcclusion, occlusionFBO->getRenderBuffer(0)); batch.draw(gpu::TRIANGLE_STRIP, 4); batch.popProfileRange(); @@ -705,7 +689,6 @@ void AmbientOcclusionEffect::run(const render::RenderContextPointer& renderConte batch.setViewportTransform(sourceViewport); batch.setFramebuffer(occlusionFBO); batch.setUniformBuffer(render_utils::slot::buffer::SsaoBlurParams, _vblurParametersBuffer); - batch.setPipeline(lastVBlurPipeline); batch.setResourceTexture(render_utils::slot::texture::SsaoOcclusion, occlusionBlurredFBO->getRenderBuffer(0)); batch.draw(gpu::TRIANGLE_STRIP, 4); batch.popProfileRange(); diff --git a/libraries/render-utils/src/AmbientOcclusionEffect.h b/libraries/render-utils/src/AmbientOcclusionEffect.h index 4ace549e9e..dbbbee76d0 100644 --- a/libraries/render-utils/src/AmbientOcclusionEffect.h +++ b/libraries/render-utils/src/AmbientOcclusionEffect.h @@ -190,15 +190,13 @@ private: BlurParametersBuffer _hblurParametersBuffer; static const gpu::PipelinePointer& getOcclusionPipeline(); - static const gpu::PipelinePointer& getHBlurPipeline(); // first - static const gpu::PipelinePointer& getVBlurPipeline(); // second + static const gpu::PipelinePointer& getBilateralBlurPipeline(); static const gpu::PipelinePointer& getMipCreationPipeline(); static const gpu::PipelinePointer& getGatherPipeline(); static const gpu::PipelinePointer& getBuildNormalsPipeline(); static gpu::PipelinePointer _occlusionPipeline; - static gpu::PipelinePointer _hBlurPipeline; - static gpu::PipelinePointer _vBlurPipeline; + static gpu::PipelinePointer _bilateralBlurPipeline; static gpu::PipelinePointer _mipCreationPipeline; static gpu::PipelinePointer _gatherPipeline; static gpu::PipelinePointer _buildNormalsPipeline; diff --git a/libraries/render-utils/src/render-utils/ssao_bilateralBlur.slp b/libraries/render-utils/src/render-utils/ssao_bilateralBlur.slp new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/libraries/render-utils/src/render-utils/ssao_bilateralBlur.slp @@ -0,0 +1 @@ + diff --git a/libraries/render-utils/src/render-utils/ssao_makeHorizontalBlur.slp b/libraries/render-utils/src/render-utils/ssao_makeHorizontalBlur.slp deleted file mode 100644 index 49fd3dba93..0000000000 --- a/libraries/render-utils/src/render-utils/ssao_makeHorizontalBlur.slp +++ /dev/null @@ -1 +0,0 @@ -VERTEX ssao_blur diff --git a/libraries/render-utils/src/render-utils/ssao_makeVerticalBlur.slp b/libraries/render-utils/src/render-utils/ssao_makeVerticalBlur.slp deleted file mode 100644 index 49fd3dba93..0000000000 --- a/libraries/render-utils/src/render-utils/ssao_makeVerticalBlur.slp +++ /dev/null @@ -1 +0,0 @@ -VERTEX ssao_blur diff --git a/libraries/render-utils/src/ssao_makeVerticalBlur.slf b/libraries/render-utils/src/ssao_bilateralBlur.slf similarity index 94% rename from libraries/render-utils/src/ssao_makeVerticalBlur.slf rename to libraries/render-utils/src/ssao_bilateralBlur.slf index 15550a73cd..cadf00bf14 100644 --- a/libraries/render-utils/src/ssao_makeVerticalBlur.slf +++ b/libraries/render-utils/src/ssao_bilateralBlur.slf @@ -2,7 +2,7 @@ <$VERSION_HEADER$> // Generated on <$_SCRIBE_DATE$> // -// ssao_makeVerticalBlur.frag +// ssao_bilateralBlur.frag // // Created by Sam Gateau on 1/1/16. // Copyright 2016 High Fidelity, Inc. @@ -10,6 +10,7 @@ // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // + <@include ssao.slh@> // Hack comment diff --git a/libraries/render-utils/src/ssao_blur.slv b/libraries/render-utils/src/ssao_bilateralBlur.slv similarity index 97% rename from libraries/render-utils/src/ssao_blur.slv rename to libraries/render-utils/src/ssao_bilateralBlur.slv index aafd9adbf4..d45fdf8360 100644 --- a/libraries/render-utils/src/ssao_blur.slv +++ b/libraries/render-utils/src/ssao_bilateralBlur.slv @@ -2,7 +2,7 @@ <$VERSION_HEADER$> // Generated on <$_SCRIBE_DATE$> // -// ssao_blur.vert +// ssao_bilateralBlur.vert // // Draw the unit quad [-1,-1 -> 1,1] filling in // Simply draw a Triangle_strip of 2 triangles, no input buffers or index buffer needed diff --git a/libraries/render-utils/src/ssao_makeHorizontalBlur.slf b/libraries/render-utils/src/ssao_makeHorizontalBlur.slf deleted file mode 100644 index e535398241..0000000000 --- a/libraries/render-utils/src/ssao_makeHorizontalBlur.slf +++ /dev/null @@ -1,26 +0,0 @@ -<@include gpu/Config.slh@> -<$VERSION_HEADER$> -// Generated on <$_SCRIBE_DATE$> -// -// ssao_makeHorizontalBlur.frag -// -// Created by Sam Gateau on 1/1/16. -// Copyright 2016 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - -<@include ssao.slh@> - -// Hack comment - -<$declareBlurPass()$> - -layout(location=0) in vec4 varTexCoord0; - -layout(location=0) out vec4 outFragColor; - -void main(void) { - outFragColor = vec4(getBlurredOcclusion(ivec2(gl_FragCoord.xy), varTexCoord0.xy, varTexCoord0.zw), 1.0); -}