原文:https://www.expandedcinematography.com/industrialised-cinematography.html
《乐高蝙蝠侠大电影》如何在激进周期下完成灯光与渲染,并保持最高审美标准
引言
《乐高蝙蝠侠大电影》(TLBM)由澳大利亚悉尼的 Animal Logic 制作,从零开始(没有剧本)到 2017 年 1 月交付,历时大约两年半。在制作规模峰值时,团队人数达到 494。如此激进的排期之所以能够在不牺牲质量的前提下完成,除了所有参与者不可思议的才华与投入外,还因为我们采用了一种强调**工业化(industrialisation)**的制作方法论。
本文将重点聚焦我的部门——灯光(Lighting)。当然,我们并不是在“与世隔绝”的环境里工作,因此也会大量提及其他部门的工作。
我在关于我们此前 CG 长片《乐高大电影》(TLM)与《守卫者传奇》(LOTG)的文章中,已经讲过我们做长片动画时与摄影相关的一般性原则。为了避免重复,本文将着重讨论 TLBM 相对 TLM 的摄影差异点,并从高层视角梳理我们在工作流与管线方面做过的一些实践——这些实践帮助我们由约 40 名灯光与合成艺术家组成的小团队,在很多时候看起来“几乎不可能”的 deadline 下仍然按时交付。
快速概览
这篇 FXGuide 文章 对 TLBM 的制作复杂度给出了一个较为概括(也不可避免会比较有限)的概览。下面这段视频是对该文的补充:
https://www.youtube.com/watch?v=t7iLVM4SVSk
Brief 与创作目标
导演 Chris McKay(CMK)此前在《乐高大电影》中担任联合导演,这意味着在实践层面,他驻扎在悉尼的我们工作室,与团队日常密切协作,因此他非常了解我们,也深度理解我们的工作方式。他同样非常熟悉“乐高宇宙”的各种怪癖与限制。此外,他也是蝙蝠侠 lore 的资深粉丝,希望拍一部既致敬蝙蝠侠传统、又能以善意的方式进行自嘲/戏仿的电影。同时,他想尊重《乐高大电影》的既有遗产,但在规模与野心上更进一步。CMK 对华纳兄弟的提案是:他想做一部“像迈克尔·曼执导的《甜心先生》(Jerry Maguire),但充满笑点”的电影——既有幽默也有真情。
我们灯光部门的 brief 是:做一部**“可信的伪写实(plausibly photorealistic)”**电影,在美感与复杂度上都要超过《乐高大电影》。
在初期讨论中,高谭市的视觉方向受到 70 年代经典影片的启发,比如 Taxi Driver、The French Connection、Serpico 等,它们有一种颗粒感很强、漂白感(bleached look)明显的气质:蝙蝠侠的城市阴郁、肮脏,犯罪问题根深蒂固,甚至连蝙蝠侠也难以真正撼动。在当时的故事版本里,小丑通过阴谋诡计当选为高谭市市长,随后开始“Jokerfies”(小丑化)整座城市。视觉上,这应该与蝙蝠侠那种灰暗、粗粝的高谭形成清晰区隔——更明亮、更高饱和、伪快乐的糖果色调,类似 Charlie and the Chocolate Factory 那样。
随着故事逐渐成熟,小丑不再当选市长,关于视觉的讨论演化为一个概念:带有超高饱和色彩的 黑色电影(film noir)。
在一篇 Post Magazine 采访 中,调色师 Sam Chynoweth 这样描述最终的风格:
“我们最后造了一个短语:‘baby’s first apocalypse’(宝宝第一次末日)。整体要暗、要粗粝、要有高谭味道,但所有可以拿来开玩笑的点都得好玩;所有能拧到最大档的地方,都要拧到 11。我们一路的口号是:‘enhance, enhance!’(增强、增强!)”
在灯光组,我们把这种极重的色彩处理称为 “Baturation”,并开玩笑说我们是在 CMKY 色彩空间里工作(也就是 “CMK why?”)。
由于最终风格会被重度“加工”,它显然偏离了真正的写实。但实际上,几乎所有通过真实摄影镜头拍摄的电影,在后期都会进行图像处理——且通常非常重度。因此,我们依旧把“写实”当作出发点,并从一开始就为合成(Comp)和数字中间片(DI)的后期重度流程做规划。
视觉参考
我们关于电影和其他视觉参考的讨论非常广泛且风格混杂。下面只截取极小的一部分……点击 “Play” 开始幻灯片:

来自《Se7en》的警局……
以下是形成我们关于 TLBM 摄影与调色讨论的一小部分色彩、氛围、焦点与灯光参考:
调研(Research)
和以往一样,我们做了大量视觉调研:在各种不同的光照条件下拍摄乐高积木、建筑、小人仔与车辆。我们也用乐高实物拍摄/录制火、水、烟等物理效果。我们把一个鱼缸装满水,将乐高套装和小人仔放入缸内,再往水里倒入颗粒物并用慢动作视频记录,以模拟暴风雪。我们还烧融了小人仔(孩子们——别在家里尝试!),并用不同帧率记录结果。
我们在乐高车辆里塞入 LED 灯并研究拍到的照片;也研究光线在乐高塑料表面反射形成的焦散(caustics)效果、各类灯具投射出的光型纹理等等。
我们用 高动态范围成像(HDRI) 拍摄了大量真实灯具——这些 HDRI 随后进入资产库,可作为“gobo”应用到 CG 灯光上,从而制造“真实物理灯具正在照亮场景”的错觉。
内渲景深(Rendered Depth of Field)
《乐高大电影》完成后,我对灯光与合成团队负担最重的任务做过一次人机工效(ergonomic)评估。我们在合成中通过渲染输出的深度数据来做景深(DOF),花了大量时间。通常,这些时间都耗在缓解流程固有的伪影上(例如物体和角色边缘出现怪异边界,尤其当它们位于前景、且前景与背景的焦点差异很大时)。拉焦(rack focus)镜头尤其棘手。
一个常见做法是把不同焦平面的物体分层拆分,并作为独立元素分别渲染。虽然这样会让合成里的景深操作更容易,但会显著加重场景与数据管理的负担。

这是一个测试图,标注了 2D DOF 的伪影示例。要清理这张图,需要投入相当多的工作量(以及艺术家时间)。
有时处理糟糕 DOF 伪影的唯一方式,是改变 DOF 设置——通常把景深做得不那么浅(收小一到两档)。这样也许能让镜头“过线”,但意味着偏离了导演与布局阶段(Layout)的镜头指导(Lensing Director)所确立的 DOF 意图。
这些洞见让我产生了一个想法:与其把 DOF 当作合成里天然问题很多、且耗时的流程,不如在我们自研渲染器 Glimpse 中直接渲染 DOF。除了显而易见的效率收益,我们也相信视觉结果会更好:奶油般、自然的有机观感;没有诡异边缘伪影;程序化的 bokeh kernel(其效果可随镜头畸变等异常在画面不同位置发生变化);以及无缝顺滑的对焦拉动。一些目标当时仍在开发中,但在 Glimpse 里我们已经拥有一套非常可用的 DOF 功能,并在本片以及《乐高忍者大电影》中投入使用。
(在有人发问之前先说:是的,我们也考虑过 deep compositing 方案,但出于一堆无法在这里展开的原因,我们最终选择了内渲 DOF。)

来自《乐高蝙蝠侠大电影》的另一个 Glimpse 内渲 DOF 示例。
“随处可渲(Render Everywhere)”
Glimpse 如今被 Animal Logic 用作各部门评审(review)的渲染器(尽管会根据评审需求使用不同的 integrators)。DOF 内渲的实现意味着:一旦镜头在最终布局(Final Layout)阶段确立相机参数,任何部门的 review render 都能看到 DOF。这带来多次机会让我们在镜头进入灯光日报(Lighting Dailies)之前检查并调整 DOF,也消除了“如果把 DOF 烤进 3D 渲染,后期就得反复渲很多版来调 DOF”的担忧。过去有人反对把 DOF 烤进 3D render,理由是“在合成里迭代更高效”。但在实际生产中,当 DOF 确实需要改变时,我们发现重渲的少量迭代完全可接受,而内渲 DOF 的省时效应非常明显。
不过,内渲 DOF 并非完全“免费午餐”。mattes 的使用会变得棘手:即便我们的 matte 也参与了 DOF 模糊、理论上可被干净地使用,但 DOF 的现实是,组成图像的许多 像素 无法被完全归因于单一物体。这种先天的模糊性会导致可见异常,且越是试图用 matte 强力影响图像,异常越明显。
另一个常用技术是 pMattes,它们在渲染时由位置数据生成,使艺术家可以按深度隔离物体。由于用于 pMattes 的位置数据会随 DOF 一起被模糊,数据会变得不确定,因此在内渲 DOF 的情况下,pMattes 的使用往往只能做柔和、模糊、不精确的效果以避免伪影;而在 2D 合成 DOF 流程里,pMattes 的效果先应用在未模糊像素上,然后再对整张图施加 DOF。
这些限制意味着许多以往用这些技术完成的细致工作,被推回到 3D 空间中(例如使用 blocker 等),尽管我们也开发了一些工具,让在 Nuke 中定义的 blocker 与 pMattes 可以在灯光场景里被重建,从而帮助流程更顺畅。
在 TLBM 中,2D DOF 仍有非常有限的使用场景:当戏剧需求上希望使用艺术化的 bokeh kernel时。因为 Glimpse 的程序化 kernel(当时)还无法接受一张图像作为 kernel 的基础。比如在 Gala 段落,布鲁斯·韦恩第一次见到芭芭拉·戈登并瞬间坠入爱河。我们用梦幻般的浅景深加心形 bokeh kernel 来强化这一刻,这通过我们传统的 2D DOF 流程实现。

用心形 bokeh 做出的 2D 图像式散景——用于这段带点“搞笑煽情”的布鲁斯·韦恩坠入爱河的渲染表达。
真实镜头伪影与畸变(Realistic Lens Artifacts & Distortion)
如果一张图像没有任何由真实镜头带来的异常现象(即便是最好的物理镜头也会有),那几乎就是“CG 生成”的铁证。观众也许说不出具体原因,但多年观看真实摄影内容会在潜意识中训练他们:接受某些视觉缺陷才是“真实拍摄”的标志;同样,他们也会对缺陷缺失非常敏感,一旦缺陷不存在就会觉得画面“人造”。这会影响观众的“悬置怀疑”(suspension of disbelief),从而影响他们对故事的投入。
在《乐高蝙蝠侠大电影》中,我们希望让观众“感到镜片的存在”(feel the glass):构建一种摄影式的“现实”,暗示我们真的用物理镜头拍摄了真实的乐高积木。
镜头畸变(Lens distortion)

变形宽银幕(anamorphic)镜头畸变——《间谍之桥》(Bridge of Spies, 2015)
在《乐高大电影》里,镜头畸变是在 DI 阶段施加的,并没有特别追求对真实世界镜头的高度拟真;它更像是一种大致模拟 anamorphic 畸变现象的效果。
而在 TLBM 中,我们决定用更“正统”的方式处理镜头畸变:从把它实现到 Glimpse 渲染器里开始,而不是渲染后再做的后处理。
第一步是做调研,寻找可用于提取畸变参数的镜头型号。我们最终选定了 Panavision C 系列镜头。这些镜头在澳大利亚无法租到,但我们设法找到了一些不同焦段的 Panavision C 系列测试片。随后用 Nuke 与 3DEqualizer 分析这些图像并推导出简化的畸变参数。我们没有尝试推导更复杂的参数(例如曲率或四次畸变值)。我们的目标是让观众“读到”我们在使用物理镜头,而不是字面意义上实现一个科学上绝对精确的镜头模型。
我们拥有 35mm 到 100mm 的焦段测试图像,并将参数外推到 17.6mm anamorphic(相当于 Super 35 的 10mm)以及 352.3mm(相当于 Super 35 的 200mm)。
在 Glimpse 中实现镜头畸变带来了一个问题:垂直视差(vertical disparity)。当立体左眼与右眼在某些区域产生差异时,会引发观看不适,尤其是在画面角落、且存在与画面上下边缘大致对齐的视觉特征时更明显,比如下面幻灯片里蝙蝠侠家庭影院的地砖横向排布。
这在一段时间里只能靠人工处理(实际上是我们不知疲倦的合成主管 Alex Fry 一人搞定所有受影响镜头):做一个 disparity pass,把 x 分量清零,再扭曲 y 分量以重新对齐偏离的像素。尽管 Fry 先生再怎么“铁人”和“风度翩翩”,把瓶颈压在他一个人身上仍然非常不方便。于是我们贯彻当日哲学——工业化,把垂直视差矫正做成一个自动化的后渲染流程,直接跑在我们的 渲染农场(render farm) 上。

变形宽银幕(anamorphic)镜头畸变——《乐高蝙蝠侠大电影》。
我们的 “Render Everywhere” 方法意味着:和 DOF 一样,所有制作部门的 review render 都会带同样的镜头畸变。除此之外,它也让动画与布局可以正确评估画面构图(framing),从而确保物体与角色的摆放正确、表演更具戏剧张力,避免旧系统(渲染后再加畸变)偶尔会出现的“后面才发现构图不对”的惊吓。
镜头耀斑(Lens flares)
真实的镜头耀斑是我们“feel the glass”镜头模拟策略的重要组成部分。在以往项目中,耀斑往往是手工制作:例如在 After Effects 中使用 Video Copilot;或用非常繁琐的流程——从 Maya 导出表示灯光位置的 locator,再在 Nuke 中驱动耀斑生成。像这种手工流程既笨重也不高效,与我们的工业化思路不相容。
合成主管 Alex Fry 开发了一套自动化耀斑系统:最终合成画面的每个像素都会根据其强度对一张 lens flare 层产生贡献。该层作为 “layerpack” 的一部分交付到 DI,在调色阶段被应用。系统设计很灵活:如果某些特殊用途需要 “B flare” 层(例如强调某个戏剧性的光源),也可以请求并传递到 DI。
下面的视频展示了《乐高蝙蝠侠大电影》的一些镜头:上方是最终画面,下方是对应的 flare layer,随后还有一些技术测试:
LensFX
类似于在 TLM 中开发的 LegoLens,我们在 TLBM 中也实现了一套 LensFX 工具包,封装在 Nuke 节点 “GothamLens” 里。这套工具包含诸如 anamorphic vertical blur(变形镜头的纵向模糊)与 chromatic aberration(色差)等效果;并提供一个可选的 “Liberace” 效果,用星形耀斑去“闪瞎眼”,在少数有趣段落中强化蝙蝠侠与其人格面具(布鲁斯·韦恩)的幼稚感。

“燕尾服换装(Tuxedo Dressups)”段落中的 Liberace LensFX 效果示例
镜头笑点(Lens gags)
谁能想到镜头语言也能搞笑?眼尖的摄影师与镜头发烧友可能在 TLBM 里发现了一些镜头彩蛋。比如我们构思这个 split-field diopter(分割对焦镜)笑点时,一定想象过那种“我们自己都笑疯了”的场景:

分割对焦镜镜头——《Serpico》(1973)
制作现实(Production Realities)
“《乐高忍者大电影》(2017 年末上映)其实本来应该先上映,但他们没准备好,于是要求我们把上映日期提前。我们大约用两年半完成了这部电影,字面意义上从没有剧本到成片。这绝对是有史以来最激进的动画电影排期之一。” ——CMK 在 Den of Geek 采访 中的引述
和大多数同等规模的项目一样,排期非常激进、非常压缩、强度极高。正如上面 CMK 所说,TLBM 比原计划更早进入制作阶段,这意味着项目开发(包括故事与研发)与生产并行推进,并处于高度流动的状态。
CMK、编剧与故事部门在我们制作电影的同时,也在持续迭代故事。这个过程当然不可能完全无压力,但我们也确实从我们在以往项目中搭建并持续迭代的、敏捷而灵活的管线与工业化工作流中获益巨大。我们能应对任何突发情况并提供良好服务,让故事可以按需要发展(以尽可能做出更好的电影),而不至于被制作限制过度束缚。
在至少我所在的部门里,工业化灯光管线意味着:面对临时的故事改动和镜头新增,我们的回应往往是淡定的“嗯,可以做”,然后给出一些报价,把我对效率的假设转化为制片可接受的数字。接下来,我那群才华横溢、勤奋努力的灯光与合成艺术家就能把镜头做出来——不至于完全不出汗,但加班和周末工作的比例降到了最低。事实上,影片主体是在最后三个月完成的。在峰值时,灯光与合成团队在 2016 年 11 月 21 日那一周 final 了 183 个镜头,总计 9.71 分钟的银幕时间。

通过叠加不同 “lightgroups(光组)” 来完成最终合成灯光镜头的一个例子。
我们是怎么做的(How We Did It)
指导我们灯光工作流的总体原则是:能自动化就尽量自动化。重复性任务最适合交给机器完成,把艺术家从机械劳动中解放出来,让他们有更多时间用于创作。同样重要的是:一次完成的工作可以被多次复用。为此,我们围绕“全局资产(global assets)”这个概念来设计我们的管线,下文会展开。
全局资产(Global Assets)
“如果一次完成的工作可以在别处复用,就能获得效率红利。”这是“全局资产”概念的核心公理。与其让诸如 lightrigs、RSS(Render Submission Scripts)以及 Nuke 合成脚本与模板等资产停留在镜头级(甚至段落级),我们把它们放在制作的全局层级。通过资产管理工具,这些全局资产可以被任意分配给任意数量的镜头。
下面的流程图展示了一个关键灯光 rig(Keylight rig,即某段落的主灯光 rig)被分配的逻辑:一个 “Lightrig” 描述了场景中的灯光、其参数与关联关系,以及可能需要包含的几何体(例如灯光 blocker)等。在下面的流程图里,假设段落 “A” 的 Keylight Rig 被认为可作为段落 “Q” 的关键灯光起点,因为它们发生在同一环境、且大致是相似的时间段。

一个简单示例:为某段落与环境创建的 Keylight rig 如何被分配给多个依赖镜头。对 lightrig 的 tweak 往往会在 Minikey 或新的段落 Keylight 层面发生——此时它们会变成新的全局资产。生产镜头也经常会以某种方式修改 Keylight rig(通常是简化它),并作为新的全局资产 check in。同场景“同镜头”(same-as)会直接复用未修改的 lightrigs。
Lights in Assets(LIA)
LIA 是一种与“资产(asset)”绑定的 lightrig,而不是与段落或镜头绑定。一个典型例子是汽车前灯:前灯 lightrig 会作为车的资产一部分被 check in,因此车辆在任何地方被使用时,灯光都会随车而来。这既有助于跨段落保持一致性,也能避免重复劳动。
在我们的工业化工作流里,这不仅在管线效率层面合理,也有利于艺术家时间管理:从动画(Animation)进入灯光(Lighting)的库存(inventory)往往呈潮汐式变化,灯光艺术家在制作初期经常会有“空闲期”。此时可以把 Look Development 类工作(例如 LIA 编写)安排给他们,以保持产能,并提前建立一个可随取随用的资产仓库,等到后期忙碌时就能随时召唤。这样,后期我们可以借助已经审批过、技术干净的 LIA,以非常快的速度在灯光场景里叠加复杂度。
Batmobile 的 LIA 转台渲染(turntable)。
也可以把灯光和/或着色器材质的发光属性(incandescent properties)做成动画,并把这些信息存入 LIA 设置中。例如下方这个动画招牌。和之前一样,这些工作在镜头生产之前完成,使得艺术家可以在后期把有趣的灯光特征“装扮”进场景;只要镜头被分配到该环境,就能“免费继承”这些效果。
合成元素(Comp Elements)
Mattepainting 与美术部门也会提供元素(很多是带动画的)——它们被贴在 2D 卡片上,可以在合成脚本或模板中放置到 Nuke 的 3D 空间里,从而进一步增加场景的视觉复杂度。
表面(Surfacing)支持
表面部门给了我们很大帮助。比如他们为高谭市建筑的窗户内部制作了可见的“房间”,让其看上去从内部被点亮,并提供随机化的窗帘遮挡位置等变化。这些在中景甚至更远的距离都能成立,避免我们不得不再额外布置并传播数以万计的灯光。下面这张 surfaceColor 图像清晰地展示了城市中随机化窗帘遮挡的规模:

传播(Propagation)
TLBM 里一些巨大场景(例如蝙蝠洞与高谭市)需要定义并准确摆放成千上万盏灯。例如蝙蝠洞就有超过 21,000 盏灯,有时还需要依次点亮产生“蝙蝠洞启动(powering up)”的效果,如下方示例镜头:
显然,不可能手工摆放这么多灯。于是我们设计了一个系统叫 propagateObjects:把环境里的“有趣对象”单独加载出来,然后为每个对象开发一个 mini lightrig。这个 mini lightrig 会以单一实例的形式放在场景原点(3D 坐标为 0)。
乐高项目的一大优势是:任何对象都由积木组成,而积木具有独特的 brickID,并且相同积木共享相同 brickID。利用这一点,渲染时会运行一个 Python 脚本,大致逻辑是:“对于场景中每一个具有该 brickID 的实例,按预定义设置与几何偏移传播(propagate)以下灯光。”
通过这种工业化流程,我们可以构建极其复杂的灯光场景,同时保持 lightrig 的精简:在原点只保留每种 mini rig 的一个示例。
为 propagateObjects 使用而开发的路桩 mini light rig。左侧面板是 Maya 中的 rig,右侧面板是 Glimpse 的交互式渲染:我们可以检查灯光效果,并在 checkin 前发现并修复技术问题。
一个高谭市镜头的拆解:它使用了数千个 propagateObjects 实例,同时 Batwing 上还叠加了 LIA。
GSS Archives
随着项目推进,我们进一步优化了大型场景上的灯光工作。例如,可以把大块灯光烤进 Glimpse 原生的归档格式 GSS。秉承工业化精神,我们开发了一个流程 tweakArchives:允许脚本遍历归档中的灯光并执行操作,例如在渲染时把它们分组输出成可在合成中调整的 lightgroups,或像下图那样随机化强度:

使用 “tweakArchives” 随机化归档中数百盏灯的强度。
工具(Tools)
前文提到过一些我们开发的工具,但我认为有必要突出强调其中几个:它们对贯彻工业化哲学至关重要——帮助艺术家更容易管理海量数据、查找有用信息、分配全局资产等等。
SILO
SILO 是 “Show Info/Load Objects” 的缩写,它是一个在 Nuke 中用于浏览、预览、导入或更新最新资产(如渲染层、合成脚本、相机等)的工具。
此外,它还能显示用于数据分析的图像以帮助优化;按渲染提交组织查看 render passes;检查相关的 RSS 脚本;查询元数据;把一个 Nuke 脚本迁移到另一个镜头;以及更多功能。

SILO 截图。彩色图像是一张数据 pass,用热力图表示 Glimpse 为该渲染层计算的阴影射线(shadow rays)数量:红色代表最高数量——有助于理解场景是如何被采样的。右侧面板展示该镜头的各次渲染提交及其组成;浮动面板显示选中提交的渲染统计信息。
Lighting Asset Manager(LAM)
所有准灯光艺术家都梦想在电子表格里工作,对吧?好吧,我们确实也有大量机会这么做,但我们也清楚这既笨重又枯燥。因此,我们优秀的 TD 团队开发了 LAM——一个用于管理灯光相关全局资产分配的界面。
Render Explorer
一个用于控制向渲染农场提交任务的界面。可以从任意段落或段落组合中提交多个镜头,并对提交方式做细粒度控制。例如:
- 不同质量设置
- 复杂的帧范围控制
- 支持延迟提交(到指定时间或事件)
- 等等
LUX
Lux 是一套主要用于灯光相关任务的工具集。Lux 可以作为 Maya 内嵌应用运行,也可以作为独立应用运行。
Lux 的目标是:把灯光艺术家所需的全部工具都集中在一个入口里,随手可用。

LUX 截图:中央为 RSS(Render Submission Script)编辑器。
Glimpse
Animal Logic 自研渲染器 Glimpse 是我们工业化工作流的关键组成部分,本身值得用一整套文章来详细讲解。
如果想更深入了解 Glimpse,可以阅读这篇 FXGuide 文章。此外,Glimpse 的最初架构师与开发者 Max Liani 的采访也揭示了它在《乐高大电影》早期开发与落地的一些细节。
接下来只是对 Glimpse 在 TLBM 灯光工作流上的 部分 优势做一个简短总结。它最大的价值可以一句话概括:Glimpse 让 TLBM 的制作成为可能。
几何体处理(Geometry Handling)
Glimpse 能高效处理海量几何体。这大幅降低了灯光艺术家的场景管理负担——他们不再需要为了适配渲染器的内存上限而把复杂环境拆成多层。进一步的效率来自:可以把场景烤进 Glimpse 原生的归档格式,从而减少渲染前翻译场景所需时间。这也能加速交互式灯光工作:例如在做 LIA 时,只需导入建筑归档而不是该建筑的全部几何体。
成千上万盏灯(Thousands of Lights)
把成千上万盏灯传播到环境里是一回事,但更关键的是:渲染这类高复杂度灯光场景时,不能让计算量把渲染时间拖到“生产瘫痪”。Glimpse 已经具备部分能力,例如内置的 Multiple Importance Sampling;但研发团队还实现了进一步优化,显著降低渲染时间。
一个重要优化是 light culling:通过把灯光链接到一定半径内的对象实例,限制直接照明的影响范围。为支持大规模场景,灯光与实例会用 bounding volume hierarchies 进行分区。对实例做空间分组,使 Glimpse 能以较低成本判断一个大型实例组是否会被某盏灯影响;对灯光做空间分组,则在渲染时减少计算,从而加速渲染,只需付出较小的额外内存成本来存储灯光组数据。light culling 的实现带来了显著的渲染时间下降。

通过 “Gradenode” 在合成中回滚灯光值(Comp Lighting Value Rollback via “Gradenode”)
在灯光镜头工作的早期阶段(尤其是 keylighting),我们希望在 Nuke 中快速迭代镜头的视觉方向。因此我们通常用中性的“白灯”开始渲染,然后在 Nuke 中调整灯光颜色与强度。此外,我们的制片设计师 Grant Freckelton 建立了一套 “paintover” 流程:他会用 Photoshop 在灯光渲染图上进行绘制,并输出基于真实渲染衍生的图像,以更直观地表达创作反馈。用中性灯开始能让他在不与渲染本身固有色彩“打架”的情况下,对颜色提出更具体的要求。
然而,在 Nuke 中调整灯光强度(以及较少程度的颜色)经常会暴露渲染采样问题:画面出现令人不悦的噪点。这是因为 Glimpse 的采样会基于渲染时灯光强度进行分配;如果后期对某些区域做了大幅提升,那么渲染时原本的采样可能不足以支撑这种后期操控。
于是我们在 Nuke 中开发了一个 gradenode:它可以把合成阶段确立的灯光数值“回滚”到灯光渲染里——通过提取为一段 Python 代码,并将其纳入控制农场提交的 RSS 脚本。这样在渲染时,灯光参数就会被调整为与 Nuke 迭代过程中做出的创作决定一致。
这意味着:Glimpse 可以用“正确的灯光值”去高效采样灯光场景,从而更快地 “convergence”(在可接受噪点量下得到合格画面),并得到更高质量的图像。这也成为一种“唾手可得(low hanging fruit)”的优化:在保持灯光迭代敏捷性的同时,显著降低渲染时间。
降噪(Denoise)
Glimpse 渲染天生会包含一定噪点或“方差(variance)”,表现为颗粒状的 speckly grain/girt。这是采样数学现实导致的:渲染器必须在一个被认为可接受的方差阈值(maxVariance)上“收敛”。maxVariance 越低,画面越干净,但收敛时间越长(也就是渲染更久)。
降噪技术允许我们接受更高的 maxVariance(即更脏的原始渲染),以换取更快的收敛(更短渲染时间)。代价是残余噪点更多,而降噪旨在把这些噪点清理到可接受范围。
我们在 TLBM 上使用了一系列降噪技术与工具,但与工业化工作流最相关的是 GlimpseDenoise:它会在渲染完成后自动运行。它本身足够写一整篇文章,因此我这里只提一点:在 RSS 中使用某个 flag,意味着如果初始降噪参数不合适,可以在不重渲 해당 pass 的情况下,用调整后的参数再次运行 reDenoise。
除了这套自动且可调的流程外,我们也使用了大量更手工的技术(多为解决特定类型噪点或其他渲染伪影而定制),包括第三方插件 Neat Video、清除零散“坏像素”的方法,以及各种投射(projection)、定帧(frameholding)与混合(blending)技术。
这些降噪方法组合在一起,让我们显著降低了 Glimpse 的渲染时间——而在交付期限逼近、农场吞吐需求快速增长时,这一点至关重要。
面向目标的开发(Targeted Development)
Glimpse 是自研渲染器,不会商业化对外发布。这意味着我们有限的研发资源可以聚焦于制作需求,并按项目排期安排开发。
合成团队(Comp Team)
我们小而精的合成团队是工作流不可或缺的一部分。下面列出他们贡献的一小部分:
- 某些类型的 Look Development(例如 TLBM 中大量屏幕的审美属性:电视、广告牌、控制面板屏幕、幻影地带那些怪异扭曲的屏幕等)由合成承担,并提供给灯光使用(灯光艺术家往往会自己合成镜头)。
- 赶工期间,合成会承接灯光的溢出工作。有时一个合成艺术家会负责一个段落中绝大多数镜头的最终收尾,并按既定“配方”应用一组 look tweak。
- 为镜头增加视觉趣味:例如使用 Animal Logic 的效果库元素来增强 FX,而不必把需求再回抛给其他部门;或在 Nuke 的 3D 空间里把元素摆到卡片上来增加复杂度;或把纹理投射到物体上以强化故事点,或替换重复/无聊的标牌(例如)而无需新增 Surfacing 工作。
示例:效果库里的一种轻薄烟雾元素,可以在合成里用于增加镜头复杂度。

幻影地带(Phantom Zone)镜头的拆解。屏幕外观由合成完成 Look Dev;我们还加入了效果库里的轻薄烟雾元素,我们给它起了个绰号叫 “juice”,用来增强渲染的 FX 流体模拟缓存。
由美术部门制作的一组动画图形示例,供合成和/或灯光使用,以强化叙事或增加视觉复杂度。
数字中间片(Digital Intermediate)
数字中间片(Digital Intermediate)(DI)流程,也就是调色(Colour Grading),如今已经成为我们灯光工作流的核心组成部分。Post Magazine 的这篇文章(含采访)对流程做了深入讨论:采访对象包括 Animal Logic 调色师 Sam Chynoweth 与剪辑/DI 工程师 Bram Tulloch。这里我只总结其中的关键点。
在我们的动画长片中,DI 不是“交付后才做的后期”,而是制作工作流的一部分,并且通常在灯光与合成开始输出可用画面后就立即启动。在 TLBM 上,制片设计师 Grant Freckelton 与 DI 团队在 DI 中进行了大量 look development。
调色师 Sam Chynoweth 这样说(引自 Post Magazine 文章):
“从项目最早期开始,我们就在与制片设计师 Grant Freckelton 一起开发视觉风格,我们本质上变成了灯光、合成与输出部门的延伸,而不是等到成片镜头交付后才开始工作。”
这种方式让我们能利用 DI 工作流去增强并补充合成的努力:由于 DI 能基于预先建立的 “looks” 作为基线进行快速迭代,许多镜头在合成里所需迭代变少了。借助我们的 gradematte 系统,DI 的图像操控可以做到需要多细就有多细。
乐高方面的一项要求是:尽可能呈现乐高积木的“自然颜色”,尤其是主角、载具与道具。但在 TLBM 这种极端高饱和的灯光与调色中,这显然很具挑战:强烈的有色光照与重度调色会扭曲场景中每一个 surface shader 的色彩响应。我们在灯光中尽可能通过策略性布置中性灯来“冲洗(wash)”场景的一部分来应对;DI 也可以把 surfaceColor(渲染输出中仅包含对象 shader 颜色信息的 pass)以 gradematte 辅助的细腻控制方式混回画面。
如果需要更多处理,就会有一个灵活的 “kickbacks” 机制把需求回抛给合成(极少回抛给灯光)。在最忙的时候,会有一位合成艺术家驻场 DI 套间,随时按需生成或修复元素——这也是“工业化摄影”理念的一部分。
电影化灵感(Cinematic Inspirations)
在 Animal Logic 的动画长片制作流程中,一个重要环节是段落的 “breakout”:导演会向关键创意人员与各部门主管阐述场景的戏剧意图,同时大家也有机会向导演 pitch 想法。作为本文的收尾,我想用幻灯片的方式呈现一次我对 CMK 的 pitch 背后的一些思考——它最终成为韦恩庄园里蝙蝠侠内省段落 “Family Photos” 的一部分灯光方向。
点击下方 “play” 开始幻灯片:

所以,我当时在看《Jane Eyre》(2011,导演 Cary Fukunaga,摄影 Adriano Goldman)……
趣味事实(FUN FACTS)
- 为本片提供 CGI 的团队总人数:494
- 本片动画制作总天数:9153
- 若由 1 个人独立完成全部动画需要的年数:25 年
- 影片角色总数:451
- 最大的 LEGO 角色:Kraken,111,284 块积木
- 第二大的 LEGO 角色:Sauron,53,981 块积木
- 第三大的 LEGO 角色:King Kong,35,405 块积木
- 独特积木(unique Bricks)数量:3,180 块
- 独特积木纹理(unique Brick textures)数量:81,854 张纹理
- 高谭市模型(Models)数量:41,605 个模型
- 迭代次数最多的模型:Robin,31 个版本
- 最大的单个 LEGO 模型:Wayne Manor,34,287 块积木
- 最大的 LEGO 地形:443,386 块积木(能源设施地震/裂开场景)
- 最大的 LEGO 车辆模型:Bat Cargo Plane,15,739 块积木

15. 单个镜头中最多的积木数量:236,555,477 块(如上图)
16. ‘Bat’ 模型数量:217 个模型
17. 包含高谭市的镜头数量:523 个镜头(27%)
18. 包含积木破坏的镜头数量:617 个镜头(31%)
19. 使用次数最多的道具:Bat Grapple Gun,442 次
20. 最大的群众场面:16,100 个小人仔
21. 高谭市有多大?
| 项目 | 数值 |
|---|---|
| 积木 / 面积 / 足球场 | 220,831,071 块积木 / 379,095 平方英尺 / 6.6 个足球场 |
| 宽度 | 182.09 米 / 199 码 / 597 英尺 |
| 深度 | 193.48 米 / 211 码 / 635 英尺 |
| 高度 | 19.78 米 / 22 码 / 65 英尺 |
| 22. 蝙蝠洞有多大? | |
| 项目 | 数值 |
| --- | --- |
| 积木 / 面积 | 50,999,853 块积木 / 3,996 平方英尺 |
| 宽度 | 11 米 / 12 码 / 36 英尺 |
| 深度 | 34 米 / 37 码 / 111 英尺 |
| 高度 | 11 米 / 12 码 / 36 英尺 |
| 23. 如果只用单颗 CPU 渲染 TLBM 所需年数:超过 6,550 年 | |
| - 它得从公元前 4,500 年左右开始渲——差不多是犁开始流行的年代。 | |
| 24. 如果只用单颗 CPU 渲染 TLBM 所需小时数:57,418,857 小时 |
25. 单个镜头里最多的灯光数量:21,603 盏灯(如上图)
26. ‘Glimpse’(Animal Logic 的先进渲染软件)为渲染 TLBM 模拟的光线射线数量:
13,486,203,269,559,350 rays
- 也就是十三千万亿四千八百八十六万亿两千零三十亿二亿六千九百六十九万五千五百五十九万三千三百五十条射线!
TLBM 灯光与合成团队。
Respect!






































