diff options
author | RĂ©mi Verschelde <remi@verschelde.fr> | 2022-04-17 00:23:28 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-17 00:23:28 +0200 |
commit | f7ca732df19c968693d5d1300f54a88a71c1bf11 (patch) | |
tree | 14305c94aed7389a894b9277dad512be66244d08 /scene/animation/animation_tree.cpp | |
parent | 50bb1846d0f16fae929b2ae99824dbf90be25c92 (diff) | |
parent | 3ce843c128c7c06d9841433c399e261609f44892 (diff) |
Merge pull request #60308 from TokageItLab/remove-exp-map-in-blending
Discontinue exp map in blending
Diffstat (limited to 'scene/animation/animation_tree.cpp')
-rw-r--r-- | scene/animation/animation_tree.cpp | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/scene/animation/animation_tree.cpp b/scene/animation/animation_tree.cpp index 572e767f44..0996eb9f9f 100644 --- a/scene/animation/animation_tree.cpp +++ b/scene/animation/animation_tree.cpp @@ -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(); } } @@ -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); @@ -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 { @@ -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; } } @@ -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 { @@ -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; @@ -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; |