mirror of
https://github.com/overte-org/overte.git
synced 2025-04-25 22:36:39 +02:00
Preparing for halton taps
This commit is contained in:
parent
fb7a8bdd4d
commit
60418b36d7
6 changed files with 36 additions and 36 deletions
|
@ -183,7 +183,7 @@ AmbientOcclusionEffectConfig::AmbientOcclusionEffectConfig() :
|
||||||
perspectiveScale{ 1.0f },
|
perspectiveScale{ 1.0f },
|
||||||
obscuranceLevel{ 0.5f },
|
obscuranceLevel{ 0.5f },
|
||||||
#if SSAO_USE_HORIZON_BASED
|
#if SSAO_USE_HORIZON_BASED
|
||||||
falloffAngle{ 0.2f },
|
falloffAngle{ 0.3f },
|
||||||
#else
|
#else
|
||||||
falloffAngle{ 0.01f },
|
falloffAngle{ 0.01f },
|
||||||
#endif
|
#endif
|
||||||
|
@ -390,6 +390,7 @@ void AmbientOcclusionEffect::run(const render::RenderContextPointer& renderConte
|
||||||
const auto& linearDepthFramebuffer = inputs.get2();
|
const auto& linearDepthFramebuffer = inputs.get2();
|
||||||
|
|
||||||
auto linearDepthTexture = linearDepthFramebuffer->getLinearDepthTexture();
|
auto linearDepthTexture = linearDepthFramebuffer->getLinearDepthTexture();
|
||||||
|
auto occlusionDepthTexture = linearDepthTexture;
|
||||||
auto sourceViewport = args->_viewport;
|
auto sourceViewport = args->_viewport;
|
||||||
auto occlusionViewport = sourceViewport;
|
auto occlusionViewport = sourceViewport;
|
||||||
auto firstBlurViewport = sourceViewport;
|
auto firstBlurViewport = sourceViewport;
|
||||||
|
@ -406,6 +407,7 @@ void AmbientOcclusionEffect::run(const render::RenderContextPointer& renderConte
|
||||||
if (_aoParametersBuffer->getResolutionLevel() > 0) {
|
if (_aoParametersBuffer->getResolutionLevel() > 0) {
|
||||||
occlusionViewport = occlusionViewport >> _aoParametersBuffer->getResolutionLevel();
|
occlusionViewport = occlusionViewport >> _aoParametersBuffer->getResolutionLevel();
|
||||||
firstBlurViewport.w = firstBlurViewport.w >> _aoParametersBuffer->getResolutionLevel();
|
firstBlurViewport.w = firstBlurViewport.w >> _aoParametersBuffer->getResolutionLevel();
|
||||||
|
occlusionDepthTexture = linearDepthFramebuffer->getHalfLinearDepthTexture();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_framebuffer->updateLinearDepth(linearDepthTexture)) {
|
if (_framebuffer->updateLinearDepth(linearDepthTexture)) {
|
||||||
|
@ -444,21 +446,20 @@ void AmbientOcclusionEffect::run(const render::RenderContextPointer& renderConte
|
||||||
batch.setModelTransform(model);
|
batch.setModelTransform(model);
|
||||||
#if SSAO_USE_HORIZON_BASED
|
#if SSAO_USE_HORIZON_BASED
|
||||||
batch.setPipeline(mipCreationPipeline);
|
batch.setPipeline(mipCreationPipeline);
|
||||||
batch.generateTextureMipsWithPipeline(_framebuffer->getLinearDepthTexture());
|
batch.generateTextureMipsWithPipeline(occlusionDepthTexture);
|
||||||
#else
|
#else
|
||||||
batch.generateTextureMips(_framebuffer->getLinearDepthTexture());
|
batch.generateTextureMips(occlusionDepthTexture);
|
||||||
#endif
|
#endif
|
||||||
batch.popProfileRange();
|
batch.popProfileRange();
|
||||||
|
|
||||||
|
// Occlusion pass
|
||||||
batch.pushProfileRange("Occlusion");
|
batch.pushProfileRange("Occlusion");
|
||||||
batch.setUniformBuffer(render_utils::slot::buffer::DeferredFrameTransform, frameTransform->getFrameTransformBuffer());
|
batch.setUniformBuffer(render_utils::slot::buffer::DeferredFrameTransform, frameTransform->getFrameTransformBuffer());
|
||||||
batch.setUniformBuffer(render_utils::slot::buffer::SsaoParams, _aoParametersBuffer);
|
batch.setUniformBuffer(render_utils::slot::buffer::SsaoParams, _aoParametersBuffer);
|
||||||
|
|
||||||
// Occlusion pass
|
|
||||||
batch.setFramebuffer(occlusionFBO);
|
batch.setFramebuffer(occlusionFBO);
|
||||||
batch.clearColorFramebuffer(gpu::Framebuffer::BUFFER_COLOR0, glm::vec4(1.0f));
|
batch.clearColorFramebuffer(gpu::Framebuffer::BUFFER_COLOR0, glm::vec4(1.0f));
|
||||||
batch.setPipeline(occlusionPipeline);
|
batch.setPipeline(occlusionPipeline);
|
||||||
batch.setResourceTexture(render_utils::slot::texture::SsaoPyramid, _framebuffer->getLinearDepthTexture());
|
batch.setResourceTexture(render_utils::slot::texture::SsaoDepth, occlusionDepthTexture);
|
||||||
batch.draw(gpu::TRIANGLE_STRIP, 4);
|
batch.draw(gpu::TRIANGLE_STRIP, 4);
|
||||||
batch.popProfileRange();
|
batch.popProfileRange();
|
||||||
|
|
||||||
|
@ -469,6 +470,8 @@ void AmbientOcclusionEffect::run(const render::RenderContextPointer& renderConte
|
||||||
batch.setModelTransform(model);
|
batch.setModelTransform(model);
|
||||||
batch.setViewportTransform(firstBlurViewport);
|
batch.setViewportTransform(firstBlurViewport);
|
||||||
batch.setFramebuffer(occlusionBlurredFBO);
|
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.setUniformBuffer(render_utils::slot::buffer::SsaoBlurParams, _hblurParametersBuffer);
|
||||||
batch.setPipeline(firstHBlurPipeline);
|
batch.setPipeline(firstHBlurPipeline);
|
||||||
batch.setResourceTexture(render_utils::slot::texture::SsaoOcclusion, occlusionFBO->getRenderBuffer(0));
|
batch.setResourceTexture(render_utils::slot::texture::SsaoOcclusion, occlusionFBO->getRenderBuffer(0));
|
||||||
|
@ -485,7 +488,7 @@ void AmbientOcclusionEffect::run(const render::RenderContextPointer& renderConte
|
||||||
batch.draw(gpu::TRIANGLE_STRIP, 4);
|
batch.draw(gpu::TRIANGLE_STRIP, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
batch.setResourceTexture(render_utils::slot::texture::SsaoPyramid, nullptr);
|
batch.setResourceTexture(render_utils::slot::texture::SsaoDepth, nullptr);
|
||||||
batch.setResourceTexture(render_utils::slot::texture::SsaoOcclusion, nullptr);
|
batch.setResourceTexture(render_utils::slot::texture::SsaoOcclusion, nullptr);
|
||||||
|
|
||||||
_gpuTimer->end(batch);
|
_gpuTimer->end(batch);
|
||||||
|
@ -581,11 +584,11 @@ void DebugAmbientOcclusion::run(const render::RenderContextPointer& renderContex
|
||||||
batch.setUniformBuffer(render_utils::slot::buffer::SsaoDebugParams, _parametersBuffer);
|
batch.setUniformBuffer(render_utils::slot::buffer::SsaoDebugParams, _parametersBuffer);
|
||||||
|
|
||||||
batch.setPipeline(debugPipeline);
|
batch.setPipeline(debugPipeline);
|
||||||
batch.setResourceTexture(render_utils::slot::texture::SsaoPyramid, linearDepthTexture);
|
batch.setResourceTexture(render_utils::slot::texture::SsaoDepth, linearDepthTexture);
|
||||||
batch.draw(gpu::TRIANGLE_STRIP, 4);
|
batch.draw(gpu::TRIANGLE_STRIP, 4);
|
||||||
|
|
||||||
|
|
||||||
batch.setResourceTexture(render_utils::slot::texture::SsaoPyramid, nullptr);
|
batch.setResourceTexture(render_utils::slot::texture::SsaoDepth, nullptr);
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,10 +28,10 @@ namespace ru {
|
||||||
LinearDepthFramebuffer::LinearDepthFramebuffer() {
|
LinearDepthFramebuffer::LinearDepthFramebuffer() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void LinearDepthFramebuffer::updatePrimaryDepth(const gpu::TexturePointer& depthBuffer) {
|
void LinearDepthFramebuffer::update(const gpu::TexturePointer& depthBuffer) {
|
||||||
//If the depth buffer or size changed, we need to delete our FBOs
|
//If the depth buffer or size changed, we need to delete our FBOs
|
||||||
bool reset = false;
|
bool reset = false;
|
||||||
if ((_primaryDepthTexture != depthBuffer)) {
|
if (_primaryDepthTexture != depthBuffer) {
|
||||||
_primaryDepthTexture = depthBuffer;
|
_primaryDepthTexture = depthBuffer;
|
||||||
reset = true;
|
reset = true;
|
||||||
}
|
}
|
||||||
|
@ -144,11 +144,12 @@ void LinearDepthPass::run(const render::RenderContextPointer& renderContext, con
|
||||||
if (!_linearDepthFramebuffer) {
|
if (!_linearDepthFramebuffer) {
|
||||||
_linearDepthFramebuffer = std::make_shared<LinearDepthFramebuffer>();
|
_linearDepthFramebuffer = std::make_shared<LinearDepthFramebuffer>();
|
||||||
}
|
}
|
||||||
_linearDepthFramebuffer->updatePrimaryDepth(deferredFramebuffer->getPrimaryDepthTexture());
|
|
||||||
|
|
||||||
auto depthBuffer = deferredFramebuffer->getPrimaryDepthTexture();
|
auto depthBuffer = deferredFramebuffer->getPrimaryDepthTexture();
|
||||||
auto normalTexture = deferredFramebuffer->getDeferredNormalTexture();
|
auto normalTexture = deferredFramebuffer->getDeferredNormalTexture();
|
||||||
|
|
||||||
|
_linearDepthFramebuffer->update(depthBuffer);
|
||||||
|
|
||||||
auto linearDepthFBO = _linearDepthFramebuffer->getLinearDepthFramebuffer();
|
auto linearDepthFBO = _linearDepthFramebuffer->getLinearDepthFramebuffer();
|
||||||
auto linearDepthTexture = _linearDepthFramebuffer->getLinearDepthTexture();
|
auto linearDepthTexture = _linearDepthFramebuffer->getLinearDepthTexture();
|
||||||
|
|
||||||
|
@ -247,7 +248,7 @@ const gpu::PipelinePointer& LinearDepthPass::getDownsamplePipeline(const render:
|
||||||
SurfaceGeometryFramebuffer::SurfaceGeometryFramebuffer() {
|
SurfaceGeometryFramebuffer::SurfaceGeometryFramebuffer() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void SurfaceGeometryFramebuffer::updateLinearDepth(const gpu::TexturePointer& linearDepthBuffer) {
|
void SurfaceGeometryFramebuffer::update(const gpu::TexturePointer& linearDepthBuffer) {
|
||||||
//If the depth buffer or size changed, we need to delete our FBOs
|
//If the depth buffer or size changed, we need to delete our FBOs
|
||||||
bool reset = false;
|
bool reset = false;
|
||||||
if ((_linearDepthTexture != linearDepthBuffer)) {
|
if ((_linearDepthTexture != linearDepthBuffer)) {
|
||||||
|
@ -414,7 +415,7 @@ void SurfaceGeometryPass::run(const render::RenderContextPointer& renderContext,
|
||||||
if (!_surfaceGeometryFramebuffer) {
|
if (!_surfaceGeometryFramebuffer) {
|
||||||
_surfaceGeometryFramebuffer = std::make_shared<SurfaceGeometryFramebuffer>();
|
_surfaceGeometryFramebuffer = std::make_shared<SurfaceGeometryFramebuffer>();
|
||||||
}
|
}
|
||||||
_surfaceGeometryFramebuffer->updateLinearDepth(linearDepthTexture);
|
_surfaceGeometryFramebuffer->update(linearDepthTexture);
|
||||||
|
|
||||||
auto curvatureFramebuffer = _surfaceGeometryFramebuffer->getCurvatureFramebuffer();
|
auto curvatureFramebuffer = _surfaceGeometryFramebuffer->getCurvatureFramebuffer();
|
||||||
auto curvatureTexture = _surfaceGeometryFramebuffer->getCurvatureTexture();
|
auto curvatureTexture = _surfaceGeometryFramebuffer->getCurvatureTexture();
|
||||||
|
|
|
@ -34,11 +34,10 @@ public:
|
||||||
gpu::TexturePointer getHalfNormalTexture();
|
gpu::TexturePointer getHalfNormalTexture();
|
||||||
|
|
||||||
// Update the depth buffer which will drive the allocation of all the other resources according to its size.
|
// Update the depth buffer which will drive the allocation of all the other resources according to its size.
|
||||||
void updatePrimaryDepth(const gpu::TexturePointer& depthBuffer);
|
void update(const gpu::TexturePointer& depthBuffer);
|
||||||
gpu::TexturePointer getPrimaryDepthTexture();
|
|
||||||
const glm::ivec2& getDepthFrameSize() const { return _frameSize; }
|
const glm::ivec2& getDepthFrameSize() const { return _frameSize; }
|
||||||
|
|
||||||
void setResolutionLevel(int level);
|
void setResolutionLevel(int level) { _resolutionLevel = std::max(0, level); }
|
||||||
int getResolutionLevel() const { return _resolutionLevel; }
|
int getResolutionLevel() const { return _resolutionLevel; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -107,7 +106,7 @@ public:
|
||||||
gpu::TexturePointer getBlurringTexture();
|
gpu::TexturePointer getBlurringTexture();
|
||||||
|
|
||||||
// Update the source framebuffer size which will drive the allocation of all the other resources.
|
// Update the source framebuffer size which will drive the allocation of all the other resources.
|
||||||
void updateLinearDepth(const gpu::TexturePointer& linearDepthBuffer);
|
void update(const gpu::TexturePointer& linearDepthBuffer);
|
||||||
gpu::TexturePointer getLinearDepthTexture();
|
gpu::TexturePointer getLinearDepthTexture();
|
||||||
const glm::ivec2& getSourceFrameSize() const { return _frameSize; }
|
const glm::ivec2& getSourceFrameSize() const { return _frameSize; }
|
||||||
|
|
||||||
|
|
|
@ -87,7 +87,7 @@
|
||||||
#define RENDER_UTILS_BUFFER_SSAO_PARAMS 2
|
#define RENDER_UTILS_BUFFER_SSAO_PARAMS 2
|
||||||
#define RENDER_UTILS_BUFFER_SSAO_DEBUG_PARAMS 3
|
#define RENDER_UTILS_BUFFER_SSAO_DEBUG_PARAMS 3
|
||||||
#define RENDER_UTILS_BUFFER_SSAO_BLUR_PARAMS 4
|
#define RENDER_UTILS_BUFFER_SSAO_BLUR_PARAMS 4
|
||||||
#define RENDER_UTILS_TEXTURE_SSAO_PYRAMID 1
|
#define RENDER_UTILS_TEXTURE_SSAO_DEPTH 1
|
||||||
#define RENDER_UTILS_TEXTURE_SSAO_OCCLUSION 0
|
#define RENDER_UTILS_TEXTURE_SSAO_OCCLUSION 0
|
||||||
|
|
||||||
// Temporal anti-aliasing
|
// Temporal anti-aliasing
|
||||||
|
@ -193,7 +193,7 @@ enum Texture {
|
||||||
TaaDepth = RENDER_UTILS_TEXTURE_TAA_DEPTH,
|
TaaDepth = RENDER_UTILS_TEXTURE_TAA_DEPTH,
|
||||||
TaaNext = RENDER_UTILS_TEXTURE_TAA_NEXT,
|
TaaNext = RENDER_UTILS_TEXTURE_TAA_NEXT,
|
||||||
SsaoOcclusion = RENDER_UTILS_TEXTURE_SSAO_OCCLUSION,
|
SsaoOcclusion = RENDER_UTILS_TEXTURE_SSAO_OCCLUSION,
|
||||||
SsaoPyramid = RENDER_UTILS_TEXTURE_SSAO_PYRAMID,
|
SsaoDepth = RENDER_UTILS_TEXTURE_SSAO_DEPTH,
|
||||||
HighlightSceneDepth = RENDER_UTILS_TEXTURE_HIGHLIGHT_SCENE_DEPTH,
|
HighlightSceneDepth = RENDER_UTILS_TEXTURE_HIGHLIGHT_SCENE_DEPTH,
|
||||||
HighlightDepth = RENDER_UTILS_TEXTURE_HIGHLIGHT_DEPTH,
|
HighlightDepth = RENDER_UTILS_TEXTURE_HIGHLIGHT_DEPTH,
|
||||||
SurfaceGeometryDepth = RENDER_UTILS_TEXTURE_SG_DEPTH,
|
SurfaceGeometryDepth = RENDER_UTILS_TEXTURE_SG_DEPTH,
|
||||||
|
|
|
@ -216,14 +216,14 @@ vec3 getTapLocationClampedSSAO(int sampleNumber, float spinAngle, float outerRad
|
||||||
<@func declareFetchDepthPyramidMap()@>
|
<@func declareFetchDepthPyramidMap()@>
|
||||||
|
|
||||||
// the depth pyramid texture
|
// the depth pyramid texture
|
||||||
layout(binding=RENDER_UTILS_TEXTURE_SSAO_PYRAMID) uniform sampler2D pyramidMap;
|
layout(binding=RENDER_UTILS_TEXTURE_SSAO_DEPTH) uniform sampler2D depthPyramidTex;
|
||||||
|
|
||||||
float getZEyeAtPixel(ivec2 pixel, int level) {
|
float getZEyeAtPixel(ivec2 pixel, int level) {
|
||||||
return -texelFetch(pyramidMap, pixel, level).x;
|
return -texelFetch(depthPyramidTex, pixel, level).x;
|
||||||
}
|
}
|
||||||
|
|
||||||
float getZEyeAtUV(vec2 texCoord, int level) {
|
float getZEyeAtUV(vec2 texCoord, int level) {
|
||||||
return -texture(pyramidMap, texCoord, level).x;
|
return -texture(depthPyramidTex, texCoord, level).x;
|
||||||
}
|
}
|
||||||
|
|
||||||
const int LOG_MAX_OFFSET = 1;
|
const int LOG_MAX_OFFSET = 1;
|
||||||
|
@ -243,7 +243,7 @@ vec3 fetchTapUnfiltered(ivec4 side, ivec2 ssC, vec3 tap, vec2 sideImageSize) {
|
||||||
|
|
||||||
vec3 P;
|
vec3 P;
|
||||||
P.xy = tapUV;
|
P.xy = tapUV;
|
||||||
P.z = -texture(pyramidMap, fetchUV).x;
|
P.z = -texture(depthPyramidTex, fetchUV).x;
|
||||||
|
|
||||||
return P;
|
return P;
|
||||||
}
|
}
|
||||||
|
@ -259,7 +259,7 @@ vec4 fetchTap(ivec4 side, vec2 tapPixelPos, float tapRadius, vec2 sideImageSize)
|
||||||
vec4 P;
|
vec4 P;
|
||||||
P.xy = tapUV;
|
P.xy = tapUV;
|
||||||
P.w = float(mipLevel);
|
P.w = float(mipLevel);
|
||||||
P.z = -textureLod(pyramidMap, fetchUV, P.w).x;
|
P.z = -textureLod(depthPyramidTex, fetchUV, P.w).x;
|
||||||
return P;
|
return P;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -413,9 +413,9 @@ float fetchOcclusion(vec2 coords) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const float BLUR_WEIGHT_OFFSET = 0.01;
|
const float BLUR_WEIGHT_OFFSET = 0.01;
|
||||||
const float BLUR_EDGE_SCALE = 300.0;
|
const float BLUR_EDGE_DISTANCE_SCALE = 300.0;
|
||||||
|
|
||||||
vec2 evalTapWeightedValue(ivec3 side, int r, ivec2 destPixelCoord, vec2 scaledTexCoord, vec2 fullTexCoord, float key) {
|
vec2 evalTapWeightedValue(ivec3 side, int r, ivec2 destPixelCoord, vec2 scaledTexCoord, vec2 fullTexCoord, float fragDepth, vec3 fragNormal) {
|
||||||
ivec2 tapOffset = <$axis$> * r;
|
ivec2 tapOffset = <$axis$> * r;
|
||||||
ivec2 tapPixelCoord = destPixelCoord + tapOffset;
|
ivec2 tapPixelCoord = destPixelCoord + tapOffset;
|
||||||
|
|
||||||
|
@ -432,9 +432,8 @@ vec2 evalTapWeightedValue(ivec3 side, int r, ivec2 destPixelCoord, vec2 scaledTe
|
||||||
float weight = BLUR_WEIGHT_OFFSET + getBlurCoef(abs(r));
|
float weight = BLUR_WEIGHT_OFFSET + getBlurCoef(abs(r));
|
||||||
|
|
||||||
// range domain (the "bilateral" weight). As depth difference increases, decrease weight.
|
// range domain (the "bilateral" weight). As depth difference increases, decrease weight.
|
||||||
// weight *= max(0.0, 1.0 - (getBlurEdgeSharpness() * BLUR_EDGE_SCALE) * abs(tapDepth - key));
|
float zDistance = tapDepth - fragDepth;
|
||||||
float zDistance = tapDepth - key;
|
weight *= exp(-getBlurEdgeSharpness() * (zDistance * zDistance * BLUR_EDGE_DISTANCE_SCALE));
|
||||||
weight *= exp(-(getBlurEdgeSharpness() * BLUR_EDGE_SCALE) * zDistance * zDistance);
|
|
||||||
|
|
||||||
return vec2(tapOcclusion * weight, weight);
|
return vec2(tapOcclusion * weight, weight);
|
||||||
}
|
}
|
||||||
|
@ -443,14 +442,14 @@ vec3 getBlurredOcclusion(ivec2 destPixelCoord, vec2 scaledTexCoord, vec2 fullTex
|
||||||
// Stereo side info
|
// Stereo side info
|
||||||
ivec4 side = getStereoSideInfo(destPixelCoord.x, 0);
|
ivec4 side = getStereoSideInfo(destPixelCoord.x, 0);
|
||||||
|
|
||||||
float pixelDepth = getZEyeAtUV(fullTexCoord, 0);
|
float fragDepth = getZEyeAtUV(fullTexCoord, 0);
|
||||||
vec2 weightedSums = vec2(0.0);
|
vec2 weightedSums = vec2(0.0);
|
||||||
|
|
||||||
// Accumulate weighted contributions along the bluring axis in the [-radius, radius] range
|
// Accumulate weighted contributions along the bluring axis in the [-radius, radius] range
|
||||||
int blurRadius = getBlurRadius();
|
int blurRadius = getBlurRadius();
|
||||||
// negative side first
|
// negative side first
|
||||||
for (int r = -blurRadius; r <= -1; ++r) {
|
for (int r = -blurRadius; r <= -1; ++r) {
|
||||||
weightedSums += evalTapWeightedValue(side.xyz, r, destPixelCoord, scaledTexCoord, fullTexCoord, pixelDepth);
|
weightedSums += evalTapWeightedValue(side.xyz, r, destPixelCoord, scaledTexCoord, fullTexCoord, fragDepth);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Central pixel contribution
|
// Central pixel contribution
|
||||||
|
@ -460,7 +459,7 @@ vec3 getBlurredOcclusion(ivec2 destPixelCoord, vec2 scaledTexCoord, vec2 fullTex
|
||||||
|
|
||||||
// then positive side
|
// then positive side
|
||||||
for (int r = 1; r <= blurRadius; ++r) {
|
for (int r = 1; r <= blurRadius; ++r) {
|
||||||
weightedSums += evalTapWeightedValue(side.xyz, r, destPixelCoord, scaledTexCoord, fullTexCoord, pixelDepth);
|
weightedSums += evalTapWeightedValue(side.xyz, r, destPixelCoord, scaledTexCoord, fullTexCoord, fragDepth);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Final normalization
|
// Final normalization
|
||||||
|
|
|
@ -26,9 +26,7 @@ layout(location=1) out vec4 outNormal;
|
||||||
void main(void) {
|
void main(void) {
|
||||||
// Gather 2 by 2 quads from texture and downsample
|
// Gather 2 by 2 quads from texture and downsample
|
||||||
|
|
||||||
// Try different filters for Z
|
|
||||||
vec4 Zeyes = textureGather(linearDepthMap, varTexCoord0, 0);
|
vec4 Zeyes = textureGather(linearDepthMap, varTexCoord0, 0);
|
||||||
// float Zeye = texture(linearDepthMap, varTexCoord0).x;
|
|
||||||
|
|
||||||
vec4 rawNormalsX = textureGather(normalMap, varTexCoord0, 0);
|
vec4 rawNormalsX = textureGather(normalMap, varTexCoord0, 0);
|
||||||
vec4 rawNormalsY = textureGather(normalMap, varTexCoord0, 1);
|
vec4 rawNormalsY = textureGather(normalMap, varTexCoord0, 1);
|
||||||
|
|
Loading…
Reference in a new issue