原文网页链接:https://animallogic.com/technology/publications/physical-based-lens-flare-rendering-in-the-lego-movie-2/
PDF 链接:https://animallogic.com/wp-content/uploads/2023/06/Physical-Based-Lens-Flare-Rendering.pdf
DOI:https://doi.org/10.1145/3329715.3338881
论文信息
Physically Based Lens Flare Rendering in “The Lego Movie 2”
Erik Pekkarinen(Animal Logic)erikp@animallogic.ca
Michael Balzer(Animal Logic)michaelba@animallogic.ca
Figure 1: Standalone lens flares demonstrating occlusion and lens dirt effects generated by our approach (left); lens flares in “The Lego Movie 2: The Second Part” © 2019 Warner Animation Group (center and right).
图 1: 我们的方法生成的独立镜头光晕示例,展示了遮挡与镜头污渍(左);《乐高大电影 2:第二部》中的镜头光晕效果 © 2019 Warner Animation Group(中、右)。
摘要(ABSTRACT)
我们提出了一种在制作级渲染器中集成真实镜头光晕渲染的方法,该方法基于先前提出的物理正确镜头模拟技术 [Hullin et al. 2012]。我们描述了实现高效镜头光晕渲染所需的近似与采样技术,并为此引入了灵活的艺术家控制与工作流程。以《乐高大电影 2:第二部》为案例研究,我们展示了这些方法具有良好的效率,并且在制作环境中工作效果可靠。
1 引言(INTRODUCTION)
镜头光晕(lens flares)是由光线在相机镜头系统内部发生反射、再到达图像传感器而形成的成像伪影。由于所有真实物理镜头系统都会在某种程度上产生光晕,它们在电影中普遍存在,因此在真实感计算机生成图像中也同样被观众所期待。它们甚至会被人为地加入,例如让镜头更有趣或更具戏剧性。
传统上,合成镜头光晕通常使用现象学(phenomenological)方法;但较新的技术是物理基(physically based)的,并对光与镜头系统中各个元件的交互进行建模 [Hullin et al. 2011]。Hullin 等人 [Hullin et al. 2012] 的技术使用多项式系统来建模镜头内部交互:这些多项式系统由光轴处解析的“光线-曲面交点”做泰勒展开得到。此处,每个多项式依赖于镜头元件的物理属性,例如尺寸以及随波长变化的折射率(IOR);然后根据相机内部实际镜头排列,将它们组合成系统。用该方法变换光线比朴素的逐表面光线追踪更高效,尤其是多个系统可以复合后再截断到所需次数。这使得每条光路的计算代价与镜头元件数量无关,同时近似误差保持大致恒定。该方法的高效率与不牺牲的物理准确性相结合,使其非常适合制作级渲染:制作渲染不受许多替代方法中的实时渲染约束,且以照片级真实为主要目标。该技术作者提供了一个 C++ 实现:Polynomial Optics Toolkit。本文呈现的镜头光晕渲染器围绕该库构建。
2 镜头光晕光路(LENS FLARE LIGHT PATHS)
镜头光晕由包含反射的光路产生。只有具有偶数次反射的光路才能从前组镜片传播到图像传感器。菲涅耳方程告诉我们,通常在任意镜头表面处,透射辐亮度中被反射的比例小于 1%。因此,随着反射次数增加,光晕的辐亮度会迅速衰减;因此,仅考虑两次反射的光路是一个合理的近似。这些反射可以看作所有材料界面的 2-组合(2-combinations)。例如,在具有 29 个材料界面的镜头系统中,这将得到 406 条光路。
Permission to make digital or hard copies of part or all of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for third-party components of this work must be honored. For all other uses, contact the owner/author(s). DigiPro ’19, July 27, 2019, Los Angeles, CA, USA © 2019 Copyright held by the owner/author(s). ACM ISBN 978-1-4503-6799-8/19/07. https://doi.org/10.1145/3329715.3338881
(译)允许在不收费的情况下为个人或课堂用途制作本作品的部分或全部数字/纸质拷贝,前提是拷贝不用于盈利或商业优势目的,且拷贝在第一页保留本声明与完整引用。作品中第三方组件的版权必须得到尊重。其他用途请联系所有者/作者。DigiPro ’19,2019 年 7 月 27 日,美国洛杉矶。© 2019 版权由作者持有。ACM ISBN 978-1-4503-6799-8/19/07。https://doi.org/10.1145/3329715.3338881
Figure 2: Two rays from different lens flare generating light paths.
s e n s o r
a p e r t u r e图 2: 来自不同“生成镜头光晕的光路”的两条光线。
Figure 3: Rays from the same light path that are occluded by scene geometry, the camera housing and the aperture.
图 3: 同一条光路上的光线,被场景几何体、相机机身以及光圈遮挡的示意。
图 2 展示了来自不同“两次反射光路”的示例光线。每条光路由三段透射(transmission)片段组成。给定 Polynomial Optics Toolkit 为各个镜片元件提供的多项式系统(polynomial systems),我们将它们组合以得到每段透射片段的变换;随后再将这些系统进一步组合,得到完整光路的变换。
由于遮挡,并非所有来自“生成镜头光晕的光路”的光线都能到达图像传感器。如图 3 所示,从光源出射的光线可能被镜头系统外的几何体遮挡、被相机机身遮挡,或被光圈遮挡。我们通过对场景几何进行光线投射(raycasting)处理第一种情况;而后两种情况则通过将光线位置与图像传感器几何以及光圈几何进行测试来处理。对于光圈遮挡测试,我们每条光路最多额外评估三个系统(每条透射片段穿过光圈的部分各一个)。
我们使用菲涅耳方程估计光路携带的辐亮度。除了与材质相关的部分之外,我们还包含与入射角相关的菲涅耳因子。由于贡献的光线在通过前组镜片之后基本与光轴近似平行,并且在每个界面计算角度相关因子代价较高,我们在前组镜片处用 Schlick 近似 [Schlick 1994] 来估计该角度相关因子。
为提高收敛速度,我们尽量最大化到达图像传感器的样本数量。我们观察到,这些未被遮挡样本(unoccluded samples)的分布在不同光路与前组镜片区域上都非常不均匀。因此,我们对两者都进行自适应采样:光路天然可分区(partitioning),而前组镜片区域被均匀划分为若干网格单元(cells)。整体采样概率为:
ps = plp × pcell
其中 plp 为光路采样概率,pcell 为前组镜片单元采样概率。到达图像传感器的样本的归一化权重为:
ws = 1/ps ∑_{i=1}^{N} 1/pi , (1)其中 N 为命中传感器的样本总数。实践中我们发现,当 ps 被定义为每个“光线子集所携带辐亮度”的占比时,可以获得最佳收敛效果。该自适应采样使图 1 左侧“独立镜头光晕渲染”中的传感器命中率从约 15% 提升到约 90%。
为了将未遮挡样本投射(splat)到图像传感器上,我们估计其辐亮度 Ls 为:
Ls = L(λ) × clens × l × Flp × ws, (2)其中 L(λ) 是来自光源、波长为 λ 的入射辐亮度,clens 是镜头衰减因子(lens attenuation factor),l 是该光线在图像传感器处的 Lambertian 反射系数,Flp 是该光路的菲涅耳因子。镜头对光线的衰减为:
clens = cdirt × ccoating
其中 cdirt 是前组镜片污渍颜色(front lens dirt color),ccoating 是该光路上各镜片镀膜颜色(lens coating colors)的乘积。
(译者注:式 (1) 中的 pi 表示每个到达传感器样本的个体采样概率;原文排版为 Í,此处按常见写法记为求和符号 ∑。)
3 采样(SAMPLING)
我们通过连接“光源上的一个随机样本”与“前组镜片上的一个随机样本”来对镜头光晕进行采样。对给定的入射点与指向镜头系统的方向,评估光路变换即可得到该光线在后组镜片处的出射点与出射方向。随后,我们用该信息与图像传感器几何进行测试,并确定样本在图像上的投射位置(splat location)。
4 艺术家工作流程(ARTIST WORKFLOW)
该镜头光晕渲染器是 Animal Logic 自研渲染引擎的一部分。它在单独的渲染 pass 中使用,用于少量镜头与光源(具有明显光晕效果者)。其输入场景与主渲染 pass 相同。此外,会对产生镜头光晕的光源进行标记;这些光源也可以在镜头光晕 pass 中拥有独立的强度倍数(intensity multipliers)。
为支持多种镜头系统,渲染器会解析镜头系统描述(lens system description)、镀膜颜色描述(coating color description)以及一个用于衰减的前组镜片污渍贴图(attenuating front lens dirt map),并将它们作为渲染相机(render camera)的属性。所使用的镜头系统描述基于真实世界镜头参数。现有的渲染相机属性(如 f-stop、光圈叶片数量、焦距)会以物理正确的方式影响镜头系统。图 4 展示了这些输入参数可以实现的广泛外观范围。
Figure 4: Different lens systems supporting anamorphic, wide-angle and multi-zoom setups (top), and different coating presets (bottom).
图 4: 支持变形(anamorphic)、广角(wide-angle)与多变焦(multi-zoom)配置的不同镜头系统(上),以及不同的镀膜预设(下)。
如果主渲染 pass 使用了独立的镜头畸变模型(lens distortion model),我们会在图像空间对光样本应用相同的畸变。这样当与主渲染合成时,光晕会与其产生光晕的光源正确对齐。渲染器支持将单个光晕输出为独立图层(independent layers),以便在合成中进行单独调整。为减少光晕图层数量,它会将低于某个辐亮度阈值的所有光晕合并到一个图层中。
典型的 720p 镜头光晕预览渲染耗时少于 10 秒;而典型的 2K 制作质量渲染耗时少于 15 分钟。此渲染耗时在制作中是可行的,因为它们只是主渲染 pass 耗时的一小部分。
在 Animal Logic 的未来动画与视效项目中,已有强烈意向使用该系统。一个限制是:它无法涵盖随机散射过程与衍射(diffraction),因为这些并未被底层 Polynomial Optics Toolkit 捕获。未来我们希望:基于光强为输入参数建立正确的传感器归一化(sensor normalization),使输入参数单位具有物理意义;也希望通过正确捕获采样方差来对光晕进行降噪(denoising),并通过对多光源及其遮挡进行自适应采样,从源头降低方差。我们还计划增加遮光罩(camera hoods)以及程序化动画的光圈形状(procedurally animated aperture shapes)。
参考文献(REFERENCES)
Matthias Hullin, Elmar Eisemann, Hans-Peter Seidel, and Sungkil Lee. 2011. Physically-based Real-time Lens Flare Rendering. ACM Trans. Graph. 30, 4, Article 108 (July 2011), 10 pages. https://doi.org/10.1145/2010324.1965003
Matthias B. Hullin, Johannes Hanika, and Wolfgang Heidrich. 2012. Polynomial Optics: A Construction Kit for Efficient Ray-Tracing of Lens Systems. Computer Graphics Forum (Proceedings of EGSR 2012) 31, 4 (July 2012).
Christophe Schlick. 1994. An Inexpensive BRDF Model for Physically-based Rendering. Computer Graphics Forum 13, 3 (1994), 233–246. https://doi.org/10.1111/1467-8659.1330233
5 结论(CONCLUSIONS)
我们的镜头光晕渲染器在《乐高大电影 2:第二部》中约 50 个镜头中使用,覆盖了影片中大部分强逆光镜头。由于它主要复用既有的相机参数与场景设置,艺术家可以很容易地采用该渲染器。



