Feature parity with the AOUSD Core Specification v1.0.1 and the C++ reference implementation (OpenUSD).
Legend: ✅ Supported | 🚧 Planned | 🤔 Considering
| Feature | Spec | Status | Version | Notes |
|---|---|---|---|---|
| Scalar types (bool, int, float, double, half, string, token, asset, timecode, int64, uint, uint64, uchar) | 6.2 |
✅ | 0.1.1 |
sdf::Value enum |
| Dimensioned types (vectors, matrices, quaternions) | 6.3 |
✅ | 0.1.2 |
float2..4, double2..4, matrix2d..4d, quath/f/d, int2..4, half2..4 |
| Algebraic types (opaque) | 6.4 |
✅ | 0.2.0 |
Value::Opaque |
| Semantic aliases (color, normal, point, vector, texCoord, frame) | 6.5 |
🤔 | Parsed as underlying types; semantic role not tracked separately | |
| Arrays | 6.6.1 |
✅ | 0.1.2 |
All scalar and dimensioned array variants |
| Dictionaries | 6.6.2 |
✅ | 0.1.2 |
Including nested dictionaries |
| Dictionary combining | 6.6.2.1 |
🚧 | Recursive merge of stronger/weaker dictionaries during value resolution | |
| List operations (explicit, composable) | 6.6.3 |
✅ | 0.2.0 |
int, int64, uint, uint64, token, string, path, reference, payload |
| List op combining | 6.6.3.6 |
✅ | 0.2.0 |
ListOp::combined_with |
| List op reducing | 6.6.3.8 |
✅ | 0.2.0 |
ListOp::reduced |
| List op chaining | 6.6.3.9 |
✅ | 0.2.0 |
Applied during composition arc evaluation |
| Feature | Spec | Status | Version | Notes |
|---|---|---|---|---|
| Layer structure (specs, paths, fields) | 7.2 |
✅ | 0.1.1 |
AbstractData trait |
| Spec forms (layer, prim, attribute, relationship, variant set, variant) | 7.3 |
✅ | 0.1.1 |
SpecType enum |
| Core metadata fields (layer spec) | 7.6.1 |
✅ | 0.1.2 |
subLayers, subLayerOffsets, defaultPrim, documentation, etc. |
| Core metadata fields (prim spec) | 7.6.2 |
✅ | 0.1.2 |
specifier, primChildren, propertyChildren, references, payload, inherits, specializes, variantSets, variantSelection, etc. |
| Core metadata fields (attribute spec) | 7.6.3 |
✅ | 0.1.2 |
typeName, default, timeSamples, connectionPaths, variability, custom |
| Core metadata fields (relationship spec) | 7.6.4 |
✅ | 0.1.2 |
targetPaths, variability, custom |
| Core metadata fields (variant set/variant spec) | 7.6.5-7 |
✅ | 0.2.0 |
|
| Spline specialized type | 7.4.2.4 |
🚧 | SplineKnot, interpolation modes, extrapolation, looping | |
| Retiming specialized type (layer offsets) | 7.6.1.2.2 |
✅ | 0.1.2 |
Parsed from subLayerOffsets; composed through arcs as of main. |
| Feature | Spec | Status | Version | Notes |
|---|---|---|---|---|
| Absolute/relative paths | 8.1 |
✅ | 0.1.1 |
sdf::Path |
| Prim paths | 8.1 |
✅ | 0.1.1 |
|
| Property paths | 8.1 |
✅ | 0.1.1 |
|
| Variant selection paths | 8.1 |
✅ | 0.2.0 |
{set=selection} syntax |
| Path grammar (PEG) | 8.5 |
✅ | 0.1.4 |
Parsed from USDA and USDC |
| Element ordering | 8.2 |
🚧 | Normative ordering rules for property/prim names | |
| Relative path resolution | 8.1 |
✅ | 0.2.0 |
Anchoring via make_absolute |
| Legacy path compatibility | 8.7 |
🤔 | Extended grammar with [target] and .mapper paths |
| Feature | Spec | Status | Version | Notes |
|---|---|---|---|---|
| Resource identifiers (URI) | 9.2 |
✅ | 0.1.1 |
Asset paths as strings |
| Relative resource identifiers (anchored) | 9.4.1 |
✅ | 0.2.0 |
./ and ../ resolution relative to containing layer |
| Non-anchored identifiers (search paths) | 9.4.2 |
✅ | 0.2.0 |
DefaultResolver with search paths |
| Resolving identifiers to locations | 9.5 |
✅ | 0.2.0 |
Resolver trait |
| Resolving extensions | 9.6 |
✅ | 0.2.0 |
.usd/.usda/.usdc/.usdz dispatch |
| Packaged resources | 9.7 |
✅ | 0.2.0 |
asset.usdz[sublayer.usd] syntax |
file URI scheme (RFC 8089) |
9.8 |
🚧 | Filesystem paths accepted but not as file:/// URIs |
|
usd-anon scheme (in-memory resources) |
9.8.1 |
🤔 | For transient layers not backed by files |
| Feature | Spec | Status | Version | Notes |
|---|---|---|---|---|
| Sublayers | 10.3.1 |
✅ | 0.1.2 |
Layer stack construction |
| Sublayer time offsets | 10.3.1.1 |
✅ | main |
Composed through nested sublayers; carried on each Node via MapFunction::time_offset. Value-resolution application pending. |
| References (internal + external) | 10.3.2.1 |
✅ | 0.1.2 |
Including defaultPrim fallback |
| Reference namespace mapping | 10.3.2.1.1 |
✅ | 0.3.0 |
MapFunction with source/target pairs |
| Reference time offsets | 10.3.2.1.2 |
✅ | main |
Carried through reference arcs; composed with sublayer offsets on the target layer stack. Value-resolution application pending. |
| Payloads | 10.3.2.2 |
✅ | 0.1.2 |
Treated identically to references |
| Payload loading control | 10.3.2.2 |
🚧 | No mechanism to exclude payloads | |
| Payload time offsets | 10.3.2.2.2 |
✅ | main |
Same composition as references; unloaded payloads' offsets are ignored. Value-resolution application pending. |
| Inherits | 10.3.2.3 |
✅ | 0.2.0 |
Including implied inherit propagation |
| Inherit namespace mapping (with identity) | 10.3.2.3.1 |
✅ | 0.3.0 |
from_pair_identity adds (/, /) catch-all |
| Specializes | 10.3.2.4 |
✅ | 0.2.0 |
|
| Specializes global weakness | 10.4.1 |
✅ | 0.3.0 |
Stable-partition reorders specialize-introduced nodes after all others |
| Variants | 10.3.2.5 |
✅ | 0.2.0 |
Including deferred evaluation after R/P |
| Variant selection computation | 10.3.2.5.1 |
✅ | 0.2.0 |
Strongest opinion wins, fallback to first variant |
| Variant fallback map | 10.3.2.5.1 |
✅ | 0.3.0 |
VariantFallbackMap via StageBuilder |
| Relocates | 10.3.2.6 |
✅ | 0.3.0 |
layerRelocates, source path resolution, child remapping |
| Relocates validation rules | 10.3.2.6 |
🚧 | 7 restriction checks not enforced | |
| Relocates namespace mapping | 10.3.2.6.1 |
✅ | 0.3.0 |
Composed with reference arc mappings |
| LIVERPS strength ordering | 10.4 |
✅ | 0.3.0 |
ArcType with Ord derived from discriminant |
| Namespace mappings (MapFunction) | 10.5 |
✅ | 0.3.0 |
Compose, inverse, longest-prefix matching |
| Composition errors (non-fatal) | 10.6 |
✅ | 0.3.0 |
pcp::Error with StageBuilder::on_error callback |
| List op arc computation | 10.3.2 |
✅ | 0.2.0 |
Weakest-to-strongest list-op chaining |
| Feature | Spec | Status | Version | Notes |
|---|---|---|---|---|
| Composed stage | 11.2 |
✅ | 0.2.0 |
Stage::open with depth-first traversal |
| Populating the stage | 11.3 |
✅ | 0.2.0 |
Lazy per-prim composition via pcp::Cache |
| Population mask | 11.3 |
🚧 | No subset-of-prims loading | |
| Ordered prim children | 11.3.1 |
✅ | 0.2.0 |
Merged primChildren with relocate adjustment |
Ordered prim children (primOrder reordering) |
11.3.1 |
🚧 | primOrder field not applied |
|
| Ordered property children | 11.3.2 |
✅ | 0.2.0 |
Merged propertyChildren |
Ordered property children (propertyOrder reordering) |
11.3.2 |
🚧 | propertyOrder field not applied |
|
| Scene graph instancing | 11.3.3 |
🚧 | instanceable readable; shared representation not implemented |
|
| Model hierarchy (kind) | 11.4 |
🚧 | kind readable; hierarchy validation not implemented |
|
| Stage queries (Active, Loaded, Defined, Abstract, Instance) | 11.5 |
🚧 | Predicate flags for traversal filtering | |
| Session layer | 11.2 |
✅ | 0.3.0 |
StageBuilder::session_layer |
| Feature | Spec | Status | Version | Notes |
|---|---|---|---|---|
| Metadata resolution (strongest opinion wins) | 12.2 |
✅ | 0.2.0 |
PrimIndex::resolve_field with ValueBlock support |
| Specifier resolution | 12.2.1 |
🚧 | Special rules for def/over/class not fully implemented |
|
| typeName resolution (from prim definition) | 12.2.2 |
🚧 | Uses strongest opinion, not prim definition | |
| variability resolution (weakest opinion) | 12.2.3 |
🚧 | Uses strongest opinion instead of weakest | |
| custom field resolution (any-true) | 12.2.4 |
🚧 | Uses strongest opinion instead of any-true | |
| Dictionary combining | 12.2.5 |
🚧 | Recursive merge across opinions | |
| List op resolution | 12.2.6 |
✅ | 0.2.0 |
Combined stack of opinions |
| Layer metadata (root layer only) | 12.2.7 |
✅ | 0.2.0 |
defaultPrim, timing fields, etc. |
| Fallback values | 12.2.8 |
🚧 | Requires schema registry | |
| Attribute resolution | 12.3 |
✅ | 0.2.0 |
timeSamples, default, ValueBlock |
| Attribute resolution (with time) | 12.3 |
✅ | 0.1.2 |
Time sample lookup |
| Spline evaluation | 12.5.3 |
🚧 | Bezier/Hermite curve interpolation | |
| Interpolation (Held) | 12.5.1 |
🚧 | Not implemented at stage level | |
| Interpolation (Linear) | 12.5.2 |
🚧 | Not implemented at stage level | |
| Value clips | 12.3 |
🚧 | clips/clipSets for split time samples |
|
| Relationship targets (raw + forwarded) | 12.4 |
🚧 | targetPaths readable; forwarding not implemented |
|
| Attribute connections | 12.4 |
🚧 | connectionPaths readable; not resolved |
| Feature | Spec | Status | Version | Notes |
|---|---|---|---|---|
| Schema registry | 13.3 |
🚧 | Type hierarchy, prim definitions | |
| Typed schemas (IsA) | 13.3.1 |
🚧 | typeName readable; registry not implemented |
|
| Applied schemas (HasA) | 13.3.2 |
🚧 | apiSchemas readable; definitions not loaded |
|
| Schema inclusions (built-ins, auto-applies) | 13.3.2.1 |
🚧 | ||
| Prim definitions (property fallbacks) | 13.3 |
🚧 | ||
| Core schema types | 13.4 |
🚧 | ||
| Value type names | 13.3 |
🚧 | Attribute type validation | |
| Extension metadata fields (fallbackPrimTypes, apiSchemas, clips, clipSets) | 13.2 |
🚧 | Fields readable; semantics not applied | |
| Schema codegen | 13.3 |
🚧 | Generate typed APIs from schema definitions |
| Feature | Spec | Status | Version | Notes |
|---|---|---|---|---|
| Supported color spaces | 14.1 |
🤔 | ||
| Core metadata extensions (colorSpace) | 14.2 |
🤔 | ||
| ColorSpaceDefinitionAPI | 14.3 |
🤔 |
| Feature | Spec | Status | Version | Notes |
|---|---|---|---|---|
| CollectionAPI | 15.1 |
🚧 | ||
| Authoring and evaluating collections | 15.2 |
🚧 |
| Feature | Spec | Status | Version | Notes |
|---|---|---|---|---|
| USDA (text) reading | 16.2 |
✅ | 0.1.4 |
Recursive descent parser with logos tokenizer |
| USDA (text) writing | 16.2 |
✅ | main |
usda::TextWriter; round-trips the compliance suite opinion-for-opinion |
| USDC (binary) reading | 16.3 |
✅ | 0.1.1 |
Crate format with LZ4/integer compression |
| USDC (binary) writing | 16.3 |
✅ | main |
usdc::CrateWriter; streaming packer with integer compression, LZ4 blocks, DFS path encoder |
| USDZ (package) reading | 16.4 |
✅ | 0.2.0 |
ZIP-based package reader |
| USDZ (package) writing | 16.4 |
✅ | main |
usdz::ArchiveWriter; STORED-only, 64-byte aligned entries |
Format auto-detection (.usd) |
16.1 |
✅ | 0.2.0 |
Magic byte detection |
Features from the C++ reference implementation not covered by the core specification.
| Feature | Status | Version | Notes |
|---|---|---|---|
| Variable expressions | ✅ | 0.2.0 |
13 built-in functions, string interpolation (expr module) |
| Parallelism (Rayon) | 🚧 | Composition graph is &-only, ready for parallel execution |
|
| Incremental invalidation | 🤔 | Dependency tracking and change processing | |
| UsdGeom (geometry, transforms, cameras) | 🚧 | ||
| UsdShade (materials, shaders) | 🚧 | ||
| UsdLux (lighting) | 🚧 | ||
| UsdSkel (skeletons, skinning) | 🚧 | ||
| UsdVol (volumes) | 🚧 | ||
| UsdPhysics | 🚧 | ||
| UsdRender | 🚧 | ||
| UsdMedia, UsdUI, UsdProc | 🚧 | ||
| Flatten / export | 🚧 | ||
| Namespace editing | 🚧 | ||
| Native instancing (shared representation) | 🚧 | ||
| Stage cache | 🤔 | Avoid redundant stage loading | |
| Kind registry | 🤔 | Model/group/assembly/component taxonomy | |
| Edit targets | 🤔 | Direct opinions to a specific layer | |
| Change notification | 🤔 | Listeners for live scene updates | |
| Property stack queries | 🤔 | Inspect all contributing opinions across layers |
| Feature | Status | Notes |
|---|---|---|
| usdcat (print/convert) | 🚧 | |
| usdtree (hierarchy printing) | 🤔 | |
| usddiff (layer diffing) | 🤔 | |
| usdchecker (validation) | 🤔 | |
| usdzip (USDZ packaging) | 🤔 | |
| usdGenSchema (schema codegen) | 🚧 |