Skip to main content

OpenUSD

Related classes: Representation · OpenUSD_Prim_Binding · OpenUSD_Layer · Analytic_Shape · Box_Shape · Spatial_Constraint · OpenUSD_LOD_Heuristic

OpenUSD is the scene-description format Mapped uses for 3D. The ontology does not model USD stages, prims or coordinate frames; it models the durable facts needed to find geometry for a semantic entity and to say what that geometry may be used for. Those facts live in fifteen classes under dtmi:mapped:openusd, all of them children of Meta rather than Entity: they are metadata about the graph, not things in the building.

The six groups​

GroupClassesRole
RepresentationRepresentation → Collision_Representation, Navigation_RepresentationDeclares how an entity's geometry may be used
Analytic shapeAnalytic_Shape → Box_Shape, Capsule_ShapeParametric geometry that needs no USD asset
Prim bindingOpenUSD_Prim_BindingA reified link from a graph vertex to one prim path in one layer
LayerOpenUSD_LayerA resolvable USD file and, for root layers, the stage metadata
LOD heuristicOpenUSD_LOD_Heuristic → OpenUSD_LOD_Distance_Heuristic, OpenUSD_LOD_Screen_Size_HeuristicLevel-of-detail selection policy
Spatial constraintSpatial_Constraint → Containment_Constraint, Keep_Out_Constraint, Support_ConstraintExplicit spatial rules for position fusion

Representation, Analytic_Shape, Spatial_Constraint and OpenUSD_LOD_Heuristic describe themselves as abstract: instantiate a subclass.

How a Thing or Place gets geometry​

Thing and Place both have hasRepresentation → Representation. The relationship is many-to-many by design: one Representation shared by a thousand identical racks is how prototype instancing is expressed, without a separate instanceOf predicate.

A Representation holds no geometry itself. It is realised by exactly one of:

  • hasShape → an Analytic_Shape. Box_Shape takes extentMeters (three half-extents along local X, Y and Z); Capsule_Shape takes radiusMeters and heightMeters, aligned with local +Z. Shapes are unplaced definitions centred on themselves; placement comes from the subject entity.
  • hasPrimBinding → an OpenUSD_Prim_Binding, which resolvesInLayer → an OpenUSD_Layer.

Its own properties are coordinateFrameId (an opaque key into an external coordinate-frame registry: frames resolve outside the graph), geometryHash (a digest so a representation versions independently of its siblings) and name / description. The subclasses add intent: Collision_Representation carries collisionApproximation and closedVolumeRequired and is the only way a render mesh becomes collision geometry; Navigation_Representation carries navigationEffect (traversable or obstructed) and has no equivalent in core USD.

Entity also has hasPrimBinding directly. Per its description this is "pure addressing that carries no physical claim": it says where the entity is in the scene, not that the prim's geometry represents it.

Prim bindings​

An OpenUSD_Prim_Binding exists because relationships cannot carry properties, and the association needs its own identity, provenance and validity window. Its properties describe the association, never the prim:

PropertyMeaning
primPath (required)Absolute Sdf path, e.g. /HallA/Row01/Rack001
primTypeName, requiredAPISchemasWhat the binding expects on the composed prim (Xform, Mesh; PhysicsCollisionAPI), checked at resolve time
openUSDPurposeUSD purpose token: default, render, proxy or guide
variantSelectionsVariant-set selections applied at resolve time
isAuthoritativeForPose (required)Whether physical systems may take pose from this binding; normally false, at most one true per entity at any instant
validFrom, validThroughValidity window
lodIndex, lodDefaultIndex, lodOverrideMode, lodOverrideIndexLevel-of-detail authoring, below

Relationships: resolvesInLayer → OpenUSD_Layer (open a stage with that layer as root, under its resolver context), hasLODItem → child bindings, hasLODHeuristic → heuristics.

Layers​

An OpenUSD_Layer is a durable, resolvable USD artifact: openUSDAssetIdentifier (the resolver identifier), resolverContext, contentHash (e.g. sha256:…), mimeType and schemaProfile. Root layers additionally carry the stage metadata USD stores there: openUSDMetersPerUnit, openUSDKilogramsPerUnit, openUSDUpAxis (Y or Z), openUSDHandedness and openUSDTimeCodesPerSecond. referencesLayer covers sublayer, reference and payload arcs with one predicate, for impact analysis; isGeneratedFrom → Entity records provenance from an IFC or DWG File or a floor plan; hasFile links the stored file.

Level of detail​

A binding with hasLODItem edges is an LOD root; each item carries lodIndex. The root's hasLODHeuristic names one or more OpenUSD_LOD_Heuristics, one per lodDomain. OpenUSD_LOD_Distance_Heuristic selects by distance from lodCenterMeters with ascending lodDistanceThresholdsMeters; OpenUSD_LOD_Screen_Size_Heuristic selects by viewport coverage of lodExtentMeters with descending lodScreenSizeThresholds. Either can point at a bounding volume with hasLODBoundingVolume.

Spatial constraints​

Without a constraint, position fusion is stateless: nothing clamps a body to a floor. A Spatial_Constraint is the opt-in, attached from a Thing or Place with hasConstraint, with exactly one constrainsSubject and one constrainsAgainst (a Representation for geometric modes). Required: constraintEnabled, constraintHardness (HARD, SOFT or ADVISORY) and constraintMode (VALIDATE_ONLY, PROJECT, TRUNCATE or REJECT); optional toleranceMeters, diagnosticCode and a validity window. The three subclasses: Containment_Constraint (stay inside a volume), Keep_Out_Constraint (do not intersect a volume; adds clearanceMeters) and Support_Constraint (rest on a surface).

What the data does not say​

  • There is no mesh, point-cloud or render-only Representation subclass; a plain Representation with a prim binding is the general case.
  • Only box and capsule shapes exist: no sphere, cylinder or convex hull.
  • Coordinate frames, stages and prims are deliberately not classes; coordinateFrameId values are opaque to the ontology.
  • Bindings resolve the static composed transform at the default time code; openUSDTimeCodesPerSecond is not a timeline mapping.