[Bf-blender-cvs] [b6025e1a0b7] greasepencil-object: GPencil: Improve Array random offset calculation
Antonio Vazquez
noreply at git.blender.org
Fri Feb 28 16:36:38 CET 2020
Commit: b6025e1a0b70027cc73d5f47c4b13596e8eba332
Author: Antonio Vazquez
Date: Fri Feb 28 16:36:21 2020 +0100
Branches: greasepencil-object
https://developer.blender.org/rBb6025e1a0b70027cc73d5f47c4b13596e8eba332
GPencil: Improve Array random offset calculation
Now the randomness cannot be greater that the segment (constant or bounding box).
===================================================================
M source/blender/blenloader/intern/versioning_280.c
M source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
M source/blender/makesrna/intern/rna_gpencil_modifier.c
===================================================================
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index a09c29c29a2..81d69ca474e 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -4479,6 +4479,7 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
switch (mti->type) {
case eGpencilModifierType_Array: {
ArrayGpencilModifierData *mmd = (ArrayGpencilModifierData *)md;
+ mmd->seed = 1;
if ((mmd->offset[0] != 0.0f) || (mmd->offset[1] != 0.0f) ||
(mmd->offset[2] != 0.0f)) {
mmd->flag |= GP_ARRAY_USE_OFFSET;
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
index 123a5f90b2d..185f0dc21bc 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
@@ -107,13 +107,6 @@ static void BKE_gpencil_instance_modifier_instance_tfm(Object *ob,
zero_v3(offset);
}
- /* Random constant offset */
- if (mmd->flag & GP_ARRAY_RANDOM_OFFSET) {
- float rnd_offset[3];
- mul_v3_v3fl(rnd_offset, mmd->offset, mmd->rnd_offset * mmd->rnd[ri]);
- add_v3_v3(offset, rnd_offset);
- }
-
/* rotation */
if (mmd->flag & GP_ARRAY_RANDOM_ROT) {
factor = mmd->rnd_rot * mmd->rnd[ri];
@@ -175,6 +168,8 @@ static void generate_geometry(GpencilModifierData *md,
bool found = false;
int ri = 1;
+ float max_offset[3], max_shift[3];
+
/* Get bounbox for relative offset. */
float size[3] = {0.0f, 0.0f, 0.0f};
if (mmd->flag & GP_ARRAY_USE_RELATIVE) {
@@ -184,8 +179,13 @@ 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);
}
+ /* 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);
@@ -241,6 +241,18 @@ static void generate_geometry(GpencilModifierData *md,
else {
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];
@@ -249,9 +261,13 @@ static void generate_geometry(GpencilModifierData *md,
/* Random relative offset. */
if (mmd->flag & GP_ARRAY_RANDOM_RELATIVE) {
- float rnd_shift[3];
- mul_v3_v3fl(rnd_shift, mmd->shift, mmd->rnd_relative * mmd->rnd[ri]);
- add_v3_v3(current_offset[3], rnd_shift);
+ 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);
}
}
diff --git a/source/blender/makesrna/intern/rna_gpencil_modifier.c b/source/blender/makesrna/intern/rna_gpencil_modifier.c
index a45c9fbd1e8..161367b2335 100644
--- a/source/blender/makesrna/intern/rna_gpencil_modifier.c
+++ b/source/blender/makesrna/intern/rna_gpencil_modifier.c
@@ -1336,7 +1336,7 @@ static void rna_def_modifier_gpencilarray(BlenderRNA *brna)
prop = RNA_def_property(srna, "rot_factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "rnd_rot");
RNA_def_property_ui_text(prop, "Rotation Factor", "Random factor for rotation");
- RNA_def_property_range(prop, -10.0, 10.0);
+ RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
prop = RNA_def_property(srna, "use_random_scale", PROP_BOOLEAN, PROP_NONE);
@@ -1347,18 +1347,18 @@ static void rna_def_modifier_gpencilarray(BlenderRNA *brna)
prop = RNA_def_property(srna, "scale_factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "rnd_size");
RNA_def_property_ui_text(prop, "Scale Factor", "Random factor for scale");
- RNA_def_property_range(prop, -10.0, 10.0);
+ RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
prop = RNA_def_property(srna, "random_offset_factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "rnd_offset");
RNA_def_property_ui_text(prop, "Random Factor", "Random factor for constant offset");
- RNA_def_property_range(prop, -10.0, 10.0);
+ RNA_def_property_range(prop, 0, FLT_MAX);
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
prop = RNA_def_property(srna, "random_relative_factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "rnd_relative");
- RNA_def_property_range(prop, -10.0, 10.0);
+ RNA_def_property_range(prop, 0, FLT_MAX);
RNA_def_property_ui_text(prop, "Random Factor", "Random factor for relative offset");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
More information about the Bf-blender-cvs
mailing list