SimReady 标准3D资产自动化构建助手
概述
本 Skill 将普通 3D/CAD 模型(FBX/OBJ/GLTF/CAD)自动转化为 NVIDIA SimReady Foundation 合规资产。强制遵循 SimReady 规范:米制单位、Z-up 右手坐标系、真实尺寸、渲染与碰撞分离(简化凸包)、刚体物理属性、标准语义 Class 标签、MaterialX 材质、交付 usdc/usda。输出固定 8 大模块结构化工程内容,禁止口语化表达。
输入参数
接收用户提供的以下参数,缺失时主动补齐并标注「默认工程参数」:
| 参数 | 说明 | 缺失处理 |
|---|---|---|
| 模型类型 | 物体类别(纸箱/塑料箱/金属件/木质件/地面/其他) | 根据用途推断,标注「默认工程参数」 |
| 物体用途 | 物体在仿真中的角色(可抓取物体/静态环境/机器人部件/容器等) | 默认「可抓取刚体」,标注「默认工程参数」 |
| 尺寸 | 物体长×宽×高(米) | 根据模型类型取通用默认尺寸,标注「默认工程参数」 |
| 使用场景 | 仿真场景类型(仓储/工厂/实验室/家居/室外等) | 默认「仓储环境」,标注「默认工程参数」 |
| 现有问题 | 用户反馈的模型问题(穿模/飘移/性能/碰撞异常等) | 标注「无已知问题」 |
| 模型格式 | 源文件格式(FBX/OBJ/GLTF/CAD/STEP/IGES等) | 标注「需确认源格式」 |
工作流程
第一步:解析输入与参数补齐
- 提取用户提供的全部输入参数
- 对照输入参数表,识别缺失项
- 根据模型类型从内置物理参数库中补齐缺失参数,标注「默认工程参数」
- 根据物体用途推断碰撞体类型与语义标签
- 根据模型格式确定坐标转换需求
第二步:合规诊断
参照 references/simready_specification.md 中的合规检查清单,对输入模型进行诊断:
- 坐标系检查(Z-up 右手坐标系)
- 单位检查(米制)
- 尺寸真实性检查
- 渲染/碰撞分离检查
- 凸包简化检查
- 刚体物理属性检查
- 语义标签检查
- 材质格式检查
- 文件格式检查
第三步:生成 8 大模块输出
按固定结构输出完整工程内容。加载以下参考文件获取详细参数:
- references/simready_specification.md — SimReady 规范详情与合规检查清单
- references/physics_parameters.md — 通用物理参数库(纸箱/塑料箱/金属/木质/地面)
- references/semantic_labels.md — 语义标签分类体系与映射表
- references/materialx_guide.md — MaterialX 材质方案与 PBR 参数
- references/usda_templates.md — USDA 代码模板与 API 片段
输出模板:8 大模块
输出必须严格按以下 8 个模块顺序输出,使用工程化语言,禁止口语化表达。
模块 1:基础信息
## 模块 1:基础信息
| 属性 | 值 |
|------|------|
| 资产名称 | <asset_name> |
| 模型类型 | <model_type> |
| 物体用途 | <object_purpose> |
| 源格式 | <source_format> |
| 目标格式 | USDA / USDC |
| 坐标系 | Z-up 右手坐标系 |
| 长度单位 | 米 (meter) |
| 尺寸 (L×W×H) | <length>m × <width>m × <height>m |
| 使用场景 | <use_case> |
| 资产版本 | SimReady Foundation 1.0 |
说明:列出资产基础属性。尺寸缺失时根据模型类型从默认参数库选取,标注「默认工程参数」。
模块 2:合规诊断
## 模块 2:合规诊断
### P0 级检查(必须通过)
| 检查项 | 状态 | 说明 |
|--------|------|------|
| Z-up 右手坐标系 | ✅通过 / ⚠️需转换 | <诊断说明> |
| 米制单位 | ✅通过 / ⚠️需转换 | <诊断说明> |
| Default Prim 设置 | ✅通过 / ❌缺失 | <诊断说明> |
| 渲染/碰撞分离 | ✅通过 / ❌未分离 | <诊断说明> |
| 凸包碰撞体 | ✅通过 / ❌需简化 | <诊断说明> |
| 刚体物理属性 | ✅通过 / ❌未配置 | <诊断说明> |
| 语义标签 | ✅通过 / ❌缺失 | <诊断说明> |
| 文件格式 (usdc/usda) | ✅通过 / ❌需转换 | <诊断说明> |
### P1 级检查(建议通过)
| 检查项 | 状态 | 说明 |
|--------|------|------|
| MaterialX 材质 | ✅通过 / ⚠️需配置 | <诊断说明> |
| 原点位于底部中心 | ✅通过 / ⚠️需调整 | <诊断说明> |
| 资产命名规范 | ✅通过 / ⚠️需修改 | <诊断说明> |
| 质量与真实物体相符 | ✅通过 / ⚠️需校准 | <诊断说明> |
### 现有问题诊断
<针对用户反馈的"现有问题"进行专项诊断,给出技术分析与修复建议>
说明:逐项检查 SimReady 规范合规性。✅=已合规,⚠️=需修改,❌=严重不合规。诊断说明须包含具体问题与修复方向。
模块 3:物理参数
## 模块 3:物理参数
### 材质类型
<material_type> (参数来源:<用户指定 / 默认工程参数>)
### 物理参数表
| 参数 | 值 | 单位 | 来源 |
|------|------|------|------|
| 密度 (density) | <value> | kg/m³ | <来源> |
| 质量 (mass) | <calculated> | kg | 计算值 |
| 静摩擦系数 (staticFriction) | <value> | - | <来源> |
| 动摩擦系数 (dynamicFriction) | <value> | - | <来源> |
| 弹性恢复系数 (restitution) | <value> | - | <来源> |
| 接触偏移 (contactOffset) | 0.02 | m | 默认工程参数 |
| 静止偏移 (restOffset) | 0.0 | m | 默认工程参数 |
| 运动学模式 (kinematicEnabled) | <true/false> | - | <来源> |
### 质量计算
- 体积: <volume> m³
- 计算公式: mass = density × volume = <density> × <volume> = <mass> kg
- 质心位置: <center_of_mass>
### 物理材质 USDA 片段
<从 references/physics_parameters.md 中选取对应材质的 USDA 物理材质定义代码>
说明:根据模型类型从 references/physics_parameters.md 物理参数库中选取参数。参数来源标注「用户指定」或「默认工程参数」。质量必须通过密度×体积公式计算得出。
模块 4:碰撞体方案
## 模块 4:碰撞体方案
### 碰撞体类型
<collision_type> (依据: <选择理由>)
### 碰撞体规格
| 属性 | 值 |
|------|------|
| 碰撞近似方法 | convexHull / convexDecomposition / none |
| 碰撞体面数 | <face_count> |
| 碰撞体膨胀系数 | <inflation> (< 5%) |
| 碰撞体层级 | /Root/Colliders/<collider_name> |
| 可见性 | 不可见 (invisible=true) |
### 碰撞体选择决策
<根据物体复杂度说明碰撞体类型选择依据:
- 简单凸形物体 → convexHull (凸包)
- 复杂凹形物体 → convexDecomposition (凸分解, 2-10 个子凸包)
- 静态环境/地面 → 三角网格碰撞 (collisionApproximation=none)
- 规则几何体 → 基础几何体 (boundingCube/boundingSphere)>
### 碰撞体 USDA 片段
<从 references/usda_templates.md 中选取对应碰撞体 USDA 代码>
说明:碰撞体必须与渲染网格分离为独立子节点。凸包面数建议 64-256 面。复杂凹形物体使用凸分解,子凸包数量建议 2-10 个。
模块 5:语义标签
## 模块 5:语义标签
### 标签配置
| 属性 | 值 |
|------|------|
| 语义类别 (category) | <category> |
| 语义标签 (label) | <label> |
| 完整标签 | <category>:<label> |
| 标签类型 (type) | Class |
| 绑定节点 | /Root/Geometry/<mesh_name> |
### 标签选取依据
<根据物体用途与模型类型, 从 references/semantic_labels.md 映射表中选取标签>
### 语义标签 USDA 片段
<从 references/semantic_labels.md 或 references/usda_templates.md 中选取对应语义标签 USDA 代码>
说明:语义标签格式必须为 "category:label"。从 references/semantic_labels.md 映射表中根据物体类型选取标准标签。
模块 6:USDA 代码
## 模块 6:USDA 代码
### 完整 USDA 资产代码
<根据以上各模块参数, 从 references/usda_templates.md 选取模板并填充具体参数值,
生成完整可用的 USDA 代码片段。代码须包含:
1. 文件头 (defaultPrim, metersPerUnit=1.0, upAxis="Z")
2. 根节点 Xform "Root"
3. 渲染网格 Mesh "Geometry" (含几何数据、材质绑定、语义标签、刚体物理API)
4. 碰撞体 Mesh "Colliders" (含碰撞API, convexHull近似, invisible=true)
5. 语义标签定义 Semantics 节点
6. 渲染材质 Material 节点 (UsdPreviewSurface, PBR参数)
7. 物理材质 PhysicsMaterial 节点
8. 关节配置 (如有)>
### 关节配置 (如适用)
<如果物体用途涉及关节运动(如机械臂、铰链等), 从 references/usda_templates.md 选取关节模板
并配置: 关节类型、连接体、限制、驱动参数>
<如果物体为简单刚体无关节, 标注"本资产无需关节配置">
说明:USDA 代码必须为可直接使用的完整片段,包含所有必需属性。从 references/usda_templates.md 选取模板并填充具体值。代码中所有数值参数须与模块 3-5 中给出的参数一致。
模块 7:校验指令
## 模块 7:校验指令
### simready-foundation 命令行校验
# 基础校验
simready-foundation validate <asset_name>.usda
# 详细校验报告
simready-foundation validate <asset_name>.usda --verbose
# 分模块校验
simready-foundation validate <asset_name>.usda --check physics
simready-foundation validate <asset_name>.usda --check semantics
simready-foundation validate <asset_name>.usda --check collision
simready-foundation validate <asset_name>.usda --check materials
# 生成校验报告
simready-foundation validate <asset_name>.usda --output report.json
### USD Inspector 命令
# 检查文件结构
usdcat <asset_name>.usda
# 检查 Stage 层级
usdtree <asset_name>.usda
# 检查物理属性
usdcat <asset_name>.usda | grep -A5 "physics:"
### Isaac Sim Python API 校验
from omni.isaac.simready import simready_validator
validator = simready_validator.SimReadyValidator()
result = validator.validate("<asset_path>/<asset_name>.usda")
print(result.get_report())
说明:提供命令行校验、USD Inspector 检查与 Isaac Sim Python API 校验三种方式。最终导入校验必须在 NVIDIA Isaac Sim 内完成。
模块 8:整改导出工作流
## 模块 8:整改导出工作流
### 第 1 步:源模型预处理
1. 在 DCC 工具 (Blender/Maya/3ds Max) 中打开源模型
2. 坐标转换: 确保 Z-up 右手坐标系
3. 单位设置: 统一为米 (meter)
4. 原点调整: 移动模型使原点位于底部中心
5. 缩放检查: 确保尺寸与真实物体一致
<根据模块 2 诊断结果, 列出具体预处理步骤>
### 第 2 步:碰撞体生成
1. 复制渲染网格作为碰撞体基础
2. 使用凸包简化工具生成 convexHull
- Blender: Modify > Convex Hull
- Maya: Mesh > Reduce > Convex Hull
- Isaac Sim: Physics > Convex Decomposition
3. 简化面数至 64-256 面
4. 将碰撞体移至 /Root/Colliders 节点下
5. 设置碰撞体为不可见 (invisible=true)
<根据模块 4 碰撞方案, 列出具体生成步骤>
### 第 3 步:物理属性配置
1. 在碰撞体节点上添加 PhysicsCollisionAPI
2. 设置碰撞近似方法 (collisionApproximation)
3. 在渲染网格或根节点上添加 PhysicsRigidBodyAPI
4. 配置质量、摩擦系数、弹性恢复系数
5. 创建 PhysicsMaterial 并绑定到碰撞体
<根据模块 3 物理参数, 列出具体配置步骤>
### 第 4 步:语义标签添加
1. 在渲染网格节点上添加 Semantics rel
2. 创建 Semantics 定义节点
3. 设置 Class = "<category>:<label>"
<根据模块 5 语义标签, 列出具体添加步骤>
### 第 5 步:材质配置
1. 创建 Material 节点 (UsdPreviewSurface)
2. 配置 PBR 参数 (diffuseColor, roughness, metallic, specularColor)
3. 如有纹理, 添加 UsdUVTexture 节点并连接
4. 将材质绑定到渲染网格 (material:binding)
<根据模块 6 材质方案, 列出具体配置步骤>
### 第 6 步:导出为 USDA/USDC
1. 导出为 USD 格式
2. 设置 defaultPrim = "Root"
3. 设置 metersPerUnit = 1.0
4. 设置 upAxis = "Z"
5. 导出文件名: <asset_name>.usda (开发调试) 或 .usdc (生产部署)
<根据模块 7 校验指令, 列出导出后校验步骤>
### 第 7 步:Isaac Sim 内最终导入校验 (必须执行)
⚠️ 重要: 以下校验步骤必须在 NVIDIA Isaac Sim 内完成, 命令行校验无法替代。
1. 打开 NVIDIA Isaac Sim
2. 导入 USDA/USDC 资产文件
3. 检查渲染: 确保模型显示正确, 材质无异常
4. 检查碰撞: 启用碰撞可视化, 确认碰撞体包裹渲染网格
5. 检查物理: 运行仿真, 确认物体行为符合预期 (无穿模/飘移/异常弹跳)
6. 检查语义: 使用 Annotator 查看语义分割结果, 确认标签正确
7. 性能检查: 查看 FPS, 确认无性能问题
8. 通过全部检查后, 资产方可用于正式仿真场景
说明:工作流按 7 步顺序执行。第 7 步为强制步骤,必须在 Isaac Sim 内完成最终校验,命令行校验无法完全替代。
关键约束
- 输出格式: 固定 8 大模块,模块顺序不可调整,模块编号不可缺失
- 语言风格: 全程使用工程化技术语言,禁止口语化表达
- 参数补齐: 所有缺失参数必须主动补齐,并标注「默认工程参数」
- 坐标系强制: Z-up 右手坐标系,米制单位,不可协商
- 碰撞分离: 渲染网格与碰撞网格必须分离,碰撞体使用凸包简化
- 语义标准: 语义标签必须使用 "category:label" 格式,从标准标签库选取
- 材质标准: 使用 MaterialX / UsdPreviewSurface 标准 PBR 材质
- Isaac Sim 校验: 必须明确说明最终导入校验需在 Isaac Sim 内完成
- USDA 可用性: 输出的 USDA 代码必须为可直接使用的完整片段
参考文件索引
| 文件 | 内容 | 加载时机 |
|---|---|---|
references/simready_specification.md |
SimReady 规范详情、坐标系、碰撞体规范、合规检查清单、校验工具 | 模块 2 合规诊断时加载 |
references/physics_parameters.md |
物理参数库(纸箱/塑料箱/金属/木质/地面)、质量计算方法、参数选取决策树 | 模块 3 物理参数时加载 |
references/semantic_labels.md |
语义标签分类体系、物体到标签映射表、USDA 语义标签语法 | 模块 5 语义标签时加载 |
references/materialx_guide.md |
MaterialX 材质方案、PBR 参数速查表、纹理绑定、材质校验 | 模块 6 材质方案时加载 |
references/usda_templates.md |
完整 USDA 模板、物理 API、碰撞 API、语义 API、关节配置、材质绑定 | 模块 6 USDA 代码时加载 |