Merge branch 'master' into blender2.8
Conflicts: source/blender/makesdna/DNA_particle_types.h
This commit is contained in:
@@ -255,11 +255,16 @@ struct LatticeDeformData *psys_create_lattice_deform_data(ParticleSimulationData
|
||||
if (psys_in_edit_mode(sim->scene, sim->psys) == 0) {
|
||||
Object *lattice = NULL;
|
||||
ModifierData *md = (ModifierData *)psys_get_modifier(sim->ob, sim->psys);
|
||||
int mode = G.is_rendering ? eModifierMode_Render : eModifierMode_Realtime;
|
||||
|
||||
for (; md; md = md->next) {
|
||||
if (md->type == eModifierType_Lattice) {
|
||||
LatticeModifierData *lmd = (LatticeModifierData *)md;
|
||||
lattice = lmd->object;
|
||||
if (md->mode & mode) {
|
||||
LatticeModifierData *lmd = (LatticeModifierData *)md;
|
||||
lattice = lmd->object;
|
||||
sim->psys->lattice_strength = lmd->strength;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -2710,7 +2715,7 @@ void psys_cache_paths(ParticleSimulationData *sim, float cfra, const bool use_re
|
||||
/* lattices have to be calculated separately to avoid mixups between effector calculations */
|
||||
if (psys->lattice_deform_data) {
|
||||
for (k = 0, ca = cache[p]; k <= segments; k++, ca++)
|
||||
calc_latt_deform(psys->lattice_deform_data, ca->co, 1.0f);
|
||||
calc_latt_deform(psys->lattice_deform_data, ca->co, psys->lattice_strength);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3753,7 +3758,7 @@ void psys_get_particle_on_path(ParticleSimulationData *sim, int p, ParticleKey *
|
||||
}
|
||||
|
||||
if (psys->lattice_deform_data && edit == 0)
|
||||
calc_latt_deform(psys->lattice_deform_data, state->co, 1.0f);
|
||||
calc_latt_deform(psys->lattice_deform_data, state->co, psys->lattice_strength);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3992,7 +3997,7 @@ int psys_get_particle_state(ParticleSimulationData *sim, int p, ParticleKey *sta
|
||||
do_child_modifiers(NULL, sim, NULL, key1->co, key1->vel, key1->rot, par_orco, cpa, cpa->fuv, mat, state, t);
|
||||
|
||||
if (psys->lattice_deform_data)
|
||||
calc_latt_deform(psys->lattice_deform_data, state->co, 1.0f);
|
||||
calc_latt_deform(psys->lattice_deform_data, state->co, psys->lattice_strength);
|
||||
}
|
||||
else {
|
||||
if (pa->state.time == cfra || ELEM(part->phystype, PART_PHYS_NO, PART_PHYS_KEYED))
|
||||
@@ -4051,7 +4056,7 @@ int psys_get_particle_state(ParticleSimulationData *sim, int p, ParticleKey *sta
|
||||
}
|
||||
|
||||
if (sim->psys->lattice_deform_data)
|
||||
calc_latt_deform(sim->psys->lattice_deform_data, state->co, 1.0f);
|
||||
calc_latt_deform(sim->psys->lattice_deform_data, state->co, psys->lattice_strength);
|
||||
}
|
||||
|
||||
return 1;
|
||||
@@ -4298,7 +4303,7 @@ void psys_apply_hair_lattice(Scene *scene, Object *ob, ParticleSystem *psys)
|
||||
hkey = pa->hair;
|
||||
for (h = 0; h < pa->totkey; h++, hkey++) {
|
||||
mul_m4_v3(hairmat, hkey->co);
|
||||
calc_latt_deform(psys->lattice_deform_data, hkey->co, 1.0f);
|
||||
calc_latt_deform(psys->lattice_deform_data, hkey->co, psys->lattice_strength);
|
||||
mul_m4_v3(imat, hkey->co);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1485,24 +1485,60 @@ void BKE_rigidbody_sync_transforms(RigidBodyWorld *rbw, Object *ob, float ctime)
|
||||
void BKE_rigidbody_aftertrans_update(Object *ob, float loc[3], float rot[3], float quat[4], float rotAxis[3], float rotAngle)
|
||||
{
|
||||
RigidBodyOb *rbo = ob->rigidbody_object;
|
||||
bool correct_delta = !(rbo->flag & RBO_FLAG_KINEMATIC || rbo->type == RBO_TYPE_PASSIVE);
|
||||
|
||||
/* return rigid body and object to their initial states */
|
||||
copy_v3_v3(rbo->pos, ob->loc);
|
||||
copy_v3_v3(ob->loc, loc);
|
||||
|
||||
if (correct_delta) {
|
||||
add_v3_v3(rbo->pos, ob->dloc);
|
||||
}
|
||||
|
||||
if (ob->rotmode > 0) {
|
||||
eulO_to_quat(rbo->orn, ob->rot, ob->rotmode);
|
||||
float qt[4];
|
||||
eulO_to_quat(qt, ob->rot, ob->rotmode);
|
||||
|
||||
if (correct_delta) {
|
||||
float dquat[4];
|
||||
eulO_to_quat(dquat, ob->drot, ob->rotmode);
|
||||
|
||||
mul_qt_qtqt(rbo->orn, dquat, qt);
|
||||
}
|
||||
else {
|
||||
copy_qt_qt(rbo->orn, qt);
|
||||
}
|
||||
|
||||
copy_v3_v3(ob->rot, rot);
|
||||
}
|
||||
else if (ob->rotmode == ROT_MODE_AXISANGLE) {
|
||||
axis_angle_to_quat(rbo->orn, ob->rotAxis, ob->rotAngle);
|
||||
float qt[4];
|
||||
axis_angle_to_quat(qt, ob->rotAxis, ob->rotAngle);
|
||||
|
||||
if (correct_delta) {
|
||||
float dquat[4];
|
||||
axis_angle_to_quat(dquat, ob->drotAxis, ob->drotAngle);
|
||||
|
||||
mul_qt_qtqt(rbo->orn, dquat, qt);
|
||||
}
|
||||
else {
|
||||
copy_qt_qt(rbo->orn, qt);
|
||||
}
|
||||
|
||||
copy_v3_v3(ob->rotAxis, rotAxis);
|
||||
ob->rotAngle = rotAngle;
|
||||
}
|
||||
else {
|
||||
copy_qt_qt(rbo->orn, ob->quat);
|
||||
if (correct_delta) {
|
||||
mul_qt_qtqt(rbo->orn, ob->dquat, ob->quat);
|
||||
}
|
||||
else {
|
||||
copy_qt_qt(rbo->orn, ob->quat);
|
||||
}
|
||||
|
||||
copy_qt_qt(ob->quat, quat);
|
||||
}
|
||||
|
||||
if (rbo->physics_object) {
|
||||
/* allow passive objects to return to original transform */
|
||||
if (rbo->type == RBO_TYPE_PASSIVE)
|
||||
@@ -1514,8 +1550,9 @@ void BKE_rigidbody_aftertrans_update(Object *ob, float loc[3], float rot[3], flo
|
||||
|
||||
void BKE_rigidbody_cache_reset(RigidBodyWorld *rbw)
|
||||
{
|
||||
if (rbw)
|
||||
if (rbw) {
|
||||
rbw->pointcache->flag |= PTCACHE_OUTDATED;
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------ */
|
||||
@@ -1577,6 +1614,10 @@ void BKE_rigidbody_do_simulation(Scene *scene, float ctime)
|
||||
// RB_TODO deal with interpolated, old and baked results
|
||||
bool can_simulate = (ctime == rbw->ltime + 1) && !(cache->flag & PTCACHE_BAKED);
|
||||
|
||||
if (cache->flag & PTCACHE_OUTDATED || cache->last_exact == 0) {
|
||||
rbw->ltime = cache->startframe;
|
||||
}
|
||||
|
||||
if (BKE_ptcache_read(&pid, ctime, can_simulate)) {
|
||||
BKE_ptcache_validate(cache, (int)ctime);
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user