BACK TO ARCHIVE
nuke usd matte painting pipeline digipro glimpses plasma filament compositing

面绘迈向更光明的未来:Nuke 中基于 USD 的工具集

08.05.2023 ADUCG RESEARCH

原文页面:https://animallogic.com/technology/publications/matte-painting-a-brighter-future-a-usd-based-toolset-in-nuke/
PDF:https://animallogic.com/wp-content/uploads/2023/08/Matte-Painting-a-Brighter-Future-A-USD-Based-Toolset-in-Nuke.pdf
DOI:https://doi.org/10.1145/3603521.3604294

面绘迈向更光明的未来:Nuke 中基于 USD 的工具集

Michael De Caria(Animal Logic,悉尼)
Prethish Bhasuran(Animal Logic,悉尼)
Mitja Müller-Jend(Animal Logic,温哥华)
Manuel Macha(Animal Logic,悉尼)

图1:Nuke 中的 AL_USDNuke 面绘工具面板
图1:Nuke 应用展示 Animal Logic 为面绘艺术家提供的多种内部 USD 面板;示例场景为开源的 USD ALab。

摘要

本文介绍 Animal Logic 的先进 3D 面绘工具集 AL_USDNuke,它将 Nuke 无缝整合进我们以 USD(Universal Scene Description)为核心的制作管线。我们详细阐述了多个组件的集成:用于即时呈现大型 USD stage 的路径追踪 GlimpseViewport;用于修改 USD stage 的、对艺术家友好的节点式工具集;由内部渲染器 Glimpse 提供的高保真“ground-truth”反馈可视化;以及一组互补视图,用于在 Nuke 内高效管理 USD stage。为达成这些能力,我们实现了专门的 Nuke↔USD 翻译器,并构建了全新的框架 Plasma:它是在 Animal Logic 内部用于大规模应用开发的 Nucleus 框架之上,为 Nuke 量身定制的增强版本。这些开发显著提升了面绘艺术家在复杂 USD stage 上的工作效率,并允许他们将成果发布到镜头中,使所有上游与下游部门共同受益。

1 引言

Animal Logic 的面绘部门传统上处于制作管线的后端,与灯光和合成相邻:主要在 Photoshop 中制作 2D matte painting,再在 Nuke 内将其投射到 3D 几何体上完成镜头制作(例如使用 Project3D/ApplyMaterial 的经典做法)[Foundry 2023]。然而,这类资产并非为“回流”到管线而设计,上游部门也无法有效地重新摄取并复用它们。

在《比得兔 2》(2021)制作期间,Animal Logic 以 USD 作为全公司管线基础(Universal Scene Description)[Pixar 2023],这为我们彻底重新审视面绘工作方式提供了机会。我们很快发现:如果直接把一个镜头的完整 USD stage 读入,Nuke 原生 3D 系统会迅速被压垮。我们也评估了其他可行方案,例如 DreamWorks 同期开源的 USD 插件 [DreamWorks 2023],以及 Pixar 慷慨提供给我们试用的 usd-nuke 插件。但在初步调研后,我们决定实现自研的 USD 读写节点——部分原因是我们需要一个深度集成的 UI,让用户能够以“子选择”的方式,将大型 USD stage 的局部加载到 Nuke 中。

这成为我们 USD 工作流之旅的第一步。我们的 Nuke USD 管线集成被命名为 AL_USDNuke,大约从 2020 年开始研发,首个采用该系统的项目是《DC 超级宠物联盟》(2022)。整体设计以“面向 Nuke 节点的自定义 USD 翻译器”为核心,并结合既有的内部 UI 组件加以增强。这样一来,我们的工具便能利用 USD 的 stage composition 能力,把 DMP(digital matte painting)资产发布给所有部门;任何工种的艺术家都可以在镜头上下文中审阅带有完全集成面绘内容的结果。

2 工具集开发

图2:AL_USDNuke 的实现与场景管理示意
图2:AL_USDNuke 的实现与场景管理示意:USD stage 作为初始入口,Nuke 生成的面绘层作为输出。

来自艺术家的反馈会在后续项目中持续推动工具增强,目标是提升直觉性并满足创作需求。如今该工具集的工作流已演进为覆盖以下能力:

  • 提供节点式能力来操控 USD stage:例如添加几何体、搭建材质、相机投射,以及修改 prim 属性。
  • 在多个 USD stage 及其对应的 session layer 之间进行管理与上下文切换。
  • 作为工具包,让艺术家把在 Nuke 中完成的 DMP 工作直接推送并发布到一个或多个镜头中。
  • 通过集成多个内部视图,在 Nuke 内预览、加载并渲染复杂 USD stage。

随着 AL_USDNuke 的引入,面绘部门产出的工作现在由 Glimpse [Heckenberg et al. 2017] 渲染,并可直接在 Nuke 内查看。该工作流本质上实现了在 3D 场景中的“in-render compositing”:面绘内容在渲染时与镜头的光照、阴影、反射等交互更加一致,最终得到更连贯、更可信的画面。面绘交付给灯光部门后,后续渲染将使用 Filament [Agland et al. 2020] 产出。

2.1 方法

在 AL_USDNuke 中,Python 是用于集成各组件的主要编程语言;但其中许多组件也会借助 C++ 等更底层语言以提升性能。这样的组合为 TD 提供了一个可以快速迭代、持续向 AL_USDNuke 引入新功能的开发环境。

我们早期的开发重心是把 Nuke 节点网络翻译成 USD layer。为了把 USD 的 prim override 精确地导入到指定 layer 中,我们复用了 Animal Logic 已建立的 Entity & Fragment pipeline 组件 [Collins et al. 2022]。同时,我们也采用了既有的内部 Qt UI 框架 Nucleus,并与 Nuke 进行无缝整合。

2.2 In-render compositing

我们此前将面绘与渲染器输出的图像在 2D 中合成的方式,常会导致光照与透视不一致,从而显得与场景其他元素脱节。将面绘内容作为 USD 资产参与渲染后,这些不一致显著减少,画面在真实感与一致性上得到提升。

2.3 天幕(Skydomes)

由于天幕类面绘(skydome matte painting)需求非常频繁,工具集中提供了一键式的几何体与着色器搭建方案。其中关键能力由 VirtualBreakdown API [Collins et al. 2022] 提供,它用于定义并执行天幕的 breakdown recipe。我们并不限制复杂几何体的创建;艺术家可以在 Nuke 中生成额外几何体,或从 Maya 等其他 DCC 应用导入。

3 Nuke 到 USD 的翻译器

AL_USDNuke 的翻译器组件的基本工作方式是:解析一个 Nuke 节点网络,并为每个节点生成对应的 USD override,写入并指向某个 session layer。场景翻译以两步流程发生:USD 几何体创建Look Development(后者见图3所示)。

图3:AL_USDNuke Look 节点构建多层面绘的节点图
图3:由 AL_USDNuke Look 节点构建多层面绘的 Nuke 节点图。

3.1 几何与 Look Development

翻译过程中的几何体转换由我们基于 NDK(Nuke Developer Kit)的 USD writer 完成,并通过节点 AL_USDAddGeo 引入,它能够接收 Nuke 支持的任意 3D 几何体作为输入。

第二步是 USD 几何体的 Look Development:所有“基于材质”的 Look 节点,都有一个预定义的、对应的 USDShade shader network,并支持 Prim 绑定、纹理输入以及着色器参数。只要可行,我们会让每个 USD Look 节点去“映射/反映”一个原生 Nuke 节点。举例来说,相机投射节点 AL_USDCameraProjection 会使用 Project3D/ApplyMaterial,并暴露输入以提供相机与纹理。

图4:AL_USDCameraProjection 示例与属性
图4:上:一个简单的 AL_USDNuke Look 网络,将纹理与相机接入 AL_USDCameraProjection;下:所选 AL_USDCameraProjection 节点的 knob 属性。

3.2 Layer 生成

被翻译的 Nuke 节点所生成的 USD layer,会通过两条路径产生:本地渲染,或发布到我们的资产管理系统。

渲染路径会使用一个我们称为 AL_USDGlimpseRender 的 Nuke 节点,它内部由一个 NDK 节点 GlimpseImage 驱动,并将渲染得到的 image buffer 回传给 Nuke 的 2D 系统。

发布 USD layer 的路径由 AL_USDCheckin 节点管理。AL_USDGlimpseRenderAL_USDCheckin 都会调用翻译器,并向上遍历节点网络:把每个 Nuke 节点翻译为对应的 USD 等价实现,同时执行校验;若某些操作不兼容,会提示艺术家。

生成的 USD layer 将遵循我们内部的 Entity 与 Fragment USD 结构 [Collins et al. 2022],并触发一次 review,通过自动化 review 系统进行渲染。简而言之:几何体会成为 geo fragment 的一部分;Look Development 会发布到 look fragment;二者均引用在面绘部门的顶层 domain 之下,而该 domain 又会被镜头中的 USD layer composition 组装进最终镜头。

3.3 纹理烘焙

纹理烘焙在提升渲染效率、以及避免艺术家花时间手动预处理纹理方面起到关键作用。Look 节点的纹理输入可以是任意可渲染到 2D 图像的 Nuke 网络;系统会随后自动将其写出到磁盘。

为了判断纹理的 Nuke 节点网络是否发生了任何修改、从而需要重新烘焙,我们实现了 node hash:使用 node.opHashes() 并结合一个 node map cache。在某些场景中,如果输入只有 Read 节点且无需色彩空间转换,那么可以跳过烘焙,直接向渲染器提供纹理引用。

4 Plasma

Plasma 是针对 Nuke 的增强框架,建立在 Animal Logic 内部用于大规模应用开发的 Nucleus 框架之上。它使我们能够复用 Animal Logic 既有的大量 USD UI 组件/Widget,从而显著加速开发——只需极少 UI 组件从零编写。

在该框架内,我们自动化了 Nuke 菜单创建、用于展示视图的 panel 创建,以及 Nuke workspace 工具(用于控制视图在 UI 中的位置布局)。同时,Plasma 也把 Nuke 的 callback 系统纳入其中,用于自动生成事件;例如时间线更新可以触发 USD 视图中的动作。Plasma 的主要优势在于:新加入的视图可以很容易与现有视图产生交互。我们在做 USD UI 集成时,希望艺术家能使用他们熟悉的 UI,例如 Outliner、Shelf,尤其是可定制的 3D viewport。

4.1 推送到视口(Pushing to the viewport)

测试期间我们发现:Nuke 原生 3D 系统在把大型场景转换后并不具备良好扩展性。相对地,我们内部的 USD GlimpseViewport 能够显示并处理大型 USD 场景而不会出现性能劣化。

为了在保持对 Nuke 原生 3D 节点支持的同时利用 USD 的规模优势,我们提供了“推送(push)”工作流:艺术家可以在 USD 视图中可视化选择场景的一部分,并将相应 3D 几何体推送进 Nuke 的原生 3D 系统。图5展示了该能力的一个例子。

图5:将对象推送到 Nuke 原生 3D 的示例
图5:将单个对象推送并转换到 Nuke 原生 3D 系统的示例;同时配合 USD 视图(Stage Outliner、USD viewport、USD Properties 等)进行交互。

4.2 补充的 USD 视图(Supplemental USD views)

我们在 Nuke 中还提供了其他与 USD 相关的面板:例如用于查看或修改 USD 属性的 USD Properties 视图,以及用于打开/关闭 USD stage 的 USD session 视图。这些改动仅作用于当前 Nuke 会话,并不会随 Nuke 工程保存。

如果艺术家希望将修改后的属性烘焙(bake out)到 USD 中、以便未来会话复用,则需要通过 AL_USDModifier 节点完成并将其加入节点图。

5 未来工作

近期发布的 Nuke-14 及其完全重新设计的、基于 USD 的 3D 系统,将开启令人振奋的新可能。未来工作将聚焦于:利用这些新特性增强 AL_USDNuke,并实现一些当前由于 USD 与 Nuke 原生 3D 系统相互分离而难以落地的工作流。

我们也会探索在不落盘中间文件的情况下进行直接纹理渲染,以进一步提升生产镜头的周转效率。此外,我们正准备让灯光与合成艺术家也能使用 AL_USDNuke,从而同样受益于其功能集合。

6 结论

AL_USDNuke 的部署通过整合此前零散、且由于 Nuke 内原生 USD 功能有限而难以实现的流程,对 Animal Logic 的面绘艺术家生产力产生了显著影响。Animal Logic 的 USD 管线设计在启用这些现代化工作流上扮演了关键角色。

尽管我们承担了在 Nuke 中较早采用 USD 的开发成本,但它依然很快产生了价值,并为我们指明了清晰的未来方向。艺术家现在能够更高效地工作,并可以借助 USD stage composition 的灵活性,把成果直接交付到镜头中;这相较于我们此前的面绘集成方式,带来了明显优势。

参考文献

  • Steve Agland, Jakub Jeziorski, Manuel Macha, Simon Bunker, Francesco Sansoni, and Eoin Murphy. 2020. Grip and Filament: A USD-Based Lighting Workflow. In ACM SIGGRAPH 2020 Talks (Virtual Event, USA) (SIGGRAPH ’20). Association for Computing Machinery, New York, NY, USA, Article 33, 2 pages. DOI: https://doi.org/10.1145/3388767.3407350
  • Jon-Patrick Collins, Romain Maurer, Fabrice Macagno, and Christian Lopez Barron. 2022. USD at Scale. In The Digital Production Symposium (Vancouver, BC, Canada) (DigiPro ’22). Association for Computing Machinery, New York, NY, USA, Article 11, 6 pages. DOI: https://doi.org/10.1145/3543664.3543677
  • DreamWorks. 2023. DreamWorks Animation USD Plugins GitHub Page. Retrieved May 12, 2023 from https://github.com/dreamworksanimation/dwa_usd_plugins
  • Foundry. 2023. Nuke Product Page. Retrieved May 12, 2023 from https://www.foundry.com/products/nuke-family
  • Daniel Heckenberg, Luke Emrose, Matthew Reid, Michael Balzer, Antoine Roille, and Max Liani. 2017. Rendering the Darkness: Glimpse on the LEGO Batman Movie. In ACM SIGGRAPH 2017 Talks (Los Angeles, California) (SIGGRAPH ’17). Association for Computing Machinery, New York, NY, USA, Article 8, 2 pages. DOI: https://doi.org/10.1145/3084363.3085090
  • Pixar. 2023. Pixar’s Graphics Technology Page. Retrieved May 12, 2023 from https://graphics.pixar.com/

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

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

End of Article