From a0655ed487a838a5d2c1d39e62db9a39a4100715 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Tue, 9 Jan 2018 19:01:24 +0100 Subject: Eevee: Fix AO in planar reflections. --- .../engines/eevee/shaders/effect_gtao_frag.glsl | 28 ++++++++++++++-------- 1 file changed, 18 insertions(+), 10 deletions(-) (limited to 'source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl') diff --git a/source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl index 1c63051c65b..730abcc89cf 100644 --- a/source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl @@ -12,8 +12,8 @@ uniform sampler2D normalBuffer; void main() { - vec4 texel_size = 1.0 / vec2(textureSize(depthBuffer, 0)).xyxy; - vec2 uvs = saturate(gl_FragCoord.xy * texel_size.xy); + vec2 texel_size = 1.0 / vec2(textureSize(depthBuffer, 0)).xy; + vec2 uvs = saturate(gl_FragCoord.xy * texel_size); float depth = textureLod(depthBuffer, uvs, 0.0).r; @@ -23,13 +23,9 @@ void main() vec3 bent_normal; float visibility; -#if 1 + gtao_deferred(normal, viewPosition, depth, visibility, bent_normal); -#else - vec2 rand = vec2((1.0 / 4.0) * float((int(gl_FragCoord.y) & 0x1) * 2 + (int(gl_FragCoord.x) & 0x1)), 0.5); - rand = fract(rand.x + texture(utilTex, vec3(floor(gl_FragCoord.xy * 0.5) / LUT_SIZE, 2.0)).rg); - gtao(normal, viewPosition, rand, visibility, bent_normal); -#endif + denoise_ao(normal, depth, visibility, bent_normal); FragColor = vec4(visibility); @@ -38,13 +34,25 @@ void main() #else uniform float sampleNbr; +#ifdef LAYERED_DEPTH +uniform sampler2DArray depthBufferLayered; +uniform int layer; +# define gtao_depthBuffer depthBufferLayered +# define gtao_textureLod(a, b, c) textureLod(a, vec3(b, layer), c) + +#else +# define gtao_depthBuffer depthBuffer +# define gtao_textureLod(a, b, c) textureLod(a, b, c) + +#endif + void main() { ivec2 hr_co = ivec2(gl_FragCoord.xy); ivec2 fs_co = get_fs_co(hr_co); - vec2 uvs = saturate((vec2(fs_co) + 0.5) / vec2(textureSize(depthBuffer, 0))); - float depth = textureLod(depthBuffer, uvs, 0.0).r; + vec2 uvs = saturate((vec2(fs_co) + 0.5) / vec2(textureSize(gtao_depthBuffer, 0).xy)); + float depth = gtao_textureLod(gtao_depthBuffer, uvs, 0.0).r; if (depth == 1.0) { /* Do not trace for background */ -- cgit v1.2.3