[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