Educational USD tutorial project demonstrating how to create the smallest possible viable USD (Universal Scene Description) programs using Pixar's official USD distribution. This project tackles one of the biggest barriers to USD adoption - the notoriously complex build process.
To provide clear, minimal examples and build recipes that help developers understand and integrate USD into their projects without getting overwhelmed by USD's extensive feature set and complex build requirements.
- Hello Cube: Minimal C++ program that creates a simple cube geometry
- File:
src/main.cpp(42 lines including comments) - Output: Creates
cube.usdafile with basic USD scene description - Dependencies: Core USD libraries (UsdStage, UsdGeom)
Philosophy: Different projects need different USD configurations
Recipe Status (as of current):
- ✅ MacOS dynamic (no python) - Complete
- ✅ MacOS dynamic (python) - Complete
- ✅ MacOS static monolithic (no python) - Complete
- 🚧 MacOS static (no python) - Work in progress
- 🚧 Windows dynamic (no python) - Work in progress
- ❓ Ubuntu - Mentioned as "a struggle"
tinyusd/
├── src/
│ └── main.cpp # Minimal "Hello Cube" USD program
├── include/
│ └── tinyusd_SceneProxy.h # USD scene management wrapper
├── cmake/
│ ├── FindUsd.cmake # USD discovery for CMake
│ ├── FindTBB.cmake # Intel TBB discovery
│ └── Utilities.cmake # Build utilities
├── recipes/ # Build configuration recipes
│ ├── macos-dynamic-nopy/ # MacOS dynamic build (no Python)
│ ├── macos-dynamic-py/ # MacOS dynamic build (with Python)
│ ├── macos-ms-nopy/ # MacOS static monolithic
│ └── windows-dynamic-nopy/ # Windows dynamic (WIP)
└── packages/ # Build output/packaging
- USD (pxr): Pixar Universal Scene Description
- Intel TBB: Threading Building Blocks
- OpenGL: For graphics abstraction (garch)
- CMake 3.11+: Modern build system
- C++17: Language standard
The main program demonstrates:
- Stage Creation:
UsdStage::CreateNew("cube.usda") - Transform Hierarchy: Creating root Xform at
/HelloCube - Geometry Definition: UsdGeomCube under
/HelloCube/Cube - Attribute Setting: Cube size (2x2x2 units)
- File I/O: Saving stage to disk
Universal Scene Description (USD) is Pixar's open-source framework for:
- Scene Description: 3D scene composition and interchange
- Pipeline Integration: VFX/animation production workflows
- Asset Management: Layered, non-destructive asset composition
- Industry Standard: Adopted by Pixar, Disney, NVIDIA, Apple, others
- Adoption Barrier: USD's power comes with complexity
- Build Complexity: Official build system is overwhelming
- Learning Curve: Full USD examples are often too complex
- Integration Challenge: Hard to know minimal requirements
- Minimal Viable Product: Demonstrates core USD concepts
- Build Demystification: Multiple approaches to USD integration
- Progressive Complexity: Start simple, add features incrementally
- Real-World Focused: Practical integration patterns
Different applications need different USD builds:
Static vs Dynamic:
- Dynamic: Smaller executables, runtime dependencies
- Static: Larger executables, self-contained
- Monolithic: Everything in one library (simplest)
Python vs No Python:
- With Python: Full USD ecosystem, scripting support
- Without Python: Reduced dependencies, C++-only
Platform Considerations:
- MacOS: First-class support, all recipes
- Windows: MSVC-specific challenges
- Linux: Package manager complications
- Author: Nick Porcino (2019+)
- Problem: USD integration shouldn't require PhD in build systems
- Solution: Curated minimal examples with clear build paths
- Highly work in progress (per README)
- MacOS-focused: Most complete recipe set
- Community-oriented: "Help wanted!" for other platforms
- First USD Program: Understand basic concepts
- Build System Study: See how USD integrates
- Minimal Dependencies: Learn core requirements
- Prototyping: Quick USD experiments
- Build Template: Starting point for larger projects
- Dependency Analysis: Understand what you actually need
- Teaching Material: Clean examples for USD education
- Build Documentation: Real-world build configurations
- Platform Porting: Templates for new platforms
- src/main.cpp - The minimal USD program itself
- CMakeLists.txt - Build integration example
- recipes/README.md - Comprehensive build guide
- cmake/FindUsd.cmake - USD discovery and configuration
- include/tinyusd_SceneProxy.h - USD scene management patterns
- Complete Windows Recipe: Finish Windows dynamic build
- Linux/Ubuntu Support: Tackle package management challenges
- Documentation: Expand recipe explanations
- More Examples: Additional minimal USD programs
- Advanced Recipes: Static builds, custom configurations
- Integration Patterns: Real-world usage examples
This project sits at the intersection of:
- Computer Graphics: 3D scene description technology
- Software Engineering: Build system design and dependency management
- Developer Experience: Making complex tools accessible
- Industry Standards: Understanding production pipelines
- OpenUSD: The broader USD ecosystem
- Hydra: USD's rendering framework
- Material X: USD material description
- Alembic: Alternative scene description format
For immediate orientation: Start with src/main.cpp to see minimal USD in action, then explore recipes/ to understand build approaches. This project makes USD accessible without drowning in complexity.