Skip to content

v0.4.0

Choose a tag to compare

@mxpv mxpv released this 28 May 21:04
· 579 commits to main since this release
0c8d8f1

This is the largest openusd release so far. It introduces full USD writers for all three file formats, a complete authoring API spanning both the sdf::Layer and usd::Stage tiers, four new domain schema modules (UsdGeom, UsdLux, UsdSkel, UsdPhysics) covering both reading and authoring, and a much more capable composition engine — including dictionary composition, specifier/variability/custom resolution, layer-offset propagation, and a granular cache-invalidation pipeline modeled on PcpChanges. Many of these features still need further polishing, but with so many API changes since v0.3.0 it felt worth cutting a release for an intermediate alignment point.

Huge thanks to @bresilla for the enormous volume of high-quality contributions in this release — including all three writers, the entire UsdSkel reader and skinning toolkit, and the bulk of the UsdLux / UsdPhysics / UsdGeom schema modules.

Highlights

  • First-class USD writers: usda::TextWriter, usdc::CrateWriter, and usdz::ArchiveWriter, with round-trip coverage and explicit format selection on save.
  • Complete authoring stack: sdf::Layer typed Spec views and a Stage-tier authoring API (define_prim / override_prim / create_attribute / create_relationship / set_default_prim) routed through an EditTarget.
  • Composed scene handles: usd::Prim, usd::Attribute, usd::Relationship returned from authoring methods.
  • Granular cache invalidation: sdf::ChangeList + pcp::Changes + pcp::Dependencies form a PcpChanges-style pipeline with a three-tier classifier (significant / prim / spec) and per-layer reverse-dep map.
  • Domain schemas: UsdGeom, UsdLux, UsdSkel, and UsdPhysics readers + authoring helpers behind cargo features.
  • Stage querying: payload loading control (InitialLoadSet), StagePopulationMask, traversal predicates, prim status, model-hierarchy queries, and a stage-level time-sample evaluator with held and linear interpolation.

Compliance

New AOUSD Core Spec coverage in this release:

  • 6.6.2.1 Dictionary combining
  • 10.3.1.1 Sublayer offset composition
  • 10.3.2.1.2 Reference offset composition
  • 10.3.2.2 Payload loading control
  • 10.3.2.2.2 Payload offset composition
  • 11.3 Population mask
  • 11.3.1 Ordered prim children (primOrder reordering, partial)
  • 11.3.2 Ordered property children (propertyOrder reordering)
  • 11.4 Model hierarchy (kind)
  • 11.5 Stage queries (Active, Loaded, Defined, Abstract, Instance)
  • 12.2.1 Specifier resolution
  • 12.2.3 Variability resolution (weakest opinion)
  • 12.2.4 Custom field resolution (any-true)
  • 12.2.5 Dictionary combining
  • 12.2.6 List op resolution (partial)
  • 12.5.1 Interpolation (Held)
  • 12.5.2 Interpolation (Linear)
  • 16.2 USDA (text) writing
  • 16.3 USDC (binary) writing
  • 16.4 USDZ (package) writing

Composition engine (pcp)

  • Propagate layer time offsets through composition (66a14d5)
  • Implement specifier/variability/custom resolution (b564010)
  • Apply primOrder/propertyOrder during composition (1fa0f7b)
  • Compose dictionary opinions and isolate pseudo-root metadata (40b5b6d)
  • Granular cache invalidation pipeline (3e9335e)
  • Correctness fixes for apiSchemas composition (f53fc9c)
  • Anchor relative reference paths against layer parents (4f0b560)
  • Delegate relative path anchoring in find_layer to resolver (f1fd849)
  • LayerStack holds Vec<sdf::Layer> (56b5ae1)

Stage / usd tier

  • Stage-tier authoring API and EditTarget (63e4c03)
  • Composed Prim / Attribute / Relationship handles (04da139)
  • Consolidate Usd-tier types under usd module (f46992a)
  • Add payload loading control and population mask (ea2793f)
  • Add traversal predicates (f3caca8)
  • Add prim status and model-hierarchy queries (bff3d99)
  • Add api_schemas, has_api_schema, and type_name helpers (dd02dfe)
  • Prim::add_applied_schema (51a6e8a)
  • Add Prim::append_to_uniform_token_array (498296f)

Interpolation

  • Stage-level time-sample evaluator (de7c8a4)
  • Tighten evaluator and add Stage::time_samples (0d8e1b9)

sdf / layer

  • Authoring API and typed Spec views on sdf::Layer (26e7de6)
  • Move Layer into sdf to mirror C++ SdfLayer (87fa3c0)
  • sdf::Data for in-memory layer data (4611947)
  • Add mutable access to Data (c36ad01)
  • Split AbstractData::get into try_get + get (9fa274d)
  • Refactor SDF spec views to share read APIs (7a4523f)
  • Remove write_usda/write_usdc shims from Data (cf36bcc)
  • Introduce Collector builder; mask-aware dependency skipping in layer::collect_layers (a29d4bf)

USD text format (usda)

  • Add USDA writer (usda::TextWriter) (444d52a)
  • Parse typed scalar-array values inside time samples (77929be)
  • Parse typed tuple values inside time samples (2bfe869)
  • Keep type-blind fallback for lenient time samples (0d235ab)
  • Read nested dictionaries (643b080)
  • Bug fix for variantSets and variants (ccf5812)
  • write_quoted falls through on strings with both quote types (b0694e4)

USD binary format (usdc)

  • Add USDC writer (usdc::CrateWriter) (a74f6bd)
  • Enable compressed integer arrays in writers (22f969a)
  • Reorder quat bytes to match USDA convention (3eccc28)
  • Apply matching quat reorder in writer for round-trip (9f4a302)
  • Avoid allocations when changing quat order (b74638e)

USD archive format (usdz)

  • Add USDZ writer (usdz::ArchiveWriter) (ccdd722)
  • Open archives via resolver instead of File directly (b691498)
  • Validate USDZ entry names and de-flake temp-path tests (56f808d)

Writers (cross-format)

  • Explicit layer format selection for saving (bcb2e83)
  • Reader/writer contract gaps for sentinel values (e037102)
  • Corner-case round-trip bugs surfaced by new tests (a314238)
  • Tidy up writers (b838cb8)

UsdGeom schema (reader + authoring, geom feature)

Reader:

  • Scaffold + Imageable + Boundable (51587e9)
  • Xformable + xformOpOrder evaluator (3860f8f)
  • Intrinsic shape readers (6865d5b)
  • Camera reader (78cc036)
  • Mesh + GeomSubset + Primvars (d23e9a5)
  • Curves + patch + points + tetmesh (3f946d0)
  • PointInstancer (a71a71a)
  • NurbsPatch uForm + vForm (a5150a4)
  • Expose NurbsCurves.pointWeights for rational curves (1b37e98)
  • Typed mesh subdiv tags with Pixar spec defaults (e3bd6e1)

Authoring:

  • Scaffold authoring + Imageable + Boundable (b3ee697)
  • Xformable + xformOpOrder authoring (c6c8dc6)
  • Intrinsic shapes + Xform + Scope (7ed7a1c)
  • Mesh + GeomSubset + primvars authoring (abcca2c)
  • Camera authoring (dac19bf)
  • Curves + points + tetmesh + instancer + roundtrip (2e0eb0d)

Fixes:

  • Camera.fStop default 0.0 per Pixar schema (a1857a6)
  • Correct Hermite tangents and primvar interpolation defaults (05c5c22)
  • Prefer orientationsf over orientations on PointInstancer (47ccdfc)
  • Accept list-op authored PointInstancer.inactiveIds (f4f7393)
  • find_geom_prims only counts token-typed imageable opinions (f34d933)
  • Align ancestor walks in compute_visibility / compute_purpose (f66e272)
  • Preserve f64 precision through xform and camera readers (11dacfd)
  • Reject out-of-range elementSize instead of silently wrapping (1eded92)
  • Plane.double_sided defaults to true (1b767a9)
  • Preserve xform precision and schema fallbacks (1942faa)
  • Author primvar interpolation metadata (1168a6c)
  • Drop incorrect Uniform variability on GeomSubset.indices (399c552)
  • Unify Author structs on Prim<'s> (31319ef)

UsdLux schema (reader + authoring, lux feature)

  • Add lux cargo feature (eeea981)
  • UsdLux schema reader (5f501ef)
  • Fixture + integration tests (6eadb32)
  • timeSamples, LightAPI gate, and bucket additions (96809f8)
  • Align LightAPI reader with advertised prims (83281df)
  • Scaffold authoring module + LightAPI (94ccf1b)
  • Boundable light authoring (ad3427a)
  • Nonboundable light authoring (72b90ce)
  • DomeLight + DomeLight_1 authoring (d3d15ba)
  • ShapingAPI + ShadowAPI authoring (f57a836)
  • LightListAPI + full-scene roundtrip test (c211a3f)

UsdSkel schema (reader + authoring + skinning, skel feature)

  • UsdSkel reader + skinning toolkit (b0e97b3)
  • SkelAnimQuery + array interp (e491398)
  • Scaffold authoring module + SkelRoot (e834862)
  • Skeleton authoring (6eab66a)
  • SkelAnimation authoring (f8853cc)
  • BlendShape authoring (497b60c)
  • Inbetween authoring (a9348ff)
  • SkelBindingAPI authoring (6f95ebc)
  • Share joint_index_map across topology and types (f39e2f2)
  • Use Path::has_prefix for subtree filter (87b769e)
  • Propagate errors from traverse closures (813eed8)

UsdPhysics schema (reader + authoring, physics feature)

  • UsdPhysics schema reader module (fa527f4)
  • Gate physics module behind physics feature flag (34c7647)
  • Use Stage helpers in place of raw field reads (864dc38)
  • Scaffold authoring module + PhysicsScene (bad9a9f)
  • RigidBodyAPI + MassAPI (58624bc)
  • CollisionAPI + MeshCollisionAPI + MaterialAPI (21c2628)
  • CollisionGroup + FilteredPairs + ArticulationRoot (f03ac4c)
  • Joints (base + 5 typed) (74426af)
  • LimitAPI + DriveAPI multi-apply (a97954d)

Shared infrastructure

  • Extract crate::math from skel/skinning (535c7f6)
  • Consolidate matrix builders shared by geom and skel (ebab67c)
  • Nest physics + skel under schemas/ (5da08a5)
  • Hoist shared author helpers; add Prim::author_relationship_targets (5718f26)