Isaac Sim Asset Structure 3.0

Isaac Sim Asset Structure 3.0 是 Asset Structure - Isaac Sim Documentation 中描述的 robot asset organization pattern:不要把 mesh、materials、colliders、robot metadata、neutral physics、engine-specific tuning、control graphs 和 optional features 混在一个 monolithic USD 里,而是拆成职责明确的 layers,再通过 USD composition 组合成最终 entry asset。

Source 的 evidence boundary 很重要:这是 Isaac Sim 6.0 Early Developer Release 文档中的 guidance,页面最后更新时间是 2026-03-18;它说明的是当前 EDR docs 对 imported assets 的 structure 约定,而不是所有旧版 Isaac Sim assets 都已经符合这个 layout。

命名上也要保持精确:Isaac Sim 4.5 Asset Structure 描述的是 legacy / pre-3.0 layout,source 本身没有把旧 layout 称为 Asset Structure 2.0。本页中的 3.0 对照应理解为“legacy vs. 3.0”,不是“2.0 vs. 3.0”。旧 layout 的机制页见 IsaacSimLegacyAssetStructure

数学结构

可以把一个 Isaac Sim robot asset 近似看成 USD composition graph:

其中 是一组 USD layers, 是 layer 之间的 composition edges, 是 variant sets, 是最终暴露给 consumer 的 prim hierarchy。这个 formalization 是为了复习 source 中的 layers / payloads / variants / references 关系:source 明确要求用 multiple files、sublayers、references、payloads 和 variants 组织 asset。

核心 layers 可以按职责分成五类:

RoleTypical file应该放什么不应该放什么
Geometry datageometries.usdcmesh topology、vertex dataphysics tuning、robot metadata、runtime-specific attrs
Look / assemblymaterials.usda, instances.usdamaterials、shader bindings、visual/collision mesh composition、collision approximationrobot dynamics 和 engine-specific solver tuning
Structure / schemabase.usda, robot.usdasimulation-ready hierarchy、transforms、Isaac robot schema metadata 和 joint relationshipsmesh vertex edits、runtime-specific tuning
Physics runtimephysics.usd(a), mujoco.usda, physx.usdacommon rigid bodies / masses / joints / articulation,以及 MuJoCo 或 PhysX specific attributesunrelated visual/material edits
Interface / featuresasset.usd or interface.usda, feature payloadsfinal entry prim、payloads、variants、control/ROS/gripper stacksdestructive edits to source imported hierarchy

physics.usd(a) 扮演 neutral layer:它保存跨 runtime 的 core physical behavior。mujoco.usdaphysx.usda 在它之上加入 engine-specific behavior,这样 MuJoCo damping/frictionloss 或 PhysX mimic/solver attributes 不会写进同一个 layer 互相覆盖。

图 1:Asset Composition Graph

flowchart LR
  S["raw imported source<br/>keep unchanged"] --> T["transformed base<br/>flatten hierarchy<br/>optimize meshes"]
  G["geometries.usdc"] --> I["instances.usda<br/>visual + collider assembly"]
  M["materials.usda"] --> I
  I --> B["base.usda<br/>simulation structure"]
  B --> P["physics.usd(a)<br/>neutral physics"]
  P --> MJ["mujoco.usda<br/>MuJoCo tuning"]
  P --> PX["physx.usda<br/>PhysX tuning"]
  R["robot.usda<br/>Robot Schema"] --> F["asset.usd / interface.usda<br/>final entry"]
  B --> F
  MJ --> F
  PX --> F
  C["feature payloads<br/>control / ROS / gripper"] --> F

这张图强调 Asset Structure 3.0 的核心对象不是单个 file,而是一个 USD composition graph。Geometry、material、instance、schema、neutral physics 和 runtime-specific tuning 分别 author,再由 final entry asset 选择要加载的 payloads 和 variants。

直觉

这个 layout 的直觉是把“会一起变化的东西”放在一起,把“会因为 runtime 或 use case 不同而变化的东西”隔离开。CAD mesh 变化会触发 geometries.usdc;collision approximation 会触发 instances.usda;robot identity 和 schema relationships 会触发 robot.usda;跨 runtime 都成立的 mass/joint/articulation 会触发 physics.usd(a);只属于 MuJoCo 或 PhysX 的 solver/runtime tuning 则进入各自 layer。

Transformation 阶段解决的是 source asset 与 simulation asset 的结构差异。Imported source 可能有 nested rigid bodies 或 CAD-oriented hierarchy;simulation 更需要 flattened rigid-body list、清晰的 visual/collider split、较少 mesh count,以及 instantiable references。这样做会牺牲 source hierarchy 的直观原貌,但换来更可控的 simulation composition 和 performance。

Feature authoring 的关键习惯是 temporary sublayer:编辑 feature 时临时把 optimized asset 加进 stage,保存 feature 前移除或 disable 这个 sublayer,然后把 feature 作为 payload 加到 final asset。这样 feature layer 只保存自己的 delta,不把整个 optimized asset 复制进去。

图 2:Authoring Workflow

flowchart TD
  A["imported source asset<br/>do not edit in place"] --> B{"source hierarchy<br/>simulation-ready?"}
  B -- "yes" --> C["use as optimized base<br/>or skip partial transformation"]
  B -- "no" --> D["transform asset<br/>flatten rigid bodies<br/>split visuals and colliders<br/>optimize mesh count"]
  C --> E["feature authoring stage"]
  D --> E
  E --> F["add optimized asset<br/>as temporary sublayer"]
  F --> G["author only feature deltas<br/>physics / sensors / control / ROS / gripper"]
  G --> H["remove or disable temporary sublayer<br/>before saving feature layer"]
  H --> I["add feature to final asset<br/>as payload"]
  I --> J["expose runtime choices<br/>with variants"]

这张图解释为什么 source 要保持 immutable:downstream work 应该挂在 transformed base 和 feature payloads 上,而不是直接污染 imported source。这样 CAD/source re-import 后,feature layer 仍可以重新组合。

Failure Modes

  • Monolithic asset drift:mesh、materials、colliders、schema、PhysX tuning 和 MuJoCo tuning 混在同一个 file,后续 re-import 或 runtime switching 会变得不可审计。
  • Source overwrite:直接编辑 imported source asset,CAD/source re-import 时 downstream modifications 丢失。
  • Runtime attribute clash:把 PhysX-only API、MuJoCo-specific attrs 和 neutral physics 混写在一起,导致一个 runtime 的 tuning 污染另一个 runtime。
  • Hierarchy mismatch:没有 flatten nested rigid bodies 或整理 simulation hierarchy,asset 在 editor 中可见但不满足 articulation/controller/simulation expectations。
  • Payload contamination:feature authoring 后忘记移除 optimized asset temporary sublayer,feature file 可能意外保存过多 composition state。
  • Naming ambiguity:source 同时出现 physics.usd / physics.usdaasset.usd / interface.usda,实际项目应以 importer output 和团队约定固定 naming。

实践含义

学习 Asset Structure 3.0 时,不要先背文件名,而要先背 authoring question:

图 3:Layer Responsibility Map

flowchart LR
  Q["authoring question<br/>what are you changing?"] --> A["shape or mesh data<br/>geometries.usdc"]
  Q --> B["visual material<br/>materials.usda"]
  Q --> C["collider representation<br/>instances.usda"]
  Q --> D["simulation hierarchy<br/>base.usda"]
  Q --> E["robot metadata or schema links<br/>robot.usda"]
  Q --> F["cross-engine dynamics<br/>physics.usd(a)"]
  Q --> G["MuJoCo-only tuning<br/>mujoco.usda"]
  Q --> H["PhysX-only tuning<br/>physx.usda"]
  Q --> I["optional feature or runtime switch<br/>payloads and variants"]

这张图适合做实际编辑前的 checklist:先判断 change 的 semantic owner,再进入对应 layer。它的目的不是替代 importer output,而是减少把 unrelated responsibilities 写进同一个 USD file 的风险。

你要改什么?先看哪个 layer?原因
Shape / mesh datageometries.usdc这是 mesh topology 和 vertex data 的 source-of-truth。
Visual materialmaterials.usdaLook-development 应和 geometry / physics 解耦。
Collider representationinstances.usda这里组合 mesh、material 和 collision approximation。
Simulation hierarchybase.usda这里保存 transformed, simulation-ready kinematic structure。
Robot metadata / schema linksrobot.usdaRobot identity、namespace 和 joint relationships 属于 schema layer。
Cross-engine dynamicsphysics.usd(a)Masses、joints、articulation structure 等 common physics 放在 neutral layer。
MuJoCo tuningmujoco.usdaRuntime-specific attrs 只影响 MuJoCo composition。
PhysX tuningphysx.usdaPhysX APIs、mimic setup 和 solver-related attrs 与 PhysX runtime 绑定。
Optional feature / runtime switchfinal asset.usd / interface.usdaPayloads 和 variants 控制 feature loading 与 physics setup switching。

与 Legacy / Pre-3.0 Layout 的区别

Legacy asset structure 已经使用 USD sublayers、payloads、references 和 variants,但职责切分较粗:parts.usd 承担 mesh parts,asset_sim_optimized.usd 承担 transformed simulation asset,asset_physics.usd 承担 physics feature。Asset Structure 3.0 的主要变化是把 mesh data、mesh/material/collider assembly、simulation hierarchy、Robot Schema、neutral physics 和 runtime-specific physics 拆成更明确的 layers。

ResponsibilityLegacy / pre-3.0Asset Structure 3.0
Mesh data / partsparts.usdgeometries.usdc
Assembly and collidersmixed into source / optimized asset responsibilitiesinstances.usda
Simulation-ready hierarchyasset_sim_optimized.usdbase.usda
Robot metadatanot separated in 4.5 sourcerobot.usda
Physics setupasset_physics.usd referencephysics.usd(a) + physx.usda / mujoco.usda
Final entryasset.usdasset.usd or interface.usda

mujoco.usda Ownership Boundary

mujoco.usda 不应理解成“MuJoCo 版 visual/collision asset”,也不等价于 native MJCF。Source-backed 的部分是:isaac-sim-asset-structuremujoco.usda 放在 MuJoCo physics setup / engine-specific tuning 位置,并把 visual mesh、materials、instances/colliders 和 neutral physics 拆到其他 layers。由此可以得到一个 conversation-derived authoring heuristic:mujoco.usda 放的是 MuJoCo 对已有 USD robot asset 的 runtime interpretation / tuning overlay,而不是 robot asset 的 mesh、material 或 shared collider source-of-truth。更完整的 distill 见 isaac-sim-mujoco-usda-runtime-semantics

语义类型先看哪个 layer?判断
Visual mesh、texture、material、mesh topologygeometries.usdcmaterials.usdainstances.usda不属于 mujoco.usda
Collision shape、collision mesh、visual/collider assemblyinstances.usdabase.usdaphysics.usd(a)如果是 cross-engine shared collider semantics,不属于 mujoco.usda
Body/joint hierarchy、joint axis、shared limit、mass/inertiabase.usdaphysics.usd(a)优先作为 neutral physics / structure author。
MuJoCo actuator/transmission behaviormujoco.usda属于 MuJoCo-only runtime semantics 的典型例子。
MuJoCo joint passive dynamics 或 contact solver tuningmujoco.usda例如 damping、frictionloss、armature、MuJoCo-specific contact / solver parameters;实际可用属性需以 Isaac backend support 为准。
MuJoCo-only collision filtering 或 constraint tuningmujoco.usda or runtime config如果 neutral USD Physics 不能表达且只影响 MuJoCo backend,才进入 MuJoCo-specific layer。

对 RL、MPC、sim-to-real 或 multi-engine benchmarking,这个 structure 的实际价值是让 asset assumptions 可定位。你可以明确说“这是 shared geometry/collider change”“这是 neutral dynamics change”“这是 PhysX-only tuning change”或“这是 MuJoCo-only tuning change”。这不能消除 simulation reality gap,但能减少 asset authoring 层面的不可解释差异。

相关页面:IsaacSimLegacyAssetStructureIsaacSimNVIDIAMuJoCoSimulationRealityGapContactModelsInRobotics