This repository is a collection of simple USD projects. Each project shows off a single feature or group of USD features.
This repository is split into six categories
Features highlight a single class or set of functions for working in USD.
Concepts take features explained in Features and extends them to real-world examples.
Tricks are simple, isolated ideas using USD Features.
Plugins show how to customize USD to suit your pipeline.
Tools are miscellaneous scripts that are built to do a specific task, with USD.
References are useful pages for finding more information about USD and how to interact with it in your projects.
Every project in this repository will show how to work in Python, C++, and USDA wherever possible.
If a concept folder is trying to show off a USD feature but it takes a lot of code then the top-level README.md file is there to summarize the important bits. It may also refer to other resources for where to read more.
Lastly, source-code files may contain explanations for what is shown.
Each of these lines is marked with XXX
.
Unless a C++ project has specific instructions, every project compiles and executes using the following commands:
cd {some_concept_cpp_folder}/build
USD_INSTALL_ROOT=/wherever/you/installed/USD/to cmake ..
make
./run_it
USD_INSTALL_ROOT
typically defaults to /usr/local/USD
on Linux but your location may vary.
See USD's build documentation for details.
Python modules can always run using python name_of_module.py
Here are links of a recommended viewing order for every project in this repository.
Adding comments to USD files
SetKind onto UsdPrim
specializes composition arc
Using Prim AssetInfo
Defining customizable userProperties
Edit Targets
Value resolution caching
Computing bounding boxes, using UsdGeomImageable and UsdGeomBBoxCache
Pixar's specializes example
Using "purposes" on UsdPrim objects
UsdResolveInfo - Finding where opinions come from
Enable debugging messages and write your own
Profiling USD stages
How to use Value Clips
Setting Time Varying Attributes With Sdf
SdfChangeBlock - Efficient USD authoring
SdfBatchNamespaceEdit and SdfNamespaceEdit - Efficient USD authoring
UsdStageCache - caching USD stages
TfNotice - Run functions when a stage changes, using callbacks
TfNotice - Send your own custom callbacks
Valid Model Hierarchies
Understanding VariantSets
Overriding VariantSets
How to uniquify an instanced UsdPrim
UsdRelationship Forwarding
Using VariantSets in a production scenario
A practical example of the "specializes" composition arc
The "specializes" composition arc as a fallback mechanism
Reference a Prim in the current SdfLayer
How to find "Orphaned" overs
A mesh with a material
Asset composition arcs - how subLayers, references, and payloads work together
Printing and modifiying prims using the C++ STL
Custom traversals with boost
Traversing instanced prims
Variant auto-selections - Using VariantSets to modify other VariantSets
Copy opinions from a VariantSet onto another Prim
Find An Attribute's Source
Find a Prim's bound material (includes collections API)
2-pass exporting - Export USD stages 100x faster
Flatten a USD layer stack
Use weaker layers to modify stronger layers
Multi-payloads - Yes, you can have more than one
Getting Prims through VariantSets
usdview_auto_reloader - Update layers in usdview automatically
usdview_root_loader - Recursively load / unload Prim payloads
usdview_purpose_swap - Change between proxy and render purposes with a single button
usdview_copy_camera - Make a prim in usdview to represent the current view
VariantSet fallback selections
VariantSet selection export polices
Adding custom metadata
Custom USD schemas
A custom ArResolver plugin
usd_searcher - A command-line tool for searching USD files
Exporting UsdSkel from scratch
extentsHint and bounding boxes
Link Python Documentation To USD's Documentation
Understanding usdview
The USD supported plugin mastersheet
Where to find more resources
There's also Anki deck for this repository, which you can download by clicking here
See This wiki page for a list of planned topics that will be added in the future.
This repository is a constant WIP. If there's something that you'd like to see written about, please suggest it as an issue so that I / others can pick it up and work on it. Also, if you have something that you'd like to contribute, please make a PR. Submissions are welcome!
But note: This repository may not actually show the best way to do things in USD. It's just a collection of (my) personal findings. Also, as Pixar comes out with new USD releases and learning resources, this information may become out-of-date. Always prefer primary guides and documentation over anything that you see here.
Tested with: