[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