Browse Source

Fix rest update process by dirty flag to not take into account pose

Silc Lizard (Tokage) Renew 4 months ago
parent
commit
4940c3c1d7
1 changed files with 6 additions and 3 deletions
  1. 6 3
      scene/3d/skeleton_3d.cpp

+ 6 - 3
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) {