[Bf-blender-cvs] [2ee4d0de299] temp-greasepencil-vfx: WIP: Blur only border of RIM
Antonio Vazquez
noreply at git.blender.org
Wed Jul 4 12:01:43 CEST 2018
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;
More information about the Bf-blender-cvs
mailing list