[Bf-blender-cvs] [2ba41640727] greasepencil-object: GPencil: More changes to gradient factors

Antonioya noreply at git.blender.org
Tue Mar 19 14:07:59 CET 2019


Commit: 2ba4164072708d3dfc34eb8219e6d61438ad18ee
Author: Antonioya
Date:   Tue Mar 19 12:27:58 2019 +0100
Branches: greasepencil-object
https://developer.blender.org/rB2ba4164072708d3dfc34eb8219e6d61438ad18ee

GPencil: More changes to gradient factors

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

M	source/blender/draw/engines/gpencil/gpencil_draw_utils.c
M	source/blender/draw/engines/gpencil/shaders/gpencil_point_frag.glsl
M	source/blender/draw/engines/gpencil/shaders/gpencil_stroke_frag.glsl
M	source/blender/makesrna/intern/rna_brush.c
M	source/blender/makesrna/intern/rna_gpencil.c

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

diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_utils.c b/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
index 2ca3bd4ac74..e380c645a2e 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
@@ -535,7 +535,6 @@ DRWShadingGroup *DRW_gpencil_shgroup_stroke_create(
 		stl->shgroups[id].gradient_f = gps->gradient_f;
 		copy_v2_v2(stl->shgroups[id].gradient_s, gps->gradient_s);
 		DRW_shgroup_uniform_float(grp, "gradient_f", &stl->shgroups[id].gradient_f, 1);
-		DRW_shgroup_uniform_vec2(grp, "gradient_s", stl->shgroups[id].gradient_s, 1);
 
 		/* viewport x-ray */
 		stl->shgroups[id].is_xray = (ob->dt == OB_WIRE) ? 1 : stl->storage->is_xray;
@@ -571,7 +570,6 @@ DRWShadingGroup *DRW_gpencil_shgroup_stroke_create(
 		DRW_shgroup_uniform_int(grp, "caps_mode", &zero[0], 2);
 
 		DRW_shgroup_uniform_float(grp, "gradient_f", &stl->storage->gradient_f, 1);
-		DRW_shgroup_uniform_vec2(grp, "gradient_s", stl->storage->gradient_s, 1);
 
 		/* viewport x-ray */
 		DRW_shgroup_uniform_int(grp, "viewport_xray", &stl->storage->is_xray, 1);
diff --git a/source/blender/draw/engines/gpencil/shaders/gpencil_point_frag.glsl b/source/blender/draw/engines/gpencil/shaders/gpencil_point_frag.glsl
index 7e222311295..833329a11ce 100644
--- a/source/blender/draw/engines/gpencil/shaders/gpencil_point_frag.glsl
+++ b/source/blender/draw/engines/gpencil/shaders/gpencil_point_frag.glsl
@@ -20,15 +20,25 @@ out vec4 fragColor;
 #define GPENCIL_COLOR_TEXTURE 1
 #define GPENCIL_COLOR_PATTERN 2
 
+/* Function to check the point inside ellipse */
+float checkpoint(vec2 pt, vec2 radius) 
+{ 
+    float p = (pow(pt.x, 2) / pow(radius.x, 2)) + (pow(pt.y, 2) / pow(radius.y, 2)); 
+  
+    return p; 
+} 
+
 void main()
 {
 	vec2 centered = mTexCoord - vec2(0.5);
 	float dist_squared = dot(centered, centered);
 	const float rad_squared = 0.25;
+	float ellip = checkpoint(centered, vec2(gradient_s / 2.0));
 
-	 /* Round point with jaggy edges. */
-	if ((mode != GPENCIL_MODE_BOX) && (dist_squared > rad_squared)) {
-		discard;
+	if (mode != GPENCIL_MODE_BOX) {
+		if (ellip > 1.0) {
+			discard;
+		}
 	}
 
 	vec4 tmp_color = texture2D(myTexture, mTexCoord);
@@ -50,6 +60,15 @@ void main()
 		/* mult both alpha factor to use strength factor with color alpha limit */
 		fragColor.a = min(text_color.a * mColor.a, mColor.a);
 	}
+	
+	if (gradient_f < 1.0) {
+		float in_rad = gradient_f / 4.0;
+		float ex_rad = rad_squared - in_rad;
+
+		float alpha = clamp((dist_squared - in_rad) / ex_rad, 0.0, 1.0);
+		fragColor.a = smoothstep(fragColor.a, 0.0, ellip);
+	}
+	
 	if(fragColor.a < 0.0035)
 		discard;
 }
diff --git a/source/blender/draw/engines/gpencil/shaders/gpencil_stroke_frag.glsl b/source/blender/draw/engines/gpencil/shaders/gpencil_stroke_frag.glsl
index 32d53fa9992..1825346ac68 100644
--- a/source/blender/draw/engines/gpencil/shaders/gpencil_stroke_frag.glsl
+++ b/source/blender/draw/engines/gpencil/shaders/gpencil_stroke_frag.glsl
@@ -2,7 +2,6 @@ uniform int color_type;
 uniform sampler2D myTexture;
 
 uniform float gradient_f;
-uniform vec2 gradient_s;
 
 in vec4 mColor;
 in vec2 mTexCoord;
@@ -21,6 +20,7 @@ out vec4 fragColor;
 
 void main()
 {
+	
 	vec4 tColor = vec4(mColor);
 	/* if uvfac[1]  == 1, then encap */
 	if (uvfac[1] == ENDCAP) {
@@ -58,8 +58,11 @@ void main()
 	}
 
 	/* gradient */
-	if (mTexCoord.y > gradient_f) {
-		fragColor.a = gradient_f;
+	if (gradient_f < 1.0) {
+		float d = abs(mTexCoord.y - 0.5)  * (1.1 - gradient_f);
+		float alpha = 1.0 - clamp((fragColor.a - (d * 2.0)), 0.03, 1.0);
+		fragColor.a = smoothstep(fragColor.a, 0.0, alpha);
+		
 	}
 
 	if(fragColor.a < 0.0035)
diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c
index 6bfa8f84e02..7798140459d 100644
--- a/source/blender/makesrna/intern/rna_brush.c
+++ b/source/blender/makesrna/intern/rna_brush.c
@@ -1189,7 +1189,7 @@ static void rna_def_gpencil_options(BlenderRNA *brna)
 	/* gradient control along y */
 	prop = RNA_def_property(srna, "gradient_factor", PROP_FLOAT, PROP_FACTOR);
 	RNA_def_property_float_sdna(prop, NULL, "gradient_f");
-	RNA_def_property_range(prop, 0.01f, 1.0f);
+	RNA_def_property_range(prop, 0.001f, 1.0f);
 	RNA_def_property_float_default(prop, 1.0f);
 	RNA_def_property_ui_text(
 		prop, "Gradient Factor",
diff --git a/source/blender/makesrna/intern/rna_gpencil.c b/source/blender/makesrna/intern/rna_gpencil.c
index 7f042fc5c8a..13c9becf7f4 100644
--- a/source/blender/makesrna/intern/rna_gpencil.c
+++ b/source/blender/makesrna/intern/rna_gpencil.c
@@ -1001,7 +1001,7 @@ static void rna_def_gpencil_stroke(BlenderRNA *brna)
 	/* gradient control along y */
 	prop = RNA_def_property(srna, "gradient_factor", PROP_FLOAT, PROP_FACTOR);
 	RNA_def_property_float_sdna(prop, NULL, "gradient_f");
-	RNA_def_property_range(prop, 0.01f, 1.0f);
+	RNA_def_property_range(prop, 0.001f, 1.0f);
 	RNA_def_property_float_default(prop, 1.0f);
 	RNA_def_property_ui_text(prop, "Gradient Factor",
 		"Amount of gradient along section of stroke");



More information about the Bf-blender-cvs mailing list