Skip to content

v0.7.0

Choose a tag to compare

@mxpv mxpv released this 05 Sep 18:53
· 366 commits to main since this release
ceb6e42

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.5 Semantic aliases (color, normal, point, vector, texCoord, frame)
  • 6.6.1 Arrays
  • 10.3.2.2 Payload loading control
  • 11.3.2 Property children include schema declarations
  • 12.2.2 typeName resolution (from prim definition)
  • 12.2.6 List op resolution
  • 12.3 Basic attribute resolution
  • 12.3.2.1 Layer-offset retiming during value resolution
  • 12.3.4 Value clips
  • 13.2 Extension metadata fields
  • 13.3 Prim definitions (property fallbacks)
  • 13.3 Value type names
  • 13.3.1 Typed schemas (IsA)
  • 13.3.2 Applied schemas (HasA)
  • 13.3.2.1 Schema inclusions (built-ins, auto-applies)
  • 15.1 CollectionAPI
  • 15.2 Authoring 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 IsA schema 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::ValueTypeName and 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 sdf path expression engine (26ac53b)
  • Carry pathExpression values as typed expressions (b038b0c)
  • Compose path expressions across pcp arcs (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 UsdShade connection traversal (fd32558) — thanks @NicTanghe
  • Resolve UsdShade terminals through the typed walk (242e4a3)
  • Complete UsdShade terminal and interface queries (0cde17f) — thanks @NicTanghe
  • Harden UsdShade terminal and interface queries (1a3bb47)
  • Complete UsdShade NodeDef source queries (e10cd18) — thanks @NicTanghe
  • Complete UsdShade NodeDef 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 defaultPrim edit 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 usda cursor and locate parse errors (11e5ff1)
  • Split usda value parsing out of the parser (e1ba62a)
  • Parse uint, uint64 and string arrays in usda (1715680)
  • Expand escape sequences in USDA strings (543c3e4)
  • Render both ends of a multi-line parse span (ca52e1c)

Errors and API

  • Migrate error handling from anyhow to thiserror (2871197)
  • Validate paths at every public API boundary (0d6953a)