Skeletal Control uses a stale transform if actor transform changed

anonymous_user_410f0443
Fri, 10 Nov 2017 06:15:14 +0000
Character & Animation

In an animation blueprint, if the actor transform is changed in the “Update Animation” event, the skeletal control “Transform (modify) Bone” will not set the correct bone transform if it is set to use world space coordinates.

I did some debugging on this and found that when the engine calls
FAnimNode_ModifyBone::EvaluateSkeletalControl_AnyThread(),
The FAnimInstanceProxy struct that is passed in contains stale data. The component space transform is incorrect (out of date), which causes the bone transform to be set to the wrong value if the passed in transform is in world space.

Excerpt from Engine/Source/Runtime/AnimGraphRuntime/Private/BoneControllers/AnimNode_ModifyBone.cpp here:

It is possible to workaround the problem by changing the ModifyBone skeletal control to use component space and computing the correct transform manually in the UpdateAnimation event.

I have a small project (blueprint only) which demonstrates the issue, but it is ~20MB and this site only allows 5MB or less for an attachment.

Note that this issue is not limited to the Modify Bone skeletal control, it seems to affect all skeletal controls.

Update: link to repro project:
[SkelControlBug.zip - Google Drive][2]

Update: bug also occurs with 4.18.1

13 posts - 1 participant