本实践展示了如何利用 Universal Scene Description (USD) 的分层架构来搭建一个从资产导入到最终渲染的完整工作流。USD 的分层机制允许用户在不同的层级(如 Global、Sequence、Shot)定义和管理场景的“意见”(opinions),从而实现高效的资产管线搭建。

**1. 资产创建与导入(Asset Creation)**

工作流的起点是创建基础资产。例如,可以运行脚本来生成一个名为“Ball”的空资产,并指定其包含着色变体层(`--shadingVariantLayer`)。随后,可以将使用 Maya 创建的资产(如 Ball 和 Table)导出为 USD 格式,这会将几何体和着色信息写入 USD 文件中。

**2. 着色变体管理(Shading Variants)**

着色变体的管理是通过代码实现的。用户可以运行特定的 Python 脚本来为资产添加着色变体。在 USD Viewer 中,通过选择资产并进入 Meta Data 标签,用户可以利用着色变体下拉菜单来切换不同颜色的变体,而无需修改底层资产文件。

**3. 场景布置(Set Dressing)**

场景布置是将多个已创建的资产组合在一起。这通过运行脚本实现,该脚本会创建一个包含多个 Ball 模型和 Table 的集合模型(Room_set)。需要注意的是,脚本在硬编码绝对路径时,如果用户修改了资产结构,可能需要手动修改脚本以适应新的布局。

**4. 序列与镜头结构化(Shot Work)**

USD 的分层结构允许用户模拟“序列”(Sequence)和“镜头”(Shot)的概念,尽管 USD 本身没有这些概念。这种结构是通过层级引用实现的,例如,一个 Shot 可以包含多个子层(如 `s00_01_sim.usd`、`s00_01_anim.usd` 等),这些子层按照从强到弱的顺序叠加,最终的意见会由最强的层级决定。

* **全局层(Global)**:用于定义所有镜头共享的、全局性的意见,例如相机设置,这些意见会影响整个序列。
* **序列层(Sequence)**:定义一组相关镜头的共同基础结构。
* **镜头层(Shot)**:包含特定镜头的具体描述,它会继承并覆盖来自序列层和全局层的意见。

通过运行脚本,可以逐步构建这种层级结构,例如先创建序列 `s00`,再创建镜头 `s00_01`,确保了意见的层级覆盖顺序。

**5. 渲染流程(Rendering)**

在结构搭建完成后,流程的最后一步是渲染。可以使用如 Katana 这样的软件,通过读取包含完整层级结构的 USD 文件(例如 `assets/simple.katana`),来完成最终的渲染输出。USD 文件会负责将所有层级定义的几何、着色和场景信息合并,供渲染器使用。

信息来源