Control Rig Runtime Asset on a Control Rig component does not show up controls in Sequencer!

When using new Control Rig Runtime Asset on a Control Rig component inside Actor Blueprint, it will not show animation tracks when adding this Actor Blueprint to a Level Sequence. If you use old Control Rig asset, it still works as it should.

If you drag the new Control Rig Runtime Asset directly to sequencer, then it works properly - just not when it is assigned to Control Rig component inside an Actor Blueprint.

Additional issue - Control Rig component now uses function “Set Control Rig Asset Reference” , which takes in special “ControlRigAssetStrongReference” struct. But there is no way to make it dynamically in Blueprints (You can create the struct, but it has no exposed members to set the actual asset). There is nothing exposed to Blueprints in the C++ code of it. Previously you could set Control Rig Class directly, but now in 5.8 it is deprecated!!

Additional question - What is the idea behind the new “Control Rig Runtime Asset” ? Are there any significant differences. There is nothing in the documentation explaining this huge change.

[Attachment Removed]

Steps to Reproduce

  1. Create new (in 5.8) Control Rig Runtime Asset (Or just convert old one)
  2. Create new Blueprint Actor and add “Control Rig” component.
  3. Set Control Rig Asset Reference for the CR component to the new runtime asset
  4. Drag this Blueprint Actor into Level Sequence for animation:
    1. Control rig controls no longer show up in sequencer - just a plain track called “ControlRig”
  5. Assign old Control Rig asset to the CR component and drag Blueprint to Sequencer - it works as it should, all control tracks are shown.

If you drag Control Rig Runtime Asset directly to sequencer, then it works properly - just not when it is assigned to Control Rig component inside an Actor Blueprint.

[Attachment Removed]

Hi, sorry for the delay getting back to you on this. Our offices have been closed for the last couple of weeks so we’re in the process of catching up now.

Thanks for reporting this issue. We found it recently and have implemented a fix that’ll go into the 5.8.2 hotfix release. If you’re able to integrate source changes, the modification was to FControlRigParameterTrackEditor::AddControlRigFromComponent so that the function changes from:

void FControlRigParameterTrackEditor::AddControlRigFromComponent(FGuid InGuid)
{
	const TSharedPtr<ISequencer> Sequencer = GetSequencer();
	UObject* BoundObject = Sequencer ? Sequencer->FindSpawnedObjectOrTemplate(InGuid) : nullptr;
 
	if (AActor* BoundActor = Cast<AActor>(BoundObject))
	{
		TArray<UControlRigComponent*> ControlRigComponents;
		BoundActor->GetComponents(ControlRigComponents);
		for (UControlRigComponent* ControlRigComponent : ControlRigComponents)
		{
			if (UControlRig* CR = ControlRigComponent->GetControlRig())
			{
				AddControlRig(CR->GetClass(), BoundActor, InGuid, CR);
			}
		}
	}
}

to:

void FControlRigParameterTrackEditor::AddControlRigFromComponent(FGuid InGuid)
{
	const TSharedPtr<ISequencer> Sequencer = GetSequencer();
	UObject* BoundObject = Sequencer ? Sequencer->FindSpawnedObjectOrTemplate(InGuid) : nullptr;
 
	if (AActor* BoundActor = Cast<AActor>(BoundObject))
	{
		TArray<UControlRigComponent*> ControlRigComponents;
		BoundActor->GetComponents(ControlRigComponents);
		for (UControlRigComponent* ControlRigComponent : ControlRigComponents)
		{
			if (UControlRig* CR = ControlRigComponent->GetControlRig())
			{
				AddControlRig(CR->GetAssetReference(), BoundActor, InGuid, CR);
			}
		}
	}
}

This passes the new control rig asset reference, which is populated after upgrading to 5.8, to the sequencer track rather than the class, since the class no longer contains any information about the specific rig following the refactor.

For the second issue that you mentioned, it’s by design that the properties within the control rig asset reference structs aren’t exposed to blueprint so you don’t have to worry about whether you’re using a new asset or a legacy one. Instead, you should be able to create a variable of that type on your blueprint, which you should be able to populate with rigs that were created either before or after the refactor.

[Image Removed]If that doesn’t give you what you need, let me know.

In terms of the reason for the refactor, it was around performance. We regularly see teams running into issues with performance of control rig, particularly the initialization overhead, so there has been a focus recently on making improvements. This was part of that work - removing the overhead associated with blueprint-based assets.

[Attachment Removed]

Thank you! I will wait for that 5.8.2 hotfix!

[Attachment Removed]

I’ll close out this thread but if you run into any issues once the release is available feel free to reopen it

[Attachment Removed]