[Bf-blender-cvs] [0ad695285a0] temp-gpencil-fading-modifier: GPencil: Fading functions in opacity and thickness modifiers.

YimingWu noreply at git.blender.org
Mon Oct 19 07:00:03 CEST 2020


Commit: 0ad695285a09befe7e9d1d1e9285faa1b123875a
Author: YimingWu
Date:   Fri Oct 2 19:26:40 2020 +0800
Branches: temp-gpencil-fading-modifier
https://developer.blender.org/rB0ad695285a09befe7e9d1d1e9285faa1b123875a

GPencil: Fading functions in opacity and thickness modifiers.

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

M	release/datafiles/locale
M	release/scripts/addons
M	release/scripts/addons_contrib
M	source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c
M	source/blender/makesdna/DNA_gpencil_modifier_types.h
M	source/blender/makesrna/intern/rna_gpencil_modifier.c
M	source/tools

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

diff --git a/release/datafiles/locale b/release/datafiles/locale
index 07106b58838..1e2dc62ca30 160000
--- a/release/datafiles/locale
+++ b/release/datafiles/locale
@@ -1 +1 @@
-Subproject commit 07106b588381ef26604934482a6151d9bc26437e
+Subproject commit 1e2dc62ca30c55881076ea0a84b118c8bda9fade
diff --git a/release/scripts/addons b/release/scripts/addons
index feca8c52897..861eb3e249a 160000
--- a/release/scripts/addons
+++ b/release/scripts/addons
@@ -1 +1 @@
-Subproject commit feca8c5289794a70bdd375be76fc4bc59d83c96b
+Subproject commit 861eb3e249aef55337bf437edb2220e6cb1865e5
diff --git a/release/scripts/addons_contrib b/release/scripts/addons_contrib
index f2f4a8b3bfa..26a8b2eadc7 160000
--- a/release/scripts/addons_contrib
+++ b/release/scripts/addons_contrib
@@ -1 +1 @@
-Subproject commit f2f4a8b3bfa36ee49f7bdb3a1acb40ef4b39ee3a
+Subproject commit 26a8b2eadc7abb2a30fac50eb5505aa24daf5785
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c
index 9268b7ac8d5..eee06f20190 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c
@@ -127,7 +127,6 @@ static void deformStroke(GpencilModifierData *md,
   for (int i = 0; i < gps->totpoints; i++) {
     bGPDspoint *pt = &gps->points[i];
     MDeformVert *dvert = gps->dvert != NULL ? &gps->dvert[i] : NULL;
-
     /* Stroke using strength. */
     if (mmd->modify_color != GP_MODIFY_COLOR_FILL) {
       /* verify vertex group */
@@ -143,6 +142,30 @@ static void deformStroke(GpencilModifierData *md,
         factor_curve *= BKE_curvemapping_evaluateF(mmd->curve_intensity, 0, value);
       }
 
+      float factor_depth = 1;
+      if (mmd->flag & GP_OPACITY_FADING) {
+        if (mmd->object) {
+          float gvert[3];
+          mul_v3_m4v3(gvert, ob->obmat, &pt->x);
+          float dist = len_v3v3(mmd->object->loc, gvert);
+          float fading_max = MAX2(mmd->fading_start, mmd->fading_end);
+          float fading_min = MIN2(mmd->fading_start, mmd->fading_end);
+
+          /* Better with ratiof() function from line art. */
+          if (dist > fading_max) {
+            factor_depth = 0;
+          }
+          else if (dist <= fading_max && dist > fading_min) {
+            factor_depth = (fading_max - dist) / (fading_max - fading_min);
+          }
+          else {
+            factor_depth = 1;
+          }
+        }
+      }
+
+      factor_curve *= factor_depth;
+
       if (def_nr < 0) {
         if (mmd->flag & GP_OPACITY_NORMALIZE) {
           pt->strength = factor_curve;
@@ -171,7 +194,32 @@ static void deformStroke(GpencilModifierData *md,
 
   /* Fill using opacity factor. */
   if (mmd->modify_color != GP_MODIFY_COLOR_STROKE) {
+
     gps->fill_opacity_fac = mmd->factor;
+
+    float factor_depth = 1;
+    if (mmd->flag & GP_OPACITY_FADING) {
+      if (mmd->object) {
+
+        float dist = len_v3v3(mmd->object->loc, ob->loc);
+        float fading_max = MAX2(mmd->fading_start, mmd->fading_end);
+        float fading_min = MIN2(mmd->fading_start, mmd->fading_end);
+
+        /* Better with ratiof() function from line art. */
+        if (dist > fading_max) {
+          factor_depth = 0;
+        }
+        else if (dist <= fading_max && dist > fading_min) {
+          factor_depth = (fading_max - dist) / (fading_max - fading_min);
+        }
+        else {
+          factor_depth = 1;
+        }
+      }
+    }
+
+    gps->fill_opacity_fac *= factor_depth;
+
     CLAMP(gps->fill_opacity_fac, 0.0f, 1.0f);
   }
 }
@@ -230,6 +278,15 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel)
     uiItemR(layout, ptr, "factor", 0, text, ICON_NONE);
   }
 
+  bool fading_enabled = RNA_boolean_get(ptr, "fading");
+  uiItemR(layout, ptr, "fading", 0, NULL, ICON_NONE);
+  if (fading_enabled) {
+    uiItemR(layout, ptr, "object", 0, NULL, ICON_CUBE);
+    uiLayout *sub = uiLayoutColumn(layout, true);
+    uiItemR(sub, ptr, "fading_start", 0, NULL, ICON_NONE);
+    uiItemR(sub, ptr, "fading_end", 0, NULL, ICON_NONE);
+  }
+
   gpencil_modifier_panel_end(layout, ptr);
 }
 
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c
index bf23dd0d78a..3bc53d48c9c 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c
@@ -132,6 +132,31 @@ static void deformStroke(GpencilModifierData *md,
     }
 
     float curvef = 1.0f;
+
+    float factor_depth = 1;
+    if (mmd->flag & GP_THICK_FADING) {
+      if (mmd->object) {
+        float gvert[3];
+        mul_v3_m4v3(gvert, ob->obmat, &pt->x);
+        float dist = len_v3v3(mmd->object->loc, gvert);
+        float fading_max = MAX2(mmd->fading_start, mmd->fading_end);
+        float fading_min = MIN2(mmd->fading_start, mmd->fading_end);
+
+        /* Better with ratiof() function from line art. */
+        if (dist > fading_max) {
+          factor_depth = 0;
+        }
+        else if (dist <= fading_max && dist > fading_min) {
+          factor_depth = (fading_max - dist) / (fading_max - fading_min);
+        }
+        else {
+          factor_depth = 1;
+        }
+      }
+    }
+
+    curvef *= factor_depth;
+
     if ((mmd->flag & GP_THICK_CUSTOM_CURVE) && (mmd->curve_thickness)) {
       /* Normalize value to evaluate curve. */
       float value = (float)i / (gps->totpoints - 1);
@@ -194,6 +219,14 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel)
     uiItemR(layout, ptr, "thickness_factor", 0, NULL, ICON_NONE);
   }
 
+  bool fading_enabled = RNA_boolean_get(ptr, "fading");
+  uiItemR(layout, ptr, "fading", 0, NULL, ICON_NONE);
+  if (fading_enabled) {
+    uiItemR(layout, ptr, "object", 0, NULL, ICON_CUBE);
+    uiLayout *sub = uiLayoutColumn(layout, true);
+    uiItemR(sub, ptr, "fading_start", 0, NULL, ICON_NONE);
+    uiItemR(sub, ptr, "fading_end", 0, NULL, ICON_NONE);
+  }
   gpencil_modifier_panel_end(layout, ptr);
 }
 
diff --git a/source/blender/makesdna/DNA_gpencil_modifier_types.h b/source/blender/makesdna/DNA_gpencil_modifier_types.h
index bf268ae7c2d..3ec372490a0 100644
--- a/source/blender/makesdna/DNA_gpencil_modifier_types.h
+++ b/source/blender/makesdna/DNA_gpencil_modifier_types.h
@@ -175,6 +175,11 @@ typedef struct ThickGpencilModifierData {
   float thickness_fac;
   /** Absolute thickness overide. */
   int thickness;
+  /** Fading reference object */
+  struct Object *object;
+  /** Start/end distances of the fading effect. */
+  float fading_start;
+  float fading_end;
   /** Custom index for passes. */
   int layer_pass;
   char _pad[4];
@@ -189,6 +194,7 @@ typedef enum eThickGpencil_Flag {
   GP_THICK_NORMALIZE = (1 << 4),
   GP_THICK_INVERT_LAYERPASS = (1 << 5),
   GP_THICK_INVERT_MATERIAL = (1 << 6),
+  GP_THICK_FADING = (1 << 7),
 } eThickGpencil_Flag;
 
 typedef struct TimeGpencilModifierData {
@@ -281,9 +287,15 @@ typedef struct OpacityGpencilModifierData {
   int flag;
   /** Main Opacity factor. */
   float factor;
+  /** Fading controlling object */
+  int _pad0;
+  struct Object *object;
+  /** Start/end distances of the fading effect. */
+  float fading_start;
+  float fading_end;
   /** Modify stroke, fill or both. */
   char modify_color;
-  char _pad[3];
+  char _pad1[7];
   /** Custom index for passes. */
   int layer_pass;
 
@@ -299,6 +311,7 @@ typedef enum eOpacityGpencil_Flag {
   GP_OPACITY_INVERT_MATERIAL = (1 << 5),
   GP_OPACITY_CUSTOM_CURVE = (1 << 6),
   GP_OPACITY_NORMALIZE = (1 << 7),
+  GP_OPACITY_FADING = (1 << 8),
 } eOpacityGpencil_Flag;
 
 typedef struct ArrayGpencilModifierData {
diff --git a/source/blender/makesrna/intern/rna_gpencil_modifier.c b/source/blender/makesrna/intern/rna_gpencil_modifier.c
index 6a2d3805fa5..f6349ac27d5 100644
--- a/source/blender/makesrna/intern/rna_gpencil_modifier.c
+++ b/source/blender/makesrna/intern/rna_gpencil_modifier.c
@@ -341,6 +341,8 @@ static void greasepencil_modifier_object_set(Object *self,
 RNA_GP_MOD_OBJECT_SET(Armature, object, OB_ARMATURE);
 RNA_GP_MOD_OBJECT_SET(Lattice, object, OB_LATTICE);
 RNA_GP_MOD_OBJECT_SET(Mirror, object, OB_EMPTY);
+RNA_GP_MOD_OBJECT_SET(Opacity, object, OB_EMPTY);
+RNA_GP_MOD_OBJECT_SET(Thick, object, OB_EMPTY);
 
 #  undef RNA_GP_MOD_OBJECT_SET
 
@@ -890,6 +892,31 @@ static void rna_def_modifier_gpencilthick(BlenderRNA *brna)
   RNA_def_property_ui_text(prop, "Thickness Factor", "Factor to multiply the thickness with");
   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
 
+  prop = RNA_def_property(srna, "fading", PROP_BOOLEAN, PROP_NONE);
+  RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_THICK_FADING);
+  RNA_def_property_ui_text(prop, "Fading", "Fading effect");
+  RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
+  /* Distance reference object */
+  prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
+  RNA_def_property_ui_text(prop, "Object", "Object used as distance reference");
+  RNA_def_property_pointer_funcs(prop, NULL, "rna_ThickGpencilModifier_object_set", NULL, NULL);
+  RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
+  RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
+
+  prop = RNA_def_property(srna, "fading_start", PROP_FLOAT, PROP_NONE);
+  RNA_def_property_float_sdna(prop, NULL, "fading_start");
+  RNA_def_property_ui_range(prop, 0, 1000.0, 1.0, 2);
+  RNA_def_property_ui_text(prop, "Fading Start", "Start distance of fading effect");
+  RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
+  prop = RNA_def_property(srna, "fading_end", PROP_FLOAT, PROP_NONE);
+  RNA_def_property_float_sdna(prop, NULL, "fading_end");
+  RNA_def_property_ui_range(prop, 0, 1000.0, 1.0, 2);
+  RNA_def_property_ui_text(prop, "Fading End", "End distance of fading effect");
+  RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
   prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
   RNA_def_property_int_sdna(prop, NULL, "pass_index");
   RNA_def_property_rang

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list