原文页面:Grip and Filament: A USD-Based Lighting Workflow
PDF:Grip and Filament: A USD-Based Lighting Workflow (PDF)
DOI:10.1145/3388767.3407350
本文发表在 SIGGRAPH 2020 Talks(Special Interest Group on Computer Graphics and Interactive Techniques Conference Talks,2020-08-17),DOI:10.1145/3388767.3407350。
摘要
Animal Logic 最近为电影《比得兔 2》彻底改造了其过时的灯光工作流。由于 Pixar 的 Universal Scene Description(USD)正在被工作室全管线采纳为主要的场景描述格式,它自然成为实现新灯光工具集的“骨架”。在我们此前将 USD 集成进动画管线的工作基础上(见 [Baillet et al. 2018]),本文介绍:
- Grip:一个 USD 原生(USD-native) 的库,提供以 节点图(node-based) 的方式对场景进行 程序化修改(procedural modification);
- Filament:一个基于 Qt 的应用程序,作为面向艺术家的前端,用于与 USD 场景、Grip 引擎、制作渲染器(production renderer)以及各类管线工具 进行交互。
1 历史
在《比得兔 2》之前的十年里,Animal Logic 灯光团队一直使用一种名为 RSS(Render Submission Script) 的、以文本脚本为中心的渲染管理工具。工作场景在 Maya 中组装,但其中混杂了多种数据表示:Maya 原生数据、Alembic 文件、Glimpse 档案以及其他内部格式,并且这些数据通过不同方式被“桥接(bridged)”进 Maya。RSS 系统存在若干明显缺陷:
- 在交互式工作时,它会对场景做出 破坏性的/不可撤销(destructive/non-undoable) 修改;
- 灯光 rig 以 Maya 资产的形式单独构建,并与相应的 RSS 脚本相互关联;
- 对复用的支持有限,并且在“允许修改哪些场景内容”方面存在约束。
围绕这些问题,我们曾尝试过一些内部方案,例如:
- CSD(Common Scene Description):一种基于 Glimpse 的 GSS 格式扩展(参见 [Fascione et al. 2019, p. 110]);
- Glance:一个以 Glimpse 为中心的、用于渲染前场景修改的系统,在某些方面类似 RenderMan 的 RiFilters。
与此同时,Pixar 与我们分享了 USD 的早期版本,我们从 2016 年开始在动画部门使用它。不久之后,Animal Logic 启动了一个雄心勃勃的项目,旨在构建端到端的 USD 管线。到 2018 年,灯光部门已准备好将该技术纳入流程,用以取代 RSS 并实现新一代工具集。我们的目标包括:
- 将数据表示的种类尽可能减少(以减少转换与边界情况);
- 将灯光流程转向更 交互式(interactive) 的工作方式;
- 将多个彼此分离的管线工具统一到一个体验中;
- 同时保留 RSS 系统的一些优势(例如自动化能力与一致性),并支持基于资深灯光师反馈的快速迭代。
我们也认真评估了现成方案。当时 SideFX 的 Solaris 项目仍处于起步阶段,而 Foundry 的 Katana 会带来数据转换成本;同时,我们希望保留在设计层面的定制能力。
2 软件栈
2.1 Grip
Grip 由 Jakub Jeziorski 开发,是一个 USD 原生 的库,提供以 节点图 方式对场景进行 程序化修改。Grip 的设计目标是保持精简——USD 是它唯一的依赖——并能够覆盖多种使用场景:既要满足灯光艺术家的交互式使用,也要支持高效的离线场景处理(例如为管线中其他部门准备审片渲染)。
Grip 提供多类节点(node types),包括但不限于:
- prim 操作(prim operations):创建 prim、设置属性、切换 variant 等;
- 流程控制(flow control):merge、switch、iterate 等;
- 路径查询(path queries):依据多种谓词(predicates)查找 prim 路径;
- 数值/字符串处理(value processing):对时间采样的数值做数学运算、字符串与数组操作等。
Grip 以 惰性(lazily) 的方式求值(evaluate)一张操作图,并将改动写入一个私有 layer;随后这些 layer 内容会以一次性操作转移到任意 stage layer 上。“读(read)”操作使用不可变(immutable)的 stage;“写(write)”操作则写入一个可变的、与 stage 分离(off-stage)的目标 layer。对于“把操作应用到哪些 prim”这一问题,Grip 既可以通过可组合(composable)的 query 节点来描述,也可以通过 GEL(Grip Expression Language) 语句在遍历场景时进行更复杂的过滤。
Grip 使用 USD 来序列化(serialise)其节点图:利用 USD schema 生成 Python bindings。复杂的 Grip 图可以被 TD 或艺术家封装为带自定义接口(custom interfaces)的 子图(subgraphs)(见图 2),并发布后在其他地方引用。艺术家日常直接操作的,多数是这些更高层级的节点。Grip 还提供“session values”以向执行上下文传递提示(例如交互式 vs 离线、当前镜头、渲染质量等级等),从而实现灵活的条件行为(conditional behaviour)。

图 2:Grip 节点图既表达 prim 操作与流程控制(纵向),也表达查询与数值处理(横向)。
2.2 AL_USDMaya
在《比得兔 2》中,我们使用 AL_USDMaya(见 [Bateman et al. 2019])来制作静态灯光 rig:修改会被交互式地翻译到 USD stage 中,同时 Maya 仍提供艺术家熟悉的 viewport。需要注意的是,这类“在 Maya 中编辑静态灯光”的能力与运行 Grip 的动态修改机制之间,会引入一定的耦合与复杂性(详见结论部分)。
2.3 Filament
Filament(见图 1)位于我们软件栈的最上层,是一个基于 Qt 的应用程序,使灯光艺术家能够与 USD 场景交互、设计 Grip 图,并执行日常管线操作。Filament 可以独立运行,也可以嵌入 Maya 内运行。它主要以 Python 编写,便于 TD 扩展;而对性能敏感的操作则交由优化过的底层库处理。
Filament 起到“胶水(glue)”作用,将多个系统整合在一起:USD、Grip、Glimpse、AL_USDMaya、渲染提交(render submissions)、制作浏览(production browsing)、资产解析覆盖(asset resolution overrides)等。它构建在我们内部的模块化 UI 框架 Nucleus 之上,从而可以更系统地组织复杂工具集的 UI 与交互模式。

图 1:Filament 应用在《比得兔 2》某镜头中的使用状态。PETER RABBIT 及所有相关角色 ™& © Frederick Warne & Co Limited。PETER RABBIT™2, the Movie © 2020 Columbia Pictures Industries, Inc. All Rights Reserved.
3 结论
基于单一数据表示(USD)重构灯光工具集,在很多方面简化了开发:开发者花更少时间处理边界情况(corner cases),把更多精力投入到用户体验改进上。与此同时,我们在尝试“既支持通过 AL_USDMaya 编辑静态灯光 rig、又同时运行 Grip”时遇到了一些复杂性。我们希望未来通过 完全使用 Grip 动态地 author 灯光 来避免这种情况,从而减少工具间的相互制约,并让“灯光即图(lights-as-graphs)”成为更一致的创作模型。
4 未来工作
我们计划将 Glimpse 原生的材质格式转换为 USDShade,并把材质编辑能力集成进 Filament,同时复用 Grip UI 的既有工作。面向下一部大型制作,可扩展性(scalability) 将是关键关注点:我们正在探索更直观的方式来支持 延迟 payload(delayed payloads) 与 代理几何(proxy geometry)。此外,我们也希望扩展 Grip 的求值机制,使其能够在图执行的中间阶段生成临时“快照(snapshots)”。
目前 Filament 通过嵌入 Maya 来利用其交互式 viewport,但这也引入了复杂依赖。鉴于灯光部门对 viewport 的需求相对温和,我们正在研究构建一个独立 viewport,用于 USD 场景显示,并支持灯光的选择与操控(selection and manipulation of lights)。
参考文献
- Aloys Baillet, Eoin Murphy, Oliver Dunn, and Miguel Gao. 2018. Forging a New Animation Pipeline with USD. In ACM SIGGRAPH 2018 Talks (SIGGRAPH ’18). Article 54, 2 pages. DOI: 10.1145/3214745.3214779
- Rob Bateman, Eoin Murphy, Fabrice Macagno, Paul Molodowitch, and Aloys Baillet. 2019. AL_USDMaya. GitHub: https://github.com/AnimalLogic/AL_USDMaya
- Luca Fascione, Johannes Hanika, Daniel Heckenberg, Christopher Kulla, Marc Droske, and Jorge Schwarzhaupt. 2019. Path Tracing in Production: Part 1: Modern Path Tracing. In ACM SIGGRAPH 2019 Courses (SIGGRAPH ’19). Article 19, 113 pages. DOI: 10.1145/3305366.3328079