USD, or Universal Scene Descriptor, is a scene description system developed by Pixar Animation Studios for the interchange of complex 3D data between different software applications. It is designed for large-scale production pipelines, allowing artists, technical directors, and developers to work with highly detailed scenes that evolve over time.
USD achieves these objectives through a combination of binary storage, layer-based composition, and a schema that maps to native 3D constructs such as prims, attributes, and relationships.
A USD file is a collection of layers arranged in a composition arc. Each layer can be thought of as a text or binary file that contributes to the final scene description.
The composition arc resolves how layers are combined to produce the final stage. It is defined by the layerStack and the editTarget.
In USD, everything in a scene is a prim. Prims can be primitives, like meshes and cameras, or containers, like Scope objects.
Prims form a tree hierarchy. The root prim is typically /, and all other prims are nested beneath it.
Attributes store data values on prims, while relationships reference other prims.
double, float3, matrix4d, etc.displayGroup).Variants allow multiple configurations of a prim or subtree to coexist, facilitating work on multiple versions of an object.
def Mesh "character" (
variantSets = [
"shading" : [
"diffuse" : (
"materials" = [ @material1@ ]
),
"metallic" : (
"materials" = [ @material2@ ]
)
]
]
)
The active variant can be set via the variantSet selector in the stage.
USD provides three mechanisms for reusing data:
These mechanisms are crucial for modular pipeline design.
When a user edits a prim, the changes are written to the active layer, known as the editTarget. The edit target is typically the topmost layer in the composition arc.
The layerStack is a list of layers that contribute to the stage. The order of layers determines precedence.
Editing operations are recorded in the edit layer, leaving the base layers untouched.
USD provides a C++ API and Python bindings for programmatic manipulation.
stage = Usd.Stage.Open("scene.usd")prim = stage.GetPrimAtPath("/character")prim.GetAttribute("visibility").Get()variantSet selectors carefully to avoid accidental overrides.usdcat for quick inspection of large files.Below is a simple USD parser that visualizes the hierarchy of a USD file. Edit the sample text and press “Render” to update the tree.