Refactor Skeleton Mapping to be handled by Skinned Model instead of Animation asset
This commit is contained in:
@@ -885,7 +885,7 @@ private:
|
||||
};
|
||||
|
||||
int32 GetRootNodeIndex(Animation* anim);
|
||||
void ExtractRootMotion(const Animation::NodeToChannel* mapping, int32 rootNodeIndex, Animation* anim, float pos, float prevPos, Transform& rootNode, RootMotionData& rootMotion);
|
||||
void ExtractRootMotion(Span<int32> mapping, int32 rootNodeIndex, Animation* anim, float pos, float prevPos, Transform& rootNode, RootMotionData& rootMotion);
|
||||
void ProcessAnimEvents(AnimGraphNode* node, bool loop, float length, float animPos, float animPrevPos, Animation* anim, float speed);
|
||||
void ProcessAnimation(AnimGraphImpulse* nodes, AnimGraphNode* node, bool loop, float length, float pos, float prevPos, Animation* anim, float speed, float weight = 1.0f, ProcessAnimationMode mode = ProcessAnimationMode::Override);
|
||||
Variant SampleAnimation(AnimGraphNode* node, bool loop, float length, float startTimePos, float prevTimePos, float& newTimePos, Animation* anim, float speed);
|
||||
|
||||
@@ -40,10 +40,10 @@ int32 AnimGraphExecutor::GetRootNodeIndex(Animation* anim)
|
||||
return rootNodeIndex;
|
||||
}
|
||||
|
||||
void AnimGraphExecutor::ExtractRootMotion(const Animation::NodeToChannel* mapping, int32 rootNodeIndex, Animation* anim, float pos, float prevPos, Transform& rootNode, RootMotionData& rootMotion)
|
||||
void AnimGraphExecutor::ExtractRootMotion(const Span<int32> mapping, int32 rootNodeIndex, Animation* anim, float pos, float prevPos, Transform& rootNode, RootMotionData& rootMotion)
|
||||
{
|
||||
const Transform& refPose = GetEmptyNodes()->Nodes[rootNodeIndex];
|
||||
const int32 nodeToChannel = mapping->At(rootNodeIndex);
|
||||
const int32 nodeToChannel = mapping[rootNodeIndex];
|
||||
if (_rootMotionMode == RootMotionMode::Enable && nodeToChannel != -1)
|
||||
{
|
||||
// Get the root bone transformation
|
||||
@@ -258,12 +258,14 @@ void AnimGraphExecutor::ProcessAnimation(AnimGraphImpulse* nodes, AnimGraphNode*
|
||||
}
|
||||
|
||||
// Evaluate nodes animations
|
||||
const auto mapping = anim->GetMapping(_graph.BaseModel);
|
||||
const Span<int32> mapping = _graph.BaseModel->GetSkeletonMapping(anim);
|
||||
if (mapping.IsInvalid())
|
||||
return;
|
||||
const bool weighted = weight < 1.0f;
|
||||
const auto emptyNodes = GetEmptyNodes();
|
||||
for (int32 i = 0; i < nodes->Nodes.Count(); i++)
|
||||
{
|
||||
const int32 nodeToChannel = mapping->At(i);
|
||||
const int32 nodeToChannel = mapping[i];
|
||||
Transform& dstNode = nodes->Nodes[i];
|
||||
Transform srcNode = emptyNodes->Nodes[i];
|
||||
if (nodeToChannel != -1)
|
||||
|
||||
Reference in New Issue
Block a user