BACK TO ARCHIVE
usd lighting grip filament rendering pipeline qt node-graph siggraph

Grip 与 Filament:基于 USD 的灯光工作流

08.17.2020 ADUCG RESEARCH

原文页面: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)。

Grip 节点图示例

图 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 与交互模式。

Filament 在制作中的使用示例

图 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)。

参考文献

  1. 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
  2. Rob Bateman, Eoin Murphy, Fabrice Macagno, Paul Molodowitch, and Aloys Baillet. 2019. AL_USDMaya. GitHub: https://github.com/AnimalLogic/AL_USDMaya
  3. 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

本文采用 Creative Commons BY-NC-ND 4.0 协议进行授权。

BY-NC-ND: 署名-非商业性使用-禁止演绎

End of Article