From 4940c3c1d710991be69b1486a32aa5a562389146 Mon Sep 17 00:00:00 2001 From: "Silc Lizard (Tokage) Renew" <61938263+TokageItLab@users.noreply.github.com> Date: Wed, 30 Apr 2025 03:44:03 +0900 Subject: [PATCH] Fix rest update process by dirty flag to not take into account pose --- scene/3d/skeleton_3d.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/scene/3d/skeleton_3d.cpp b/scene/3d/skeleton_3d.cpp index 0ca3e1678e..90e92e60b3 100644 --- a/scene/3d/skeleton_3d.cpp +++ b/scene/3d/skeleton_3d.cpp @@ -1116,6 +1116,12 @@ void Skeleton3D::_force_update_bone_children_transforms(int p_bone_idx) const { // Loop through nested set. for (int offset = 0; offset < bone_size; offset++) { + if (rest_dirty) { + int current_bone_idx = nested_set_offset_to_bone_index[offset]; + Bone &b = bonesptr[current_bone_idx]; + b.global_rest = b.parent >= 0 ? bonesptr[b.parent].global_rest * b.rest : b.rest; // Rest needs update apert from pose. + } + if (!bone_global_pose_dirty[offset]) { continue; } @@ -1140,9 +1146,6 @@ void Skeleton3D::_force_update_bone_children_transforms(int p_bone_idx) const { b.global_pose = b.rest; } } - if (rest_dirty) { - b.global_rest = b.parent >= 0 ? bonesptr[b.parent].global_rest * b.rest : b.rest; - } #ifndef DISABLE_DEPRECATED if (bone_enabled) {