[Bf-blender-cvs] [7098b638f2c] greasepencil-object: GPencil: More changes to Array randomness

Antonio Vazquez noreply at git.blender.org
Thu Mar 5 17:30:31 CET 2020


Commit: 7098b638f2c69d3624d3f51f2d9e2758adcfd7dd
Author: Antonio Vazquez
Date:   Thu Mar 5 17:30:25 2020 +0100
Branches: greasepencil-object
https://developer.blender.org/rB7098b638f2c69d3624d3f51f2d9e2758adcfd7dd

GPencil: More changes to Array randomness

Now the random does not use an array of random values.

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

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/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
index 7ea709bbbbb..cab42ed4b36 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
@@ -27,6 +27,10 @@
 
 #include "BLI_utildefines.h"
 
+#include "BLI_ghash.h"
+#include "BLI_hash.h"
+#include "BLI_rand.h"
+
 #include "BLI_blenlib.h"
 #include "BLI_rand.h"
 #include "BLI_math.h"
@@ -71,10 +75,7 @@ static void initData(GpencilModifierData *md)
   zero_v3(gpmd->rnd_scale);
   gpmd->object = NULL;
   gpmd->flag |= GP_ARRAY_USE_RELATIVE;
-  /* fill random values */
   gpmd->seed = 1;
-  BLI_array_frand(gpmd->rnd, 20, gpmd->seed);
-  gpmd->rnd[0] = 1;
 }
 
 static void copyData(const GpencilModifierData *md, GpencilModifierData *target)
@@ -135,22 +136,23 @@ static void generate_geometry(GpencilModifierData *md,
   /* Load the strokes to be duplicated. */
   bGPdata *gpd = (bGPdata *)ob->data;
   bool found = false;
-  int ri = mmd->rnd[0];
 
   /* Get bounbox for relative offset. */
   float size[3] = {0.0f, 0.0f, 0.0f};
   if (mmd->flag & GP_ARRAY_USE_RELATIVE) {
     BoundBox *bb = BKE_object_boundbox_get(ob);
-    if (bb == NULL) {
-      const float min[3] = {-1.0f, -1.0f, -1.0f}, max[3] = {1.0f, 1.0f, 1.0f};
-      BKE_boundbox_init_from_minmax(bb, min, max);
-    }
+    const float min[3] = {-1.0f, -1.0f, -1.0f}, max[3] = {1.0f, 1.0f, 1.0f};
+    BKE_boundbox_init_from_minmax(bb, min, max);
     BKE_boundbox_calc_size_aabb(bb, size);
     mul_v3_fl(size, 2.0f);
     /* Need a minimum size (for flat drawings). */
     CLAMP3_MIN(size, 0.01f);
   }
 
+  int seed = mmd->seed;
+  /* Make sure different modifiers get different seeds. */
+  seed += BLI_hash_string(md->name);
+
   LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) {
     bGPDframe *gpf = BKE_gpencil_frame_retime_get(depsgraph, scene, ob, gpl);
     if (gpf == NULL) {
@@ -215,23 +217,14 @@ static void generate_geometry(GpencilModifierData *md,
 
       /* Calculate Random matrix. */
       float mat_rnd[4][4];
+      float loc[3], rot[3];
       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);
-      }
+      float factor = BLI_hash_int_01((uint)seed + x) * 2.0f - 1.0f;
+      mul_v3_v3fl(loc, mmd->rnd_offset, factor);
+      mul_v3_v3fl(rot, mmd->rnd_rot, factor);
+      madd_v3_v3fl(scale, mmd->rnd_scale, factor);
 
-      loc_eul_size_to_mat4(mat_rnd, mmd->rnd_offset, mmd->rnd_rot, scale);
+      loc_eul_size_to_mat4(mat_rnd, loc, rot, scale);
 
       /* Duplicate original strokes to create this instance. */
       LISTBASE_FOREACH_BACKWARD (tmpStrokes *, iter, &stroke_cache) {
@@ -264,13 +257,6 @@ static void generate_geometry(GpencilModifierData *md,
         /* Calc bounding box. */
         BKE_gpencil_stroke_boundingbox_calc(gps_dst);
       }
-
-      /* Advance random index. */
-      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 bedfd957f9a..245accdeafc 100644
--- a/source/blender/makesdna/DNA_gpencil_modifier_types.h
+++ b/source/blender/makesdna/DNA_gpencil_modifier_types.h
@@ -322,7 +322,6 @@ typedef struct ArrayGpencilModifierData {
   float rnd_scale[3];
   char _pad[4];
   /** (first element is the index) random values. */
-  float rnd[20];
   int seed;
 
   /** Custom index for passes. */
diff --git a/source/blender/makesrna/intern/rna_gpencil_modifier.c b/source/blender/makesrna/intern/rna_gpencil_modifier.c
index 79056ea09ac..8fc0ca68ac9 100644
--- a/source/blender/makesrna/intern/rna_gpencil_modifier.c
+++ b/source/blender/makesrna/intern/rna_gpencil_modifier.c
@@ -273,16 +273,6 @@ static void rna_GpencilModifier_update(Main *UNUSED(bmain), Scene *UNUSED(scene)
   WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ptr->owner_id);
 }
 
-static void rna_GpencilModifier_seed_update(Main *bmain, Scene *scene, PointerRNA *ptr)
-{
-  GpencilModifierData *md = ptr->data;
-  ArrayGpencilModifierData *gpmd = (ArrayGpencilModifierData *)md;
-
-  BLI_array_frand(gpmd->rnd, 20, gpmd->seed);
-
-  rna_GpencilModifier_update(bmain, scene, ptr);
-}
-
 static void rna_GpencilModifier_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
 {
   rna_GpencilModifier_update(bmain, scene, ptr);
@@ -1350,7 +1340,7 @@ static void rna_def_modifier_gpencilarray(BlenderRNA *brna)
 
   prop = RNA_def_property(srna, "seed", PROP_INT, PROP_UNSIGNED);
   RNA_def_property_ui_text(prop, "Seed", "Random seed");
-  RNA_def_property_update(prop, 0, "rna_GpencilModifier_seed_update");
+  RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
 
   prop = RNA_def_property(srna, "replace_material", PROP_INT, PROP_NONE);
   RNA_def_property_int_sdna(prop, NULL, "mat_rpl");



More information about the Bf-blender-cvs mailing list