Description

The orientation warping node breaks incoming poses where bones are already in component space. This is because, in EvaluateSkeletalControl_AnyThread, we are repeatedly setting bone transforms directly on the output pose using SetComponentSpaceTransform. That's fine when any child bones are in local space, but when any of the child bones are in component space, this will break since SetComponentSpaceTransforms doesn't update the rest of the hierarchy. This is particularly problematic for Orientation Warping as we modify the root bone, so any other bone in the hierarchy could be affected.
A secondary issue with this node is that because we are applying the modified transforms directly to the output pose, and not OutBoneTransforms, the bones modified by the node aren't blended correctly if the user changes the alpha value. See FAnimNode_SkeletalControlBase::EvaluateComponentSpace_AnyThread for how the skeletal control nodes are supposed to blend the output/modified transform buffer back onto the output pose.
I've also attached a patch that the user who reported the issue submitted. This fixes the issue with the incoming component space bones, but it still sets the root transform on the output pose directly rather than using OutBoneTransforms.

Steps to Reproduce
  1. Open the attached project
  2. Open ABP_OrientationWarpingRepro
  3. Note the pose of the character in the editor viewport and specifically the orientation
  4. Connect the CopyBone node so it gets evaluated
  5. Note how the pose of the character has changed, the pelvis has lost the rotation from the root so is now facing forward

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-273427 in the post.

0
Login to Vote

Unresolved
CreatedApr 17, 2025
UpdatedApr 23, 2025
View Jira Issue