Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Discontinue exp map in blending #60308

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 6 additions & 12 deletions scene/animation/animation_tree.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -633,8 +633,7 @@ bool AnimationTree::_update_caches(AnimationPlayer *player) {
track_xform->bone_idx = bone_idx;
Transform3D rest = sk->get_bone_rest(bone_idx);
track_xform->init_loc = rest.origin;
track_xform->ref_rot = rest.basis.get_rotation_quaternion();
track_xform->init_rot = track_xform->ref_rot.log();
track_xform->init_rot = rest.basis.get_rotation_quaternion();
track_xform->init_scale = rest.basis.get_scale();
}
}
Expand Down Expand Up @@ -667,8 +666,7 @@ bool AnimationTree::_update_caches(AnimationPlayer *player) {
track_xform->init_loc = reset_anim->track_get_key_value(rt, 0);
} break;
case Animation::TYPE_ROTATION_3D: {
track_xform->ref_rot = reset_anim->track_get_key_value(rt, 0);
track_xform->init_rot = track_xform->ref_rot.log();
track_xform->init_rot = reset_anim->track_get_key_value(rt, 0);
} break;
case Animation::TYPE_SCALE_3D: {
track_xform->init_scale = reset_anim->track_get_key_value(rt, 0);
Expand Down Expand Up @@ -1144,7 +1142,7 @@ void AnimationTree::_process_graph(double p_delta) {
continue;
}
a->rotation_track_interpolate(i, (double)a->get_length(), &rot[1]);
t->rot += (rot[1].log() - rot[0].log()) * blend;
t->rot = (t->rot * Quaternion().slerp(rot[0].inverse() * rot[1], blend)).normalized();
prev_time = 0;
}
} else {
Expand All @@ -1154,7 +1152,7 @@ void AnimationTree::_process_graph(double p_delta) {
continue;
}
a->rotation_track_interpolate(i, 0, &rot[1]);
t->rot += (rot[1].log() - rot[0].log()) * blend;
t->rot = (t->rot * Quaternion().slerp(rot[0].inverse() * rot[1], blend)).normalized();
prev_time = 0;
}
}
Expand All @@ -1165,7 +1163,7 @@ void AnimationTree::_process_graph(double p_delta) {
}

a->rotation_track_interpolate(i, time, &rot[1]);
t->rot += (rot[1].log() - rot[0].log()) * blend;
t->rot = (t->rot * Quaternion().slerp(rot[0].inverse() * rot[1], blend)).normalized();
prev_time = !backward ? 0 : (double)a->get_length();

} else {
Expand All @@ -1182,10 +1180,7 @@ void AnimationTree::_process_graph(double p_delta) {
continue;
}

if (signbit(rot.dot(t->ref_rot))) {
rot = -rot;
}
t->rot += (rot.log() - t->init_rot) * blend;
t->rot = (t->rot * Quaternion().slerp(t->init_rot.inverse() * rot, blend)).normalized();
}
#endif // _3D_DISABLED
} break;
Expand Down Expand Up @@ -1585,7 +1580,6 @@ void AnimationTree::_process_graph(double p_delta) {
case Animation::TYPE_POSITION_3D: {
#ifndef _3D_DISABLED
TrackCacheTransform *t = static_cast<TrackCacheTransform *>(track);
t->rot = t->rot.exp();

if (t->root_motion) {
Transform3D xform;
Expand Down
3 changes: 1 addition & 2 deletions scene/animation/animation_tree.h
Original file line number Diff line number Diff line change
Expand Up @@ -198,8 +198,7 @@ class AnimationTree : public Node {
bool rot_used = false;
bool scale_used = false;
Vector3 init_loc = Vector3(0, 0, 0);
Quaternion ref_rot = Quaternion(0, 0, 0, 1);
Quaternion init_rot = Quaternion(0, 0, 0, 0);
Quaternion init_rot = Quaternion(0, 0, 0, 1);
Vector3 init_scale = Vector3(1, 1, 1);
Vector3 loc;
Quaternion rot;
Expand Down