Home Creators Posts Import Register Favorites Logout

Downloads

Content

One of the best parts of USD is its robust ability to reference external assets, including full scenes. When working in 3D, a modular approach is by far the best and USD is designed from the ground up with that in mind.

In a referencing-based workflow every element of a scene is saved on disk as separate components. You might have a fire simulation saved as VDB, a character animation saved as Alembic, static geometry saved as USD, and more. We can bring all these into our USD stage using references.

Simply put, a reference is an asset loaded from disk onto our stage. The most basic syntax for this is:

#usda 1.0def Xform "cube_ref" (        references = @cube_blender.usda@){}

We can also easily create a reference in USD Composer. Create a new Xform and then add a reference. (You can double-click on the Xform to rename it.)

A slightly different type of reference is a payload. The main benefit of payloads is they allow deferred loading. For example, in a large scene you might want to prevent some heavy geometry from loading right away, letting you get to work faster. To accomplish that you could reference that geometry as a payload and toggle it on and off as needed. In USD Composer there is a checkbox on each payload to handle this task:

Everything we bring in as a reference or payload becomes a new layer in our stage. A stage can consist one or many layers, all containing different elements: geometry, animations, materials, lights, and more. Right now we have one layer, a cube, but we might eventually have dozens or hundreds of layers that all combine (or "compose", to use USD terminology) to the final stage.

Let's use these concepts to recreate the chess set scene from my Gaffer series. The raw assets are attached to download at the end of this article. It's entirely possible to create the entire stage via text editor, but let's use USD Composer this time since in the long run it's not very friendly or intuitive to always be editing text files!

In an empty stage, create a hierarchy of Xforms for each element in the scene: board, pieces, pawns, knights, etc. (There are alternatives to Xforms which we'll cover later, but in this case we want every part of our scene to be transformable in 3D space.) There is no particular need to use payloads since none of the assets are very heavy, but feel free to payload away if desired!

After every asset is referenced we can position the pieces as needed using the USD Composer transform tools.

Nice! We've now got a full USD stage, composed of multiple layers, each referencing assets stored on disk.

Coming up next we'll dive into instancing, overrides and variants. Click here!

Files

Comments

No comments found for this post.