[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