Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenkernel/intern/particle_system.c')
-rw-r--r--source/blender/blenkernel/intern/particle_system.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c
index aa48336247c..720bf3b2a47 100644
--- a/source/blender/blenkernel/intern/particle_system.c
+++ b/source/blender/blenkernel/intern/particle_system.c
@@ -2308,8 +2308,7 @@ void particle_fluidsim(ParticleSystem *psys, ParticleData *pa, ParticleSettings
VECCOPY(start, pa->prev_state.co);
VECCOPY(end, pa->state.co);
- sub_v3_v3v3(v, end, start);
- mul_v3_fl(v, 1.f/dtime);
+ VECCOPY(v, pa->state.vel);
neighbours = BLI_kdtree_range_search(tree, radius, start, NULL, &ptn);
@@ -2386,7 +2385,7 @@ void particle_fluidsim(ParticleSystem *psys, ParticleData *pa, ParticleSettings
static void apply_particle_fluidsim(ParticleSystem *psys, ParticleData *pa, ParticleSettings *part, ParticleSimulationData *sim, float dfra, float cfra){
ParticleTarget *pt;
- float dtime = dfra*psys_get_timestep(sim);
+// float dtime = dfra*psys_get_timestep(sim);
float particle_mass = part->mass;
particle_fluidsim(psys, pa, part, sim, dfra, cfra, particle_mass);
@@ -3689,7 +3688,7 @@ static void system_step(ParticleSimulationData *sim, float cfra)
PARTICLE_P;
int oldtotpart;
float disp, *vg_vel= 0, *vg_tan= 0, *vg_rot= 0, *vg_size= 0;
- int init= 0, emit= 0, only_children_changed= 0;
+ int init= 0, emit= 0; //, only_children_changed= 0;
int framenr, framedelta, startframe = 0, endframe = 100;
framenr= (int)sim->scene->r.cfra;
@@ -3732,6 +3731,8 @@ static void system_step(ParticleSimulationData *sim, float cfra)
oldtotpart = psys->totpart;
emit = emit_particles(sim, use_cache, cfra);
+ if(use_cache && emit > 0)
+ BKE_ptcache_id_clear(&pid, PTCACHE_CLEAR_ALL, cfra);
init = emit*emit + (psys->recalc & PSYS_RECALC_RESET);
if(init) {
@@ -3788,18 +3789,23 @@ static void system_step(ParticleSimulationData *sim, float cfra)
}
if(psys->totpart) {
- int dframe, totframesback = 0;
-
+ int dframe, subframe = 0, totframesback = 0, totsubframe = part->subframes+1;
+ float fraction;
+
/* handle negative frame start at the first frame by doing
* all the steps before the first frame */
if(framenr == startframe && part->sta < startframe)
totframesback = (startframe - (int)part->sta);
-
+
for(dframe=-totframesback; dframe<=0; dframe++) {
/* ok now we're all set so let's go */
- dynamics_step(sim, cfra+dframe);
- psys->cfra = cfra+dframe;
+ for (subframe = 1; subframe <= totsubframe; subframe++) {
+ fraction = (float)subframe/(float)totsubframe;
+ dynamics_step(sim, cfra+dframe+fraction - 1.f);
+ psys->cfra = cfra+dframe+fraction - 1.f;
+ }
}
+
}
/* 4. only write cache starting from second frame */