Repository navigation
v0.7.0
This release closes one of the last large gaps in the library: the schema registry. usd::SchemaRegistry builds a type table from each family's manifest and schematics, and usd::PrimDefinition composes the typed and applied tiers over it. That reaches the rest of the API — Prim::is_a answers against the whole base chain, Prim::apply_api validates an application before authoring it, auto-applies and built-in inclusions expand at registry build, and a prim's property fallbacks now back Prim::property_names, Attribute::type_name, variability and custom.
It also introduces sdf::ValueTypeName, alongside sdf::ValueKind and sdf::Dimensions, as the one type table the whole crate shares. The usda parser decodes a value through its declared type, the writer emits type names in their serialization spelling, and stage authoring validates a value against the declaration before it reaches a layer — coercing across precisions where the type table allows it, including quaternion arrays and xform ops authored at a chosen precision.
Pattern-based collections arrive on a complete path-expression engine: sdf::PathExpression with an evaluator and an incremental searcher for traversal-order enumeration, %_ composition, and cross-arc mapping during field resolution, wired into UsdCollectionAPI in both membership modes. Value clips gain manifest generation and synthesis, so a set that authors no manifestAssetPath is still gated like every other.
UsdShade becomes navigable end to end, gaining typed connection traversal, terminal and interface queries, and NodeDef source queries and authoring — thanks to @NicTanghe, whose contributions drove much of that work.
Lastly, the plan is to generate schema code from build.rs, so this release lays the foundation by splitting the crate in two: openusd for the core library, and openusd-schemas for the domain schemas that will be generated.
Important
Breaking: the domain schemas are no longer part of openusd. Replace openusd::schemas::geom with openusd_schemas::geom and add openusd-schemas to your Cargo.toml, enabling the families you need. The feature flags (geom, lux, physics, …) moved with them.
New AOUSD Core Spec coverage in this release:
6.5Semantic aliases (color, normal, point, vector, texCoord, frame)6.6.1Arrays10.3.2.2Payload loading control11.3.2Property children include schema declarations12.2.2typeName resolution (from prim definition)12.2.6List op resolution12.3Basic attribute resolution12.3.2.1Layer-offset retiming during value resolution12.3.4Value clips13.2Extension metadata fields13.3Prim definitions (property fallbacks)13.3Value type names13.3.1Typed schemas (IsA)13.3.2Applied schemas (HasA)13.3.2.1Schema inclusions (built-ins, auto-applies)15.1CollectionAPI15.2Authoring and evaluating collections
Workspace
- Split the crate into a Cargo workspace, with domain schemas in
openusd-schemas(9a59c53) - Switch to the Rust 2024 edition (c31721e)
- Bump the pinned toolchain to 1.96 (b691f70)
- Enable an expanded lint set (193f811)
- Address the new lint findings (ba50690)
- Add rust-analyzer to components (66d83d3)
Schema registry
- Add the schema registry and property fallbacks (c45e89e)
- Add
IsAschema queries (96e9bf4) - Add schema family queries (5a52200)
- Validate applied API schema names (81e558d)
- Add auto-apply API schema expansion (c645cc1)
- Add generic list-op metadata resolution (4adbacd)
- Fix relationship variability (c274fd6)
- Move self-contained registry tests to
tests/(d625b8c)
Value types
- Add value kinds and opaque values (d22d1ae)
- Add
sdf::ValueTypeNameand schema coercion (1634245) - Parse attribute values through the declared type (396a9f9)
- Write type names through their serialization spelling (8e0fc63)
- Validate authored values against their declared type (8221ad4)
- Use value type name constants in the schema modules (47b1a6a)
- Coerce quaternion arrays across precisions (2c15553)
- Order time-sample maps as they are decoded (c618b0d)
- Author xform ops at a chosen precision (35d2ee8)
- Resolve an attribute's declaration once per write (884b2ee)
- Convert an xform op's value before authoring it (b5c9001)
Path expressions and collections
- Add the
sdfpath expression engine (26ac53b) - Carry
pathExpressionvalues as typed expressions (b038b0c) - Compose path expressions across
pcparcs (101289a) - Add expression-mode collections (5b84b47)
- Add the incremental path-expression searcher (9688cf5)
- Simplify the path-expression parser (d638e71)
Value clips
- Add clip-manifest generation and synthesis (bad3c20)
- Report every clip's activation time (07fe144)
- Harden synthesized clip manifests (799d216)
- Evaluate expressions in clips metadata (9c513f0)
UsdShade
- Add typed
UsdShadeconnection traversal (fd32558) — thanks @NicTanghe - Resolve
UsdShadeterminals through the typed walk (242e4a3) - Complete
UsdShadeterminal and interface queries (0cde17f) — thanks @NicTanghe - Harden
UsdShadeterminal and interface queries (1a3bb47) - Complete
UsdShadeNodeDef source queries (e10cd18) — thanks @NicTanghe - Complete
UsdShadeNodeDef source authoring (cada55f)
Composition
- Resolve attribute values site-major over one walk (6798dc5)
- Stamp cached values with a per-prim revision (32b41ef)
- Splice spec stacks instead of rebuilding them (1a4536e)
- Translate dependency paths through live indices (6eaff7c)
- Fold the population mask into composition identity (4b7e7af)
- Fan a
defaultPrimedit out to its consumers (6faefac) - Reclaim unreferenced layer-stack instances (d78c71a)
- Split field presence from value in change records (cc31a16)
- Split significant resyncs by path namespace (4e7c5c4)
- Publish the paths a mute invalidated (29749cc)
- Report every composition diagnostic once (effed71)
- Add descendant load queries and
Prim::load(eb73eda) - Retime timecode values by layer offsets (d28b2fb)
- Compose nested instance proxies (130fb2a) — thanks @yohawing
- Resolve class targets through the prototype (9929c3f)
- Key prototype membership on the composed path (7b9bc4a)
- Tighten the nested instance proxy regression test (737118b)
Asset resolution
- Carry asset provenance through value resolution (32ec9a3)
- Resolve asset values sourced from value clips (146520c)
- Publish asset-path resyncs on their own channel (fe370e9)
- Anchor asset fallbacks on their schema layer (4cf175f)
Stage and layers
- Route layer transactions through one seam (839fb53)
- Take the settled borrow for a dry-run transaction (611f0da)
- Move composition execution into
StageComposition(0db4ee3) - Confine stage composition borrows (615be21)
Text format
- Extract a
usdacursor and locate parse errors (11e5ff1) - Split
usdavalue parsing out of the parser (e1ba62a) - Parse
uint,uint64and string arrays inusda(1715680) - Expand escape sequences in USDA strings (543c3e4)
- Render both ends of a multi-line parse span (ca52e1c)