Best Workflow for Working with USDs that Receive Animation

Hello everyone,

I’m exploring different workflows for working with USDs that involve animation, and I’m a bit confused about the best approach. I watched a video that demonstrated an interesting workflow that works well in Maya , but it doesn’t seem to apply to all programs. Currently, I’m exploring Houdini.

In my mind, the ideal approach would be:

  • Having a main asset in USD.
  • Referencing that asset to apply animations.
  • If I need to change something in the main asset, I would modify it directly, and the references would update automatically.

The problem is that each software seems to handle USD differently. Even though I can make changes via code, I would prefer to use that only as a last resort. I’m looking for a workflow that is as efficient and universal as possible, especially since I’m working with Houdini right now.

My question is: Am I missing something essential here? Is there a recommended approach for managing animations in USDs that works well across different software (Houdini, Maya, etc.)?

Any tips or suggestions would be greatly appreciated!

Thanks! :blush:

Hi Wallace,

Are you looking for a workflow for yourself only, or for a team of 200 people, or something in-between? There are big differences in workflows between a single user and a team. The workflow you see in the video you linked is good for a single artist, but I’m not a fan of it for a team. And as you noticed, it’s only good for Maya.

What I recommend is to have your asset saved as USD, with one or several layers depending on your preferences. This would contain the geometry and the shading, but not the rig. USD files cannot contain rigging. This can be done in any DCC. Make sure you put all the meshes and other geometry objects under an xform which is under the main parent.

asset
   - meshes
      - mesh1
      - mesh2
      - etc.

You rig your asset in the DCC of your choice and you make sure that you don’t modify the hierarchy from modeling. You add a new xform under the main parent that contains all the new elements created by rigging. If you realize you need to change the modeling hierarchy to help with the rigging, you go in the original asset file and you make a new version.

asset
   - meshes
      - mesh1
      - mesh2
      - etc.
   - rig
      - mainController
         - CoG
         - etc.

Then you load that rig as a Maya reference or as a Houdini Digital Asset in your shot animation scene. You animate. You then select the meshes object and you Export Selection to USD with the shot time range. This is the animation cache, and it matches the modeling hierarchy perfectly. If you’re using Houdini with APEX, the Scene Invoke SOP allows to select the bits you want to export.

Then, wherever you want to assemble the shot USD file (it could be in a layout scene, a lighting scene or a dedicated scene (we do it with a python script)), you reference in the USD asset and put it anywhere in the shot hierarchy. Finally, you add a reference arc on the meshes prim of that asset to load the animation cache. This file will override all the meshes under that prim with animated point positions and/or transforms.

The advantage of working like this is that if you want to make a change to the shading of the asset, you don’t have to go back to the animation scenes and export again since the shading is completely independent of the rigging and animation. If you want to go one step further, you put the references to the animation caches in an animation layer, allowing you to create a characterFX layer on top to contain the references to the cloth simulation caches.

This whole workflow might be a bit overkill for a single artist, but it becomes very useful for a even small team of only 10 people.

There are many details to be ironed out in this over-simplified explanation, but it gives you an idea of the whole process.

F

Hi, Francois

Let me see if I got your explanation: For a good workflow for a team, I need to create a USD file with an Xform for the meshes and shading. Then, I add or reference a rig using a DCC within a separate Xform. After animating the rig, I export the animation as a cache USD and add it as a new layer within the same USD file.

asset
  - meshes (Xform)
    - mesh1
    - mesh2
  - rig (Xform)
  - animation (Xform)

But how exactly can shading or model changes be applied during the rigging stage? Should the meshes and shading be part of the same Xform as the model? I don’t completely understand this part. USD doesn’t work with rigs, but a rig works with USD meshes and shading?

Thanks!