Hello, we are encountering some issues due to the way sequencer performs its transformation updates. In our case we have a sequence that has a character with a keyed transform and then we have a SkeletalAnimationTrack with a root motion applied to the character’s skeletal mesh, this track is set to use ‘swap root bone actor’.
In the above case we notice that the keyed transform is first applied independently through the component transform track. More specifically it is applied in FIntermediate3DTransform::ApplyTransformTo(USceneComponent* SceneComponent, const FIntermediate3DTransform& Transform)
Then the root motion transform update from the MovieSceneSkeletalAnimationSystem doesn’t happen until the associated SkeletalMeshComponent’s OnBoneTransformsFinalizedMC is broadcast, triggering FBoneTransformFinalizeData::BoneTransformFinalized().
The above results in the character technically moving twice per frame, every frame. This can lead to some edge cases such as passing through and triggering volumes each frame, especially when the root motion animation takes the character far from their keyed transform. It’s also not a ‘cheap’ operation to move the character multiple times.
Is there any plan to add some sort of transform accumulation to the moviescene system in order to only apply a final transform once? I have looked at doing it myself, but it’s a bit of a challenge due to the the root motion transform waiting on OnBoneTransformsFinalizedMC to be broadcast (which occurs outside of the bounds of the MovieScene ECS system) before applying its updates. Hoping you have an idea if something like this is planned or any other suggestions to address the issue.