[Bf-blender-cvs] [b28eb5e339b] soc-2019-npr: Gpencil: Fading in duplicate modifier.
YimingWu
noreply at git.blender.org
Fri Jul 5 08:33:43 CEST 2019
Commit: b28eb5e339b6c080e7acc5aee7a6f968c1306abe
Author: YimingWu
Date: Fri Jul 5 14:33:22 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rBb28eb5e339b6c080e7acc5aee7a6f968c1306abe
Gpencil: Fading in duplicate modifier.
===================================================================
M source/blender/draw/engines/lanpr/lanpr_ops.c
M source/blender/draw/engines/lanpr/shaders/lanpr_dpix_project_clip_frag.glsl
M source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c
M source/blender/makesdna/DNA_gpencil_modifier_types.h
===================================================================
diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c b/source/blender/draw/engines/lanpr/lanpr_ops.c
index d13109c5a95..8c24a86a611 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -4699,7 +4699,8 @@ void lanpr_clear_gp_lanpr_flags(Depsgraph *dg, int frame)
DEG_OBJECT_ITER_END;
}
-void lanpr_update_gp_strokes_recursive(Depsgraph *dg, struct Collection *col, int frame, Object* source_only, Object* target_only)
+void lanpr_update_gp_strokes_recursive(
+ Depsgraph *dg, struct Collection *col, int frame, Object *source_only, Object *target_only)
{
Object *ob;
Object *gpobj;
@@ -4710,7 +4711,7 @@ void lanpr_update_gp_strokes_recursive(Depsgraph *dg, struct Collection *col, in
CollectionObject *co;
CollectionChild *cc;
- for (co = col->gobject.first; co||source_only; co = co->next) {
+ for (co = col->gobject.first; co || source_only; co = co->next) {
ob = source_only ? source_only : co->ob;
for (md = ob->modifiers.first; md; md = md->next) {
if (md->type == eModifierType_FeatureLine) {
@@ -4718,7 +4719,7 @@ void lanpr_update_gp_strokes_recursive(Depsgraph *dg, struct Collection *col, in
if (flmd->target && flmd->target->type == OB_GPENCIL) {
gpobj = flmd->target;
- if(target_only && target_only!=gpobj){
+ if (target_only && target_only != gpobj) {
continue;
}
@@ -4754,7 +4755,7 @@ void lanpr_update_gp_strokes_recursive(Depsgraph *dg, struct Collection *col, in
}
}
}
- if(source_only){
+ if (source_only) {
return;
}
}
@@ -4762,7 +4763,8 @@ void lanpr_update_gp_strokes_recursive(Depsgraph *dg, struct Collection *col, in
lanpr_update_gp_strokes_recursive(dg, cc->collection, frame, source_only, target_only);
}
}
-void lanpr_update_gp_strokes_collection(Depsgraph *dg, struct Collection *col, int frame, int this_only, Object* target_only)
+void lanpr_update_gp_strokes_collection(
+ Depsgraph *dg, struct Collection *col, int frame, int this_only, Object *target_only)
{
Object *ob;
Object *gpobj;
@@ -4774,7 +4776,7 @@ void lanpr_update_gp_strokes_collection(Depsgraph *dg, struct Collection *col, i
CollectionChild *cc;
/* depth first */
- if(!this_only){
+ if (!this_only) {
for (cc = col->children.first; cc; cc = cc->next) {
lanpr_update_gp_strokes_collection(dg, cc->collection, frame, this_only, target_only);
}
@@ -4786,7 +4788,7 @@ void lanpr_update_gp_strokes_collection(Depsgraph *dg, struct Collection *col, i
gpobj = col->lanpr.target;
- if(target_only && target_only!=gpobj){
+ if (target_only && target_only != gpobj) {
return;
}
@@ -4873,7 +4875,7 @@ int lanpr_update_gp_target_exec(struct bContext *C, struct wmOperator *op)
Scene *scene = CTX_data_scene(C);
Depsgraph *dg = CTX_data_depsgraph(C);
SceneLANPR *lanpr = &scene->lanpr;
- Object* gpo = CTX_data_active_object(C);
+ Object *gpo = CTX_data_active_object(C);
int frame = scene->r.cfra;
@@ -4899,7 +4901,7 @@ int lanpr_update_gp_source_exec(struct bContext *C, struct wmOperator *op)
Scene *scene = CTX_data_scene(C);
Depsgraph *dg = CTX_data_depsgraph(C);
SceneLANPR *lanpr = &scene->lanpr;
- Object* source_obj = CTX_data_active_object(C);
+ Object *source_obj = CTX_data_active_object(C);
int frame = scene->r.cfra;
@@ -4921,19 +4923,22 @@ int lanpr_update_gp_source_exec(struct bContext *C, struct wmOperator *op)
return OPERATOR_FINISHED;
}
-static bool lanpr_active_is_gpencil_object(bContext *C){
- Object* o = CTX_data_active_object(C);
+static bool lanpr_active_is_gpencil_object(bContext *C)
+{
+ Object *o = CTX_data_active_object(C);
return o->type == OB_GPENCIL;
}
-static bool lanpr_active_is_source_object(bContext *C){
- Object* o = CTX_data_active_object(C);
- if(o->type!=OB_MESH){
+static bool lanpr_active_is_source_object(bContext *C)
+{
+ Object *o = CTX_data_active_object(C);
+ if (o->type != OB_MESH) {
return false;
- }else{
- ModifierData* md;
- for(md = o->modifiers.first;md;md=md->next){
- if(md->type == eModifierType_FeatureLine){
+ }
+ else {
+ ModifierData *md;
+ for (md = o->modifiers.first; md; md = md->next) {
+ if (md->type == eModifierType_FeatureLine) {
return true;
}
}
diff --git a/source/blender/draw/engines/lanpr/shaders/lanpr_dpix_project_clip_frag.glsl b/source/blender/draw/engines/lanpr/shaders/lanpr_dpix_project_clip_frag.glsl
index 78f625c4a92..7c29d65402b 100644
--- a/source/blender/draw/engines/lanpr/shaders/lanpr_dpix_project_clip_frag.glsl
+++ b/source/blender/draw/engines/lanpr/shaders/lanpr_dpix_project_clip_frag.glsl
@@ -336,8 +336,10 @@ int testProfileEdge(ivec2 texcoord, vec3 world_position)
bool contour = (dot0 >= 0.0 && dot1 <= 0.0) || (dot0 <= 0.0 && dot1 >= 0.0);
- is_crease = (((enable_contour>0 && !contour)||enable_contour==0) && ((dot2 < crease_threshold) || (dot2 < crease_fade_threshold))) ? 1 :
- 0;
+ is_crease = (((enable_contour > 0 && !contour) || enable_contour == 0) &&
+ ((dot2 < crease_threshold) || (dot2 < crease_fade_threshold))) ?
+ 1 :
+ 0;
crease_strength = (is_crease > 0 && dot2 > crease_threshold) ?
((dot2 - crease_threshold) / (crease_fade_threshold - crease_threshold) /
@@ -345,12 +347,11 @@ int testProfileEdge(ivec2 texcoord, vec3 world_position)
0;
// use 0 to 0.5 to repesent the range, because 1 will represent another meaning
- if (enable_contour>0 && contour)
+ if (enable_contour > 0 && contour)
return 1;
- if (((enable_crease > 0) && (is_crease > 0)) ||
- ((enable_material > 0) && (edge_mask.r > 0)) ||
- ((enable_edge_mark > 0) && (edge_mask.g > 0)) ||
- ((enable_intersection > 0) && (edge_mask.b > 0)) || false)
+ if (((enable_crease > 0) && (is_crease > 0)) || ((enable_material > 0) && (edge_mask.r > 0)) ||
+ ((enable_edge_mark > 0) && (edge_mask.g > 0)) ||
+ ((enable_intersection > 0) && (edge_mask.b > 0)) || false)
return 2;
return 0;
}
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c
index 2ec84ea6505..dd9e0001447 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c
@@ -131,8 +131,16 @@ static void minter_v3_v3v3v3_ref(
copy_v3_v3(result, minter);
}
-static void duplicateStroke(
- bGPDframe *gpf, bGPDstroke *gps, int count, float dist, float offset, ListBase *results)
+static void duplicateStroke(bGPDframe *gpf,
+ bGPDstroke *gps,
+ int count,
+ float dist,
+ float offset,
+ ListBase *results,
+ int fading,
+ float fading_center,
+ float fading_thickness,
+ float fading_opacity)
{
int i;
bGPDstroke *new_gps;
@@ -141,6 +149,8 @@ static void duplicateStroke(
float target1[3], target2[3];
bGPDspoint *pt;
float offset_factor;
+ float thickness_factor;
+ float opacity_factor;
BKE_gpencil_stroke_normal(gps, stroke_normal);
if (len_v3(stroke_normal) < FLT_EPSILON) {
@@ -148,10 +158,12 @@ static void duplicateStroke(
normalize_v3(stroke_normal);
}
- float* t1_array = MEM_callocN(sizeof(float)*3*gps->totpoints,"duplicate_temp_result_array_1");
- float* t2_array = MEM_callocN(sizeof(float)*3*gps->totpoints,"duplicate_temp_result_array_2");
-
- pt= gps->points;
+ float *t1_array = MEM_callocN(sizeof(float) * 3 * gps->totpoints,
+ "duplicate_temp_result_array_1");
+ float *t2_array = MEM_callocN(sizeof(float) * 3 * gps->totpoints,
+ "duplicate_temp_result_array_2");
+
+ pt = gps->points;
for (int j = 0; j < gps->totpoints; j++) {
if (j == 0) {
@@ -164,11 +176,12 @@ static void duplicateStroke(
minter_v3_v3v3v3_ref(minter, &pt[j - 1].x, &pt[j].x, &pt[j + 1].x, stroke_normal);
}
mul_v3_fl(minter, dist);
- add_v3_v3v3(&t1_array[j*3], &pt[j].x, minter);
- sub_v3_v3v3(&t2_array[j*3], &pt[j].x, minter);
+ add_v3_v3v3(&t1_array[j * 3], &pt[j].x, minter);
+ sub_v3_v3v3(&t2_array[j * 3], &pt[j].x, minter);
}
- for (i = 0; i < count; i++) {
+ /* This ensures the original stroke is the last one to be processed. */
+ for (i = count - 1; i>=0; i--) {
if (i != 0) {
new_gps = BKE_gpencil_stroke_duplicate(gps);
new_gps->flag |= GP_STROKE_RECALC_GEOMETRY;
@@ -179,15 +192,32 @@ static void duplicateStroke(
}
pt = new_gps->points;
-
- if(count == 1){
+
+ if (count == 1) {
offset_factor = 0;
- }else{
- offset_factor = offset_factor = (float)i / (float)(count-1);
+ }
+ else {
+ offset_factor = (float)i / (float)(count - 1);
+ }
+
+ if (fading) {
+ thickness_factor = (offset_factor > fading_center) ?
+ (interpf(1 - fading_thickness, 1.0f, offset_factor - fading_center)) :
+ (interpf(1.0f, 1 - fading_thickness, offset_factor - fading_center + 1));
+ opacity_factor = (offset_factor > fading_center) ?
+ (interpf(1 - fading_opacity, 1.0f, offset_factor - fading_center)):
+ (interpf(1.0f, 1 - fading_opacity, offset_factor - fading_center + 1));
}
for (int j = 0; j < new_gps->totpoints; j++) {
- interp_v3_v3v3(&pt[j].x, &t1_array[j*3], &t2_array[j*3], interpf(1+offset,offset,offset_factor));
+ interp_v3_v3v3(&pt[j].x,
+ &t1_array[j * 3],
+ &t2_array[j * 3],
+ interpf(1 + offset, offset, offset_factor));
+ if (fading) {
+ pt[j].pressure = gps->points[j].pressure * thicknes
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list