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)