Commit: 2ee4d0de29991ba8dae45a6143bde280f8e8afb9
Author: Antonio Vazquez
Date:   Wed Jul 4 11:19:50 2018 +0200
Branches: temp-greasepencil-vfx
https://developer.blender.org/rB2ee4d0de29991ba8dae45a6143bde280f8e8afb9

WIP: Blur only border of RIM

===================================================================

M       source/blender/draw/engines/gpencil/gpencil_shader_fx.c
M       
source/blender/draw/engines/gpencil/shaders/fx/gpencil_fx_rim_prepare_frag.glsl

===================================================================

diff --git a/source/blender/draw/engines/gpencil/gpencil_shader_fx.c 
b/source/blender/draw/engines/gpencil/gpencil_shader_fx.c
index 46f39a93ff4..c27c573c777 100644
--- a/source/blender/draw/engines/gpencil/gpencil_shader_fx.c
+++ b/source/blender/draw/engines/gpencil/gpencil_shader_fx.c
@@ -388,6 +388,7 @@ static void DRW_gpencil_fx_rim(
        DRW_shgroup_uniform_vec3(fx_shgrp, "rim_color", &fxd->rim_rgb[0], 1);
        DRW_shgroup_uniform_vec3(fx_shgrp, "mask_color", &fxd->mask_rgb[0], 1);
        DRW_shgroup_uniform_int(fx_shgrp, "mode", &fxd->mode, 1);
+       DRW_shgroup_uniform_int(fx_shgrp, "blur", &fxd->blur[0], 2);
 
        DRW_shgroup_uniform_vec3(fx_shgrp, "loc", &ob->loc[0], 1);
        DRW_shgroup_uniform_float(fx_shgrp, "pixsize", stl->storage->pixsize, 
1);
@@ -761,7 +762,6 @@ static void draw_gpencil_rim_passes(struct GPENCIL_e_data 
*e_data,
        }
 }
 
-
 /* apply all object fx effects */
 void DRW_gpencil_fx_draw(struct GPENCIL_e_data *e_data,
        struct GPENCIL_Data *vedata, struct tGPencilObjectCache *cache)
diff --git 
a/source/blender/draw/engines/gpencil/shaders/fx/gpencil_fx_rim_prepare_frag.glsl
 
b/source/blender/draw/engines/gpencil/shaders/fx/gpencil_fx_rim_prepare_frag.glsl
index cc4510236a4..8b8689f27c6 100644
--- 
a/source/blender/draw/engines/gpencil/shaders/fx/gpencil_fx_rim_prepare_frag.glsl
+++ 
b/source/blender/draw/engines/gpencil/shaders/fx/gpencil_fx_rim_prepare_frag.glsl
@@ -11,6 +11,7 @@ uniform int offset[2];
 uniform vec3 rim_color;
 uniform vec3 mask_color;
 uniform int mode;
+uniform int blur[2];
 
 uniform vec3 loc;
 uniform float pixsize;   /* rv3d->pixsize */
@@ -19,6 +20,7 @@ uniform float pixfactor;
 
 float defaultpixsize = pixsize * pixelsize * (1000.0 / pixfactor);
 vec2 noffset = vec2(offset[0], offset[1]);
+vec2 nblur = vec2(blur[0], blur[1]);
 
 #define MODE_NORMAL   0
 #define MODE_OVERLAY  1
@@ -86,15 +88,17 @@ void main()
        
        float dx = (ProjectionMatrix[3][3] == 0.0) ? (noffset[0] / (nloc.z * 
defaultpixsize)) : (noffset[0] / defaultpixsize);
        float dy = (ProjectionMatrix[3][3] == 0.0) ? (noffset[1] / (nloc.z * 
defaultpixsize)) : (noffset[1] / defaultpixsize);
-       
-       /* invert offset to make more intuitive for user */
-       dx = dx * -1.0;
-       dy = dy * -1.0;
+
+       float bx = (ProjectionMatrix[3][3] == 0.0) ? (nblur[0] / (nloc.z * 
defaultpixsize)) : (nblur[0] / defaultpixsize);
+       float by = (ProjectionMatrix[3][3] == 0.0) ? (nblur[1] / (nloc.z * 
defaultpixsize)) : (nblur[1] / defaultpixsize);
        
        float stroke_depth = texelFetch(strokeDepth, ivec2(uv.xy), 0).r;
        
        vec4 src_pixel= texelFetch(strokeColor, ivec2(uv.xy), 0);
-       vec4 offset_pixel= texelFetch(strokeColor, ivec2(uv.x + dx, uv.y + dy), 
0);
+       vec4 offset_pixel= texelFetch(strokeColor, ivec2(uv.x - dx, uv.y - dy), 
0);
+       vec4 blur_pixel = texelFetch(strokeColor, ivec2(uv.x - dx - bx, uv.y - 
dy - by), 0);
+       
+       vec4 blur_pixel_b = texelFetch(strokeColor, ivec2(uv.x - dx + bx + bx, 
uv.y - dy + by + by), 0);
        vec4 outcolor;
        /* is transparent */ 
        if (src_pixel.a == 0.0f) {
@@ -109,11 +113,13 @@ void main()
                        outcolor = src_pixel;
                }
                else {
-                       outcolor = get_blend_color(mode, src_pixel, 
vec4(rim_color.rgb, 1));
                        mask = vec4(1, 0, 0, 1);
-               }
+                       outcolor = get_blend_color(mode, src_pixel, 
vec4(rim_color.rgb, 1));
+                       if ((blur_pixel_b.a > 0) || (blur_pixel.a == 0)) {
+                               mask = vec4(0, 0, 0, 0);
+                       }
+               }       
        }
-       
 
        gl_FragDepth = stroke_depth;
        FragColor = outcolor;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to