[Bf-blender-cvs] [8a04c8f] temp_hair_modifiers: Moved main shapekey evaluation for hair keys from the path caching function to the new hair modifier evaluation.
Lukas Tönne
noreply at git.blender.org
Mon Feb 9 14:25:23 CET 2015
Commit: 8a04c8f58b4ba71eef8269fba8c24a3bba43daa3
Author: Lukas Tönne
Date: Mon Feb 2 16:07:38 2015 +0100
Branches: temp_hair_modifiers
https://developer.blender.org/rB8a04c8f58b4ba71eef8269fba8c24a3bba43daa3
Moved main shapekey evaluation for hair keys from the path caching
function to the new hair modifier evaluation.
This mirrors how shapekeys are treated as a "virtual" modifier at the
beginning of mesh modifier stack eval.
===================================================================
M source/blender/blenkernel/intern/particle_system.c
===================================================================
diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c
index 216b6e0..11e696a 100644
--- a/source/blender/blenkernel/intern/particle_system.c
+++ b/source/blender/blenkernel/intern/particle_system.c
@@ -2879,7 +2879,7 @@ static void collision_check(ParticleSimulationData *sim, int p, float dfra, floa
/************************************************/
/* reset the hair_final keys to the initial state */
-static void psys_hair_final_reset(ParticleSimulationData *sim)
+static void psys_hair_calc_final(ParticleSimulationData *sim)
{
ParticleSystem *psys = sim->psys;
ParticleData *pa;
@@ -2903,6 +2903,31 @@ static void psys_hair_final_reset(ParticleSimulationData *sim)
}
}
}
+
+ /* apply shapekeys */
+ {
+ float *shapekey_data, *shapekey;
+ int totshapekey;
+
+ shapekey = shapekey_data = BKE_key_evaluate_particles(sim->ob, psys, &totshapekey);
+
+ if (shapekey) {
+ for (p = 0, pa = psys->particles; p < psys->totpart; ++p, ++pa) {
+ HairKey *key;
+ int k;
+
+ for (k = 0, key = pa->hair_final; k < pa->totkey_final; ++k, ++key) {
+ BLI_assert(shapekey - shapekey_data < 3*totshapekey);
+
+ copy_v3_v3(key->co, shapekey);
+ shapekey += 3;
+ }
+ }
+ }
+
+ if (shapekey_data)
+ MEM_freeN(shapekey_data);
+ }
}
static bool psys_needs_path_cache(ParticleSimulationData *sim)
@@ -3166,8 +3191,6 @@ static void hair_create_input_dm(ParticleSimulationData *sim, int totpoint, int
float hairmat[4][4];
float max_length;
float hair_radius;
- float *shapekey_data, *shapekey;
- int totshapekey;
dm = *r_dm;
if (!dm) {
@@ -3198,8 +3221,6 @@ static void hair_create_input_dm(ParticleSimulationData *sim, int totpoint, int
/* XXX placeholder for more flexible future hair settings */
hair_radius = part->size;
- shapekey = shapekey_data = BKE_key_evaluate_particles(sim->ob, psys, &totshapekey);
-
/* make vgroup for pin roots etc.. */
hair_index = 1;
LOOP_PARTICLES {
@@ -3220,15 +3241,8 @@ static void hair_create_input_dm(ParticleSimulationData *sim, int totpoint, int
ClothHairData *hair;
float *co, *co_next;
- if (shapekey) {
- co = shapekey;
- co_next = shapekey + 3;
- shapekey += 3;
- }
- else {
- co = key->co;
- co_next = (key+1)->co;
- }
+ co = key->co;
+ co_next = (key+1)->co;
/* create fake root before actual root to resist bending */
if (k==0) {
@@ -3536,7 +3550,7 @@ static void hair_step(ParticleSimulationData *sim, float cfra)
cloth_free_modifier(psys->clmd);
}
- psys_hair_final_reset(sim);
+ psys_hair_calc_final(sim);
/* dynamics with cloth simulation, psys->particles can be NULL with 0 particles [#25519] */
if (psys->part->type==PART_HAIR && psys->flag & PSYS_HAIR_DYNAMICS && psys->particles)
More information about the Bf-blender-cvs
mailing list