Repository navigation
v0.5.0
openusd continues to gain usable shape and form. This release introduces
high-level APIs to manage stages, layers, primitives, and more — while
bringing several major subsystems to spec compliance.
-
The PCP composition engine is fully rewritten around a task-queue indexer
that now conforms to allpcp.txtcompliance tests, covering correct
LIVRPS strength ordering, scene-graph instancing, specializes, relocates,
value clips, and arc permissions. -
Layer management graduates from a flat stack to a full
LayerGraphmodel
with surgical change invalidation.Stagegains a new set of APIs to add,
remove, and mute layers. -
Scene-query APIs move from
Stageonto thePrim,Attribute, and
Relationshiphandles where they belong. -
All domain schemas (
geom,lux,shade,render,skel,physics,
vol,ui,proc,media) are rewritten as composable trait-based
views modelling the schema object hierarchy with supertrait chains. The
same handle exposes both read and author operations, and setters chain:use openusd::{usd, schemas::geom}; let stage = usd::Stage::open("scene.usda")?; for prim in stage.traverse() { if let Some(mesh) = geom::Mesh::new(prim.clone()) { // read let counts = mesh.face_vertex_counts_attr() .get::<Vec<i32>>(usd::TimeCode::DEFAULT)?; // author mesh.create_extent_attr().set(extent_value)?; } }
The trait hierarchy mirrors the C++ schema hierarchy —
SchemaBase → Imageable → Xformable → Boundable → Gprim → PointBased → Curves
— with concrete newtype views likeMesh,Camera, andSphere. -
Math utilities scattered across the crate are consolidated into a new
gf
module mirroring the C++Gfnamespace:Vec2/3/4,Quat, andMatrix
types in multiple numeric precisions, allbytemuck::Podfor zero-copy
binary serialization.
New AOUSD Core Spec coverage
New AOUSD Core Spec coverage in this release:
7.6.1.2.2Layer-offset retiming applied during value resolution8.2Element ordering (sdf::element_cmp,primOrder/propertyOrderreordering)10.3.3Arc permissions — direct arcs topermission = privatesites are inerted and reported aspcp::Error::ArcPermissionDenied11.3.1Ordered prim children viaprimOrderreordering11.3.2Ordered property children viapropertyOrderreordering11.3.3Scene-graph instancing — instances share one composed prototype; nested instances, instance-proxy redirects, and population-mask integration covered11.5IN_PROTOTYPEflag and instance-proxy traversal toggle12.3Basic attribute resolution — layer-offset retiming applied during value resolution12.3.4Value clips — explicit and template clip resolution, manifest gating, active-clip selection, stage-to-clip time mapping,interpolateMissingClipValues12.4Relationship targets (raw + forwarded chains) and attribute connections with a stage-wide connection graph15.1/15.2CollectionAPI—apply_collection,include_path/exclude_path,MembershipQuery,compute_included_paths
PCP composition engine
- Rewrote the composition engine as a priority task-queue indexer (
Indexer)
mirroring C++Pcp_PrimIndexer, now the sole composition path (abf6ca4) - Replaced
LayerStackwith a fullLayerGraphmodel:LayerNode,
LayerGraph, andpcp::LayerIdhandles with O(1) identifier lookup;
sublayer edges derive from authored metadata and are rebuilt on change
(f2eab23) - Implemented LIVRPS arc strength ordering via
#[repr(u8)]ArcTypeand
thecompare_sibling_node_strength/compare_node_strengthcomparators
(095728a) - Graph-clone seed for ancestral opinions: a child prim clones its parent's
composed graph and deepens every site path, so referenced ancestor arcs
re-evaluate at the child (4ea2ae4) - References and payloads compose as per-(layerStack, path) site nodes,
retaining culled arc targets asCULLEDnodes for structural visibility
(a714040, c27146f) - Inherits and implied classes including subroot-arc propagation (5773348,
a188515, c80e421) - Specializes as globally-weak class-based arcs with
propagate_node_to_root
and implied-specializes propagation (f6f5fe7, 141c610) - Local and ancestral variant sets resolved through a second task band;
EvalNodeVariantAuthored→EvalNodeVariantFallbackwith live-node
strength tie-breaking (40bb677, 7c4de1f) - Expression-valued asset paths in reference / payload arcs evaluated during
index build;composed_expr_varsfoldsexpressionVariablesacross arcs
(41ab8a8, 7119565) MapFunctioninvertibility-checked target translation,
without_variant_selectionsstripping, and truecomposesemantics
(0638cea, b04dffe)- Relocates ported into the task-queue indexer via
eval_node_relocations;
per-layerlayerRelocatesvalidated and chained within a node's layer
stack (0b642d3, 65fbf28, 4484d7d) - Direct arcs to
permission = privatesites inerted and reported via
pcp::Error::ArcPermissionDenied; descendant arcs inerted through
denied_prefixes(9ae8510, a6a5b93) - Scene-graph instancing:
PrototypeRegistrykeyed byInstanceKey
(arc + variant selections); prototype namespace composed in place, instance
proxies redirect onto/__Prototype_N; targeted invalidation via
invalidate_prototypes(cc43d29, 1285318, e659568) - Value clips:
ClipSetparsing, manifest gating, active-clip selection,
stage-to-clip time mapping, template clip expansion, and
interpolateMissingClipValues(d6d4d83, 14c93fc, a837749) - Layer-offset retiming of
timeSamplesduring value resolution (8886672) - Relationship target forwarding through chains with cycle-breaking (737fdd1)
- Attribute connection graph:
ConnectionGraphstage-wide index with composed
connectionPathsand authoring onAttribute(d75feb7, c864da8) Dependenciesreverse map for surgical change fanoutChanges/IndexCache::process_changesfor three-tier change
classification and targeted cache invalidation- Recoverable composition errors collected via
Stage::composition_errors
rather than callbacks (750af7e) PrimIndex::dump_to_stringcomposition-tree dump for debugging (e668aea)reorder rootPrimsparsed and emitted in USDA (0543612)
Stage and layer management
LayerGraphreplaces the flatLayerStack;Stage::insert_sub_layer/
remove_sub_layerandsub_layersrouted through it so edits persist on
save (f2eab23)- Direct access to the session layer from
Stage(18afede) Stage::mute_layerand layer muting supportStageBuilderbuilder methods shortened toload/mask(8d7fb2b)EditTargetandEditContext(RAII guard) for routing authoring through
any layer;for_local_direct_variantfor variant-namespace writesStagerefactored as a cheapRc<StageInner>reference-counted handle —
cloning bumps the refcount, no lifetime parameters onPrim/Attribute
/Relationship(700e2c2)
Schema views
usd::SchemaBasetrait introduced as the schema-view foundation (665467a)UsdGeommigrated:Imageable → Xformable → Boundable → Gprim → PointBased → Curves
chain, all intrinsic shapes,Camera,Xform/Scope,Mesh+
GeomSubset, curve/point/patch types,PointInstancer(2ff1faa)UsdLuxmigrated: light hierarchy andLightAPI/ShapingAPIapplied
API schemas (cede873)UsdShademigrated:Connectableinterface trait,Shader/NodeGraph/
Material,MaterialBindingAPIwith direct + collection binding resolution,
UsdPreviewSurface+UsdUVTexture(b05b4f3 … f7c35ab)UsdRendermigrated:RenderSettingsBase/RenderSettings/
RenderProduct/RenderVar/RenderPass/RenderDenoisePasswith
compute_render_spec(f6f8d71 … 10be3a1)UsdSkelmigrated:SkelRoot/Skeleton/SkelAnimation/
BlendShape,SkelBindingAPI,SkeletonResolver/SkinningResolver,
LBS + blend-shape math (fd39231)UsdPhysicsmigrated: typedScene/Jointprims, single- and
multi-apply API schemas (DriveAPI/LimitAPI) (ed641fb)UsdVolmigrated:Volume+OpenVDBAsset/Field3DAsset(7780720)UsdMediamigrated:SpatialAudio,AssetPreviewsAPIthumbnails (5ebf1b1)UsdProcmigrated:GenerativeProcedural(e6883c1)UsdUImigrated:Backdrop,SceneGraphPrimAPI,NodeGraphNodeAPI
(042519c)Attribute::getmade generic;ValueFrom/TryFromimpls for allgf
types (a95f6f5, 97133b1)- Typed token
↔ Valueconversions viaimpl_token_value!macro (97133b1) CollectionAPI—apply_collection,include_path/exclude_path,
MembershipQuery,compute_included_paths(80285f6 … 404531a)
Resurfaced API — moved to handles
Prim::prim_stack,Prim::prim_index,Prim::children,
Prim::property_names,Prim::attributes,Prim::relationships,
Prim::variant_sets(a3fb43c, 8ea96c8)Attribute::property_stack,Attribute::connections,
Attribute::compute_connections(a3fb43c)Relationship::property_stack,Relationship::targets,
Relationship::forwarded_targets,Relationship::compute_targets(a3fb43c)Prim::set_metadatafor prim-level fields (7d5c02f)AttributeandRelationshipsplit into their own modules (209f441)
Graphics foundations (gf)
Vec2/3/4inf32(f),f64(d),f16(h), andi32(i)
variants;Quatf/d/hwith(w, x, y, z)field order andslerp;
Mat2d,Mat3d,Matrix4d(row-major) (5d5b0db)- All types are
#[repr(C)]/#[repr(transparent)]+bytemuck::Pod
for bulk-cast binary serialization - Free-function constructors (
vec3f,quatf, …) andlerp/slerp
ingf/mod.rs
SDF
AssetPathvalue type (sdf::AssetPath/Value::AssetPath/
Value::AssetPathVec) withasset[]array support (2d0ff3c, e1ca0de)sdf::TimeCodevalue type (5ebf1b1)Layerrelocates API:relocates/set_relocates/has_relocates/
clear_relocates(e012c59)sdf::element_cmpfor USD namespace element ordering (85c2ed3)- Variant-namespace spec authoring in
Layer(ed3b558) Path::componentsandsplit_property; correctedparent(),prim_path,
andlast_elementfor edge paths (49c5321, 9fd4b9d)AssetPathserde support behind theserdefeature (e1ca0de)
USDA / USDC
reorder rootPrimsparsed and emitted (0543612)timecodeattribute type parsed (8861ce0)- Variant selections rejected in arc paths (ff3616f)
asset pathandpath expressionarray types in USDC (fb5076c)vec3h/vec4hinlined decoding fixed (722bc79)
Dependencies
codecov/codecov-actionbumped from 6 to 7 (28f702d)