[Bf-blender-cvs] [0c42cd80278] temp-greasepencil-vfx: WIP: Add new blur parameter for Rim FX

Antonio Vazquez noreply at git.blender.org
Tue Jul 3 10:09:41 CEST 2018


Commit: 0c42cd80278af32c9b810c8143ab9423d3a66bc6
Author: Antonio Vazquez
Date:   Tue Jul 3 09:58:29 2018 +0200
Branches: temp-greasepencil-vfx
https://developer.blender.org/rB0c42cd80278af32c9b810c8143ab9423d3a66bc6

WIP: Add new blur parameter for Rim FX

Still is not working, this commit only put the pieces in place.

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

M	release/scripts/startup/bl_ui/properties_data_shaderfx.py
M	source/blender/draw/engines/gpencil/gpencil_shader_fx.c
M	source/blender/draw/engines/gpencil/shaders/fx/gpencil_fx_rim_frag.glsl
M	source/blender/makesdna/DNA_shader_fx_types.h
M	source/blender/makesrna/intern/rna_shader_fx.c
M	source/blender/shader_fx/intern/FX_shader_rim.c

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

diff --git a/release/scripts/startup/bl_ui/properties_data_shaderfx.py b/release/scripts/startup/bl_ui/properties_data_shaderfx.py
index 1cb940d39cc..abc70c3c92c 100644
--- a/release/scripts/startup/bl_ui/properties_data_shaderfx.py
+++ b/release/scripts/startup/bl_ui/properties_data_shaderfx.py
@@ -102,6 +102,8 @@ class DATA_PT_shader_fx(ShaderFxButtonsPanel, Panel):
         layout.prop(fx, "rim_color")
         layout.prop(fx, "mask_color")
         layout.prop(fx, "mode")
+        if fx.mode != 'NORMAL':
+            layout.prop(fx, "blur")
 
     def FX_SWIRL(self, layout, fx):
         layout.prop(fx, "object", text="Object")
diff --git a/source/blender/draw/engines/gpencil/gpencil_shader_fx.c b/source/blender/draw/engines/gpencil/gpencil_shader_fx.c
index 29007b1585b..056b4cca720 100644
--- a/source/blender/draw/engines/gpencil/gpencil_shader_fx.c
+++ b/source/blender/draw/engines/gpencil/gpencil_shader_fx.c
@@ -384,6 +384,7 @@ static void DRW_gpencil_fx_rim(
 	DRW_shgroup_uniform_vec4(fx_shgrp, "rim_color", &fxd->rim_rgba[0], 1);
 	DRW_shgroup_uniform_vec4(fx_shgrp, "mask_color", &fxd->mask_rgba[0], 1);
 	DRW_shgroup_uniform_int(fx_shgrp, "mode", &fxd->mode, 1);
+	DRW_shgroup_uniform_int(fx_shgrp, "blur", &fxd->blur, 1);
 
 	DRW_shgroup_uniform_vec3(fx_shgrp, "loc", &ob->loc[0], 1);
 	DRW_shgroup_uniform_float(fx_shgrp, "pixsize", stl->storage->pixsize, 1);
diff --git a/source/blender/draw/engines/gpencil/shaders/fx/gpencil_fx_rim_frag.glsl b/source/blender/draw/engines/gpencil/shaders/fx/gpencil_fx_rim_frag.glsl
index 24b0941624f..378c1386931 100644
--- a/source/blender/draw/engines/gpencil/shaders/fx/gpencil_fx_rim_frag.glsl
+++ b/source/blender/draw/engines/gpencil/shaders/fx/gpencil_fx_rim_frag.glsl
@@ -8,6 +8,7 @@ uniform int offset[2];
 uniform vec4 rim_color;
 uniform vec4 mask_color;
 uniform int mode;
+uniform int blur;
 
 uniform vec3 loc;
 uniform float pixsize;   /* rv3d->pixsize */
@@ -26,6 +27,25 @@ out vec4 FragColor;
 float defaultpixsize = pixsize * pixelsize * (1000.0 / pixfactor);
 vec2 noffset = vec2(offset[0], offset[1]);
 
+vec4 get_blur(ivec2 uv, int bx, int by)
+{
+	/* apply blurring, using a 9-tap filter with predefined gaussian weights */
+	vec4 outcolor = vec4(0.0);
+    outcolor += texelFetch(strokeColor, ivec2(uv.x - 1.0 * bx, uv.y + 1.0 * by), 0) * 0.0947416;
+    outcolor += texelFetch(strokeColor, ivec2(uv.x - 0.0 * bx, uv.y + 1.0 * by), 0) * 0.118318;
+    outcolor += texelFetch(strokeColor, ivec2(uv.x + 1.0 * bx, uv.y + 1.0 * by), 0) * 0.0947416;
+    outcolor += texelFetch(strokeColor, ivec2(uv.x - 1.0 * bx, uv.y + 0.0 * by), 0) * 0.118318;
+
+    outcolor += texelFetch(strokeColor, ivec2(uv.x, uv.y), 0) * 0.147761;
+
+    outcolor += texelFetch(strokeColor, ivec2(uv.x + 1.0 * bx, uv.y + 0.0 * by), 0) * 0.118318;
+    outcolor += texelFetch(strokeColor, ivec2(uv.x - 1.0 * bx, uv.y - 1.0 * by), 0) * 0.0947416;
+    outcolor += texelFetch(strokeColor, ivec2(uv.x + 0.0 * bx, uv.y - 1.0 * by), 0) * 0.118318;
+    outcolor += texelFetch(strokeColor, ivec2(uv.x + 1.0 * bx, uv.y - 1.0 * by), 0) * 0.0947416;
+	
+	return outcolor;
+}
+
 float overlay_color(float a, float b)
 {
 	float rtn; 
@@ -86,7 +106,6 @@ void main()
 	dx = dx * -1.0;
 	dy = dy * -1.0;
 	
-	vec2 coord = vec2(uv.x + dx, uv.y + dy);
 	float stroke_depth = texelFetch(strokeDepth, ivec2(uv.xy), 0).r;
 	
 	vec4 src_pixel= texelFetch(strokeColor, ivec2(uv.xy), 0);
diff --git a/source/blender/makesdna/DNA_shader_fx_types.h b/source/blender/makesdna/DNA_shader_fx_types.h
index 0587c010c13..47bdc5d04de 100644
--- a/source/blender/makesdna/DNA_shader_fx_types.h
+++ b/source/blender/makesdna/DNA_shader_fx_types.h
@@ -151,6 +151,8 @@ typedef struct RimShaderFxData {
 	float rim_rgba[4];
 	float mask_rgba[4];
 	int   mode;
+	int   blur;
+	char pad[4];
 	ShaderFxData_runtime runtime;
 } RimShaderFxData;
 
diff --git a/source/blender/makesrna/intern/rna_shader_fx.c b/source/blender/makesrna/intern/rna_shader_fx.c
index 9aac05af005..f441314e526 100644
--- a/source/blender/makesrna/intern/rna_shader_fx.c
+++ b/source/blender/makesrna/intern/rna_shader_fx.c
@@ -366,6 +366,12 @@ static void rna_def_shader_fx_rim(BlenderRNA *brna)
 	RNA_def_property_enum_items(prop, rna_enum_shaderfx_rim_modes_items);
 	RNA_def_property_ui_text(prop, "Mode", "Blend mode");
 	RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update");
+
+	prop = RNA_def_property(srna, "blur", PROP_INT, PROP_PIXEL);
+	RNA_def_property_int_sdna(prop, NULL, "blur");
+	RNA_def_property_range(prop, 0, INT_MAX);
+	RNA_def_property_ui_text(prop, "Blur", "Number of pixels for bluring rim (set to 0 to disable)");
+	RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update");
 }
 
 static void rna_def_shader_fx_swirl(BlenderRNA *brna)
diff --git a/source/blender/shader_fx/intern/FX_shader_rim.c b/source/blender/shader_fx/intern/FX_shader_rim.c
index 0505fde509f..5e5f21b8496 100644
--- a/source/blender/shader_fx/intern/FX_shader_rim.c
+++ b/source/blender/shader_fx/intern/FX_shader_rim.c
@@ -43,6 +43,7 @@ static void initData(ShaderFxData *fx)
 	ARRAY_SET_ITEMS(gpfx->rim_rgba, 1.0f, 1.0f, 0.5f, 0.9f);
 	ARRAY_SET_ITEMS(gpfx->mask_rgba, 0.0f, 0.0f, 0.0f, 1.0f);
 	gpfx->mode = eShaderFxRimMode_Multiply;
+	gpfx->blur = 0;
 }
 
 static void copyData(const ShaderFxData *md, ShaderFxData *target)



More information about the Bf-blender-cvs mailing list