[Bf-blender-cvs] [6c8d17b75f0] greasepencil-object: GPencil: Change Array modifier

Antonio Vazquez noreply at git.blender.org
Wed Mar 4 20:29:14 CET 2020


Commit: 6c8d17b75f0ad4b0e562d23c9066bc35e2505076
Author: Antonio Vazquez
Date:   Wed Mar 4 20:28:57 2020 +0100
Branches: greasepencil-object
https://developer.blender.org/rB6c8d17b75f0ad4b0e562d23c9066bc35e2505076

GPencil: Change Array modifier

Now the randomness works totally different in a more predictable way.

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

M	release/scripts/startup/bl_ui/properties_data_modifier.py
M	source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
M	source/blender/makesdna/DNA_gpencil_modifier_types.h
M	source/blender/makesrna/intern/rna_gpencil_modifier.c

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

diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index 27eb195c487..cefe7ddad69 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -1964,9 +1964,6 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
         subcol = col.column()
         subcol.enabled = md.use_constant_offset
         subcol.prop(md, "constant_offset", text="")
-        row = subcol.row(align=True)
-        row.prop(md, "use_random_offset", text="", icon='TIME', toggle=True)
-        row.prop(md, "random_offset_factor", text="")
 
         col.prop(md, "use_object_offset")
         subcol = col.column()
@@ -1978,24 +1975,19 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
         subcol = col.column()
         subcol.enabled = md.use_relative_offset
         subcol.prop(md, "relative_offset", text="")
-        row = subcol.row(align=True)
-        row.prop(md, "use_random_relative", text="", icon='TIME', toggle=True)
-        row.prop(md, "random_relative_factor", text="")
 
         split = layout.split()
         col = split.column()
-        col.label(text="Rotation:")
-        col.prop(md, "rotation", text="")
-        row = col.row(align=True)
-        row.prop(md, "use_random_rot", text="", icon='TIME', toggle=True)
-        row.prop(md, "rot_factor", text="")
+        col.label(text="Random Offset:")
+        col.prop(md, "random_offset", text="")
 
         col = split.column()
-        col.label(text="Scale:")
-        col.prop(md, "scale", text="")
-        row = col.row(align=True)
-        row.prop(md, "use_random_scale", text="", icon='TIME', toggle=True)
-        row.prop(md, "scale_factor", text="")
+        col.label(text="Random Rotation:")
+        col.prop(md, "random_rotation", text="")
+
+        col = split.column()
+        col.label(text="Random Scale:")
+        col.prop(md, "random_scale", text="")
 
         col = layout.column()
         col.separator()
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
index 185f0dc21bc..17491a0d2ef 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
@@ -68,11 +68,7 @@ static void initData(GpencilModifierData *md)
   gpmd->shift[1] = 0.0f;
   gpmd->shift[2] = 0.0f;
   zero_v3(gpmd->offset);
-  copy_v3_fl(gpmd->scale, 1.0f);
-  gpmd->rnd_offset = 0.5f;
-  gpmd->rnd_relative = 0.5f;
-  gpmd->rnd_rot = 0.5f;
-  gpmd->rnd_size = 0.5f;
+  zero_v3(gpmd->rnd_scale);
   gpmd->object = NULL;
   gpmd->flag |= GP_ARRAY_USE_RELATIVE;
   /* fill random values */
@@ -95,8 +91,8 @@ static void BKE_gpencil_instance_modifier_instance_tfm(Object *ob,
                                                        float r_offset[4][4])
 {
   float offset[3], rot[3], scale[3];
-  int ri = mmd->rnd[0];
-  float factor;
+  ARRAY_SET_ITEMS(scale, 1.0f, 1.0f, 1.0f);
+  zero_v3(rot);
 
   if (mmd->flag & GP_ARRAY_USE_OFFSET) {
     offset[0] = mmd->offset[0] * elem_idx;
@@ -107,35 +103,8 @@ static void BKE_gpencil_instance_modifier_instance_tfm(Object *ob,
     zero_v3(offset);
   }
 
-  /* rotation */
-  if (mmd->flag & GP_ARRAY_RANDOM_ROT) {
-    factor = mmd->rnd_rot * mmd->rnd[ri];
-    mul_v3_v3fl(rot, mmd->rot, factor);
-    add_v3_v3(rot, mmd->rot);
-  }
-  else {
-    copy_v3_v3(rot, mmd->rot);
-  }
-
-  /* scale */
-  if (mmd->flag & GP_ARRAY_RANDOM_SIZE) {
-    factor = mmd->rnd_size * mmd->rnd[ri];
-    mul_v3_v3fl(scale, mmd->scale, factor);
-    add_v3_v3(scale, mmd->scale);
-  }
-  else {
-    copy_v3_v3(scale, mmd->scale);
-  }
-
-  /* advance random index */
-  mmd->rnd[0]++;
-  if (mmd->rnd[0] > 19) {
-    mmd->rnd[0] = 1;
-  }
-
-  /* calculate matrix */
+  /* Calculate matrix */
   loc_eul_size_to_mat4(r_mat, offset, rot, scale);
-
   copy_m4_m4(r_offset, r_mat);
 
   /* offset object */
@@ -166,9 +135,7 @@ static void generate_geometry(GpencilModifierData *md,
   /* Load the strokes to be duplicated. */
   bGPdata *gpd = (bGPdata *)ob->data;
   bool found = false;
-  int ri = 1;
-
-  float max_offset[3], max_shift[3];
+  int ri = mmd->rnd[0];
 
   /* Get bounbox for relative offset. */
   float size[3] = {0.0f, 0.0f, 0.0f};
@@ -179,13 +146,10 @@ static void generate_geometry(GpencilModifierData *md,
       BKE_boundbox_init_from_minmax(bb, min, max);
     }
     BKE_boundbox_calc_size_aabb(bb, size);
-    /* Calc relative random maximum size. */
-    mul_v3_v3v3(max_shift, size, mmd->shift);
-
     mul_v3_fl(size, 2.0f);
+    /* Need a minimum size (for flat drawings). */
+    CLAMP3_MIN(size, 0.01f);
   }
-  /* Save constant random maximum size. */
-  mul_v3_v3fl(max_offset, mmd->offset, 1.0f);
 
   LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) {
     bGPDframe *gpf = BKE_gpencil_frame_retime_get(depsgraph, scene, ob, gpl);
@@ -242,34 +206,32 @@ static void generate_geometry(GpencilModifierData *md,
         copy_m4_m4(current_offset, mat);
       }
 
-      /* Apply constant random offset. */
-      if ((mmd->flag & GP_ARRAY_USE_OFFSET) && (mmd->flag & GP_ARRAY_RANDOM_OFFSET)) {
-        float off[3];
-        mul_v3_v3fl(off, max_offset, clamp_f(mmd->rnd_offset * mmd->rnd[ri], 0.0f, 1.0f));
-        /* For adding more randomness, check direction. */
-        if (mmd->rnd[20 - ri] < 0.5f) {
-          mul_v3_fl(off, -1.0f);
-        }
-        add_v3_v3(current_offset[3], off);
-      }
-
       /* Apply relative offset. */
       if (mmd->flag & GP_ARRAY_USE_RELATIVE) {
         float relative[3];
         mul_v3_v3v3(relative, mmd->shift, size);
         madd_v3_v3fl(current_offset[3], relative, x);
+      }
 
-        /* Random relative offset. */
-        if (mmd->flag & GP_ARRAY_RANDOM_RELATIVE) {
-          float off[3];
-          mul_v3_v3fl(off, max_shift, clamp_f(mmd->rnd_relative * mmd->rnd[ri], 0.0f, 1.0f));
-          /* For adding more randomness, check direction. */
-          if (mmd->rnd[20 - ri] < 0.5f) {
-            mul_v3_fl(off, -1.0f);
-          }
-          add_v3_v3(current_offset[3], off);
-        }
+      /* Calculate Random matrix. */
+      float mat_rnd[4][4];
+      float scale[3] = {1.0f, 1.0f, 1.0f};
+      mul_v3_fl(mmd->rnd_offset, mmd->rnd[ri]);
+      mul_v3_fl(mmd->rnd_rot, mmd->rnd[ri]);
+      madd_v3_v3fl(scale, mmd->rnd_scale, mmd->rnd[ri]);
+
+      /* For adding more randomness, check direction. */
+      if (mmd->rnd[20 - ri] < 0.5f) {
+        mul_v3_fl(mmd->rnd_offset, -1.0f);
+      }
+      if (mmd->rnd[20 - ri] > 0.5f) {
+        mul_v3_fl(mmd->rnd_rot, -1.0f);
       }
+      if (mmd->rnd[20 - ri] > 0.7f) {
+        mul_v3_fl(mmd->rnd_rot, -1.0f);
+      }
+
+      loc_eul_size_to_mat4(mat_rnd, mmd->rnd_offset, mmd->rnd_rot, scale);
 
       /* Duplicate original strokes to create this instance. */
       LISTBASE_FOREACH_BACKWARD (tmpStrokes *, iter, &stroke_cache) {
@@ -279,6 +241,9 @@ static void generate_geometry(GpencilModifierData *md,
         /* Move points */
         for (int i = 0; i < iter->gps->totpoints; i++) {
           bGPDspoint *pt = &gps_dst->points[i];
+          /* Apply randomness matrix. */
+          mul_m4_v3(mat_rnd, &pt->x);
+
           /* Apply object local transform (Rot/Scale). */
           if ((mmd->flag & GP_ARRAY_USE_OB_OFFSET) && (mmd->object)) {
             mul_m4_v3(mat, &pt->x);
@@ -299,10 +264,11 @@ static void generate_geometry(GpencilModifierData *md,
       }
 
       /* Advance random index. */
-      ri++;
-      if (ri > 19) {
-        ri = 1;
+      mmd->rnd[0]++;
+      if (mmd->rnd[0] > 19) {
+        mmd->rnd[0] = 1;
       }
+      ri = mmd->rnd[0];
     }
 
     /* Free temp data. */
diff --git a/source/blender/makesdna/DNA_gpencil_modifier_types.h b/source/blender/makesdna/DNA_gpencil_modifier_types.h
index 6eaa62b8ea7..001ff2fd9ef 100644
--- a/source/blender/makesdna/DNA_gpencil_modifier_types.h
+++ b/source/blender/makesdna/DNA_gpencil_modifier_types.h
@@ -311,18 +311,13 @@ typedef struct ArrayGpencilModifierData {
   float offset[3];
   /** Shift increment. */
   float shift[3];
-  /** Random size factor. */
-  float rnd_size;
-  /** Random size factor. */
-  float rnd_rot;
-  /** Random constant offset factor. */
-  float rnd_offset;
-  /** Random relative offset factor. */
-  float rnd_relative;
-  /** Rotation changes. */
-  float rot[3];
-  /** Scale changes. */
-  float scale[3];
+  /** Random Offset. */
+  float rnd_offset[3];
+  /** Random Rotation. */
+  float rnd_rot[3];
+  /** Random Scales. */
+  float rnd_scale[3];
+  char _pad[4];
   /** (first element is the index) random values. */
   float rnd[20];
   int seed;
@@ -340,8 +335,6 @@ typedef struct ArrayGpencilModifierData {
 } ArrayGpencilModifierData;
 
 typedef enum eArrayGpencil_Flag {
-  GP_ARRAY_RANDOM_SIZE = (1 << 0),
-  GP_ARRAY_RANDOM_ROT = (1 << 1),
   GP_ARRAY_INVERT_LAYER = (1 << 2),
   GP_ARRAY_INVERT_PASS = (1 << 3),
   GP_ARRAY_INVERT_LAYERPASS = (1 << 5),
@@ -349,8 +342,6 @@ typedef enum eArrayGpencil_Flag {
   GP_ARRAY_USE_OFFSET = (1 << 7),
   GP_ARRAY_USE_RELATIVE = (1 << 8),
   GP_ARRAY_USE_OB_OFFSET = (1 << 9),
-  GP_ARRAY_RANDOM_OFFSET = (1 << 10),
-  GP_ARRAY_RANDOM_RELATIVE = (1 << 11),
 } eArrayGpencil_Flag;
 
 typedef struct BuildGpencilModifierData {
diff --git a/source/blender/makesrna/intern/rna_gpencil_modifier.c b/source/blender/makesrna/intern/rna_gpencil_modifier.c
index 2bcd00b6c21..e72317d1585 100644
--- a/source/blender/makesrna/intern/rna_gpencil_modifier.c
+++ b/source/blender/makesrna/intern/rna_gpencil_modifier.c
@@ -1319,60 +1319,22 @@ static void rna_def_modifier_gpencilarray(BlenderRNA *brna)
   RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
 
-  prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_EULER);
-  RNA_def_property_float_sdna(prop, NULL, "rot");
-  RNA_def_property_ui_text(prop, "Rotation", "Value for changes in rotation");
-  RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
-  RNA_def_propert

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list