Optimize Anim Graph retarget to use cached pose to avoid dynamic memory allocation

#3827
This commit is contained in:
Wojtek Figat
2026-02-09 18:02:58 +01:00
parent 7b7a92758f
commit a1399c5157

View File

@@ -336,11 +336,13 @@ void AnimGraphExecutor::Update(AnimGraphInstanceData& data, float dt)
SkeletonData* animResultSkeleton = &skeleton;
// Retarget animation when using output pose from other skeleton
AnimGraphImpulse retargetNodes;
if (_graph.BaseModel != data.NodesSkeleton)
{
ANIM_GRAPH_PROFILE_EVENT("Retarget");
auto& targetSkeleton = data.NodesSkeleton->Skeleton;
if (context.PoseCacheSize == context.PoseCache.Count())
context.PoseCache.AddOne();
auto& retargetNodes = context.PoseCache[context.PoseCacheSize++];
retargetNodes = *animResult;
retargetNodes.Nodes.Resize(targetSkeleton.Nodes.Count());
Transform* targetNodes = retargetNodes.Nodes.Get();