v0.4.0
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, andusdz::ArchiveWriter, with round-trip coverage and explicit format selection on save. - Complete authoring stack:
sdf::LayertypedSpecviews and aStage-tier authoring API (define_prim/override_prim/create_attribute/create_relationship/set_default_prim) routed through anEditTarget. - Composed scene handles:
usd::Prim,usd::Attribute,usd::Relationshipreturned from authoring methods. - Granular cache invalidation:
sdf::ChangeList+pcp::Changes+pcp::Dependenciesform aPcpChanges-style pipeline with a three-tier classifier (significant / prim / spec) and per-layer reverse-dep map. - Domain schemas:
UsdGeom,UsdLux,UsdSkel, andUsdPhysicsreaders + 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.1Dictionary combining10.3.1.1Sublayer offset composition10.3.2.1.2Reference offset composition10.3.2.2Payload loading control10.3.2.2.2Payload offset composition11.3Population mask11.3.1Ordered prim children (primOrderreordering, partial)11.3.2Ordered property children (propertyOrderreordering)11.4Model hierarchy (kind)11.5Stage queries (Active, Loaded, Defined, Abstract, Instance)12.2.1Specifier resolution12.2.3Variability resolution (weakest opinion)12.2.4Custom field resolution (any-true)12.2.5Dictionary combining12.2.6List op resolution (partial)12.5.1Interpolation (Held)12.5.2Interpolation (Linear)16.2USDA (text) writing16.3USDC (binary) writing16.4USDZ (package) writing
Composition engine (pcp)
- Propagate layer time offsets through composition (66a14d5)
- Implement specifier/variability/custom resolution (b564010)
- Apply
primOrder/propertyOrderduring composition (1fa0f7b) - Compose dictionary opinions and isolate pseudo-root metadata (40b5b6d)
- Granular cache invalidation pipeline (3e9335e)
- Correctness fixes for
apiSchemascomposition (f53fc9c) - Anchor relative reference paths against layer parents (4f0b560)
- Delegate relative path anchoring in
find_layerto resolver (f1fd849) LayerStackholdsVec<sdf::Layer>(56b5ae1)
Stage / usd tier
- Stage-tier authoring API and
EditTarget(63e4c03) - Composed
Prim/Attribute/Relationshiphandles (04da139) - Consolidate Usd-tier types under
usdmodule (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, andtype_namehelpers (dd02dfe) Prim::add_applied_schema(51a6e8a)- Add
Prim::append_to_uniform_token_array(498296f)
Interpolation
sdf / layer
- Authoring API and typed
Specviews onsdf::Layer(26e7de6) - Move
Layerintosdfto mirror C++SdfLayer(87fa3c0) sdf::Datafor in-memory layer data (4611947)- Add mutable access to
Data(c36ad01) - Split
AbstractData::getintotry_get+get(9fa274d) - Refactor SDF spec views to share read APIs (7a4523f)
- Remove
write_usda/write_usdcshims fromData(cf36bcc) - Introduce
Collectorbuilder; mask-aware dependency skipping inlayer::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
variantSetsand variants (ccf5812) write_quotedfalls 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
Filedirectly (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+xformOpOrderevaluator (3860f8f)- Intrinsic shape readers (6865d5b)
Camerareader (78cc036)Mesh+GeomSubset+Primvars(d23e9a5)- Curves + patch + points + tetmesh (3f946d0)
PointInstancer(a71a71a)NurbsPatchuForm+vForm(a5150a4)- Expose
NurbsCurves.pointWeightsfor rational curves (1b37e98) - Typed mesh subdiv tags with Pixar spec defaults (e3bd6e1)
Authoring:
- Scaffold authoring +
Imageable+Boundable(b3ee697) Xformable+xformOpOrderauthoring (c6c8dc6)- Intrinsic shapes +
Xform+Scope(7ed7a1c) Mesh+GeomSubset+ primvars authoring (abcca2c)Cameraauthoring (dac19bf)- Curves + points + tetmesh + instancer + roundtrip (2e0eb0d)
Fixes:
Camera.fStopdefault0.0per Pixar schema (a1857a6)- Correct Hermite tangents and primvar interpolation defaults (05c5c22)
- Prefer
orientationsfoverorientationsonPointInstancer(47ccdfc) - Accept list-op authored
PointInstancer.inactiveIds(f4f7393) find_geom_primsonly counts token-typed imageable opinions (f34d933)- Align ancestor walks in
compute_visibility/compute_purpose(f66e272) - Preserve
f64precision through xform and camera readers (11dacfd) - Reject out-of-range
elementSizeinstead of silently wrapping (1eded92) Plane.double_sideddefaults totrue(1b767a9)- Preserve xform precision and schema fallbacks (1942faa)
- Author primvar interpolation metadata (1168a6c)
- Drop incorrect
Uniformvariability onGeomSubset.indices(399c552) - Unify
Authorstructs onPrim<'s>(31319ef)
UsdLux schema (reader + authoring, lux feature)
- Add
luxcargo feature (eeea981) UsdLuxschema reader (5f501ef)- Fixture + integration tests (6eadb32)
timeSamples,LightAPIgate, and bucket additions (96809f8)- Align
LightAPIreader with advertised prims (83281df) - Scaffold authoring module +
LightAPI(94ccf1b) - Boundable light authoring (ad3427a)
- Nonboundable light authoring (72b90ce)
DomeLight+DomeLight_1authoring (d3d15ba)ShapingAPI+ShadowAPIauthoring (f57a836)LightListAPI+ full-scene roundtrip test (c211a3f)
UsdSkel schema (reader + authoring + skinning, skel feature)
UsdSkelreader + skinning toolkit (b0e97b3)SkelAnimQuery+ array interp (e491398)- Scaffold authoring module +
SkelRoot(e834862) Skeletonauthoring (6eab66a)SkelAnimationauthoring (f8853cc)BlendShapeauthoring (497b60c)Inbetweenauthoring (a9348ff)SkelBindingAPIauthoring (6f95ebc)- Share
joint_index_mapacross topology and types (f39e2f2) - Use
Path::has_prefixfor subtree filter (87b769e) - Propagate errors from traverse closures (813eed8)
UsdPhysics schema (reader + authoring, physics feature)
UsdPhysicsschema reader module (fa527f4)- Gate physics module behind
physicsfeature flag (34c7647) - Use
Stagehelpers 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+DriveAPImulti-apply (a97954d)