diff options
author | Antonioya <blendergit@gmail.com> | 2018-10-02 12:09:17 +0300 |
---|---|---|
committer | Antonioya <blendergit@gmail.com> | 2018-10-02 12:09:44 +0300 |
commit | dc689fe407ace5122a59d48726695aa8aa74a142 (patch) | |
tree | 4a3364f9eb3435eb1efffd98782da30732fa41f3 /source | |
parent | c03ceb0f61614148cc935aac251bb5b0476caa67 (diff) |
GP: Redo blur z-depth fix
The problem with previous fix was that only the original pixels were blurred, but the surrounding pixels no.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/draw/engines/gpencil/shaders/fx/gpencil_fx_blur_frag.glsl | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/source/blender/draw/engines/gpencil/shaders/fx/gpencil_fx_blur_frag.glsl b/source/blender/draw/engines/gpencil/shaders/fx/gpencil_fx_blur_frag.glsl index a96eaf05972..c2bf1dbc1a7 100644 --- a/source/blender/draw/engines/gpencil/shaders/fx/gpencil_fx_blur_frag.glsl +++ b/source/blender/draw/engines/gpencil/shaders/fx/gpencil_fx_blur_frag.glsl @@ -25,8 +25,21 @@ void main() float dy = (ProjectionMatrix[3][3] == 0.0) ? (noffset[1] / (nloc.z * defaultpixsize)) : (noffset[1] / defaultpixsize); /* apply blurring, using a 9-tap filter with predefined gaussian weights */ - /* depth */ - gl_FragDepth = texelFetch(strokeDepth, ivec2(uv.x, uv.y), 0).r; + /* depth (get the minimum value of the surrounding pixels) */ + float outdepth = 0; + outdepth = texelFetch(strokeDepth, ivec2(uv.x - 1.0 * dx, uv.y + 1.0 * dy), 0).r; + outdepth = min(outdepth, texelFetch(strokeDepth, ivec2(uv.x - 0.0 * dx, uv.y + 1.0 * dy), 0).r); + outdepth = min(outdepth, texelFetch(strokeDepth, ivec2(uv.x + 1.0 * dx, uv.y + 1.0 * dy), 0).r); + outdepth = min(outdepth, texelFetch(strokeDepth, ivec2(uv.x - 1.0 * dx, uv.y + 0.0 * dy), 0).r); + + outdepth = min(outdepth, texelFetch(strokeDepth, ivec2(uv.x, uv.y), 0).r); + + outdepth = min(outdepth, texelFetch(strokeDepth, ivec2(uv.x + 1.0 * dx, uv.y + 0.0 * dy), 0).r); + outdepth = min(outdepth, texelFetch(strokeDepth, ivec2(uv.x - 1.0 * dx, uv.y - 1.0 * dy), 0).r); + outdepth = min(outdepth, texelFetch(strokeDepth, ivec2(uv.x + 0.0 * dx, uv.y - 1.0 * dy), 0).r); + outdepth = min(outdepth, texelFetch(strokeDepth, ivec2(uv.x + 1.0 * dx, uv.y - 1.0 * dy), 0).r); + + gl_FragDepth = outdepth; /* color */ vec4 outcolor = vec4(0.0); |