Robotics-Prop Profile USD Authoring Guide#
This document describes how to author a USD asset that conforms to the
Robotics-Prop profile. It consolidates the required feature set, USD
properties, naming conventions, and the optional runtime variants that this
profile exposes.
Robotics-Prop is the consolidated prop profile. It replaces the separate
Prop-Robotics-Neutral and Prop-Robotics-Physx profiles with a single
profile whose neutral OpenUSD core is mandatory and whose solver-specific
behavior is selected through optional features.
Profile definition#
The Robotics-Prop profile includes the following feature set (see
robotics_prop.toml and the
feature dependency graph). Each
feature’s requirements and dependencies are defined in the feature
specifications.
[Robotics-Prop]
"3.0.0" = {features = [
{"FET_000_STANDARD" = {version = "0.1.0"}}, # "Core"
{"FET_001_STANDARD" = {version = "1.0.1"}}, # "Minimal"
{"FET_003_STANDARD" = {version = "0.2.0"}}, # "RBD Physics"
{"FET_004_STANDARD" = {version = "0.2.0"}, optional=true}, # "Simulate Multi-Body Physics"
{"FET_005_STANDARD" = {version = "0.1.0"}, optional=true}, # "Simulate Grasp Physics"
{"FET_006_STANDARD" = {version = "0.1.0"}, optional=true}, # "Materials (USDPreview)"
{"FET_006_MDL" = {version = "0.1.0"}, optional=true}, # "Materials (MDL)"
{"FET_007_STANDARD" = {version = "0.2.0"}, optional=true}, # "Non-Visual Materials"
{"FET_004_PHYSX" = {version = "0.4.0"}, optional=true}, # "Simulate Multi-Body Physics and SDF collision approximation"
{"FET_004_NEWTON" = {version = "0.1.0"}, optional=true}, # "Simulate Multi-Body Physics (Newton)"
]}
"3.1.0" = {features = [ # Add optional runtime physics variant scaffolding (FET_000_* / FET_003_* / FET_004_*)
{"FET_000_STANDARD" = {version = "0.1.0"}}, # "Core"
{"FET_001_STANDARD" = {version = "1.0.1"}}, # "Minimal"
{"FET_003_STANDARD" = {version = "0.2.0"}}, # "RBD Physics"
{"FET_004_STANDARD" = {version = "0.2.0"}, optional=true}, # "Simulate Multi-Body Physics"
{"FET_005_STANDARD" = {version = "0.1.0"}, optional=true}, # "Simulate Grasp Physics"
{"FET_006_STANDARD" = {version = "0.1.0"}, optional=true}, # "Materials (USDPreview)"
{"FET_006_MDL" = {version = "0.1.0"}, optional=true}, # "Materials (MDL)"
{"FET_007_STANDARD" = {version = "0.2.0"}, optional=true}, # "Non-Visual Materials"
# PhysX runtime variant (Core -> Rigid Body -> Multibody)
{"FET_000_PHYSX" = {version = "0.1.0"}, optional=true}, # "Core PhysX runtime variant"
{"FET_003_PHYSX" = {version = "0.4.0"}, optional=true}, # "Rigid Body Physics (PhysX)"
{"FET_004_PHYSX" = {version = "0.4.0"}, optional=true}, # "Simulate Multi-Body Physics and SDF collision approximation"
# Newton runtime variant (Core -> Rigid Body -> Multibody)
{"FET_000_NEWTON" = {version = "0.1.0"}, optional=true}, # "Core Newton runtime variant"
{"FET_003_NEWTON" = {version = "0.1.0"}, optional=true}, # "Rigid Body Physics (Newton)"
{"FET_004_NEWTON" = {version = "0.1.0"}, optional=true}, # "Simulate Multi-Body Physics (Newton)"
# MuJoCo runtime variant (Core -> Rigid Body -> Multibody)
{"FET_000_MUJOCO" = {version = "0.1.0"}, optional=true}, # "Core MuJoCo runtime variant"
{"FET_003_MUJOCO" = {version = "0.1.0"}, optional=true}, # "Rigid Body Physics (MuJoCo)"
{"FET_004_MUJOCO" = {version = "0.1.0"}, optional=true}, # "Simulate Multi-Body Physics (MuJoCo)"
]}
Required versus optional features#
Only three features are required. Everything else is marked optional=true and
is validated only when the asset selects it.
Feature |
Version |
Status |
Purpose |
|---|---|---|---|
|
0.1.0 |
Required |
Core file layout, anchored references, SimReady metadata |
|
1.0.1 |
Required |
Minimal OpenUSD asset: units, hierarchy, mesh geometry |
|
0.2.0 |
Required |
Neutral rigid-body physics and colliders |
|
0.2.0 |
Optional |
Neutral multibody joints |
|
0.1.0 |
Optional |
Grasp physics (physics material + grasp line) |
|
0.1.0 |
Optional |
|
|
0.1.0 |
Optional |
MDL materials |
|
0.2.0 |
Optional |
Non-visual sensor materials |
A single-rigid-body prop satisfies the required set through FET_003_STANDARD
alone. Select FET_004_STANDARD only for props intentionally authored as a
multibody assembly with joints.
Version 3.1.0 additionally exposes optional PhysX, Newton, and MuJoCo runtime
variants. Each runtime is a three-feature chain: FET_000_<RUNTIME> for the
variant scaffolding, FET_003_<RUNTIME> for rigid bodies, and
FET_004_<RUNTIME> for multibody joints.
Required USD properties and schemas#
Core file layout (FET_000_STANDARD)#
Lay the asset out as
<asset_root>/<intermediate_folder>/<main.usd>, with the main USD filename containing the root folder name and exactly one USD file in the intermediate folder (NP.005).Use lowercase file names with
.usd,.usda,.usdc, or.usdzextensions, separating words with_or-(NP.002).Use lowercase directory names and group supporting content into purpose folders such as
materials/,textures/,geometry/, andphysics/(NP.003).Keep path strings within platform limits (
NP.004).Author asset metadata in root-layer
customLayerDataand/or a sidecar[asset_name].jsonbeside the USD file (NP.006).Make every
references,payloads,subLayers, and textureassetpath relative with./or../(NP.007), and make sure each one resolves to a file that exists on disk (NP.008).Author
dictionary SimReady_Metadatain root-layercustomLayerDatawith string fieldsasset_name,asset_type,source_file, andusd_date_generatedin ISOYYYY-MM-DDform (SR.001).Do not leave orphan
overprims with no underlyingdef(HI.010).
Stage metadata and hierarchy (FET_001_STANDARD)#
Set
upAxis = "Z"(UN.006) andmetersPerUnit = 1.0(UN.007).Set
defaultPrimto an existing prim (HI.004).Parent all prims under a single stage root prim (
HI.001) that inheritsUsdGeomXformable, typicallydef Xform(HI.003). AScope,Material, orShaderroot is invalid.Use anchored
./or../reference paths that do not escape the asset root (AA.001), pointing only at supported file types: USD,.png,.jpeg,.jpg,.exr,.m4a,.mp3,.wav(AA.002).
Geometry (FET_001_STANDARD)#
Author render geometry as
UsdGeom.Meshwithuniform token subdivisionScheme = "none"(VG.MESH.001).Author correct
float3[] extenton boundable geometry (VG.002).Keep mesh topology valid:
faceVertexIndicesin range, no degenerate faces (VG.014), using counter-clockwise winding (VG.029).Author normals through either
normal3f[] primvars:normalsornormal3f[] normals, but never both on the same mesh (VG.027). Normals must be unit length and point outward consistently with the winding (VG.028).Avoid coincident meshes occupying identical space (
VG.008).Place the asset at the origin with a neutral root transform (
VG.025).
Rigid bodies and colliders (FET_003_STANDARD)#
Apply
UsdPhysicsRigidBodyAPIto at least oneUsdGeomXformableprim (RB.001), and only toUsdGeomXformableprims (RB.003).Apply
UsdPhysicsCollisionAPIonly onUsdGeom.Gprimprims, not on bare Xforms (RB.COL.001).Apply
UsdPhysicsMeshCollisionAPIonly onUsdGeom.Mesh, always paired withUsdPhysicsCollisionAPI(RB.COL.002,RB.COL.003).Keep world scale uniform on Sphere, Capsule, Cylinder, Cone, and Points colliders; Mesh and Cube may be scaled non-uniformly (
RB.COL.004).Do not apply
PhysicsRigidBodyAPIinside aninstanceable = trueprototype; apply it on the instance root instead (RB.005).Author
float physics:masson the body or its descendant colliders (RB.007).Keep the composed world transform of a rigid body free of skew (
RB.009).Set
uniform token purpose = "guide"on collision-only meshes that should not render (RB.010).
Optional feature requirements#
Multibody joints (FET_004_STANDARD)#
Connect constrained bodies with a
UsdPhysicsJointsubtype and authorrel physics:body0andrel physics:body1; an empty side means world (JT.001).Target existing prims, or leave the relationship empty (
JT.002), with at most one target each (JT.003).Do not nest
PhysicsArticulationRootAPI(JT.ART.002), and do not apply it to kinematic (JT.ART.003) or disabled/static (JT.ART.004) bodies.Apply
PhysicsRigidBodyAPIto at least two separateUsdGeomXformablehierarchies (RB.MB.001).
Grasp physics (FET_005_STANDARD)#
Bind a physics material to every collider through
rel material:binding:physics(PMT.001).Author at least one grasp line that intersects graspable geometry, typically a
UsdGeom.BasisCurveswith two points,int[] curveVertexCounts = [2], anduniform token type = "linear"(GSP.001).
GSP.001 is a visual-semantic requirement with no executable validator. The
grasp line must cross a region a gripper can actually close on, so it needs
visual review rather than an arbitrary line.
Materials (FET_006_STANDARD and FET_006_MDL)#
FET_006_STANDARD covers UsdPreviewSurface assets:
Bind materials from inside a payload to materials defined in that payload scope (
VM.BIND.001).Use only spec-defined
UsdPreviewSurfaceinputs, types, and tokens, and do not time-sample uniform token inputs (VM.PS.001).
FET_006_MDL covers MDL assets and adds:
Match shader
inputs:*types to the MDL module or SDR spec (VM.BIND.002).Resolve a bound material for every renderable Gprim (
VM.MAT.001).Author a non-empty
uniform asset info:mdl:sourceAssetwith a./-relative.mdlpath that exists (VM.MDL.001), usinginfo:implementationSource = "sourceAsset"rather than the deprecatedmdlMaterialform (VM.MDL.002).Keep texture images at or below 16384 px in both dimensions (
VM.TEX.001).Set
inputs:sourceColorSpace = "sRGB"on base color textures and"raw"on metallic, roughness, height, opacity, and normal maps; 8-bit normal maps also needinputs:scale = (2, 2, 2, 1)andinputs:bias = (-1, -1, -1, 0)(VM.TEX.002).
Non-visual sensor materials (FET_007_STANDARD)#
Author
token[] omni:simready:nonvisual:attributes(NVM.001),token omni:simready:nonvisual:base(NVM.002), andtoken omni:simready:nonvisual:coating(NVM.003) using the token values allowed by the non-visual materials capability.Author these tokens only on materials actually bound to geometry (
NVM.004), keep them semantically consistent with the visual material (NVM.005), and do not time-sample them (NVM.006).
Runtime physics variants (version 3.1.0)#
Version 3.1.0 adds optional runtime variant scaffolding so one asset can carry
PhysX, Newton, and MuJoCo physics without any runtime seeing another’s schemas.
Variant scaffolding (FET_000_PHYSX, FET_000_NEWTON, FET_000_MUJOCO)#
On the stage defaultPrim, author one variant set per runtime, named exactly
PhysX, Newton, or MuJoCo, each with Disabled and Enabled options and a
default selection of Disabled (RV.001, RV.004, RV.007).
The Enabled option must contain exactly one anchored payload and nothing else
(RV.002, RV.005, RV.008, RV.010):
variantSet "PhysX" = {
"Disabled" {
}
"Enabled" {
prepend payload = @../runnables/physics/physx.usd@
}
}
Record the activation in root-layer customLayerData under
SimReady_Metadata.Variants.Physics.<Runtime> with prim, variantSetName,
and activateOption keys (RV.003, RV.006, RV.009).
With one runtime enabled and the others disabled, the composed stage must
contain only neutral UsdPhysics/physics: data plus that runtime’s own
schemas (RV.011). Foreign-runtime data leaking into the composed stage is a
failure.
PhysX rigid bodies and multibody (FET_003_PHYSX, FET_004_PHYSX)#
Apply
PhysicsCollisionAPIon aUsdGeom.Gprim, or on an Xform that also hasPhysxMeshMergeCollisionAPIwhosecollection:collisionmeshes:includesresolves to at least one Gprim (PHYSX.COL.001).Apply
PhysicsMeshCollisionAPIon aUsdGeom.Meshor a prim withPhysxMeshMergeCollisionAPI, always alongsidePhysicsCollisionAPI(PHYSX.COL.002).FET_004_PHYSX@0.4.0adds the mass and nesting rules: every rigid-body subtree needs authoredphysics:mass > 0or a collider with non-zero volume for auto-mass (RB.011), and nested rigid bodies must be connected by a joint (RB.012).
physics:approximation = "sdf" is a PhysX-only value. Authoring it in the
neutral base layer fails RV.011.
Newton rigid bodies and multibody (FET_003_NEWTON, FET_004_NEWTON)#
Apply either
NewtonMeshCollisionAPIorNewtonSDFCollisionAPIon aUsdGeom.Mesh, but not both (NEWTON.COL.001).Keep authored SDF values valid: non-negative
newton:contactMargin,newton:contactGap, andnewton:sdfPadding; a positivenewton:sdfMaxResolutiondivisible by 8;newton:sdfTextureFormatin{uint8, uint16, float32}; andnewton:sdfNarrowBandInner < newton:sdfNarrowBandOuter(NEWTON.COL.002).Apply
NewtonMassAPIonly onXformableprims, withdouble[] newton:inertiaeither empty or exactly six finite elements (NEWTON.MAS.001).Apply
NewtonMaterialAPIonly on aUsdShade.Materialthat also hasPhysicsMaterialAPI(NEWTON.MAT.001).
MuJoCo rigid bodies and multibody (FET_003_MUJOCO, FET_004_MUJOCO)#
Apply
MjcCollisionAPIalongsidePhysicsCollisionAPIon every active MuJoCo colliderUsdGeom.Gprim(MUJOCO.COL.001).Apply
MjcMeshCollisionAPIonly onUsdGeom.Mesh, withuniform token mjc:inertiain{legacy, convex, exact, shell}anduniform int mjc:maxhullvert >= -1(MUJOCO.COL.002).Mesh colliders carrying both
PhysicsMeshCollisionAPIandMjcCollisionAPImust setuniform token physics:approximation = "convexHull".
Naming conventions#
Prim naming#
Choose either
camelCaseorsnake_caseand use it consistently.Avoid spaces, special characters, and reserved keywords.
Use descriptive, purpose-driven names.
Use prefixes by prim type when appropriate (e.g.,
mesh_,material_).
File naming#
Use lowercase file names.
Use
.usd,.usda,.usdc, or.usdzas appropriate.Use underscores or hyphens; avoid spaces and special characters.
Avoid reserved names (e.g.,
CON,PRN,AUX,NUL).Use version numbers when appropriate (e.g.,
_v1.0).
Validation metadata (recommended)#
Include profile metadata in customLayerData to simplify validation workflows:
customLayerData = {
dictionary SimReady_Metadata = {
dictionary validation = {
string profile = "Robotics-Prop"
string profile_version = "3.1.0"
}
}
}
Conformance workflow#
Repair one feature gate at a time, in dependency order:
validate Robotics-Prop
-> simready-foundation-conform-fet-000-standard
-> simready-foundation-conform-fet-001-standard
-> simready-foundation-conform-fet-003-standard (or -physx / -newton / -mujoco)
-> simready-foundation-conform-fet-004-standard (only for multibody props)
-> simready-foundation-conform-fet-005-standard
-> simready-foundation-conform-fet-006-standard or -mdl
-> simready-foundation-conform-fet-007-standard (only when selected)
-> validate Robotics-Prop again
References#
Feature dependency graph — requirements and dependencies for all features
nv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/profiles/robotics_prop.tomlnv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/features/FET_000_STANDARD.mdnv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/features/FET_001_STANDARD.mdnv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/features/FET_003_STANDARD.mdnv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/features/FET_004_STANDARD.mdnv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/features/FET_005_STANDARD.mdnv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/features/FET_006_STANDARD.mdnv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/features/FET_006_MDL.mdnv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/features/FET_007_STANDARD.mdnv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/capabilities/core/naming_paths/nv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/capabilities/core/atomic_asset/nv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/capabilities/core/runtime_variants/nv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/capabilities/core/sim_ready/nv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/capabilities/core/units/nv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/capabilities/hierarchy/nv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/capabilities/visualization/geometry/nv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/capabilities/visualization/materials/nv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/capabilities/physics_bodies/physics_rigid_bodies/nv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/capabilities/physics_bodies/physics_joints/nv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/capabilities/physics_bodies/physics_materials/nv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/capabilities/physics_bodies/physics_graspable/nv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/capabilities/nonvisual_sensors/nonvisual_materials/