The way multiple quaternions being slerped was not good, changed approach to one that seems to work better.
This commit is contained in:
parent
68f7cf13c7
commit
9bab5134cf
|
@ -124,9 +124,10 @@ void EditorPropertyRootMotion::_node_assign() {
|
|||
ti = filters->create_item(ti);
|
||||
parenthood[accum] = ti;
|
||||
ti->set_text(0, F->get());
|
||||
ti->set_selectable(0, false);
|
||||
ti->set_selectable(0, true);
|
||||
ti->set_editable(0, false);
|
||||
ti->set_icon(0, get_icon("BoneAttachment", "EditorIcons"));
|
||||
ti->set_metadata(0, accum);
|
||||
} else {
|
||||
ti = parenthood[accum];
|
||||
}
|
||||
|
|
|
@ -813,6 +813,7 @@ void AnimationTree::_process_graph(float p_delta) {
|
|||
t->process_pass = process_pass;
|
||||
t->loc = Vector3();
|
||||
t->rot = Quat();
|
||||
t->rot_blend_accum = 0;
|
||||
t->scale = Vector3();
|
||||
}
|
||||
|
||||
|
@ -876,7 +877,14 @@ void AnimationTree::_process_graph(float p_delta) {
|
|||
continue;
|
||||
|
||||
t->loc = t->loc.linear_interpolate(loc, blend);
|
||||
t->rot = t->rot.slerp(rot, blend);
|
||||
if (t->rot_blend_accum==0) {
|
||||
t->rot = rot;
|
||||
t->rot_blend_accum = blend;
|
||||
} else {
|
||||
float rot_total = t->rot_blend_accum + blend;
|
||||
t->rot = rot.slerp(t->rot, t->rot_blend_accum / rot_total).normalized();
|
||||
t->rot_blend_accum = rot_total;
|
||||
}
|
||||
t->scale = t->scale.linear_interpolate(scale, blend);
|
||||
}
|
||||
|
||||
|
|
|
@ -161,6 +161,7 @@ private:
|
|||
int bone_idx;
|
||||
Vector3 loc;
|
||||
Quat rot;
|
||||
float rot_blend_accum;
|
||||
Vector3 scale;
|
||||
|
||||
TrackCacheTransform() {
|
||||
|
|
Loading…
Reference in New Issue