From d67c8fee9922c48f4c61802199edba2c716b34b3 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Thu, 18 Jun 2026 14:22:04 +0200 Subject: [PATCH] Fix crash when skeleton node has invalid binding in Animated Model pose --- Source/Engine/Level/Actors/AnimatedModel.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Source/Engine/Level/Actors/AnimatedModel.cpp b/Source/Engine/Level/Actors/AnimatedModel.cpp index 0121ab212..a7f15349b 100644 --- a/Source/Engine/Level/Actors/AnimatedModel.cpp +++ b/Source/Engine/Level/Actors/AnimatedModel.cpp @@ -1062,13 +1062,17 @@ void AnimatedModel::UpdateBounds() GetLocalToWorldMatrix(world); const BoundingBox modelBox = model->GetBox(world); BoundingBox box = modelBox; - if (GraphInstance.NodesPose.Count() != 0) + auto& skeleton = model->Skeleton; + if (GraphInstance.NodesPose.Count() == skeleton.Nodes.Count()) { // Per-bone bounds estimated from positions - auto& skeleton = model->Skeleton; const int32 bonesCount = skeleton.Bones.Count(); for (int32 boneIndex = 0; boneIndex < bonesCount; boneIndex++) - box.Merge(_transform.LocalToWorld(GraphInstance.NodesPose[skeleton.Bones.Get()[boneIndex].NodeIndex].GetTranslation())); + { + int32 nodeIndex = skeleton.Bones.Get()[boneIndex].NodeIndex; + if (GraphInstance.NodesPose.IsValidIndex(nodeIndex)) + box.Merge(_transform.LocalToWorld(GraphInstance.NodesPose.Get()[nodeIndex].GetTranslation())); + } } // Apply margin based on model dimensions