4. 创建与保存第一个USD场景

好,咱们正式开始动手了。

前面几章聊了不少概念,什么USD的组成啊,Stage的层级啊。说实话,光看理论容易犯困。我个人习惯是,先跑通一个最简单的流程,把整个链路走一遍,心里就有底了。

这一章的目标很单纯:在Isaac Sim里新建一个Stage,往里面扔几个基本形状,然后保存成USD文件。就这么三步,但每一步都有值得注意的细节。

4.1 新建Stage:从空白画布开始

打开Isaac Sim,你会看到一个默认的启动场景。那个场景里通常已经有一些东西了——地面、灯光、甚至一个默认的机器人模型。但咱们要的是“干净”的起点。

我的习惯:每次做新项目,我都会先新建一个空白Stage,而不是在默认场景上改。原因很简单——避免继承一些不需要的默认设置,后面排查问题会省很多事。

新建Stage的操作路径:

  1. 点击菜单栏 File → New Stage。
  2. 或者直接按快捷键 Ctrl + N(Windows/Linux) / Cmd + N(macOS)。
  3. 在弹出的确认框里点 Yes,确认丢弃当前场景。

这时候,你会看到一个灰白色的视口,里面什么都没有。嗯,这才是咱们想要的“白纸”。

不过要注意,新建Stage并不会自动创建默认的坐标系和地面。你看到的那个灰白色背景,其实是空的物理空间。后面咱们添加图元时,它们会默认出现在世界坐标系的原点 (0,0,0)。

我曾经踩过的坑:有一次我新建Stage后直接导入了一个复杂的机器人模型,结果模型跑到视口外面去了,找了半天才发现——模型的原点不在 (0,0,0),而Stage的默认相机视角是固定的。所以,新建Stage后,建议先按 F 键(Frame Selection)重置一下相机视角,确保你能看到原点附近的东西。

4.2 添加基本图元:立方体、球体、圆柱体

Stage建好了,接下来往里放东西。Isaac Sim提供了几种基本图元(Primitives),说白了就是几何体——立方体、球体、圆柱体、圆锥体、平面等等。这些是搭建复杂场景的积木块。

添加图元的方法:

  1. 点击菜单栏 Create → Shape,然后选择你想要的形状。
  2. 或者,在 Stage 面板(通常在左侧)的空白处右键,选择 Create → Shape。
  3. 更快的办法:直接用快捷键。比如,Ctrl + Shift + C 可以快速创建一个立方体(Cube)。

咱们来添加三个最常用的图元:

图元名称 菜单路径 默认大小 常见用途
立方体 (Cube) Create → Shape → Cube 1m × 1m × 1m 基础碰撞体、墙壁、箱子
球体 (Sphere) Create → Shape → Sphere 半径 0.5m 滚动物体、关节连接件
圆柱体 (Cylinder) Create → Shape → Cylinder 半径 0.5m,高 1m 轮子、轴、柱子

添加之后,你会看到视口里出现了对应的形状。同时,Stage 面板里也会多出对应的条目,比如 /World/Cube、/World/Sphere、/World/Cylinder。这个 /World 就是默认的根Prim,所有新添加的图元都会挂在它下面。

关键点:在USD里,每个图元都是一个Prim。你可以通过 Stage 面板 选中它,然后在 Property 面板(通常在右侧)里修改它的位置、旋转、缩放、颜色等属性。比如,把立方体的 Xform:translate 改成 (2, 0, 0),它就会向右移动2米。

你想想看,就这么几个基本形状,组合起来就能搭出很多复杂的结构了。我在做物流仓储仿真时,经常用立方体堆成货架,用圆柱体做传送滚筒,用球体模拟包裹。说白了,万变不离其宗。

4.3 保存为USD文件:选对格式很重要

场景搭好了,得存下来。Isaac Sim支持多种USD格式,但最常用的是两种:.usd 和 .usda。

保存操作很简单:

  1. 点击菜单栏 File → Save As...。
  2. 或者按快捷键 Ctrl + Shift + S。
  3. 在弹出的对话框里,选择保存路径,输入文件名,然后选择文件格式。

这里我重点说一下格式选择的问题:

格式 扩展名 特点 我推荐的使用场景
二进制USD .usd 文件小,加载快,不可读 最终交付、大型场景、生产环境
文本USD .usda 文件大,加载慢,可读可编辑 开发调试、版本控制、教学演示
USDZ .usdz 压缩包格式,用于移动端/AR 跨平台分享、Apple生态系统
我个人习惯:开发阶段一律用 .usda。为什么?因为它是纯文本,可以用任何文本编辑器打开,方便查看结构、对比差异。而且Git等版本控制工具能很好地追踪它的变化。等到场景最终定稿,需要大规模加载或部署时,再转成 .usd 格式。

保存时,还有一个选项叫 “Flatten”(展平)。这个选项默认是关闭的。如果勾选,它会把所有引用(References)和图层(Layers)合并成一个文件。对于咱们现在这个简单场景,没有外部引用,展不展平没区别。但后面做复杂项目时,这个选项要慎用——展平后,你就失去了分层编辑的灵活性。

我曾经犯过的错:有一次我保存场景时,忘了选 .usda,直接用了默认的 .usd 格式。结果第二天想看看场景里某个Prim的属性是怎么设置的,用记事本打开一看——全是乱码。没办法,只能重新加载到Isaac Sim里查看。所以,除非你确定不需要再手动编辑文件内容,否则请选择 .usda。

4.4 核心流程总结:一张图看懂

为了让你对整个流程有个直观的印象,我画了一张流程图。它把新建Stage、添加图元、保存文件这三个步骤串了起来,同时也标出了每个环节的关键决策点。

创建与保存第一个USD场景流程图 创建与保存第一个USD场景流程图 启动 Isaac Sim 新建 Stage (Ctrl+N) 添加基本图元 (Cube/Sphere/Cylinder) 调整位置/旋转/缩放 保存为 USD 文件 (Ctrl+Shift+S) 选择格式:.usda 或 .usd 开发用 .usda 交付用 .usd

4.5 避坑指南:新手最容易犯的三个错误

最后,我总结几个新手阶段最容易遇到的问题。这些都是我亲眼见过、甚至自己犯过的错。

  • 错误一:忘记保存就关闭Isaac Sim。
    听起来很蠢对吧?但真的会发生。特别是你同时开了好几个窗口,或者临时被叫去开会,回来顺手就把窗口关了。嗯,Isaac Sim不会自动保存,也不会在关闭时提醒你。所以,养成随手按 Ctrl+S 的习惯。
  • 错误二:保存路径包含中文字符或空格。
    USD的底层库在某些操作系统上对中文路径支持不太好。我曾经把项目保存在“桌面/仿真项目”文件夹里,结果加载时一直报错,折腾了半天才发现是路径问题。建议:所有路径都用英文,用下划线代替空格。
  • 错误三:在Stage面板里误删了 /World 根节点。
    如果你不小心把 /World 这个Prim删了,你会发现所有图元都消失了,而且新建图元也加不进去。解决办法:在Stage面板空白处右键,选择 Create → Xform,手动创建一个根节点,命名为 World。但说实话,不如直接新建Stage来得快。

好了,到这一步,你已经成功创建了人生中第一个USD场景。虽然只是几个简单的几何体,但整个流程——新建、添加、保存——和后面做复杂项目是完全一样的。说白了,地基打牢了,盖多高的楼都不怕。