Control Rig Component not animating curves on Skeletal Mesh

Since updating to Unreal Engine 5.3, Control Rig Components no longer drive animation curves. This seems to be due to a change in the ValidateMappingData function of the UControlRigComponent class.

As can be seen below, when a mapped element is of type ERigElementType::Curve, both its SubIndex and ElementIndex will always end up as INDEX_NONE. This was not the case in prior versions, where curves are handled and their SubIndex set to a valid value and subsequently their ElementIndex was not overridden to be invalid.

This leads to an issue later on in the TransferOutputs function, which from what I can tell is responsible for populating both the StoredTransforms and StoredCurves of the FControlRigAnimInstanceProxy. Near the beginning of the function is this check:

Since the ElementIndex of any curve elements was explicitly set to INDEX_NONE earlier, it will never proceed past this point for curves. Which means they will never be added to the StoredCurves of the Animation Instance and as a result, curve based animation will never be rendered via the Control Rig Component.

So my question is whether anyone has any insight or further information as to if I’m missing/misunderstanding something here, or if this is a genuine oversight?

Hi, this seems to be an oversight with the curve refactor work that went on for this release. Curves are no longer identified by index, but by name, so the various places that deal with curves need to be updated. This particular code path looks to have been missed in the larger change.

Hi, we have a tentative fix for this issue. I’ve attached a patch file with some changes to ControlRigComponent.cpp. This removes the validation code when mapping curves to the component since we don’t have the curves in the skeleton to validate against in 5.3. So with this change, any curves in the control rig should be copied over to the component.
Let me know if this resolves the issue for you.
28259186.patch (4.5 KB)

We tried out the patch and I can confirm it works, thanks! However, since we are distributing a plugin without the engine, we aren’t distributing any source code changes to the engine. We would need this to be changed on your end. Is this going to be included in an upcoming patch release?

Heya,

I seem to be getting this issue in 5.3.2. A controlrig that changes morph targets as curves works when added manually to a sequencer, but not when it already existed in a blueprint.

Is this bug meant to be fixed in 5.3.2?

I’m not quite sure what to do with a .patch file either.