diff options
author | Lukas Tönne <lukas.toenne@gmail.com> | 2015-01-13 21:41:25 +0300 |
---|---|---|
committer | Lukas Tönne <lukas.toenne@gmail.com> | 2015-01-20 11:30:10 +0300 |
commit | 90e46ae6c007b30f1b2d124a5561ec4fbbf35bdf (patch) | |
tree | a334d6f9188dc2c8d53b4c722ca3df1fec5a00cf /source | |
parent | 76c7d693d98f3b1e69fc42e7c3124761bf9b06a0 (diff) |
Optional randomization factors for the spiral radius and axis orientation.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/intern/particle_child.c | 13 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_particle_types.h | 1 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_particle.c | 11 |
3 files changed, 24 insertions, 1 deletions
diff --git a/source/blender/blenkernel/intern/particle_child.c b/source/blender/blenkernel/intern/particle_child.c index 589f4cef30e..79ae34f702a 100644 --- a/source/blender/blenkernel/intern/particle_child.c +++ b/source/blender/blenkernel/intern/particle_child.c @@ -175,12 +175,15 @@ static void do_kink_spiral(ParticleThreadContext *ctx, ParticleTexture *ptex, co ParticleCacheKey *keys, int *r_totkeys, float *r_max_length) { struct ParticleSettings *part = ctx->sim.psys->part; + const int seed = ctx->sim.psys->child_seed + (int)(cpa - ctx->sim.psys->child); const int totkeys = ctx->segments + 1; const int extrakeys = ctx->extra_segments; - float kink_amp = part->kink_amp; + float kink_amp_random = part->kink_amp_random; + float kink_amp = part->kink_amp * (1.0f - kink_amp_random * psys_frand(ctx->sim.psys, 93541 + seed)); float kink_freq = part->kink_freq; float kink_shape = part->kink_shape; + float kink_axis_random = part->kink_axis_random; float rough1 = part->rough1; float rough2 = part->rough2; float rough_end = part->rough_end; @@ -244,6 +247,14 @@ static void do_kink_spiral(ParticleThreadContext *ctx, ParticleTexture *ptex, co sub_v3_v3v3(kink, kink_base, tmp); normalize_v3(kink); + if (kink_axis_random > 0.0f) { + float a = kink_axis_random * (psys_frand(ctx->sim.psys, 7112 + seed) * 2.0f - 1.0f) * M_PI; + float rot[3][3]; + + axis_angle_normalized_to_mat3(rot, dir, a); + mul_m3_v3(rot, kink); + } + do_kink_spiral_deform((ParticleKey *)key, dir, kink, spiral_time, kink_freq, kink_shape, kink_amp, spiral_start); } diff --git a/source/blender/makesdna/DNA_particle_types.h b/source/blender/makesdna/DNA_particle_types.h index ffe1a8dba05..819e3109d6d 100644 --- a/source/blender/makesdna/DNA_particle_types.h +++ b/source/blender/makesdna/DNA_particle_types.h @@ -219,6 +219,7 @@ typedef struct ParticleSettings { float kink_amp, kink_freq, kink_shape, kink_flat; float kink_amp_clump; int kink_extra_steps, pad; + float kink_axis_random, kink_amp_random; /* rough */ float rough1, rough1_size; float rough2, rough2_size, rough2_thres; diff --git a/source/blender/makesrna/intern/rna_particle.c b/source/blender/makesrna/intern/rna_particle.c index d1daa7d651d..a687086e480 100644 --- a/source/blender/makesrna/intern/rna_particle.c +++ b/source/blender/makesrna/intern/rna_particle.c @@ -2885,6 +2885,12 @@ static void rna_def_particle_settings(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Amplitude Clump", "How much clump affects kink amplitude"); RNA_def_property_update(prop, 0, "rna_Particle_redo_child"); + prop = RNA_def_property(srna, "kink_amplitude_random", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "kink_amp_random"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Amplitude Random", "Random variation of the amplitude"); + RNA_def_property_update(prop, 0, "rna_Particle_redo_child"); + prop = RNA_def_property(srna, "kink_frequency", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "kink_freq"); RNA_def_property_range(prop, -100000.0f, 100000.0f); @@ -2908,6 +2914,11 @@ static void rna_def_particle_settings(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Extra Steps", "Extra steps for resolution of special kink features"); RNA_def_property_update(prop, 0, "rna_Particle_redo_child"); + prop = RNA_def_property(srna, "kink_axis_random", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Axis Random", "Random variation of the orientation"); + RNA_def_property_update(prop, 0, "rna_Particle_redo_child"); + /* rough */ prop = RNA_def_property(srna, "roughness_1", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "rough1"); |