本节摘要:USD(Universal Scene Description)用分层叠加(layer)描述场景:各部门各写一层,组合(composition)时按强度规则仲裁出最终舞台。Solaris 是 Houdini 的 LOP 上下文——USD 的编辑器。本节用"三份图层合成一个镜头"的实验讲清 layer/prim/仲裁三大概念,并给出程序化资产的 USD 出口设计。
镜头需求:山体(我们生成)、一座灯塔(美术做的)、日落光(灯光师调的)。在 Solaris(LOP 网络)里:
三份来源,一个舞台。任何一层改动,只有该层重载,其他不碰。

season 变体集下有 summer/winter 两态。程序化资产天然适合做成变体集:我们产线(第 6 章)出的 36 座山,可以是同一个 prim 下的 36 个变体,镜头层自己选。把山体接进 USD 管线的三条实践:
⚠️ 常见坑:把 SOP 思维带进 LOP——试图逐点控制。LOP 的操作粒度是 prim 与 opinion,微观几何永远回 SOP 解决。层级错配是 Solaris 新手挫败感的第一来源。
💡 关键直觉:USD 解决的不是"格式",是协作的仲裁权问题。谁的意见在哪一层、强度如何,想清楚这个,比记住任何 API 都重要。
至此资产从单机走到了团队。第 8 章回头解决两个工程敌人:慢与乱。
Solaris/USD 对程序化 TD 的价值可以浓缩为三问三答:场景为什么用 USD(组合性与覆盖层让多部门并行修改同一场景而不互相踩踏)、程序化资产如何进入 USD(SOP Import/LOP 内联生成两种形态,后者保参数活性)、变体如何声明(variantsets 把第六章 Wedge 的产物正式化为场景内的可切换选项):
[SOP -> LOP 的两种姿势] A. 烘焙式: SOP 输出经 SOP Import 定格为静态层 —— 快, 死 B. 内联式: SOP Create/LOP 保持 Houdini 网络活性, 下游 prim 上直接看到参数效果 —— 慢, 活 混合律: 装配层用B(导演要实时调), 资产层用A(性能与稳定)
[跨管线契约三件套] 几何属性: primvar 命名遵守 studio 字典(与第二章 SOP 字典同源) 材质: MaterialX 标准节点图 —— 脱离渲染器方言 变体: variantset 命名含语义(building_type=[tower|block|podium]) 验收: 同一 USD 在 Hydra/Arnold/游戏引擎渲染, 属性可见性与材质表现一致 —— 契约即互操作
USD 章在全书的角色是"出口协议":前八章积累的生成能力,最终以 USD 的组合语法进入更大的制作宇宙;程序化不再是一个软件的技巧,而是一种可以被任何管线消费的资产形态。
给程序化 TD 的 USD 入门最短路径:不必先啃完整规范,按"三个动词"循序渐进——Reference(引用资产)、Variant(切变体)、Layer(分层覆盖),它们覆盖了日常装配的九成操作。第二阶段再学 prim 路径语义与 composition arc 的优先级规则。自测方式很直接:把第六章流水线产出的十个建筑变体导出为带 variantset 的 USD 文件,在 Solaris 里切换 variant 并替换材质,全程不回到 SOP——做到这一步,你的程序化产出就已经是标准制作管线的一等公民。
关于程序化与 USD 的一个前沿衔接也值得预告:越来越多的管线开始把"HDA 本身"而非"其输出"作为 USD 的 payload(延迟加载源),场景引用的是生成过程而非静态结果——镜头打开时才在引擎或农场上按需 cook。这个模式把第六章的调度能力与 USD 的组合语法焊接在一起,代表着"程序化即管线原生公民"的方向;今天打好 HDA 接口纪律与性能预算的地基,就是在为明天的按需生成做准备。
最后给出 Solaris 交互性能的一条经验数:装配场景超过十万 prim 后,视口与图层编辑的响应会明显变缓,对策是按部门用 Layers 隔离(每部门一层、按需 mute)、对重几何用 payloads 延迟加载、变体尽量用 variantsets 而非多份拷贝。这些手段的共同原理还是 USD 的立身之本——组合优于复制;程序化 TD 的 USD 功力,最终体现在能否把生成端"参数化不复制"的纪律,原样带进装配端的图层结构里。