这一篇在干嘛?

成像光学设备里总有一些「不该来的光」会落到像面上,压低对比度甚至淹没目标信号,而防护设计既需要算出杂散光的数值,也需要找出「是谁、走哪条路」把它送进来的。这篇论文把计算光学与真实感渲染结合起来:用可组合的基本事件和逻辑运算搭建光线传播准则,从海量光线里筛出真正肇事的路径;再用多判据接收器一次计算覆盖多种散射来源;对漫散射主导的难题,则用渐进式后向光子图物理正确地算出像面照度。最巧的是「记账记回」思路——把像面上收到的杂散照度累积到产生它的元件上画成照度图,元凶一眼可见,初学者能带走一套从可视化定位到定量评估的完整杂散光分析工作流。

光学设备杂散光防护设计的可视化分析方法(第 1 单元讲解)

1 引言

1.1 杂散光防护为什么重要

一台成像光学设备(比如相机镜头、望远系统)的使命是把目标清晰地成像在探测器上。但在真实工作环境里,除了目标光,还会有一些”不该来的光”——太阳光、强光源、环境背景辐射——通过反射、散射、鬼像等途径进入系统,最终落到像面上。这些光就是杂散光(stray light)。杂散光会抬高像面的背景照度,轻则降低对比度,重则完全淹没目标信号。因此在成像光学设备的设计过程中,为设备设计防杂散光(背景辐射)系统,是极其重要的任务之一。

这项设计工作包含两大组成部分:

  1. 计算机仿真杂散光在光学设备内部的传播过程;
  2. 可视化杂散光源——即找出到底是哪些元件、哪些表面在向像面贡献杂散照度。

第 2 点常被忽略,但非常关键:光有仿真数值是不够的,设计者必须知道”是谁、通过什么路径”把光送到了像面上,才能对症下药地加挡光板、改表面处理或调结构。

1.2 用什么工具来算

解决这两类问题,业界普遍采用基于非确定性光线追迹(stochastic ray tracing,即随机化光线追踪)的计算光学工具。这里有一个默认假设值得注意:衍射现象通常只被当作影响成像质量的因素来考虑,而不算作杂散照度的一个来源(即不考虑衍射散射对杂散光的贡献)。

一个较新的思路是借用真实感渲染(realistic rendering)方法。真实感渲染原本是计算机图形学领域的技术,擅长合成和可视化包含大量物体的复杂光学场景所形成的图像。它的好处不只是图像看起来真实,而是仿真结果物理上正确

1.3 渲染方法各有分工

针对不同类型的场景,渲染问题有许多不同的优化方案:有的专门优化间接(漫射)照明分量的计算,有的专注焦散(caustic)照明分量,还有的以最少计算资源为目标。计算镜头光斑(image flare)可以视为真实感渲染的一类任务,此时的渲染目标是杂散光斑图像——即杂散光照度在像面上的分布。

这幅杂散光图像由两部分亮度共同形成:

  • 杂散辐射物体的直接可见亮度:例如透镜系统中的鬼像(ghost)或眩光(glare),折反射式系统中的直接照明;
  • 在设备元件上散射形成的亮度:散射可以发生在光阑(diaphragm)、镜框、透镜非工作表面、透镜缺陷上,也可能发生在透镜材料内部(例如荧光现象)。

这些效应都可以用现代真实感渲染软件进行物理正确的仿真。

1.4 渲染软件的短板与本研究的思路

渲染软件系统通常不重视杂散光源的可视化分析,因为它们的首要任务是合成真实感图像,而不是告诉光学设计者”问题出在哪个零件上”。

本研究试图把计算光学真实感渲染两方面的算法和软件方案结合起来,完成两件事:仿真杂散光在光学设备内的传播,并直观呈现它对像面背景照度水平的影响。为合成背景照明图像,文中使用了两种主要方法:

  • 正向随机光线追迹法(direct stochastic ray tracing);
  • 基于渐进光子图的双向随机光线追迹法(bidirectional stochastic ray tracing with progressive photon maps)。

两种方法都能物理正确地由设备内的杂散光源成像,并可视化设备元件上可能的杂散光源,但各有优缺点:

  • 正向随机光线追迹擅长处理直接照明或系统内的眩光,尤其当光源空间尺寸或角度尺寸较小时效率很高。此外,对满足特定杂散光成因的正向光线做路径可视化,可以找到散射光源并评估它们对接收器照度的贡献。但它有一个明显短板:当杂散光是由设备元件上的一次或多次漫散射产生时,正向追迹的效率很低。
  • 这种情况下,最合适的方案是基于光子图的双向光线追迹。它不仅能高效、物理正确地计算出像面上杂散辐射的分布,还能可视化杂散辐射的来源。

本方法用于分析杂散光成因的核心可视化思想是:把光学设备各元件的照度图(illumination map)画出来——但只累计那些”确实在像面上形成了背景照度”的散射事件。注意这里的巧妙之处:累计的不是元件自身接收到的照度,而是”这次散射行为贡献给像面的照度”。由于这是照度量(而非亮度),它与观察条件无关,因此这张图可以放在任意相机位置来查看。图中越亮的位置,代表该场景元件对像面杂散照度水平的影响越大。设计者由此可以一眼看出哪些区域需要特别关注,从而针对性设计防杂散光结构。

2 相关工作

2.1 起点:单向随机光线追迹

如第 1 节所述,光学系统设计的核心问题之一就是防杂散辐射。暂且搁置衍射散射效应,模拟像面传感器上背景照度的最合适方案是基于随机光线追迹的辐射传输方法。

其中最简单有效的是单向光线追迹(forward 或 backward,正向或反向)方法:用基于伪随机变量生成算法的蒙特卡洛积分方法求解辐射传输方程或计算亮度。单向蒙特卡洛光线追迹是众所周知的成熟方法,是仿真杂散光在光学设备中传播、计算像平面杂散照度的一种简单可靠的手段。它的两种方向各有适用场景:

  • 正向追迹:光线由光源随机发出,发出的概率密度通常与辐射强度的空间分布密度相对应。光线打到光学设备后被变换,新方向通常按表面的双向散射分布函数(BSDF)用重要性采样方法确定,并由此决定光线的后续轨迹。当光线到达辐射接收器表面时,其携带的能量就参与成像。
  • 反向追迹:如果辐射光源的空间尺寸和角度尺寸都较大,从接收器出发向光源方向追迹光线效率更高。反向蒙特卡洛追迹的做法与正向类似,唯一区别是:光线在表面上变换时必须遵守光线迹线可逆性条件。当反向光线命中辐射光源表面时,其亮度被转换为接收器处的照度。

文献 7 提出了一种加速技巧:把散射光线强制导向辐射接收器。具体做法是为接收器构造一个”虚拟像”,由它来决定表面上散射光线的追迹方向,相当于给散射方向计算提供了一个重要性函数。要对哪些表面分析散射光对像质的影响,就需要为这些表面都建立虚拟像。该方法的缺陷也很明显:

  1. 虚拟探测器的选择与成像不能自动完成;
  2. 难以做物理正确的散射光水平分析——构造”朝向虚拟探测器散射”的概率密度函数本身就是非平凡问题,需要大量计算资源;基于拒绝采样(rejection sampling)的解决方案又会显著降低方法效率。

2.2 一阶散射的”受照面 × 可见面”分析

文献 7 还提出一种分析一阶散射光影响的方法:先做一次反向追迹,列出能从像平面接收到光通量的表面清单;再从外部光源做正向追迹,列出光通量到达的表面清单。两个清单的交集就是”既被照亮、又能’看见’像面”的临界表面。

这个方法能快速圈定可疑区域,但有两个局限:

  • 不能给出像面杂散照度的物理正确估计——因为”受照区与观察区交集”处的 BSDF 参数并没有被用来计算杂散照度数值;
  • 它只适用于直接照明与焦散照明的观察模型,无法评估二次照明(secondary illumination,即经多次散射后的照明)对杂散照度的影响。

2.3 路径可视化与”亿里挑一”的难题

分析杂散光源的另一个直观工具是光线追迹路径的可视化。但这里有个现实问题:如果光学设备对杂散辐射的透过率只有 或更低,那么把所有追迹路径都画出来是不可行的——绝大多数光线对像面杂散光毫无贡献,画出来只会是一团无法解读的乱麻。

解决办法是引入光线传播准则(ray path selection criterion)对路径进行筛选:用蒙特卡洛方法追迹出穿过光学设备的光线路径(正向、反向均可),分析每条路径是否符合指定准则——例如”从透镜表面反射了两次”(二阶鬼像)或”在镜框上发生单次散射”(焦散照明)——只把满足准则的光线挑选出来渲染。结果是:设计者看到的不再是数百万条光线,而是几条到几十条光线,它们直接指示了像面杂散光的成因。这对查找杂散光原因、设计防杂散光系统非常方便。

但该方法的根本缺陷是:无法定量评估接收器处的杂散照度水平。设计者能看到可能的原因,却拿不到量化数字。

2.4 转向计算机图形学的成熟方法

要在物理正确的前提下高效地算出杂散辐射的数值,可以借鉴计算机图形学中的现代方法。图形学中计算全局照明的方案有两个天然优势:

  • 能对来自整个球面方向的光源照度进行积分(收集全部表面照度);
  • 能物理正确地处理复杂 BSDF 表面上产生的二次照明。

图形学同样大量使用蒙特卡洛方法,但并不局限于单向随机光线追迹。可以按两个维度对这些方法分类:

  • 积分方式:普通蒙特卡洛积分,或马尔可夫链(Markov chain)式的积分;
  • 光线的表示方式:以亮度(radiance)为量纲的”细光线”,或以辐射通量(radiant flux)为量纲的”有限尺寸光线束”。

2.5 马尔可夫链路线:Metropolis 方法

按马尔可夫链方案组织的主要方法是建立在 Metropolis 原理上的光路变异(light path trace mutations)方法。其核心思想是对形成图像照明的光路不断做”变异”(局部修改)。它的优点是能自动绕着对最终图像照明有贡献的场景区域反复采样,但缺点是通常自己找不到这些区域。因此 Metropolis 方法必须与按普通蒙特卡洛积分方式计算图像照度的方法配合使用。

使用 Metropolis 方法时要特别注意选择正确的光线变异策略,方法效率完全取决于此。在光照复杂的场景渲染中,选对了变异策略确实比普通蒙特卡洛积分收敛更快。但选对策略本身是相当困难的任务,在计算图像杂散照度这种场景下尤其如此,因此 Metropolis 方法在光学设备散射光计算中难以应用。此外还有两个障碍:

  • Metropolis 方法对焦散照明的收敛性并不总是好,而焦散照明在杂散照度中可能占主导地位;
  • 它必须与普通蒙特卡洛积分方法搭伴工作——既要用后者找到需要变异的初始光路,又要用后者把结果归一化到绝对照度值。

2.6 双向光线追迹:优势与权重难题

以亮度为量纲、使用细光线的蒙特卡洛方法(包括基于反向路径追踪和双向光线追踪的方法)在计算杂散光影响时也可能低效。双向光线追迹试图兼取正向与反向追迹之长:从接收器侧和光源侧各追迹光路,然后在具有漫射性质的表面点上用阴影光线把两条光路连接起来,从而由完整光路计算从接收器到光源的亮度,再转换为像面上的辐照度。

  • 优点:计算二次照明产生的辐照度效率很高;
  • 缺点:不适合计算焦散照明的亮度,尤其当辐射光源的空间或角度尺寸很小时更糟。此外,该方法的高效率依赖于在连接正反向光路时正确选择权重系数,而在复杂场景(如光学设备的杂散照度计算)中正确选择权重系数实际上难以做到。

2.7 光子图家族:从直接光子图到渐进反向光子图

按”有限尺寸光线、以辐射通量为量纲”路线工作的方法,才是物理正确估计杂散照明辐照度的最合适方案,其中最主要的代表是直接光子图方法。它的主要优点是能计算带全局照明的复杂场景(包括焦散照明),并能快速得到像面辐照度估计。

直接光子图方法分两个阶段:

  1. 正向发射:光源发出光线在场景中传播,在场景表面形成光子分布,即光子图(photon map);
  2. 反向收集:辐射接收器发出反向光线,捕获落入反向光线积分球内的光子,并从被捕获的光子中读出辐照度。

经典直接光子图方法的缺陷是图像呈”颗粒状”结构,且在物体边界处辐照度失真(遮挡误差)。为消除物体边界的遮挡误差,文献 22 提出了最终收集(final gathering)方法:从设备表面观察点发出随机光线,在这些光线与场景表面的交点处收集光子。这能去除图像颗粒感,但显著拖慢算法。为进一步加速收敛,文献 24 提出了照明缓存(irradiance cache)方法,在表面点之间插值二次照明,使最终收集过程可以从相应表面的辐照度缓存中直接取得二次亮度。

照明图方法很适合光学设备的杂散光分析,但主要缺点是需要存储的数据量过于冗余

另一条路线是前向光子图的替代方案——反向图或称场景可见性图(文献 25)。这类图确定光线的方向,保证光束必然命中辐射接收器。但图数据是一个多维空间函数,在光学设备这类复杂场景中的实际应用很困难。

综合以上方法的优缺点,文献 26 发展出渐进反向光子图方法,它集成了前面各方法的优势:

  • 辐照度收集在场景可见性图上进行,且可见性不必是直接的——可以经过若干次漫散射事件之后再”看见”。最优的漫散射事件次数可以根据二次照明亮度收集点处的照明条件和观察条件来选取;
  • 实现了渐进性(progressive):整个计算分成多个阶段反复进行——反向光线追迹与正向照明计算同时进行、形成可见性图、光线追迹、在场景可见性点处计算二次与焦散照明——各阶段重复多次,最终照明是所有计算阶段结果的平均;
  • 与前向光子图相比,反向光子图的一个重要优势是可以在生成可见性图的过程中确定积分球的最优半径,这能显著加快二次和焦散照明的亮度计算。

光子图方法用于杂散光分析的初步形式,曾在一届 SPIE 会议上报告过(文献 27)。

有一点需要澄清:基于光子图的方法是有偏(biased)的。但只要正确选择积分球半径和二次照明收集点(把积分点移到更大的表面上、选择 BRDF 更平滑、且远离明亮光源的积分点),就能把方法的有偏误差降到最低。

最后,渐进反向光子图的效率还可以借助并行与分布式计算大幅提升。文献 28 提出的多级并行计算系统可以有效利用局域网内所有多处理器工作站资源——这对计算和分析散射辐射对像面杂散照度的影响极为重要。

3 光线路径的选择与可视化

3.1 问题背景:少追光线,但结果要对

光学设备防杂散辐射的设计任务极其复杂,因此求解时会采用一些能在保持计算结果物理正确的前提下减少追迹光线数量的思路。计算图像中杂散辐射最可靠、最简单的方法之一是随机单向光线追迹。本研究采用从光源到辐射接收器的正向随机光线追迹,它在光源空间尺寸或角度尺寸较小时,对分析直接眩光和鬼像最为有效。

对于漫散射杂散光的分析,则采用光线传播准则方法(即第 2.3 节提到的路径筛选思想的软件化实现):设计一套专门的准则,从海量光线中挑出”具有某些性质、正是当前分析对象”的光线。

3.2 光线传播准则是什么

光线传播准则本质上是一个软件对象,它能够分析光线在光学系统中的传播历史,并判定该光线是否满足指定条件。满足条件的光线路径会被相应标记,必要时保存其轨迹。

筛选条件由光线传播过程中发生的若干基本事件(elementary events)组合而成:

  • 光线从指定光源出发;
  • 光线到达指定辐射接收器;
  • 光线命中光学系统的指定表面;
  • 光线在光学系统表面发生指定类型的变换(如漫散射、镜面反射、折射、按指定 BRDF 的反射等),且发生次数可以固定——例如规定”两次镜面反射”就能筛出透镜系统中的二阶鬼像;
  • 光线在介质或表面上经历特殊事件(如因与设备元件的错误相互作用而被吸收、在光学材料内发生体散射等)。

这些基本事件可以用逻辑运算组合起来:与(AND)、或(OR),以及一元否定算符非(NOT)。例如把”从杂散辐射源出发 AND 命中镜头入射窗 AND 命中像面接收器”三个事件用 AND 连接,就构成一个完整的筛选准则;满足该准则的光线路径被挑选出来做可视化,设计者看到的就是真正造成杂散光的那一小撮光线。

光线传播准则可视化示例

图 1 满足”从杂散辐射源发出 AND 命中镜头入射窗 AND 命中图像接收器”准则的光线路径可视化示例

3.3 不止逻辑运算:还要考虑事件顺序

基本事件不仅能用纯逻辑运算组合,还能按时间先后顺序组合:要使准则成立,某个(组)事件必须先于另一个(组)事件发生。这样就能”规定光线依次经过光学设备的若干个表面”,从而针对特定路径上的散射效应建立分析条件。

一个典型例子是分析第一透镜各表面之间产生的鬼像(图 2):可以要求光线先完成第一组事件——从杂散光源出发 AND 命中光学系统入射窗 AND 命中零件一的第一表面(这三个事件的先后顺序任意)——然后必须再执行第二组事件——命中透镜一的第一表面 AND 命中像面。这一事件序列正好对应”光在第一透镜上形成鬼像”的物理过程。两次事件顺序执行成功后,该光线被选中并可视化。

3.4 准则的实现:事件树

为了高效地把光线传播准则与光线的传播历史匹配起来,准则被实现为一棵

  • 叶子节点是追迹过程中可能发生在光线上的基本事件(与传播历史中的事件同构,这让准则与历史的比对非常自然);
  • 中间节点是逻辑运算,定义基本事件之间的逻辑关系。

上述”第一透镜鬼像”准则对应的准则树如图 3 所示:树中形成了两条时间序列,第一条是”源 → 入射窗 → 零件一第一表面”的与组合,第二条是”命中透镜一第一表面 AND 命中像面”。整棵树按顺序求值,决定一条光线是否入选。

从工程角度看,这套”事件树准则”机制的意义在于:它把光学设计者头脑中的杂散光假设(“我怀疑是某两个表面之间的反射鬼像”)翻译成计算机可执行、可自动筛选的形式,让正向追迹这件原本”漫无目的”的工作变成有针对性的侦探工具。

光照分布计算:从”看见光路”到”量出照度”

为什么光路可视化还不够

前面介绍的多判据光路可视化,解决的是”杂散光从哪来、走哪条路”的问题。但做杂散光防护设计时,工程师最终关心的其实是两个更”硬”的问题:杂散光在探测器上是怎么分布的,以及它的绝对数值有多大。一张光路图回答不了这两个问题——光线的疏密只是定性印象,不代表照度的真实分布。

直接的做法是用蒙特卡洛方法做随机光线追迹来计算照度分布:向系统里发射大量随机光线,统计它们落在探测器上的能量。如果在照度计算中也套用光线筛选判据,得到的结果就只包含”被选中的光线”贡献的照度。这样做物理上完全正确,能准确评估某个特定事件对杂散光水平和分布的影响。

但这种方法效率很低。原因很简单:防护设计良好的光学系统,杂散辐射的透过率可以低到 甚至 量级。这意味着绝大部分发射的光线对杂散光毫无贡献,白白浪费了计算量。如果要逐个分析多个散射光源的影响,每种来源都要单独跑一遍筛选判据下的追迹,时间开销会非常可观。

多判据接收器:一次计算覆盖所有散射光源

为了解决这个问题,论文提出了一种巧妙的做法:在光学系统里同时设置一组完全相同的辐射接收器——它们的所有属性都一样,唯一的区别是每个接收器绑定自己的光线追迹判据

计算过程中,每一条打到接收器上的光线都会被检查:它是否符合该接收器所绑定的光路判据?只有满足判据的光线才会被这个接收器记录下来。这样,一次计算就能同时在各个接收器上”分门别类”地收集所有待研究散射光源的结果。

光路可视化示例:满足"两段式判据"的光线。第一段判据是杂散光源发光 AND 打到镜头入窗 AND 打到第一个透镜表面;第二段判据是再次打到第一个透镜表面 AND 打到像接收器

图 1 满足两段式判据的光路可视化示例:第一段判据为”光源出射 AND 打到镜头入窗 AND 打到第一透镜表面”,第二段判据为”再次打到第一透镜表面 AND 打到像接收器”

多个判据可以组合成判据树,逻辑上就是”与”(AND)关系的层层嵌套:

光线追迹判据树的构建示例

图 2 光线追迹判据树的构建示例

这种”多接收器并行”的方式效果如何?论文用一个双透镜系统做了演示:一次计算同时得到三幅结果——左侧是主像,右侧是光阑表面散射造成的杂散光照度,中间则是两者的叠加。

一次计算同时得到三种判据下的像面照度:从左到右依次为主像、主像与光阑散射杂散光的叠加、仅光阑散射造成的杂散光

图 3 三种判据下像面照度的一次性计算结果:从左到右为主像、主像与光阑散射杂散光之和、仅光阑散射杂散光

这组仿真的参数设置是:透镜表面未镀增透膜,反射率由菲涅耳公式决定;结构件的光学属性为反射率 10%、半宽 5 deg 的高斯散射分布。

这么做的代价几乎可以忽略

给每个接收器单独判别光线,听起来会增加很多计算量,实际上几乎不拖慢速度。实测数据是:10 个判据作用于 10 个探测器,总的速度损失只有约 10%。换算过来,相当于对复杂光学设备的散射光分析提速 10 倍以上(判据越多,加速越明显)。

后向光子图方法:散射光分析的第二级火箭

单向光线追迹的天花板

单向光线追迹(不管是可视化还是算照度)有一个共同的局限:

  • 用多判据去可视化和计算虽然可行,但很费事——你需要预先列出所有关心的光路判据;
  • 判据里没写到的散射光源,根本不会进入计算,自然也不可能被分析到。

换句话说,单向方法只能回答”我猜到的原因贡献了多少杂散光”,而无法自动发现”我没想到的原因”。要做全面、自动化的杂散光来源分析,就需要双向光线追迹。而经典的无偏双向随机追迹在计算焦散照度时效率不高,所以最适合杂散光分析的是基于光子图(photon maps)的方法

光子映射方法怎么用于杂散光分析

前向光子图:从光源出发的”光子雨”

经典的前向光子图方法是这样工作的:光源向前发射光子(图 4 中红色光线),这些光子落在场景中的漫反射物体上——也就是光学零件和结构件上,形成光子分布。在每个散射点周围放一个积分球(图 4 中红色球体),球心就在前向光线的散射点上。这些球内的光子共同构成了结构件上的焦散照度和二次照度分布。

接下来从接收器一侧观察整个系统(图 4 中从接收器发出的后向光线为蓝色):当后向光线进入某个积分球时,就读取该球内的光子照度,把它换算成接收器”看到”的亮度(被后向光线命中的积分球以红色粗轮廓标出),再在镜头出瞳上逐点积分,最终换算成接收器表面的照度(赋给发射该后向光线的像点)。

前向光子图方法做杂散光分析的示意图

图 4 用前向光子图方法进行杂散光分析:红色为光源发射的前向光线与积分球,蓝色为接收器发射的后向光线

由于准确评估杂散光水平需要数量极其庞大的光子,实际采用的是渐进式(progressive)光子图:光子生成和照度收集这两个阶段周期性地反复进行,每轮都把累积结果保存在探测器上,光子图也在每个阶段不断更新。形象地说,就是”先快速给出一个粗略结果,再一轮轮打磨得越来越准”。

前向光子图有三个明显缺点:

  1. 积分球半径难选。因为接收器看到该光子的立体角是未知的,半径只能根据散射点所在物体的几何特征来定,缺乏物理依据。
  2. 积分球数量过剩。并不是所有光子都会被探测器”看见”,大量积分球白白生成、白白存储。
  3. 追迹深度可能很深。光在镜身内部经过多次漫反射,前向光子的追迹深度会非常大,计算量随之膨胀。

后向光子图:把方向反过来

针对这些问题,论文提出使用渐进式后向光子映射方法。它几乎是前向方法的”镜像”:

从辐射接收器发射后向光线(图 5 中蓝色),在光学设备中传播,在散射表面上落点处生成场景可见性图——本质上就是一组积分球(图 5 中蓝色标出的球),球心位于后向光线与散射表面的交点。后向光线的追迹深度可以从 0(仅第一次漫散射事件)一直到无穷大,完全可控。

然后从光源发射前向光线进行追迹,其中一部分会穿过这些积分球(图 5 中以蓝色粗轮廓标出的球)。对被穿过的球,就计算对应像点(即发射该后向光线的点)处的照度。采用渐进式计算时,可见性图和光路在每一阶段都会更新。

后向光子图方法做杂散光分析的示意图

图 5 用后向光子图方法进行杂散光分析:蓝色为接收器发射的后向光线及其积分球,粗轮廓球表示被前向光线穿过的积分球

后向方法正好逐条化解了前向方法的三个缺点:

前向光子图的缺点后向光子图的对策
积分球半径只能按物体几何来定半径可以按接收器看到收集点的立体角来选取,物理意义明确
积分球大量过剩只生成”能对接收器照度有贡献”的光子
前向追迹深度因多次漫反射而很深后向深度可按漫反射次数设上限,大幅压缩光子图规模、加快计算

照度是怎么一步步算出来的

具体计算像面照度时,按一系列步骤进行。

第一步:计算积分球内、半径为 的范围内,光线对球内表面的局部照度:

其中 是第 条沿 方向传播、光谱通量为 (按波长 分布)的光线产生的表面局部照度。

第二步:把局部照度换算成像点的局部亮度。该像点沿指向镜头出瞳的方向发光,亮度为:

其中 是双向散射分布函数(BSDF),写成亮度系数的形式:表面在 方向被照亮、在 方向被观察、光谱成分为 时的亮度系数。

第三步:把局部亮度换算回像点的局部照度。对轴对称系统,采用如下归一化:

其中 是后向光线 在像点 处产生的局部照度, 是出瞳面积, 是沿光轴从像面到出瞳的距离, 是光轴方向, 是出瞳上的点(向量 构成光线的初始方向)。

第四步:在计算的每一个阶段内(从像面发射一批光线 → 生成后向光子图 → 发射一批前向光线 → 计算局部亮度和照度),把像点 的照度值 做平均:

其中 是所有光源发出的总光通量, 是前向光线与积分球”成功”相交(即得到非零照度值)的次数, 是发射的前向光线总数, 是从像点 发出的后向光线总数。

这里有两个重要细节。第一,每个像元可以发射各自不同数量的光线,数量取决于该区域局部的计算误差等因素。第二,从光源发射光线时做了重要性采样,使得所有光源发出的局部光通量 都等于 1。这样做的好处是避免计算过程中局部照度值出现剧烈跳变。

最后:因为用的是渐进式光子图,最终结果要对全部 个阶段取平均:

两个实算案例:长焦镜头与变焦镜头

用渐进式后向光子图方法,论文对多款摄影镜头做了计算。这里给出两个代表性结果:一款长焦镜头和一款变焦镜头。

案例一:长焦六片式镜头

第一个案例是一款焦距 457 mm、相对孔径 f∕1.8、矩形视场 3.5 deg 的长焦六片式光学系统(见图 6)。视场外的杂散光源——太阳——以 deg 的入射角照亮镜头入瞳。

由于本研究只考察光在漫射表面的散射,所有光学表面都按理想增透膜处理(反射率为零)。也就是说,杂散光照度只能通过两条路径到达探测器:在镜筒端面和结构件上的漫散射,或在光学表面上的二次反射。

长焦六片式镜头结构图

图 6 长焦六片式镜头结构图

对镜筒和镜座的表面特性分别做了两组仿真:

长焦镜头杂散光照度分布,镜座为朗伯散射的情形

图 7(a) 长焦六片式镜头的杂散光照度分布——镜座为朗伯(Lambertian)散射

长焦镜头杂散光照度分布,镜座为高斯散射的情形

图 7(b) 长焦六片式镜头的杂散光照度分布——镜座为高斯散射

两组设置的差别只在结构件的散射模型:

仿真组镜座与镜筒表面特性说明
(a)10% 朗伯反射反射率指总积分散射 TIS = 总散射功率∕入射功率
(b)5% 高斯反射,半宽 5 deg高斯分布围绕镜面反射方向展开

两组的计算时间均为 1 小时,且都在 CPU 上以并行模式完成。所有计算采用双精度浮点数,因此单精度的 GPU 没有派上用场。硬件平台是一台配备双路 AMD EPYC 7281 16 核处理器(2.10 GHz、开启超线程)的工作站,内存 256 GB,计算使用了 64 个并行线程。

结果很有启发:杂散光照度水平不仅取决于散射表面的光学特性,差异还体现在分布形态上。用高斯函数描述的”准镜面”表面,其杂散光照度平均比接近朗伯定律的材料低约两个数量级。这直接解释了为什么把镜筒内壁处理成准镜面(或加挡光板改变散射方向)往往比单纯降低反射率更有效。

案例二:大孔径变焦镜头

第二个案例是一款大孔径变焦镜头(f∕1.5),焦距范围 14–146 mm,视场 30 deg 到 3 deg。其短焦端结构如图 8 所示。

大孔径变焦镜头结构图(短焦端构型)

图 8 大孔径变焦镜头结构图(短焦端构型)

同样做了两组仿真,结构件属性分别为:朗伯表面(TIS = 10%),以及高斯函数表面(TIS = 5%、半高全宽 5 deg)。视场外寄生辐射源在像面上产生的照度分布见图 9。两组计算时间均为 1 小时,硬件与前一个案例相同:双路 AMD EPYC 7281 16 核处理器(2.10 GHz、超线程模式)、256 GB 内存、64 个并行线程。

变焦镜头杂散光照度分布,镜座为朗伯散射的情形

图 9(a) 变焦镜头的杂散光照度分布——镜座为朗伯散射

变焦镜头杂散光照度分布,镜座为高斯散射的情形

图 9(b) 变焦镜头的杂散光照度分布——镜座为高斯散射

现象与长焦镜头一致:镜筒为朗伯特性时,杂散光照度在像面上分布相当均匀;换成准镜面(高斯)特性的结构件后,杂散光分布变得更集中、更有结构性,但整体水平远低于朗伯材料情形。两个案例相互印证了同一个结论——散射模型的选择对杂散光评估结果影响巨大。

杂散辐射源在像面上的可视化:把”元凶”标出来

算得出照度,却找不到元凶

直接仿真杂散光照度只能告诉你”有多亮”,却说不清”是谁造成的”。用光子图做双向追迹时,可以保留每条光线在设备中的传播痕迹:如果把痕迹关联到某个局部区域(比如光线打到的几何图元),就能把光线携带的光通量换算成该表面的局部照度,追踪大量光线后累积并可视化。这样一来,设备漫射表面上的杂散光照度分布是能看出来的。

但这个方案有两个盲区:一是它显示的是所有表面的照度,无法区分哪些表面上的杂散光真正影响到了像面;二是即便某处杂散光确实影响了像面,它贡献多大比例也完全不清楚。更合理的物理量本应是”漫射元件朝向接收器方向的亮度”,可亮度计算在技术上非常困难——因为表面被照亮时,从接收器一侧观察它的条件通常是未知的。

换个思路:把像面照度”记账记回”到元凶表面

论文的解法是:把接收器上的杂散光照度,累积记录到产生它的设备元件上。最合适工具正是带渐进式后向光子图的双向随机追迹:

  1. 第一阶段做后向光线追迹,生成”场景可见性图”——它记录了从接收器一侧观察设备的条件;
  2. 下一阶段从光源做前向光线追迹,生成设备表面的”照度图”,并只在与可见性图重叠的区域记录。

因为重叠区域同时保留了”照明条件”和”观察条件”两个信息,把前向光线携带的光通量换算成接收器可见的亮度就是物理正确的。接着再把视亮度换算成接收器元的局部照度。杂散光计算需要追迹数十亿条光线,所以观察图和照度图在计算过程中不断更新,最终形成一个静态图,长期保存各光学元件对杂散光水平影响的信息,如图 10 所示。

在光学设备物体上生成像面杂散光照度静态图的方法示意

图 10 在光学设备元件上生成像面杂散光照度静态分布图的方法示意

静态图本质上是一个规则网格,网格节点上累积照度值。当一条光线进入观察图里存储的光线积分球时,它的光通量被换算成像面局部照度,并累积到由该观察光线坐标确定的网格节点上。为了存储更紧凑,网格单元存放在哈希表里——这可以完全跳过那些照度为零的空单元,而空单元占网格总体积的比例超过 90%。计算结束后,网格中的累积结果再归一化成物理量(按追迹光线数、光源光通量和光学系统参数归一)。由于网格中累积的量是照度,其数值与观察方向无关,因此可以从任意方便的视角进行可视化和杂散光源排查。

归一化公式与式 (1)–(5) 类似,但有两点关键差别:

  1. 结果不仅累积在像元的格子中,也累积在规则网格的格子中;
  2. 每个像元在单个阶段内发射的光线数必须是常数——因为网格单元累积的是整个像元区域所有像点的平均值,无法按各像元各自的发射光线数做单独归一化。

于是式 (4) 和式 (5) 相应地变形为:

其中 是像元, 是每个像元发出的后向光线数。同理,式 (5) 变为:

可视化效果与一个排查实例

可视化用的是标准计算机图形学工具:先用 OpenGL 渲染光学设备,再把规则网格节点中存储的杂散光照度分布投影到这个画面上。照度为零的网格单元视为透明,非零的视为不透明。图 11 展示了图 6 所示长焦设备的杂散光源及其对探测器照度的影响——区域越亮,对探测器杂散光水平的贡献越大。

光学设备元件上杂散光照度来源的可视化

图 11 光学设备元件上杂散光照度来源的可视化(绿色越亮的区域贡献越大)

图中杂散光用绿色色阶表示(在软件界面里也可以自选颜色),这里选绿色是为了与灰色的设备零件形成更好的对比度。颜色的明暗与照度量呈线性关系:照度越高,绿色越亮。借助色阶标尺可以估计镜头各零件的杂散光对接收器造成的相对照度分布。生成色图时,软件用一个专门算法自动确定用于可视化的最小和最大照度最优值,当然也允许手动设定。需要说明的是,这个量是场景单元贡献、并在覆盖该单元的某个空间格子中累积的像面平均照度,不做格子尺寸归一化——因为所有场景格子尺寸相同,在评估场景单元对杂散光量的影响时,尺寸归一化没有实际意义。

为了方便分析,设备可以相对观察者任意转动视角——同一份计算结果从不同角度看,就能全面排查各处元件的贡献。

最后看一个简单的排查实例:对图 1 所示的带框双胶合透镜,用该方法自动确定了光阑(孔径光阑)是杂散光照度的主要来源,并可直接可视化呈现(见原文图 14)。用判据做光路可视化当然也能找到杂散光源,但那需要人工设计专门的判据;而本方法在自动模式下即可完成排查,不需要预先构造任何搜索判据——这正是它与前述可视化方法相比最大的实用优势。

6 像面杂散辐射源的可视化

前几节我们讲了如何用光线筛选准则和统计方法”算出”杂散光有多少,这一节解决一个更直观的问题:怎么”看见”杂散光到底来自哪里。数字只能告诉你总量超标与否,而可视化能直接指出”罪魁祸首”是哪个元件、哪条路径——这对设计防护结构(挡光板、杂散光光阑、镀膜选择)来说,比一个总照度数字有用得多。

图 13:从不同观察角度查看光学设备各元件上杂散光照射源的分布情况

图 13 展示的是杂散光源在光学设备各元件表面的分布,并且可以从不同角度观察。这一点很实用:杂散光源可能”藏”在镜筒内部的某个元件上,从正视图根本看不到,换个角度旋转模型才能发现它到底落在透镜边缘还是镜筒内壁上。

图 14:双胶合透镜(doublet)中杂散光源的可视化

图 14 则把视角深入到一块双胶合透镜内部。双胶合透镜由两片折射率不同的玻璃用光学胶粘在一起,胶合面和玻璃内部往往是容易被忽视的杂散光”通道”——光线在胶合面上经多次反射、折射后可能形成鬼像。能可视化到元件内部的杂散光源,意味着设计者可以精确定位问题发生在哪一层界面上,而不是笼统地知道”这块透镜有问题”。

6.1 用”关掉反射”来验证诊断结果

找到杂散光源之后,怎么确认这个诊断是对的?论文用了一个很朴素但有效的思路,类似医学上的”对照实验”:

  • 对照实验逻辑:如果我们怀疑杂散光来自透镜表面和光阑的反射,那就把计算模型里这些表面的反射率改成零(其他光学属性一律不动),再算一次像面照度。如果杂散光显著消失,就证明原来的判断成立。
  • 结果:图 15 给出了对比,左图是原始参数下的像面杂散照度分布,右图是透镜和孔径光阑反射率置零后的结果。

图 15(左):原始光学设备参数下的像面杂散照度分布

图 15(右):透镜与孔径光阑反射率置零后的像面杂散照度分布

两图对比可以看到杂散照度明显下降,这就验证了此前找到的杂散光来源确实是主因。对初学者来说,这个”置零对照”的方法本身也值得记住:在仿真里验证因果关系的最简单办法,就是把可疑因素关掉再算一遍。

6.2 方法的局限与两种补救手段

这个自动化的杂散光源定位方法有一个天然局限:它评估的是整幅像面上平均后的照度,也就是说,它能告诉你杂散光对总体像质的影响水平,却无法回答”光学设备上某个具体元件,对像面上某个局部位置的照度贡献有多大”这种更细的问题。比如鬼像只污染画面一角,平均值可能看起来没什么大问题,但局部其实已经不可接受了。

论文给出了两种补救手段:

  1. 先整体、后局部:先做一次全像面的杂散照度分布计算,从分布图上选出感兴趣的局部区域,再针对这些局部区域单独做精细计算。
  2. 升维建网格:在光学设备空间里建立杂散照度分布的四维网格——在原有三维空间维度之外,再增加两个对应像面坐标的维度。这样每个”元件上的位置 + 像面上的位置”组合都有对应数据,可以直接查询任意元件区域对任意像面区域的贡献。

第二种方法数据量和计算量更大,但信息最完整;第一种更省事,适合已经大致知道问题在哪的情况。

7 结论

把整篇论文的方法串起来看,作者贡献了一套”计算 + 筛选 + 可视化”的杂散光防护设计工作流,核心要点可以归纳为四条:

  • 可视化定位杂散光源:利用光线筛选准则和配套的可视化手段,能在像面接收器上分析出可能的杂散光源,并据此找到消除它们的手段(挡板、光阑、改镀膜等)。
  • 一次计算分析多种工况:通过对接收器的多重赋值——每个接收器带各自独立的光线路径筛选准则——可以在同一次计算中同时分析几种不同的杂散光形成条件,不必为每种工况重跑一遍仿真。
  • 双向随机光线追踪 + 渐进光子映射提速:这套组合能显著加快由焦散、结构件二次散射、光学元件缺陷引起的杂散光计算。传统纯路径追踪方法在处理焦散这类光路时收敛极慢,而光子映射正好擅长这类问题。
  • 物理正确的评估:基于渐进光子映射的方法不仅能加速计算,还能对杂散光的影响给出物理上正确的定量评估,并把结果叠加在光学设备三维模型背景上直接可视化。

作者也指出了后续方向:研究如何评估像面杂散照度分布与光学设备元件上选定区域所产生照度分布之间的对应关系——也就是把第 6.2 节提到的”元件局部 ↔ 像面局部”的问题做系统化。

这项工作由俄罗斯科学基金会资助(基金编号 22-11-00145)。

参考文献(主题速览)

  • 真实感渲染的理论基石:渲染方程(Kajiya 1986)、Cook-Torrance 反射模型、《Computer Graphics: Principles and Practice》教材,以及 Veach 关于蒙特卡洛光传输的博士论文——这些是全文能量计算与光线追踪框架的数学和物理出发点。
  • 双向路径追踪与 Metropolis 类方法:从早期双向光线追踪(Chattopadhyay & Fujimoto 1987、Lafortune 1993)到 Metropolis 光传输及其各种改进(Kelemen、Kaplanyan、Bitterli、Gruson 等),代表了加速光传输收敛的另一条技术路线。
  • 光子映射方法体系:Jensen 提出的光子映射及其工程化技巧(渐进光子映射、辐照度梯度、重要性驱动光子图构建)、Zhdanov 的反向光子映射,以及 Georgiev 的顶点连接与合并(VCM)——这是论文”双向随机光线追踪 + 渐进光子映射”核心算法的直接来源。
  • 杂散光分析与光学系统虚拟原型:Fest 的 SPIE 杂散光专著,以及 Zhdanov 团队和 Kinev 等人在 SPIE 会议论文中把计算机图形学方法用于光学设计杂散光分析和复杂光学系统虚拟原型的工作。
  • 光照建模的工程实现:Barladyan 等基于互联网技术的光照建模与真实感图像生成、Frolov 等对真实感渲染中光传输仿真方法现状的综述。