Control Rig - Control Shapes manipulation issues since 5.6

Hi, I wanted to signal a regression we encountered in our project concerning the control rig tools.

When baking our character sequencer animations to control rig (we use the Reallusion CR_CC_Body rig), we are no longer able to use control shapes to animate the character as any translation Drag movement is blown out of scale and sends the gizmo to a better place far away.

Tracking the issue, it seems that this behavior has been introduced by this change in FControlRigEditMode::MoveControlShape:

Control Rig: Avoid drifting when manipulating rig in a layered contro… · EpicGames/UnrealEngine@666fb6b

All our use cases work again if we change the way to compute CurrentTransform. If we ignore the ShapeActor->StaticMeshComponent branch and only deduce the CurrerntTransform as CurrentTransform = GetControlShapeTransform(ShapeActor) * ToWorldTransform;

Selecting multiple shapes at once and moving them simultaneously appears functional as well.

We also noticed that triggering any update (even with a Drag to 0) would result in an incorrect resulting transform.

We believe that reference changes between shape, rig, static mesh, and parent, are not coherent throughout the move operations, causing undefined behavior.

Is it safe to ignore this branch or is there a better fix?

Steps to Reproduce
Create a sequencer with characters.

Bake character body animation into control rig from sequencer using the Reallusion CR_CC_Body rig.

Try to use any control rig shape to tweak said animation.

Observe the shape is sent far away in an uncontrollable fashion.

Hey there,

We’re unable to repro this issue with the reallusion rig or any other rig, can you share any files or sample source projects to help us identify the issue?

Dustin

Hi Dustin,

I feared this was a hard to reproduce issue.

Unfortunately isolating a sequence with our characters and custom source is unfeasible at the moment, however I can try to provide more debug information:

We start with this Global Transform on a Shape that has a SkeletalMesh:

[Image Removed]

The shape’s transform is moved to the World space and updated using ToWorldTransform:

[Image Removed]

Then we get the CurrentTransform as the shape’s GlobalTransform moved to parent space using ParentTransform (to simplify I removed all rotation from parent skeletal mesh):

[Image Removed]

Which starts us with this CurrentTransform:

[Image Removed]

In this case, I want to translate the hand, so the current transform is modified properly as follows:

[Image Removed]

Then, as the Transform has changed, we compute the new transform retative to WorldSpace:

[Image Removed]

Notice the difference between the initial transform, and the new transform, despite the Drag value being so small.

If it helps, here is also the shape’s local transform:

[Image Removed]

and the transform space (which is the initial CurrentTransform):

[Image Removed]

Finally, the misplaced NewTransform is applied to the control:

[Image Removed]

Down to the actual application:

[Image Removed]

There may be issues to to the parent space used to compute CurrentTransform, but I believe we could still be in a wrong space when we compute NewTransform given that even the rotation changes despite the shape not being rotated.

I did not have time to investigate this further as ignoring the first if gets us back to intended behavior in all our use cases though.

I hope this helps you, let me know if I can provide anything else that’s not the full project.

Best,

Karim

Thank you for the information. I’ll run this by the developer who worked on this and get back to you. An option to share could be to mark this as confidential, and then you could upload the character and rig you are working with as a zip file to use in our debugging efforts.