Unable to share animations across compatible skeletons in RCP3.

I’m working with an asset pack that contains multiple characters with a common skeletal hierarchy. This asset pack also contains animations for these characters as separate files.

i.e.:

  • run
  • pick up
  • idle
  • throw

In RCP2, I was able to add these animations to an Animation Library component without issue. However, in RCP3, I cannot add the skeletal animations to compatible characters. The only animations available are the transform animations, which do not animate the character. So in the animation library, I will see

i.e.:

  • run_transform
  • idle_transform
  • throw_transform

But not

  • run
  • idle
  • throw

Is there something that I need to do to make the skeletal animations visible?

I’ve tried adding the animation library at various levels across the hierarchy and it doesn’t seem to make a difference. Only the _transform animation is visible.

I can verify that the animations themselves are compatible by manually editing the tm_entity for a character and adding the animation clip. I have to do this while RCP3 is closed but it works.

I did notice that each animation is referencing a skeleton uuid. Is the UI only exposing skeletal animations with a matching skeleton uuid?

Lastly, I can import both the character and the animation files as USD in a RealityKit app and successfully assign animations.

Answered by Vision Pro Engineer in 899235022

Hello @PlatformGoblin, thank you for your question!

You diagnosed this correctly. The Animation Library only lists skeletal clips whose skeleton matches the one on the entity you're editing. Transform clips aren't filtered that way, which is why those are all you're left with.

Do you see any errors or messages in Reality Composer Pro, especially when importing the animations?

Reality Composer Pro compares four things when importing a skeleton: joint count, joint names, each joint's parent, and the rest pose per joint within a small tolerance. In your source USDs, compare the joints array, restTransforms, and metersPerUnit on the stage. A unit-scale mismatch or a baked first frame in restTransforms breaks the match even when joint names look right.

If you have the animation assets in Reality Composer Pro, you can select the Target Skeleton in the Animation Settings section of the inspector. Updating this to use your desired skeleton may be the fix you are looking for.

If you haven't already, check out the Chaparral Village sample project. It's large, but the main character uses a set of animations you could reference, in case your implementation has diverged from the sample's example.

If none of that resolves it, filing feedback with an example project attached would help us give you an exact answer. You can file via Feedback Assistant and share the ticket number here. See Bug Reporting: How and Why? for more guidance. If you provide a project that reproduces your issue, then share the ticket number here, I can take a look myself and get you the exact solution you need.

Thank you!

Accepted Answer

Hello @PlatformGoblin, thank you for your question!

You diagnosed this correctly. The Animation Library only lists skeletal clips whose skeleton matches the one on the entity you're editing. Transform clips aren't filtered that way, which is why those are all you're left with.

Do you see any errors or messages in Reality Composer Pro, especially when importing the animations?

Reality Composer Pro compares four things when importing a skeleton: joint count, joint names, each joint's parent, and the rest pose per joint within a small tolerance. In your source USDs, compare the joints array, restTransforms, and metersPerUnit on the stage. A unit-scale mismatch or a baked first frame in restTransforms breaks the match even when joint names look right.

If you have the animation assets in Reality Composer Pro, you can select the Target Skeleton in the Animation Settings section of the inspector. Updating this to use your desired skeleton may be the fix you are looking for.

If you haven't already, check out the Chaparral Village sample project. It's large, but the main character uses a set of animations you could reference, in case your implementation has diverged from the sample's example.

If none of that resolves it, filing feedback with an example project attached would help us give you an exact answer. You can file via Feedback Assistant and share the ticket number here. See Bug Reporting: How and Why? for more guidance. If you provide a project that reproduces your issue, then share the ticket number here, I can take a look myself and get you the exact solution you need.

Thank you!

Thank you. This was very helpful. I was able to find and fix my problems thanks to your comment.

The issues preventing the skeletons from matching were that

  • the rest transforms were different
  • the joints were ordered differently between skeletons

Notes

  • One of the test characters had a (valid) subset of the expected bones. Fixed by adding the missing bones.

  • Blender appears to be setting the rest position for the skeleton to the starting frame of the animation. This causes every exported animation to have a different restTransform. Fixed by correcting the rest transform after export.

  • Blender does not export joints in alphabetical order. The order depends on an internal representation. Which means that even if the hierarchies match in Blender's outliner, they may not match in the exported USD. Fixed by reordering joints and related data after export so they all match.

The rest pose and animations had the following joint order.

I'm hoping the Blender issues are user error on my part, but I could not find any way to change the joint export order.

Unable to share animations across compatible skeletons in RCP3.
 
 
Q