From e85d6e9c4c5c9d242ecacb6f6264d0c8ec814305 Mon Sep 17 00:00:00 2001 From: Benjamin Jillich <43751992+amzn-jillich@users.noreply.github.com> Date: Mon, 19 Jul 2021 23:01:49 -0700 Subject: [PATCH] Fixing a crash for animated transforms having a bone as parent (#2255) Signed-off-by: Benjamin Jillich --- .../RCExt/Motion/MotionDataBuilder.cpp | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/Gems/EMotionFX/Code/EMotionFX/Pipeline/RCExt/Motion/MotionDataBuilder.cpp b/Gems/EMotionFX/Code/EMotionFX/Pipeline/RCExt/Motion/MotionDataBuilder.cpp index 3c4c035f89..130aa41931 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Pipeline/RCExt/Motion/MotionDataBuilder.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Pipeline/RCExt/Motion/MotionDataBuilder.cpp @@ -172,26 +172,27 @@ namespace EMotionFX const SceneDataTypes::ITransform* transform, const SceneDataTypes::IBoneData* bone) const { + AZ::SceneAPI::DataTypes::MatrixType nodeTransform = AZ::SceneAPI::DataTypes::MatrixType::CreateIdentity(); + if (bone) + { + nodeTransform = bone->GetWorldTransform(); + } + else if (transform) + { + nodeTransform = transform->GetMatrix(); + } + if (nodeIndex != rootBoneNodeIndex) { const SceneContainers::SceneGraph::NodeIndex parentNodeIndex = sceneGraph.GetNodeParent(nodeIndex); const SceneDataTypes::IGraphObject* parentNode = sceneGraph.GetNodeContent(parentNodeIndex).get(); if (const SceneDataTypes::IBoneData* parentBone = azrtti_cast(parentNode)) { - return parentBone->GetWorldTransform().GetInverseFull() * bone->GetWorldTransform(); + return parentBone->GetWorldTransform().GetInverseFull() * nodeTransform; } } - if (bone) - { - return bone->GetWorldTransform(); - } - else if (transform) - { - return transform->GetMatrix(); - } - - return AZ::SceneAPI::DataTypes::MatrixType::CreateIdentity(); + return nodeTransform; } AZ::SceneAPI::Events::ProcessingResult MotionDataBuilder::BuildMotionData(MotionDataBuilderContext& context)