篇目 69 · 单篇论文精读

一千盏灯里该采哪一盏:交给一个只答到「簇」的小网络,而它开局就等于别人的答案

这一篇要回答的问题是「一千盏灯里,这一根光线该采哪一盏」。前人给过两条路,各自缺一块:光层次树那一族能把簇概率算得很细,但算重要性时不看可见性,于是会反复去采被遮挡的灯;在线的学习类方法把可见性吃了进去,代价是对一小片空间只优化一份分布,抓不住子区域内部的差异(而相邻两点的主导灯本来就可以不是同一盏)。本篇换的是「这个决定怎么产生」:让一个 3 层 × 64 神经元的小网络按着色点的局部信息逐点输出簇上的概率,损失取与目标分布的 KL 散度,而目标分布就是各盏灯在总量里占的那一份。为了不被上千盏灯撑爆,网络只答到「簇」这一层,簇内部那一盏仍旧交给既有的树;而为了让在线训练从第一帧就能用,它学的是在既有方法算好的簇概率之上的修正量(对数域相加 + 归一化,网络随机初始化时输出近似零)。账面:等时间与等样本两栏里,八个场景的 FLIP 全部最低(相对最好的基线分别降 16.5%–53.6% 与 16.5%–48.0%);等时间栏里它在六个场景上采到的样本数还比最快的树方法少;训练预算只占样本的 15%。代价照写:激进优化会带来离群飞点(换保守档可以少出,代价是收敛变慢);割是全局固定的;簇内采样与灯内采点都不归它管,基线错了它纠不回来。

Pedro Figueiredo(Texas A&M University, USA)、Qihao He(Texas A&M University, USA)、Steve Bako(Aurora Innovation, USA)、Nima Khademi Kalantari(Texas A&M University, USA) SIGGRAPH Conference Papers ’25(Vancouver, BC, Canada,2025-08-10–14)· ACM · DOI 10.1145/3721238.3730754 arXiv:2505.11729v1 [cs.GR] · 2025-05-16 · 11 页 · 双栏 · 文字层 51,147 字符 原文编号式 (1)–(12) 连续编号共 12 条(其中 (10) 与式子同行)· 原文图 11 张(Fig. 1–11,不跳号)· 原文表 3 张 · 无算法伪码块 · 许可:非 CC(PDF 首页权利块明写 Not for redistribution),不托管原文 PDF
14 章一级章节(按拆解点切)
12 式原文 (1)–(12) 全落块
14 图元原文 11 图 + 3 表(自绘 0)
4 条边界与反例(飞点、固定割、灯内采点、复杂灯具)
图元-段配对表 11 图 + 3 表 = 14 件图元 · 全部 E 类原样引用 · 自绘 0
图元角色档归属支撑的论断讲解层次状态
图 1-1E第 1 章teaser:三盏亮度递增的灯,只看亮度会采到被 BRDF 排除的那盏,加上 BRDF 又会采到被遮挡的那盏①②图注 +③④正文原样引用 · 未修改
图 2-1E第 6 章官方总览:残差式预测簇分布(左)→ 两阶段抽样(中)→ 光源内采点与训练回路(右)①②图注 +③④正文原样引用 · 未修改
图 3-1E第 6 章树不平衡 ⇒ 第 k 层取到 7 个簇节点;p(y|c) 是路径概率之积;灰节点只用于定簇①②图注 +③④正文原样引用 · 未修改
图 4-1E第 9 章等时间对照墙:5 场景 × 6 列,格内印 FLIP 与 spp①②图注 +③④正文原样引用 · 未修改
图 5-1E第 10 章等样本对照墙:同一 5 场景 × 6 列,全部 128 spp,格内印 FLIP 与秒数①②图注 +③④正文原样引用 · 未修改
图 6-1E第 10 章等时间收敛曲线(8 场景),第二条竖线 = 训练结束处①②图注 +③④正文原样引用 · 未修改
图 7-1E第 10 章等样本收敛曲线(8→128 spp),第二条竖线同义①②图注 +③④正文原样引用 · 未修改
图 8-1E第 11 章残差学习消融:Direct 对三条基线,含 FLIP 与秒数①②图注 +③④正文原样引用 · 未修改
图 9-1E第 11 章输入位置编码消融:identity/frequency/one-blob/dense grid①②图注 +③④正文原样引用 · 未修改
图 10-1E第 11 章训练预算比消融(等时间 Living Room,5 秒预算),选定 15%①②图注 +③④正文原样引用 · 未修改
图 11-1E第 11 章学习率消融:3×10⁻² 对 3×10⁻³,噪声与飞点的取舍①②图注 +③④正文原样引用 · 未修改
表 1-1E第 9 章等时间 FLIP + spp:8 场景 × 5 方法①②图注 +③复算 +④边界原样引用 · 未修改
表 2-1E第 10 章等样本(128 spp) FLIP + 运行秒数:8 场景 × 5 方法①②图注 +③复算 +④边界原样引用 · 未修改
表 3-1E第 11 章左:连续表示对离散版;右:簇层级 k = 4/6/8①②图注 +③复算 +④边界原样引用 · 未修改
角色档:本篇 14 件图元(11 图 + 3 表)全部登记为 E 类(证据图),它们承载可核对的读数或不可复现的原始输出(三张定量表:等时间对照、等样本对照、连续表示与簇层级分析;两张对照墙:等时间与等样本各一张,每张 5 场景 × 5 方法 + 参考列;两张曲线组:等时间与等样本收敛曲线各含八个场景;四张消融图:残差、位置编码、训练预算比、学习率;一张 teaser(三盏灯的取舍)、两张机制示意:总览三格与光层次树)。按分区裁决 E 类禁止自绘,故一律引用原图,自绘 0 张,S 类配额未动用。
式:原文编号式 (1)–(12),共 12 条,本篇全落块且有出处;落块位置按原文页码走 —— 第 3 章 (1)–(4)(逐灯求和、被积项三因子、求和写期望、MC 估计量)、第 4 章 (5)–(10)(KL 损失、对 θ 求导、写成对 pθ 的期望、期望的 MC 估计、目标分布 q、最终梯度估计)、第 7 章 (11)(分簇版梯度)、第 8 章 (12)(残差的对数域混合)。本篇没有未编号式;其中 (10) 的编号与式子同行(原文 p2 右栏),草稿里按整行写成一处。
没有算法轨:原文不含任何 ALGORITHM N: 形式的伪码块(与篇目 68 的 3 块、篇目 66 的位图伪码都不同型),故本篇不派生 algs/ 轨。
许可:非 CC —— 按本站现行口径以所据 PDF 内的权利块为准;本篇的 PDF p0 底部直接印着权利块,明写 © 2025 Copyright held by the owner/author(s). 与 This is the author’s version of the work. It is posted here for your personal use. Not for redistribution.,而 ACM Reference Format 指明出处为 SIGGRAPH Conference Papers ’25(正式会议论文)。两处证据同向 ⇒ 判定最干净(与篇目 61 同型,是该型的第二例)。落点两件(index.html + thumb.webp,不含托管的 paper.pdf),卡片 chip 带 warn;图件仍原样零加工引用 + 逐图署名(四字段:图号/页码/版权/未修改,版权栏写 © 2025 Copyright held by the owner/author(s) · Not for redistribution)。
三处必须自己核的排印事实:① 原文有一处文字层空洞 —— p2 右栏最后一行是 … normalized outgoing ray direction ωo,p3 左栏第一行是 so we can model the product of radiance and BSDF.,两行之间在文字层上没有任何字形(逐字形追踪 0 命中)、也没有任何图形对象;本页因此只写可确证的三条输入编码,不替原文补那个从句(第 5 章 §5.3);② 式 (12) 的分母有一处哑标笔误:分母指数里写作 [c],与求和的哑标 s 不一致,按上下文应为 [s];本页照录并标注,不替原文改字(第 8 章 §8.4);③ 图号 1–11 连续、不跳号,但首扫曾漏掉 Fig. 3(该注文被 PDF 切成「Fig.」+「3. Given」两个碎片行,x 间隙 7.2 pt),按「同基线 + x 间隙 ≤13」并行后复扫补齐。
另需记的:2 件走限高容器(图 4-1 与图 5-1,纵横比均 0.888 = 1400×1576,两张 5 场景 × 6 列的对照墙),其余 12 件为横幅;所有图件的裁切都保证框内只含图内标签、不含正文或图注。原文没有把任何图元漏引(Fig. 与 Table 的引用逐件都能对上)。
原文摘要 Abstract, p.0(英文原样引用 · 原文未分小节 · 原文另印 CCS Concepts: Rendering)

We propose a neural approach for estimating spatially varying light selection distributions to improve importance sampling in Monte Carlo rendering, particularly for complex scenes with many light sources. Our method uses a neural network to predict the light selection distribution at each shading point based on local information, trained by minimizing the KL-divergence between the learned and target distributions in an online manner. To efficiently manage hundreds or thousands of lights, we integrate our neural approach with light hierarchy techniques, where the network predicts cluster-level distributions and existing methods sample lights within clusters. Additionally, we introduce a residual learning strategy that leverages initial distributions from existing techniques, accelerating convergence during training. Our method achieves superior performance across diverse and challenging scenes.

这一篇要讲清的 14 件事
  • 一盏灯值不值得采,要同时看亮度、BRDF 和遮挡。
  • 前人两条路:光层次树挑簇,和「给一片区域学一个分布」。
  • 把「挑哪盏灯」写成一个期望,再写成一个估计量。
  • 损失取 KL 散度,以及为什么可以扔掉一个算不出来的因子。
  • 网络只有三层,但要给三种输入各配一条编码。
  • 灯太多就分簇:先选簇,再沿树下钻。
  • 分簇版的目标函数:只剩一个 log p_θ(c)。
  • 残差学习:不从零学,从别人算好的簇概率接着改。
  • 实验怎么摆,以及等时间对照:样本更少,误差反而更低。
  • 等样本对照与收敛曲线:训练只花 15%,却全程第一。
  • 消融六项:残差、编码、预算、学习率、连续表示、簇层级。
  • 边界与反例:飞点、固定割、光源内部、复杂灯具。
  • 这篇论文的两条贡献。
  • 出处、许可与怎么读这篇。

1一个像素上有一千盏灯,真正算数的只有三盏

这一章把话说清楚:这篇论文要解决什么、它的改法把哪一步换掉了、换掉之后拿到了什么。它没有改渲染的物理,也没有改蒙特卡洛的数学,它换的是「这根光线去采哪一盏灯」这个决定的产生方式:从「查一棵树的规则概率」换成「一个小神经网络按当前着色点的局部信息现算」,而为了不被上千盏灯撑爆,网络只管到簇这一层。

1.1 一个看得见的场景:三盏灯,两个相邻的点

先给镜头。想象一个室内场景,里面有三盏灯,亮度依次递增,编号 0、1、2。你在画面上盯住一个着色点 x1,问一句:这一点的直接光照,应该拿采样预算去砸哪一盏灯[Fig. 1 图注, p1]。

答案取决于三件事,而每一件单独看都会给出错的答案。只按亮度挑,会挑到最亮的 2 号灯,可这一点对 2 号灯来说处在 BRDF 的方向约束之外,它照过来的光根本进不了这个出射方向;把 BRDF 也算上,视线会转到 1 号灯上,可 1 号灯被一个遮挡物挡住了;把可见性也加进来,才轮到 0 号灯,它最暗,却是唯一真正对这个像素有贡献的那盏[Fig. 1 图注, p1]。

同一个例子里还藏着第二层。紧挨着 x1 的 x2,主导灯又换回了 2 号。也就是说,连"这一点最该采哪盏灯"都不是一个能按区域共享的量,相邻两个点的答案就可以完全不同[Fig. 1 图注, p1]。

图 1-1:三盏灯与两个相邻的点:为什么
图 1-1 三盏灯与两个相邻的点:为什么"采哪盏灯"不能按区域共享(E 类 · 证据)· 原文 Fig. 1, p1 怎么读 ①图注:原文说,准确的采灯要同时考虑灯强度、BRDF 与可见性三样,而在每个着色点上贡献最大的那盏灯,图里用红色箭头标出。然后它逐条给出三个反例:只按亮度采,会在 x1 上反复采 2 号灯,尽管因为 BRDF 的方向约束它并不贡献;前人的"亮度 + BRDF"类方法(ATS、SLCRT 那一族)会反复采 1 号灯,而它被遮挡、对反射光没有贡献;三样一起看才发现 x1 上应该多采 0 号灯。图右侧另有一层:学习类的方法(Pantaleoni 2019、Vévoda 等 2018、Wang 等 2021)虽然把可见性纳入框架,却只对"一片着色点"算一份分布(图中灰色虚线框),抓不住局部变化,例子里 x1 由 0 号灯主导、相邻的 x2 却由 2 号灯主导[Fig. 1 图注, p1]。 ②读法:先把"红箭头"看成一组答案,再看三个反例是怎么各自错一次的。图上没有曲线也没有数表,它的读法是把三组采样行为和那一列红箭头对起来:谁的箭头对上谁就是对的。判别点在右侧那个虚线框:它指出的是尺度问题,框越大,框内就越不可能用同一份分布同时照顾 x1 与 x2。这也是全篇的立论起点:分布必须逐点变。 来源:Neural Importance Sampling of Many Lights, Fig. 1, p1 · SIGGRAPH Conference Papers '25 · © 2025 Copyright held by the owner/author(s) · Not for redistribution · 原样引用,未修改

③推导:把图上那三组采样行为对上式 (2) 的三个因子,一一对应:只按亮度采=只用 L_i、加上 BRDF=用 L_i · f_s、三样齐=用完整的 F。图里那列红箭头,就是式 (9) 里 q(y) = L_y / L_o 的 argmax。而右侧那个灰虚线框点出的是尺度问题,它正是式 (3) 里 p(y) 必须"逐点变"的原因,框越大,"一份分布管一片点"这个假设就越站不住。

④边界:这张图演示的是两类失效,方向约束(BRDF)与遮挡(可见性)。它没有覆盖的是"灯本身很大"这一情形:当光源有可观的面积时,式 (1) 里那个面积分自身的方差也会成为主导,而那一半不归灯选择管(第 12 章边界 3)。读这张图时不要把"采哪盏灯"当成方差问题的全部。

1.2 前人两条路,各自的代价写在同一句话里

原文把前人的做法分成两类,而它对每一类的批评都紧跟在"它做对了什么"之后[§1, p0–p1]。

第一类:建一棵光层次树(light hierarchy),比如二叉树,按空间位置、强度之类的标准把灯分组;在树上自适应地取一个"割"(cut),把割上的节点当作簇、按重要性给出采样概率;落到具体一盏灯时,要么用簇里的代表灯去求值[Walter 等 2005],要么继续沿子树下钻,一路抽到单盏灯[Conty Estevez 与 Kulla 2018;Yuksel 2019]。

它的代价是一句话:重要性是在不考虑可见性的前提下算出来的,于是会被遮挡的灯被反复采到[§1, p0]。上面那个例子里 1 号灯就是这一类错误。

第二类:在渲染过程中逐步把可见性纳进来,在线地改进采样分布[Donikian 等 2006;Fernandez 等 2002;Pantaleoni 2019;Vévoda 等 2018;Wang 等 2021]。它们把可见性吃进去了,但代价是另一处:全部依赖复杂的空间数据结构去在线跟踪簇的重要性,彼此之间主要是优化策略不同[§1, p0–p1];而且它们对每一小片空间里的着色点只优化一份分布,把子区域内部的显著变化忽略掉了[§1, p1]。

两条路合起来看,缺口就清楚了:要么不吃可见性,要么吃可见性但把分布摊平到一整片区域上。这篇论文要补的就是这个缺口,把分布做成逐点的,而且不靠空间数据结构。

1.3 这一次的改法:逐点预测,只预测到簇

原文的主张可以拆成三个动作[§1, p1]:

第一,用网络直接输出"每个着色点选哪盏灯"的分布。输入是该点自己的局部信息(位置、出射方向这一类),输出是这一点上的灯选择概率质量函数(PMF)。这样做的好处是不必维护、也不必查询任何空间数据结构,同时让分布在整个场景上处处不同。

第二,训练目标取 KL 散度(KL-divergence)。原文的说法是:最小化"学到的分布"与"目标分布"之间的 KL 散度,而目标分布本身是用蒙特卡洛采样近似出来的[§1, p1]。这一步的推导是第 3、4 章的内容。

第三,不吃下全部灯,只吃"簇"。要处理成百上千盏灯,逐灯输出概率需要一个容量很大的网络,代价不划算[§4, p3]。所以原文把神经方法和既有的光层次技术拼起来:网络只预测各个簇上的概率分布,簇内部的灯仍旧由既有方法采[§1, p1;§4, p3]。

拼起来之后还剩一个问题:网络是从随机初始化开始的,而随机的概率分布开局几乎没有用。原文的第三步补丁就是残差学习:把既有方法算出来的簇概率当作初始值(基线),网络学的是在这个基线上的修正量,于是开局就等价于既有方法,收敛也被加快[§1, p1;§4.3, p4]。

1.4 和"路径引导"划清界线:这里采的是离散的灯,不是连续的方向

原文自己主动做了一次区分,因为这件事最容易被读混[§1, p1]。神经路径引导(neural path guiding) 那一族[Dong 等 2023;Huang 等 2024;Müller 等 2019]采的是光线方向,那是一个连续的二维域;本篇采的是"第几盏灯",那是一个离散的、规模随场景增长的选择集。

这条界线不是修辞,它决定了方法能不能用:在一个方向域里去找"很多重要但分布稀疏的灯",本身就很难;而当灯有几千盏、每盏只占很小一块方向立体角时,把它当成方向上的连续分布去学,等于把问题放到了一个更难的空间里[§1, p1]。换个说法,离散集上的分布是一个"分类"问题,方向域上的分布是一个"密度估计"问题,前者的支撑大小是 M,后者是连续的。

1.5 三条贡献

原文在 §1 末尾自己列了三条[§1, p1]:

#贡献一句话
①一个神经方法,用来学灯选择分布分布逐点变化,输入是着色点的局部信息,训练目标是 KL 散度
②一个混合方法:神经方法 + 光层次技术网络管簇上的分布,既有方法管簇内的灯,于是能撑住上千盏灯
③一个残差学习策略拿既有方法的簇概率当基线,降低启动成本、加快收敛

三条的分工在第 13 章细讲,这里先记住它们不是并列的三件事:② 是 ① 为了规模必须做的那一步妥协,③ 是 ② 带来的新问题(网络初始化不好用)的补丁。三者是串联的。

1.6 这篇论文的两处读前提醒

第一处提醒关于"它换了什么"。它没有改渲染方程,也没有改蒙特卡洛估计量,它换的是采样分布 p(y) 的来源。所以读到后面那几张对照图时,差异全部来自"每根光线把预算押在哪盏灯上",而不是来自任何一处物理或积分的改动。

第二处提醒关于"它没做什么"。它把簇内部交给既有方法,这意味着它的上限被既有方法锁住:如果基线给出的簇内采样概率很差,它并不能把错误纠回来[§6, p8]。这一条是原文自己在限制一节里写的,也是第 12 章要展开的第一条边界。

这一章到此为止。第 2 章把前人那两条路拉开来看,尤其是"为什么它们抓不住局部变化"这一条。

2前人两条路:光层次树挑簇,和「给一片区域学一个分布」

这一章把话说清楚:上一章的缺口是"要么不吃可见性、要么把分布摊平",这一章要说清这两条路各自长什么样,以及它们在哪里、为什么把话说满了。原文的 §2 分了四小节(多灯渲染、基于学习的采灯、重采样重要性采样、路径引导),其中第一节是小节,后三节是"隔壁赛道",它们是可以接起来的邻居,算隔壁赛道而不是本题的对手。

2.1 多灯渲染:从"挑重要的灯"到"在树上抽到单盏灯"

最早的做法很直白:把灯分成"重要的"与"不重要的",只给重要的灯发阴影光线,少打一些光线就赢了[Kok 与 Jansen 1994;Shirley 等 1996;Ward 1994][§2, p1]。

然后出现了一类更"代数"的做法:对光传输矩阵的条目做采样来给灯聚簇,前提是这个矩阵近似低秩[Hašan 等 2007、2008;Huo 等 2015;Ou 与 Pellacini 2011][§2, p1]。这条路把"哪些灯像"变成一个矩阵分解问题,代价是那个低秩假设。

真正被广泛采用的是光层次树[Fernandez 等 2002;Paquette 等 1998][§2, p1]:Walter 等[2005]用"在光树上找一个割"来定义簇,并在每个簇上采一盏代表灯。这一步留下了一个偏置,用代表灯代替整簇,估计量就不再是无偏的。

后面的工作把这个偏置修掉了:沿树随机地往下走,一路抽到单盏灯,于是采样过程无偏[Conty Estevez 与 Kulla 2018;Liu 等 2019;Moreau 等 2022;Tokuyoshi 等 2024;Yuksel 2019][§2, p1]。本篇用的正是这一族:第 6 章里"先选簇、再沿树下钻"的两阶段抽样,就是从这里接过来的。

这一整条路的共同短板,原文只用一句写:这些技术都不在采样时考虑可见性[§1, p0;§2, p1]。换句话说,树只知道"这盏灯有多亮",不知道"这盏灯现在看不看得见"。

2.2 基于学习的采灯:吃进了可见性,摊平了分布

第二条路把可见性作为学习目标的一部分,方式分两档:离线预处理[Georgiev 等 2012;Wu 与 Chuang 2013],或者在线更新[Donikian 等 2006;Fernandez 等 2002;Pantaleoni 2019;Vévoda 等 2018;Wang 等 2021][§2, p1]。

它们的共性,也是本篇瞄准的地方:都依赖空间数据结构去跟踪分布,并且对"一小片区域里的一组着色点"只学一份分布[§2, p1]。原文对这一点的判词是"抓不住细粒度的变化"[§2, p1]。

这一句要和图 1-1 右侧那个灰虚线框连起来读。框不是随手画的:它把"一个空间子区域"这件事具象化了,而本篇的反驳也只有一句话,把框缩小到"一个点",问题就没了。代价是你不能再靠空间数据结构共享状态,于是要么把每个点的分布都存下来(存不下),要么现算(这就是网络)。这个二选一,就是整篇论文的起点。

2.3 重采样重要性采样:邻居,不是对手

原文专门给重采样重要性采样(Resampled Importance Sampling,RIS) 留了一小节,但它给这层关系的定位是"互补"[§2, p1]。

RIS 的机制[Talbot 等 2005]:先从一份简单的提议分布里抽样本,再按一组由"复杂但未归一化的分布"导出的权重,从这些样本里选出一个子集;那份复杂分布可以同时把材质、几何、可见性都算进去[§2, p1]。

它已经被推进到实时渲染,最有名的是时空重采样(ReSTIR)[Bitterli 等 2020],以及面向全局光照的两个变体 ReSTIR-GI[Ouyang 等 2021]与 ReSTIR-PT[Lin 等 2022][§2, p1]。

关联句在最后:包括本篇在内的多灯采样方法,与这些重采样框架是互补的,它们可以用来改进 RIS/ReSTIR 的候选分布,从而把那些方法的结果再抬高一层[§2, p1]。这句话也解释了为什么本篇的对照里会出现 ReSTIR:它是同一条管线上的可替换零件,而不是同一个问题的另一种解法。

2.4 路径引导:方向域上的老邻居,和一处必须说清的分歧

路径引导(path guiding)做的是方向域上的重要性采样[§2, p1]。早的一些靠数据结构(二叉树、四叉树之类)把拟合出来的分布存下来[Müller 等 2017;Rath 等 2020;Vorba 等 2019;Zhu 等 2021b];近一些的用神经网络去拟合目标分布,离线的[Bako 等 2019;Huo 等 2020;Zhu 等 2021b,c]与在线的[Dong 等 2023;Huang 等 2024;Lu 等 2024;Müller 等 2019]都有。

原文对它也留了一句判词:在"很多灯、而且分布稀疏"的场景里,把准确的分布拟合出来仍然困难,这限制了这条路在这类场景里的效果[§2, p1]。

然后是两处关系:一,路径引导与采灯是互补的,它们和多重重要性采样(MIS)结合起来,才能有效覆盖多样化的场景[§2, p1];二,本篇的启发来自神经路径引导,但分歧点写得很明确,本篇要的是一个"离散域上的新表述",而不是在二维方向域上学一个连续分布[§2, p1]。

把这一章收一下:这四小节里,前两节是"同一道题的前两次作答"(树不含可见性、学习把分布摊平),后两节是"隔壁赛道的邻居"(RIS/ReSTIR 和路径引导都能与本篇组合)。第 3 章起,本篇自己的推导开始。

3把「挑哪盏灯」写成一个期望,再写成一个估计量

这一章把话说清楚:"采哪盏灯"这件事要先被写成一个可以说话的数学对象,后面才有损失函数可谈。原文用了四步:把直接光照写成逐灯贡献之和(式 1)→ 把每一盏灯的贡献写成面积分(式 2)→ 把求和写成期望(式 3)→ 把期望写成可执行的估计量(式 4)。这四步里没有一处新物理,全部是记号上的搬运;但每一步都留下一个后面要用到的副产品,本章逐条点出来。

3.1 第一步:直接光照就是"逐灯加总"

原文的目标量是点 x 处沿出射方向 ω_o 的直接光照反射辐射度 L_o(x, ω_o),并且从"所有光源贡献之和"开始写[§3, p1]:

(1) L_o(x, ω_o) = Σ_{y=1}^{M} L_y(x, ω_o) = Σ_{y=1}^{M} ∫_{A_y} F(x, z, ω_o) dA_y(z)(原文式 1 · §3, p1)

这条式里有两个记号要先立住。M 是场景里光源的总数;y 是光源的编号,从 1 数到 M;L_y 是"只有第 y 盏灯亮着"时这一点收到的反射辐射度,所以把它全部加起来就还原成 L_o[§3, p1]。第二个等号做的是另一件事:把"第 y 盏的贡献"从一个抽象的量,展开成"在它自己的面积上做积分",A_y 是第 y 盏灯的面积,F 是被积函数,z 是落在灯上的那个积分点[§3, p1]。

这一步的副产品是"离散"这两个字的出处:采样的对象是 y ∈ {1, …, M},一个有限的编号集合。后面所有关于"分布是 PMF 而不是 pdf"的说法,都是从这一条式的下标来的。

3.2 第二步:被积项拆成"发光、反射、几何与遮挡"三样

F 是什么,原文单独给了一条式[§3, p1]:

(2) F(x, z, ω_o) = L_i(x, z) · f_s(x, ω_o, z) · G(x, z)(原文式 2 · §3, p1)

三个因子的分工,逐项对上第 1 章那个三盏灯的例子:

因子读法在图 1-1 里对应什么
L_i(x, z)从 z 朝 x 发出来的辐射亮度灯的亮度,只看它就会去采最亮的 2 号灯
f_s(x, ω_o, z)双向反射分布函数(BRDF)方向约束,加上它就会转到 1 号灯
G(x, z)几何项与可见性项遮挡,加上它才落到 0 号灯

这张对应有原文的分解做依据[§3, p1]:"被积项 F 建模的是"灯上的 z 点发出来的光与这一点的表面之间的相互作用",并把它拆成上述三项。三盏灯那三个反例,恰好就是"只用其中一个因子会怎样",这也解释了为什么"重要性"这件事在本篇里必须用三因子共同定义。

一处容易读漏的地方:G 里含可见性,而可见性恰恰是空间数据结构和神经方法之间的分水岭。第 2 章说树"不在采样时考虑可见性",并不是说树算不了 G,G 在求值时当然要算,缺的是"把它用在决定采哪盏灯上"。这一步的区别是本篇与第 2 章前两节的分界线。

3.3 第三步:把求和写成期望

有了 L_y,就可以把"加总"写成"按某个分布求平均"[§3, p2]:

(3) L_o(x, ω_o) = E_{Y ∼ p(y)}[ L_Y(x, ω_o) / p(Y) ](原文式 3 · §3, p2)

这一步是整个方法的枢纽:只要把"从哪个分布里抽 Y"这件事定下来,"挑哪盏灯"就变成了"从 p(y) 里抽一个编号"。原文对 p(y) 的说明是:它是概率质量函数(PMF),含义是"在点 x、出射方向 ω_o 上选中第 y 盏灯的概率";为了记号简短,原文把对 x 与 ω_o 的依赖从写法里省掉,但在含义上它们是带着的[§3, p2]。

紧接着是这条式成立的条件,它必须单独记住:只要 p(y) 在 L_y(x, ω_o) 非零的地方都非零,这个等式就成立[§3, p2]。这条约束的含义是"别把可能贡献的灯漏在采样范围外",一旦某盏有贡献的灯的 p(y) 恰好是零,除以 p(Y) 那一项就爆掉,估计量不再是原来的量。这条约束在第 12 章的边界一节里会再出现一次。

3.4 第四步:期望写成可执行的估计量

最后把期望换成 N 个样本的平均[§3, p2]:

(4) ⟨L_o(x, ω_o)⟩ = ( 1 / N ) · Σ_{j=1}^{N} L_{Y_j}(x, ω_o) / p(Y_j)(原文式 4 · §3, p2)

这里的 Y_j ∈ {1, …, M} 是 N 个独立抽出来的光源编号,每个都服从 p(y)[§3, p2]。到此为止,渲染一侧的全部需求就只剩一件事:拿到一份好的 p(y)。

原文紧接着给出这一章的落脚句,也是全篇最重要的一句动机:p(y) 的选择会显著影响估计量的方差;要降方差,p(y) 就应该尽量贴近"分子那一项"的分布[§3, p2]。

这句话值得拆开读。分子是 L_y,也就是"这盏灯实际贡献了多少"。如果 p(y) 正好正比于 L_y,那么每一项 L_{Y_j} / p(Y_j) 都变成同一个常数,估计量的方差直接归零;p(y) 离 L_y 越远,被抽到的样本里就越容易出现"权重特别大"或"权重特别小"的项,方差就越大。这就是把采样预算押在贡献大的灯上的全部道理,也是式 (9) 把目标分布取成 L_y 归一化形式的直接原因。

3.5 三个必须记住的记号,与一个还没解决的问题

记号含义约束或出处
M场景里光源的总数上下限就是式 (1) 的求和范围
y / Y / Y_j光源编号(Y 是随机变量,Y_j 是第 j 个样本)取值 {1, …, M}
z / Z_j灯上的积分点(后面会成为第二个随机变量)落在第 y 盏灯的面积 A_y 上
A_y第 y 盏灯的面积式 (1) 的积分域
F被积项 = L_i · f_s · G式 (2)
p(y)灯选择的概率质量函数(PMF)必须在 L_y ≠ 0 处非零
N每像素的独立样本数式 (4),也是后面"等样本对照"里的 spp

原文还给了一处实现上的交代:算 L_y(x, ω_o) 需要把式 (1) 里那个积分求出来,这一步同样用蒙特卡洛做,在光源上随机采一个点 z;并且沿用了采灯方向既有的标准技术来完成这件事[Hart 等 2020;Shirley 等 1996][§3, p2]。这句话在第 4 章的式 (10) 里会变成一个具体的分母项 p(z|y)。

本章留下一个还没解决的问题:"贴近分子的分布"只是一个愿望,p(y) 到底怎么得到? 原文的答案是让一个神经网络把它参数化出来,然后在线训练[§3, p2]。训练意味着要有一个损失函数,第 4 章就从"该拿什么当损失"开始。

3.6 一个三点小算例:p(y) 选得好不好,方差差多少(本页演算)

这一节是本页为了把 §3.4 那句"降方差"落实而做的一次演算,原文里没有这一段。数字是构造的,结论是通用的。

设三盏灯在某一点上的贡献分别是 L_0 = 9、L_1 = 1、L_2 = 0(第三盏在这个出射方向上完全不贡献),于是总量 L_o = 10。目标分布应当是 q = (0.9, 0.1, 0)。现在拿三个候选采样分布来比:

候选分布p(0)p(1)p(2)它与目标的关系
A0.90.10正好等于目标
B1/31/31/3完全不知道哪盏重要
C0.50.50排序对了、比例不对,且漏掉的那盏正好不贡献

逐个算单次估计的取值与它的标准差(估计量就是式 (4) 在 N = 1 时的样子,取值是 L_y / p(y)):

候选分布三种可能取值期望方差标准差
A10 / 10 / 不取1000
B27(p=1/3)/ 3(p=1/3)/ 0(p=1/3)10146≈ 12.1
C18(p=0.5)/ 2(p=0.5)10648.0

三行合起来说明三件事:

  1. "把采样预算押在贡献大的灯上"这件事的收益是可以算出来的,在这个例子里它是"方差归零"。
  2. "排序对了、比例不对"(C 对 B)就已经收回了超过一半的方差(146 → 64)。这也解释了为什么一篇方法即使只学到大致正确的分布,也能拿到明显的收益,它不需要学准,它只需要学对方向。
  3. C 之所以没出事,是因为它给零概率的那一盏正好是不贡献的那一盏。把 L_2 从 0 改成 0.1(于是 L_o = 10.1,目标分布变成约 (0.891, 0.099, 0.0099))C 立刻失效,它给 2 号灯的概率是 0,而 2 号灯的贡献不是 0,式 (3) 的前提被破坏:那部分贡献永远采不到,估计量不再是 L_o。这正是式 (3) 那条"p(y) 必须在 L_y ≠ 0 处非零"的约束在算术上的样子,也是第 12 章那条"没写出来的边界"的具体触发方式。

这段演算与第 12 章那条"原文没写出来、但可以从式子里读出来"的边界,是同一件事的算术版。

4损失取 KL 散度,以及为什么可以扔掉一个算不出来的因子

这一章把话说清楚:"让学到的分布贴近目标分布"这句话,要先被写成一个能求导的损失,再被写成一个能采样的梯度,最后还要处理掉一个算不出来的项。原文的六条式((5)–(10))是一条链:取 KL 散度当损失(式 5)→ 对参数求导(式 6)→ 改写成对"学到的分布"的期望(式 7)→ 用采样去近似这个期望(式 8)→ 把目标分布定下来(式 9)→ 扔掉那个未知因子,得到最终能在路径追踪里跑的梯度(式 10)。本章的最后一节(§4.5)是这条链上最容易引起怀疑的一步,也是最值得单独读的一步。

4.1 损失:两个分布之间的距离

原文先定"贴近"这个词的数学版本:最小化学到的 p_θ(y) 与目标 q(y) 之间的 KL 散度[§3.1, p2]:

(5) D_KL(q, p_θ) = Σ_{y=1}^{M} q(y) log( q(y) / p_θ(y) )(原文式 5 · §3.1, p2)

θ 是网络的参数,p_θ(y) 就是网络输出的那个 PMF。这条式的读法:在每一个灯编号 y 上,比较"目标概率 q(y)"与"网络给的 p_θ(y)",按目标概率加权,把比值取对数再加起来。因为权重是 q(y),所以网络在"目标认为重要的灯"上给错概率,代价最大,这正是想要的形状。

4.2 求导:目标分布与参数无关,所以只剩一项

要最小化它,就得对 θ 求导[§3.1, p2]:

(6) ∇_θ D_KL(q, p_θ) = − Σ_{y=1}^{M} q(y) ∇_θ log p_θ(y)(原文式 6 · §3.1, p2)

从式 (5) 到式 (6) 的过程里有一处"消失":q(y) 对 θ 的梯度被丢掉了。原文的理由写得很短:目标 PMF 与 θ 无关[§3.1, p2]。这一句是成立的,但它的前提在后面才兑现,式 (9) 会给出 q 的定义,里面出现的 L_y 与 L_o 都是"当前这一点、这一方向的真实光照量",不随网络参数变化。所以 q 是一个"随场景固定、随着色点变化"的量,不是一个随训练漂移的量。读者如果在这里卡住,可以先跳到 §4.4 看 q 的定义,再回来。

4.3 把梯度改写成"能从网络自己的分布里采样"的形式

式 (6) 的求和是对 q 做的加权,而 q 是目标分布,采样时不方便。原文接着做了一步变换:把它写成一个对 p_θ 的期望[§3.1, p2]:

(7) ∇_θ D_KL(q, p_θ) = − E_{p_θ(Y)}[ ( q(Y) / p_θ(Y) ) · ∇_θ log p_θ(Y) ](原文式 7 · §3.1, p2)

这一步的用处只有一个,但很关键:期望的下标换成了 p_θ(Y),而 p_θ 是网络自己产出的分布,采样时本来就要从它抽灯编号[§3.1, p2]。换句话说,训练用的样本恰好是渲染时已经在抽的那些样本,不额外花成本。

有了期望,就可以照式 (4) 的老路子把它换成 N 个样本的平均[§3.1, p2]:

(8) ⟨∇_θ D_KL(q, p_θ)⟩ = − ( 1 / N ) · Σ_{j=1}^{N} ( q(Y_j) / p_θ(Y_j) ) · ∇_θ log p_θ(Y_j)(原文式 8 · §3.1, p2)

这一次样本 Y_j 是从"学到的 PMF" p_θ(y) 里抽出来的[§3.1, p2]。到这一步,训练回路已经可以描述了:从当前的 p_θ 抽灯 → 估计这一项的梯度 → 更新 θ → 再抽。

4.4 目标分布长什么形状:L_y 除以 L_o

剩下 q 没有定义。原文的定义很直接[§3.1, p2]:

(9) q(y | x, ω_o) = L_y(x, ω_o) · L_o(x, ω_o)⁻¹(原文式 9 · §3.1, p2)

读法:L_y 是第 y 盏灯单独贡献的反射辐射度,L_o 是所有灯加起来的总量,所以这个比值就是"第 y 盏灯在总量里占多大一份"。它恰好就是 §3.4 里希望 p(y) 贴近的那个形状,按贡献比例分配采样预算。

后面那一项不是装饰。原文专门写了一句:式中的第二项保证 q 是一个合法的 PMF(加起来等于一)[§3.1, p2]。因为 Σ_y L_y = L_o,除以 L_o 之后和正好是一,这也是为什么这条式和式 (1) 的第一个等号是同一件事的两种写法。

两处细节要在同一段里交代:

  • L_y 怎么算:它里面有式 (1) 的积分,原文用蒙特卡洛点采样近似,在第 y 盏灯上随机选点 z,对 F(x, z, ω_o) 取值[§3.1, p2]。这与 §3.5 末尾那句交代是同一件事。
  • L_o 怎么算:原文明确说它未知,因为它正是想要估计的量[§3.1, p2]。

于是矛盾出现了:目标分布的定义里含一个未知量,而损失函数的梯度里又带着这个目标分布。下一节就是处理这件事的。

4.5 扔掉 L_o:为什么可以,以及它换来什么

原文的处理只有一句,但它给出的理由是整篇里最具体的一处:优化用的是 Adam[Kingma 与 Ba 2015],而 Adam 是按"当前梯度与它历史平均的比值"来更新参数的,所以这一项可以安全地省略[§3.1, p2](原文同时引了 Dong 等 2023 与 Müller 等 2019 作为同型做法)。

这一句值得把它拆成可以核对的推理,因为它容易被误读成"反正小就当它没有":

步骤内容
① 被扔掉的是什么是 q(Y_j) 里的因子 L_o⁻¹。它是当前着色点上的一个正数,与灯编号 y 无关,也与网络参数 θ 无关
② 它在梯度里扮演什么角色式 (8) 里每个样本项都乘同一个 L_o⁻¹ ⇒ 它是整个梯度向量的一个公共正标量因子
③ 优化器对它是否敏感Adam 的更新步长由"梯度与历史平均的比值"决定,把梯度整体乘一个常数,分子分母同倍变化,比值不变 ⇒ 该因子被约掉
④ 代价是什么梯度的绝对大小不再对应真实损失的量级。对 Adam 这一类自适应优化器无所谓;对固定学习率的 SGD 就会有影响

这段推理也解释了实验里的一个设置:原文在全部对照里都用 Adam、学习率固定在 3×10⁻²[§5.1, p4]。换优化器就要重新面对 L_o 这一项,这一点原文没有展开,但它可以从上面这张表直接读出来。

把 q 和 p(z|y) 一起代回式 (8),就拿到最终的梯度估计量[§3.1, p2]:

(10) ⟨∇_θ D_KL(q, p_θ)⟩ = − ( 1 / N ) · Σ_{j=1}^{N} [ F(x, Z_j, ω_o) / ( p(Z_j | Y_j) · p_θ(Y_j) ) ] · ∇_θ log p_θ(Y_j)(原文式 10 · §3.1, p2)

这条式在原文里是"行内编号"的,编号 (10) 与式子同处一行,不是独立成行。阶段 1 的首扫正是因此把它漏掉,把式数记成了 11 条(见第 14 章 §14.5)。

式 (10) 里有三个新面孔,逐个交代:

记号含义来源
Z_j第 j 个样本在第 Y_j 盏灯上采到的那个点§4.4 的"在灯上随机选点"
p(z|y)在第 y 盏灯上选中点 z 的概率由既有方法给出,本篇不学它[§3.1, p2]
F(x, Z_j, ω_o)被积项(式 2)在采样点上的取值式 (2)

原文紧接着把这条式翻译成一句人话,这句是本篇的"训练循环说明":这套表述说明,"优化这个损失"等价于"最小化一个被 F 的蒙特卡洛估计值加权的负对数似然";因此这个损失可以在路径追踪的过程中、以在线的方式高效优化[§3.1, p2]。

这句翻译值得记住,因为它把三件事同时说清了:损失的形式(加权负对数似然)、权重的来源(F 的 MC 估计)、训练可以发生在哪里(就在渲染循环里,不需要单独的离线训练阶段)。第 8 章的残差学习要解决的,恰好是"在线训练"带来的启动问题。

4.6 从式 (5) 到式 (10):一条可以自己复核的推导链

这六条式连起来,可以缩成五步。每一步"起点是什么、做了什么、得到什么"写在下面这张表里,读者可以拿它逐行复核:

步起点做了什么得到
1式 (5) 的 KL 定义把 log(q / p_θ) 拆成 log q − log p_θ,再对 θ 求导(q 与 θ 无关)式 (6):− Σ_y q(y) ∇log p_θ(y)
2式 (6) 的加权求和在求和号里乘除同一个 p_θ(y),把 Σ_y p_θ(y)·( · ) 认成对 p_θ 的期望式 (7):− E_{p_θ}[ (q/p_θ) ∇log p_θ ]
3式 (7) 的期望用 N 个从 p_θ 抽出来的样本做蒙特卡洛式 (8):− (1/N) Σ_j (q(Y_j)/p_θ(Y_j)) ∇log p_θ(Y_j)
4式 (8) 里的 q用式 (9) 的定义代入,并把 L_y 用灯上点采样的 MC 估计展开式 (10) 的分子与第一个分母因子:F(x, Z_j, ω_o) / p(Z_j|Y_j)
5式 (8) 里的 L_o⁻¹判断它是"与灯编号、与网络参数都无关的公共正因子",在 Adam 的比值更新里被约掉式 (10) 成形

这张表里第 2 步是唯一一处"看起来像技巧"的地方,但它的目的很实在:只有把求和改写成对 p_θ 的期望,"训练用的样本"才能与"渲染用的样本"是同一批。第 5 步则是全篇唯一一处"主动丢掉一个东西"的操作,它的合法性完全依赖优化器类型(§4.5 那张表)。

反向核一遍也很快:把式 (10) 里 F / ( p(z|y) · p_θ(y) ) 那一坨记成 w,它就是"用当前分布抽到这个样本时,这个样本的贡献被高估或低估了多少";乘上 ∇log p_θ(Y_j) 之后,w 大的样本对梯度的推力就大,这正是 §7.4 那句"让高贡献样本下次更容易被抽到"的梯度版本。

本章到此为止。第 5 章讲网络本身:三层、三个输入、三条编码。

5网络只有三层,但要给三种输入各配一条编码

这一章把话说清楚:损失定完了,接下来是"用什么去拟合 p_θ"。原文 §3.2 只有一小段,但它把三件事一次说完:实现框架、网络规模、三种输入各自的编码方式。这一章短,因为原文就短;但它给出的每个数字都会在第 11 章的消融里被单独检验一次。

5.1 实现与规模:三层、每层 64 个神经元

原文的第一句就把实现交代完了[§3.2, p2]:

  • 用 tiny-cuda-nn 实现[Müller 2021];
  • 网络由 3 个隐藏层组成,每层 64 个神经元;
  • 中间激活用 ReLU[§3.2, p2]。

这三个数字放一起看,它属于"很小"的那一档。这也和第 1 章的定性一致:网络不做场景表示,它只回答"这个点在这么多簇里更该采哪一个",输出维度等于簇数、输入维度只有几种局部量。第 11 章的残差消融(图 8-1)会从另一个方向验证这一点,如果网络本身容量是瓶颈,那么"从零学"和"学修正量"的差距不会只在收敛速度上,而会稳定到最终质量上。

5.2 三条输入,三条编码

原文对输入的处理是分路的,每条路各配一种编码[§3.2, p2]:

输入编码方式出处
相交位置(intersection position)可学习的稠密网格编码(learnable dense grid)[Dong 等 2023]
归一化的出射光线方向 ω_o4 阶球谐(spherical harmonics,degree 4)[§3.2, p2]
法线one-blob 编码,32 个 bin[Müller 等 2019]

三种编码各自对应一类量的"形状",这是这段值得多读一遍的地方:

  • 位置是空间上的稠密量,用可学习网格是对的,场景里的重要灯分布本来就是空间上分块变化的,网格天生带"邻域共享"的归纳偏置。
  • 方向是球面上的量,用球谐是这类量的标准展开;取到 4 阶是在"能表达足够的角向变化"与"不引入过多系数"之间的一个选择。第 11 章的编码消融(图 9-1)测的是位置编码,不是方向编码,这一点在读消融时不要混淆。
  • 法线是一条单位向量,one-blob 编码是为了避免把球面上的取值当成"不相关的数字"来处理;32 个 bin 是它在这一路里选的分辨率[Müller 等 2019]。

原文对这三路的用途还给了一句解释:加这些输入是为了能建模"辐射亮度与 BSDF 的乘积",并且法线这一类输入在相近的学习任务里也有先例[§3.2, p2]。这一句和式 (2) 的分解正好对上:L_i · f_s 那一对乘积,正是网络要拿来判断"哪盏灯对这个方向有意义"的依据。

5.3 一处必须交代的原文缺陷:这一段的接续在文字层上缺一个短句

上表最后一行之后,原文的这一段在文字层上是不接的,这一点要写在明处,因为它是本页在整篇里唯一一处无法从 PDF 文字层确证的地方:

  • p2 右栏的最后一行是 … spherical harmonics with degree 4 for normalized outgoing ray direction ωo;
  • p3 左栏的第一行是 so we can model the product of radiance and BSDF. We additionally provide normal …。

两行之间在文字层上没有任何字形(逐字形追踪 0 命中),那个位置也没有任何图形对象,属篇内唯一的文字层空洞。本页因此只写可以确证的三条编码,不替原文补那个从句;第 14 章 §14.5 会把这条缺陷连同它的复现办法一并记档,方便后来者复核。

另外,p3 左栏这一段的第一行是"从 so 起头的小写句",所以它前面确实还有一个短句被排版跨页切走;这属于所据 PDF(作者版)的排版与文字层缺陷,不是原文的内容缺失。

5.4 网络这一段留下的三个接口

把 §5.1–§5.2 收成一张接口表,因为后面三章都要用到它们:

接口内容后面谁用它
输出维度等于簇数 S(不是灯数 M)第 6 章的两阶段抽样、第 7 章的式 (11)
输出语义簇选择 PMF p_θ(c)第 7、8 章
输入位置(dense grid)+ 出射方向(SH 4 阶)+ 法线(one-blob 32 bin)第 8 章的式 (12) 里写作 f_θ(x, ω_o)[c]
规模3 × 64 + ReLU,tiny-cuda-nn第 11 章的残差与编码消融

注意第三行那个写法:式 (12) 里网络的输出被写成 f_θ(x, ω_o)[c],它的输入只写了 x 与 ω_o。这不是漏写:法线是"位置这一侧的局部几何",在实现里与位置一起进网络;原文在式子里只保留了"这一点、这一方向"这两个最本质的自变量[§4.3, p4]。

本章到此为止。第 6 章讲:灯多到几千盏的时候,这个网络为什么不能直接输出 M 维,以及分簇之后抽样怎么走。

6灯太多就分簇:先选簇,再沿树下钻

这一章把话说清楚:上一章的网络输出维度等于灯数 M,这在几十盏灯时没问题,在几千盏时就不成立了。原文的解法是把灯先分成一小撮簇,网络只对簇输出概率;簇内部那一盏灯,交回给第 2 章那棵光层次树去抽。本章要交代三件事:为什么直接输出 M 维撑不住、p(y) 怎么拆成两层、簇内部那一层概率是怎么从树上算出来的。

6.1 为什么"直接输出 M 维"这条路走不通

原文把这件事说得很直接[§4, p3]:直接用网络估计每一盏灯的概率,只在灯数较小时可行(原文给的量级是"几十盏");当着色点面对的灯有成百上千盏时,直接估计这个 PMF 需要一个容量很高的网络,计算复杂度显著上升,方法变得不实用[§4, p3]。

这句话里有两个不同的成本,要分清:

成本随灯数怎么变为什么它致命
输出维度输出层宽度 = M网络要为每一盏灯留一个输出,宽度线性增长
每步计算量与输出维度同阶这个网络是在渲染循环里每帧更新的,单步成本直接乘到帧时间上
训练信号单次样本只涉及少数几盏灯M 很大时,绝大多数输出在当次样本里根本没有信号,收敛被拖慢

三个成本叠起来,结论是"不能把灯当成分类的类别集"。而这恰好也是本篇与"路径引导"分野的另一种说法:方向域是连续的、无法枚举,所以那边建的是密度场;灯是离散的、可以枚举,但一旦枚举到几千个,分类头本身就变成了瓶颈。

6.2 拆成两层:先选簇,再在簇内选灯

原文的解法借的是既有方法的势[§4, p3]:把全部灯分到 S 个互不重叠的簇 L_c(c ∈ 1, …, S)里,于是灯选择 PMF 被分解成两层:

p(y) = p(c) · p(y | c)

两层的分工在原文里写得很清楚:p(c) 是选中簇 c 的概率,p(y|c) 是在簇 c 内部选中第 y 盏灯的条件概率;网络只负责建模簇选择 PMF p_θ(c),而"簇内选哪一盏"仍旧交给既有的层次技术[Conty Estevez 与 Kulla 2018;Yuksel 2019][§4, p3]。

这个拆法带来一处直接的好处,原文把它当成这一节的重点:因为簇是由既有方法建的,那棵树上本来就带着"每个簇有多重要"的初始概率,于是网络可以学"对这些初始概率的修正量",而不是从零预测,训练收敛因此明显改善[§4, p3]。这就是残差学习的入口,第 8 章展开。

6.3 先把整条链路看一遍:三格总览

在读任何一条式子之前,先把流程看一遍。原文用一张三格总览图把"网络算什么、抽样怎么走、训练数据从哪来"三件事画在一起[Fig. 2 图注, p3]。

图 2-1:一篇论文的总览:预测簇、两阶段抽样、样本回流训练(E 类 · 证据)· 原文 Fig. 2, p3
图 2-1 一篇论文的总览:预测簇、两阶段抽样、样本回流训练(E 类 · 证据)· 原文 Fig. 2, p3 怎么读 ①图注:原文说,左格里网络用着色点上的局部信息以残差方式估计簇概率,而基线簇分布 w 由既有方法预先算好、并且在整个过程中保持不变;中格是一盏灯被分两步采出来:先按估计出的簇分布选中一个簇(红色节点之一),再沿树随机下钻(绿线)挑出簇内的某一盏灯;右格是在选中的光源上采点、追踪路径,这些样本被用来训练网络、改进估计出的簇分布;整个过程反复迭代,直到追够所需的样本数。原文还补了一句为什么开局就能用:因为网络是以残差方式估计簇 PMF 的,所以从渲染一开始它就能引导采样[Fig. 2 图注, p3]。 ②读法:左中右三格的箭头方向就是数据流的方向,而"回流"那一段才是这张图的重点。左格到中格是前向使用(网络 → 抽样),右格回到左格是反向训练(样本 → 网络),这两条方向合起来,说明这是一个"边渲染边学"的循环,而不是"先学完再渲染"。判别点在左格那句"基线全程固定":它意味着图里唯一的可动部件只有网络输出那一段残差;如果把它当成"基线也会被更新",后面第 8 章的对数域混合就读不通了。 来源:Neural Importance Sampling of Many Lights, Fig. 2, p3 · SIGGRAPH Conference Papers '25 · © 2025 Copyright held by the owner/author(s) · Not for redistribution · 原样引用,未修改

③推导:三格可以逐一对上三条式子。左格是式 (12):log(w_c) + f_θ(x, ω_o)[c] 里的 w 就是"预先算好、全程固定"那一份,f_θ 是网络输出;中格的两步对应 p(y) = p_θ(c) · p(y|c)(第 6 章);右格那条回流对应式 (11) 的梯度估计,追完路径之后,样本带着 F 回到网络,把簇概率往上推。三格连起来看,它画的就是一个"边渲染边学"的闭环。

④边界:左格"基线全程固定"这五个字,同时把本篇的边界 2b 也画出来了:簇内那一半概率不由网络产生,所以当基线给出的簇内分布很差时,网络在图上没有任何一条路径可以去纠正它。这张图的完备性止于"簇这一层"。

6.4 簇从树上怎么取:一个割,与一棵不平衡的树

总览图里的"红色节点"和"绿线"需要一份更细的说明,原文单独用一节写它[§4.1, p3]。

第一步是建树:给定场景,先用既有技术建一棵光层次树[Conty Estevez 与 Kulla 2018;Yuksel 2019][§4.1, p3]。

第二步是取割:把树上指定层 k 的节点选作光簇;这个割是全局的、对整个场景固定[§4.1, p3]。"全局固定"这四个字是第 12 章第一条边界的一半。

图 3-1:割取在第几层、以及
图 3-1 割取在第几层、以及"簇内概率"是怎么乘出来的(E 类 · 证据)· 原文 Fig. 3, p4 怎么读 ①图注:原文说,给定一棵用既有方法建出来的光层次树,我们取某一层(本图例子里是 k = 3)的节点作为光簇,并由网络估计它们的概率 p_θ(c);单盏灯被选中的概率,由"簇概率"乘上"给定簇时这盏灯的条件概率 p(y|c)"得到;而这个条件概率,是沿树的遍历路径把各子节点概率乘起来得到的(图中绿线)。原文另外点明一处容易误读的细节:图里那些灰掉的节点只用于定义全局的簇,不参与采样,也不参与 PMF 求值[Fig. 3 图注, p4]。 ②读法:先把"层"和"节点"分开看,左边 k = 0 … k = 5 是深度,图里被高亮的是第 3 层的那一批节点;从这些节点往下到叶子,是一盏盏具体的灯。绿线要顺着看:它从被选中的簇节点出发,一路经子节点到某片叶子,路径上每个节点的概率相乘就是 p(y|c)。判别点有两个:其一,割是"整层"而不是"某几个节点";其二,"簇内那一层不归网络管",网络只输出被高亮那一层的概率,再往下的概率全部来自既有的树。 来源:Neural Importance Sampling of Many Lights, Fig. 3, p4 · SIGGRAPH Conference Papers '25 · © 2025 Copyright held by the owner/author(s) · Not for redistribution · 原样引用,未修改

③推导:图里"7 个簇节点"这个数正好是式 (11) 能化简的前提。因为树不平衡,第 3 层的内部节点不是 2³ = 8,而要靠"叶子补位"凑成 7;而单盏灯的概率是簇概率乘上路径概率之积,所以 p(y|c) 完全由构树方法决定、与 θ 无关,式 (11) 里它被留在分母、被挤出对数,依据就是这条绿线的乘法结构。

④边界:这张图能直接看出边界 2a 的来源。割是一条水平线,而各分支的深度并不相同,切过去之后,有的簇包着一盏灯,有的簇包着一整棵子树,同一个簇内部的"重要性差异"因此可以非常大。这就是"固定全局割"在结构上的代价。

第三步是处理一个现实问题:树不是满的。原文的原话是"在实际场景里树通常是不平衡的",因此第 k 层的内部节点数并不总等于 2^k[§4.1, p3]。处理办法是:把来自更高层的叶节点也一并算进簇里,这样网络可以直接估计"一个叶节点对应的单盏灯"的概率[§4.1, p3]。换句更直白的话:割的实际形状是"一条水平线 + 挂在这条线以下的叶子"的拼接。

原文给了这一节唯一的数字:在图 3-1 那个例子里,网络输出的是 7 个簇节点的概率(图上用红色标出)[§4.1, p3]。这 7 个不是 2^3 = 8,它正好演示了"不平衡 ⇒ 数目不等于 2 的幂"这件事。

6.5 两阶段抽样的完整走法

把 §6.4 的结论连成一条抽样流程[§4.1, p3]:

步动作概率从哪来
1按簇选择 PMF p_θ(c) 选出一个簇网络输出(第 5 章的 3×64 MLP)
2从该簇出发沿树下钻,每走一步在孩子里按它们的 PMF 选一个既有的建树方法(ATS/SLCRT 那一族)
3走到叶子,得到一盏灯 y路径上各步选择的乘积 = p(y|c)
4在这盏灯上采点 z 并求值既有方法的灯内采点[Hart 等 2020;Shirley 等 1996]

第 3 步那个乘积,原文在图 3-1 的图注里明确写了:p(y|c) 就是沿遍历路径把各子节点的概率相乘[Fig. 3 图注, p4]。这一步很要紧,因为它决定了两件事:一是 p(y|c) 由构树方法完全决定,与网络参数 θ 无关(第 7 章要用到);二是第 12 章那条"基线不好就纠不回来"的边界,根子也在这里,簇内那一半概率不归网络管,网络只能修簇这一层。

6.6 这一章留下的两张分工表

表一:谁负责什么

对象谁负责依据
簇选择 PMF p_θ(c)网络(逐点、在线更新)[§4, p3]
簇内条件概率 p(y|c)既有构树方法(全场景、固定)[§4.1, p3;Fig. 3 图注, p4]
灯内采点 p(z|y)既有方法,本篇不学[§3.1, p2]
树的形状与割的位置构树方法 + 一个人工选的层 k[§4.1, p3]

表二:三处"固定"要记住

固定的东西固定成什么谁会因为"以为它会变"而读错
基线簇分布 w预先算好、全程不变[Fig. 2 图注, p3]会以为残差是"两个都在变"
割(层 k)整场景一个值[§4.1, p3]会以为第 12 章那条"固定割"的边界不存在
簇内概率的算法沿用既有构树方法[§4.1, p3]会把"分簇"读成"网络把整棵树都学了"

6.7 一处设计选择值得点名:为什么不做端到端

一个自然的疑问是:既然网络能学分布,为什么不干脆让它直接输出 M 维、或者连树的形状一起学? 原文给了两条理由,它们分别落在规模与成本上:

理由原文的说法落在哪
逐灯输出撑不住灯数大时直接估计 PMF 需要容量很高的网络,计算复杂度显著上升、方法变得不实用[§4, p3]
初始概率是白送的既有方法建树时本来就产出一份簇概率,拿它当基线比从零学划算[§4, p3]

这两条合起来,决定了这是一个"插在既有管线中间"的方法,而不是"替换管线"的方法。它的落地成本因此很低,只需要在既有的 ATS/SLCRT 实现上挂一个 3×64 的小网络,外加一次对数域混合;但它的收益上限也因此被既有方法锁住,簇内那一半概率不归它管,基线错了它纠不回来(第 12 章边界 2b)。"低侵入"与"有上限"是同一件事的两面。

本章到此为止。第 7 章把这条两阶段抽样代回第 4 章的梯度式,看它会退化成什么样子。

7分簇版的目标函数:只剩一个 log p_θ(c)

这一章把话说清楚:分簇改变了 p(y) 的形式,损失函数的梯度也必须跟着改一次。原文这一步很短,但它做了两件不同的事,原文把它们并成了一块:先把 p_θ(y) 替换成 p(y|c)·p_θ(c),再利用"p(y|c) 与 θ 无关"把对数项化简。本章把这两步分开写,因为它们各自的理由不一样。

7.1 第一步:替换

优化的框架不变,仍旧是 §3.1 那一套;唯一变化在于"灯选择 PMF 现在的写法"。原文的原话是:关键区别在于灯选择 PMF 现在被表达成"由网络估计的簇选择 PMF"与"由既有方法算出的簇内灯选择 PMF"的乘积[§4.2, p3]。

把 p_θ(y) → p(y|c)·p_θ(c) 代进式 (10),就得到这一节的中间式[§4.2, p3]:

⟨∇_θ DKL(q, pθ)⟩ = − ( 1 / N ) · Σj=1N [ F(x, Zj, ωo) / ( p(Zj | Yj) · p(Yj | Cj) · pθ(Cj) ) ] · ∇_θ log( p(Yj | Cj) · pθ(Cj) )

这里 C_j 是与第 j 个样本对应的那个簇编号,它不需要重新采一次,它就是"这次抽到的灯 Y_j 落在哪一簇"。换句话说,p_θ(Y_j) 被拆成"先看它属于哪一簇、再乘上这一簇的概率与簇内的条件概率"。

7.2 第二步:对数项只剩一半

原文紧接着给出一句关键判断:因为 p(y|c) 与 θ 无关,所以可以把对数项化简[§4.2, p3]:

∇_θ log( p(Yj | Cj) · pθ(Cj) ) = ∇_θ log pθ(Cj)

道理很朴素:乘积取对数会拆成两项之和,与 θ 无关的那一项求导就是零。于是化简后的最终形式是:

(11) ⟨∇_θ D_KL(q, p_θ)⟩ = − ( 1 / N ) · Σ_{j=1}^{N} [ F(x, Z_j, ω_o) / ( p(Z_j | Y_j) · p(Y_j | C_j) · p_θ(C_j) ) ] · ∇_θ log p_θ(C_j)(原文式 11 · §4.2, p3)

对比式 (10) 与式 (11),有两个位置发生了变化:

位置式 (10)式 (11)说明
分母p(Z_j|Y_j) · p_θ(Y_j)p(Z_j|Y_j) · p(Y_j|C_j) · p_θ(C_j)多了一个 p(Y_j|C_j),因为 p_θ(Y_j) 被按两层展开
log 的宗量p_θ(Y_j)p_θ(C_j)只有簇那一层留在梯度里

注意"分子没变":F(x, Z_j, ω_o) 一字不动。这说明分簇只改了"概率怎么表示",没有改"什么叫做得好",判据仍是"让高贡献的样本获得高概率"。

7.3 为什么这一步值得单独讲

它把"网络要学什么"这件事收窄了,而且收窄得很干净:

  • 网络不需要知道簇内有多少盏灯,也不需要知道簇内哪一盏更亮,那些交给树;
  • 网络的任务变成"给这个着色点分配簇上的概率分布",输出维度从 M 降到 S;
  • 而 p(Y_j|C_j) 作为一个与 θ 无关的因子留在分母里,作用只是"把梯度按簇内条件概率做一次加权",不影响网络该往哪个方向走。

这也回答了一个容易产生的疑问:"既然簇内那一层不归网络管,那把它写进分母有什么用?" 用处是保持估计量无偏。分母必须完整地等于 p(y),少了任何一层,梯度就不再是那个 KL 散度的梯度;只是"有没有 θ"决定了它在求导之后还剩不剩。

7.4 这条式子在行为上意味着什么

原文用一句话收了这一节:优化这个目标,会让网络"提高那些对应着高贡献光样本的簇的似然",同时"降低那些对应低贡献光样本的簇的似然"[§4.2, p3]。

把它对上第 3 章的动机:它做的是"让被采样到的高贡献样本,下次更容易被采到",一条自举的回路。而它的稳定性完全依赖两件事:一是簇的数量 S 不能太大(否则每个簇分到的样本太少,似然估计的噪声就大);二是簇的划分要合理(否则一个簇内部的重要性差异会盖过簇之间的差异)。第 11 章的表 3-1 右半张,就是拿不同的 k(也就是不同的 S)在做这件事。

本章到此为止。第 8 章讲那个把网络从"随机开局"救出来的补丁。

8残差学习:不从零学,从别人算好的簇概率接着改

这一章把话说清楚:前七章搭好的系统有一个执行上的硬伤,它要靠随机初始化的网络开局。原文把这个问题摊开成两条,然后只用一个观察就解决了:既有方法算出来的簇概率并不差,拿来当起点即可。落到实现上,这个"拿来当起点"被写成一次对数域相加再加一次归一化(式 12)。本章的核心是式 (12),但要先把"为什么需要它"讲透。

8.1 在线训练的两个具体问题

原文先把训练方式说清:训练是在渲染过程中在线进行的;用一个随机初始化的网络去产生样本,这些样本又被当作训练数据反过来更新网络;这个过程一直迭代到追够所需的样本数为止[§4.3, p4]。

然后它列出两个问题,编号写得很明确[§4.3, p4]:

#问题后果
(1)因为随机初始化,网络要很多次迭代才能收敛到一个有意义的 PMF开局很长一段时间,网络给出的分布基本是噪声
(2)在这段时间里,产生的样本方差很大最终渲染的噪声被抬高,而这又反过来妨碍有效训练

第二个问题比第一个更麻烦,因为它是一个回路:分布差 → 样本方差大 → 训练信号噪声大 → 分布学得慢 → 分布继续差。"先让它跑一会儿再学"这种绕法在这里不成立,因为训练用的样本就是渲染用的样本,绕不过去。

8.2 关键观察:别人的答案就在手边

原文的解法建立在一个观察上[§4.3, p4]:既有方法[Conty Estevez 与 Kulla 2018;Yuksel 2019]用精心设计的规则来估计簇概率,而这些概率显著优于网络初始预测出来的 PMF。

这句话的分量在"就在手边"这四个字上。第 6 章已经说过,建树方法本来就附带一份簇的初始概率;这份概率里的可见性可能没算,但它的簇划分与相对权重是有信息量的。于是原文提出:把这份簇概率当作基线,让网络去预测残差[§4.3, p4]。

换一种说法更直白:网络不再回答"每个簇该有多大概率",而是回答"在既有方法给的概率上,每个簇该往上调还是往下调、调多少"。随机初始化时输出近似零,改动量也就近似零,这就是"开局即可用"的全部机制。

8.3 式 (12):两条要求,两个动作

把"网络的输出"与"基线"合起来时,有两个硬要求[§4.3, p4]:

  1. 所有簇概率必须是正的;
  2. 它们的和必须等于一。

原文对这两条各给了一个动作,两个动作分别落在不同的数学操作上[§4.3, p4]:

要求动作为什么这么选
正性在对数域里做合并对数域里相加,取指数回来之后一定为正;线性域里相加就可能出负数
归一再做一次归一化基线本身是归一化的、网络输出不保证,合起来之后必须重新拉回和为 1

具体写法如下:给定一个簇里所有节点的重要性权重 w = w_1, …, w_S(原文说明这里的概率就是归一化之后的重要性权重),最终簇 PMF 由"网络输出"与"这些重要性权重"合起来算[§4.3, p4]:

(12) p_θ(c) = e^{ [ log(w_c) + f_θ(x, ω_o)[c] ] } / Σ_{s=1}^{S} e^{ [ log(w_s) + f_θ(x, ω_o)[s] ] }(原文式 12 · §4.3, p4)

其中 f_θ(x, ω_o)[c] 是网络对第 c 个簇估计出来的残差[§4.3, p4]。

这条式要逐块读,因为它三个部件各自对应一个设计决定:

部件做了什么对应哪条要求 / 哪个设计
log(w_c)把基线概率先搬到对数域基线是"既有方法的答案";搬到对数域是为了能和残差直接相加
+ f_θ(x, ω_o)[c]网络输出(残差)作为一个加项残差语义:加零 == 不改,这就是"开局等于基线"的数学形式
/ Σ_s e^{ … }softmax 式归一化同时满足正性(指数恒正)与归一(分母就是总和)

把三个部件连起来读:这是一个"以 log w 为参考点的 softmax"。它和普通 softmax 的唯一区别是:普通的 softmax 把所有 logits 都当成自由参数;这里每个 logit 被拆成"固定的 log w_c + 可学的残差"。初始化时残差为零,它就退化成 w 本身。

8.4 一处原文笔误要照录并标注

式 (12) 的分母在原文里有一处不一致,必须点名。按所据 PDF 的文字层,公式写作:

pθ(c) = e^{ [ log(wc) + fθ(x, ωo)[c] ] } / Σs=1S e^{ [ log(ws) + fθ(x, ωo)[c] ] }

也就是说,分母的指数里写的仍是 [c],而外面求和的哑标是 s[§4.3, p4 文字层]。按上下文,分母应当逐项对 s 取值(否则求和里每一项完全相同,分母会退化成 S 乘上同一个数,归一化在语义上就是错的)。本页判断这是原文的笔误,并照录原文写法、在这一处标注出来,不替原文改字。上面 §8.3 那条式子按"分母应为 [s]"誊写,并在本次标注中说明改了什么。

这类不一致在检查时值得留意:它不影响实现(实现必然按 [s] 走才成立),但会让照抄公式的读者在这里停住。

8.5 这套方案的收益,以及它的账单一并写在原文里

收益部分是明确的:网络初始化时输出接近零,所以初期的簇概率接近既有方法估计出来的那一份;这保证了开头的样本质量与基线方法相当;随着训练推进,网络不断修正预测,簇 PMF 就在基线之上持续改进[§4.3, p4]。

这三句话连起来是一条漂亮的保证:系统不会因为"要学"而变差,只会因为"学了"而变好。它也是第 9、10 章那两张对照表能读得下去的前提,如果开局比基线差,那么"训练只占 15% 样本"这个设定早就把总成绩拖垮了。

账单在第 12 章。原文在限制一节里点出:为了拿到上面这套性质,优化策略偏激进,于是"某些情况下会产生离群的飞点"[§6, p8]。换句话说,"学得快"与"偶尔出错"是同一次选择的两面,第 11 章的图 11-1(学习率消融)正是把这个取舍摊开来看的一张图。

本章到此为止。方法部分(第 3–8 章)讲完了。第 9 章起进入实验。

9实验怎么摆,以及等时间对照:样本更少,误差反而更低

这一章把话说清楚:先交代实验的两条腿(场景与对手),再看第一条腿,等时间对照。等时间这一栏里有一处很容易被看漏、但恰好是本文最有力的一处读数:在同样的 5 秒里,本篇采到的样本数比最快的基线还少,误差却低得多。本章把表 1-1 逐格摊开自己算一遍,把这处读数挑出来。

9.1 八个场景,与它们各自的灯数

原文的评测集是八个含复杂光照的场景,场景之间最直观的差别就是灯的数量级[§5.1, p4]:

场景灯数备注
Bathroom4.7k
Bedroom7.9k
Bistro21.1k全场景里灯最多
Living Room64全场景里灯最少,只有两位数
Staircase6.7k
Staircase22.1k
Zero Day8.9k
San Miguel139k虚拟点光源(VPL)

这张表里有两处值得停一下。第一处:Living Room 只有 64 盏灯,而它却是后面消融(图 8-1、图 9-1、图 10-1、图 11-1 与表 3-1)里反复出现的那个场景,原因是消融要的是"能看清差异"的受控条件,而不是"最难"的条件。第二处:San Miguel 用的是 139k 个虚拟点光源,它的规模比第二名 Bistro 还高一个数量级,而这个场景里"每盏灯"本身就是一个小的面光源采样问题(这一点在第 12 章会变成一条边界)。

统一口径还有三句话[§5.1, p4]:全部结果比较的是"第一次非镜面弹射上的直接光照";全部实验跑在同一台机器上(Intel i9-14900K + NVIDIA RTX4090);客观指标用 FLIP[Andersson 等 2020],另有别的指标放在补充材料里(那份补充材料不在所据 PDF 内,本页不引)。

9.2 四个对手,与三条必须交代的实现口径

对手是四条已有方法[§5, p4]:ATS[Conty Estevez 与 Kulla 2018]、SLCRT[Lin 与 Yuksel 2020]、ReSTIR[Bitterli 等 2020]、VARL[Wang 等 2021]。

其中三条的实现口径原文都主动交代了,读到对照表时要带着它们:

对手实现口径为什么读表时要带上
ATS用的是 PBRT v4 里的现成实现它是唯一"别人写的"基线,其余三条是作者自己实现的
SLCRT作者自己实现—
ReSTIRM = 32 个样本、K = 3 个空间重用样本、重用半径 30 像素这三个数字决定了它的强度,换一组参数结果会变
VARL原版是为 CPU 设计的,作者把它的"顺序更新"改成"批量更新"以便在 GPU 上跑原文明确说:改写后的 VARL 比原版显著更快、结果也更好

VARL 那一行是全篇最该留意的一条免责说明。它意味着表里那个 VARL 已经被作者"移植并加速过"。换句话说,四条基线里至少有一条的强度口径由作者定义,这不是问题,但读"我们赢了多少"时要知道分母是什么。

9.3 本篇自己的设置

本篇这一侧的配置,原文集中在一段里[§5.1, p4]:

项取值
建树方法ATS(用它的树)
网络预测的层k = 6
优化器Adam,默认参数
学习率固定 3×10⁻²
训练预算比15%

这五项里有两项后面会被单独消融:层 k(第 11 章表 3-1 右半张)与训练预算比 15%(图 10-1);学习率另有一张图(图 11-1)。也就是说,这张表本身是消融的"默认档"。

还有一条口径要单独记:"训练预算比 15%"的意思是"把总样本预算的 15% 用来训练网络,剩下的 85% 用学到的分布去采"。它不是"训练了 15% 的时间",这一点在等样本对照(第 10 章)里尤其要紧,128 spp 里有约 19 spp 花在训练上。

9.4 等时间对照:先把表 1-1 摊开

等时间这一栏的设定是"时间预算随场景复杂度与分辨率上升"[§5.1, p4]:Bathroom、Bedroom、Living Room、Staircase、Staircase2 各 5 秒;San Miguel 与 Zero Day 各 10 秒;Bistro 20 秒。

原文把结果放进表 1-1,每格是"FLIP + 这段时间里采到的样本数"[Table 1, p4]。表里的数原样抄在这里,并在右侧把本篇相对"四条基线里最低的那条"的降幅自己算了一遍:

场景ATSSLCRTReSTIRVARL本篇本篇相对最好基线
Bathroom0.1659(212 spp)0.1413(220)0.1744(135)0.1346(139)0.0977(175)−27.4%
Bedroom0.3129(192)0.2442(196)0.2796(123)0.1960(123)0.0910(157)−53.6%
Bistro0.1548(163)0.2656(165)0.2837(74)0.2281(60)0.1126(168)−27.3%
Living Room0.1247(194)0.0977(194)0.1314(131)0.1009(131)0.0671(146)−31.3%
San Miguel0.2253(159)0.3015(158)0.2817(110)0.2472(107)0.1713(164)−24.0%
Staircase0.0763(198)0.0817(203)0.1059(129)0.0946(138)0.0529(160)−30.7%
Staircase20.1020(233)0.0925(233)0.1132(159)0.0854(149)0.0646(191)−24.4%
Zero Day0.1647(222)0.1455(223)0.1682(159)0.1338(161)0.1117(201)−16.5%

其余两处说明也要带上:表里基数列加粗的是"四个数里最低的那个",本篇列每一行都是全场最低;每个格子里 "FLIP(spp)" 这一对数是"同一个时间预算下"的两个不同读数,不要把 spp 当作另一列 FLIP 来比。

表 1-1:等时间对照:每一格里同时是
表 1-1 等时间对照:每一格里同时是"误差"和"样本数"(E 类 · 证据)· 原文 Table 1, p4 怎么读 ①图注:原文说,表 1-1 是用 FLIP 度量、并附上每像素样本数的等时间比较,场景是八个有代表性的场景;对照的是 ATS、SLCRT、ReSTIR 与 VARL;原文把每一行里第一、第二、第三低的数字用颜色标了出来[Table 1 图注, p4]。②读法:横着读一行,一行就是一个场景上的五种方法,先比 FLIP 那一列(越低越好),再看同一格里括号后的 spp(越高越好);竖着读一列,一列就是一个方法在八个场景上的表现,能看出它有没有"偏科"(比如 VARL 在多数行里都是基线中最低的那一个)。判别点有两个:其一,这一栏比"同样的秒数",所以 spp 在各列之间不一样,这正是这张表和表 2-1 的根本差别;其二,"颜色标出的前三低"是原文自带的标注,不是本页加的,读的时候要把它只当"行内排名",不要跨行比较颜色。 来源:Neural Importance Sampling of Many Lights, Table 1, p4 · SIGGRAPH Conference Papers '25 · © 2025 Copyright held by the owner/author(s) · Not for redistribution · 原样引用,未修改

③复算:逐行取四条基线的最小值当分母,得本篇的降幅落在 16.5%(Zero Day)到 53.6%(Bedroom);再看括号里的 spp,8 行里有 6 行本篇采到的样本更少(Bathroom 175 对 212、Bedroom 157 对 192、Living Room 146 对 194、Staircase 160 对 198、Staircase2 191 对 233、Zero Day 201 对 222)另两行只多 3%。这两组数合起来,才构成第 9 章标题那句话。

④边界:这张表不能回答"同样样本谁更准",因为它比的是同样的秒数,各列的 spp 并不相同。要回答那件事,必须换到表 2-1。另有一条读表前要带上的事实:VARL 那一列是作者把原版(CPU 顺序更新)改写并加速过的版本,不是论文原版的成绩(§9.2)。

复算得到三条结论:

  1. 本篇在 8/8 场景上都是最低的 FLIP,与原文"数值与视觉上都显著更好"的说法一致[§5.1, p4]。
  2. 相对"最好的那条基线",降幅落在 16.5%–53.6% 之间;其中 Bedroom 的 −53.6% 是最大的一处。
  3. 最有意思的是样本数那一列:本篇在 8 个场景里有 6 个采到的样本数比 ATS 少(Bathroom 175 对 212、Bedroom 157 对 192、Living Room 146 对 194、Staircase 160 对 198、Staircase2 191 对 233、Zero Day 201 对 222)另两个(Bistro、San Miguel)只多出 3%。

第三条就是本章标题那句话的出处。同样 5 秒,本篇每像素少采了 17%–25% 的样本(那几个场景里),误差却低了 24%–54%。换句话说,"赢了"这件事不能只用"网络更聪明"解释,它是在"开局先花掉 15% 的训练成本、并且每根光线多付一次网络推断"的前提下赢的。

9.5 把"少采样本还更低误差"这件事讲通

为什么样本更少反而误差更低? 有三个可能的原因,原文只给了其中一个的直接证据,另两个可以从它后面的消融里读出来:

可能原因是否被原文的消融覆盖在哪
分布本身更准(同样的样本,方差更低)是等样本对照(第 10 章表 2-1):同样 128 spp,本篇 FLIP 也是全场最低
训练那 15% 没有白花是(反向证据)残差消融(图 8-1):把残差换成"直接从零预测",最终 FLIP 立刻变差
网络推断与采样的开销被其他环节的加速抵掉了一部分部分表 2-1 的运行时间列:本篇比 ReSTIR 与 VARL 快,只比 ATS 慢约 30%

第一行才是关键:等时间栏的胜利可以解释成"样本少",但等样本栏的胜利解释不了。两栏一起看,"分布更准"这个解释才站得住,这就是为什么第 10 章必须把等样本对照单独讲一遍。

9.6 等时间对照墙:同一句话的视觉版本

表 1-1 是数值版,图 4-1 是同一个设定的视觉版[Fig. 4 图注, p5]。

图 4-1:五个场景、五种方法的等时间对照墙(E 类 · 证据)· 原文 Fig. 4, p5
图 4-1 五个场景、五种方法的等时间对照墙(E 类 · 证据)· 原文 Fig. 4, p5 怎么读 ①图注:原文说,这是 ATS、SLCRT、ReSTIR、VARL 与本篇的等时间比较;时间预算随场景复杂度与分辨率上升:Bathroom、Bedroom、Living Room 各 5 秒,Zero Day 与 San Miguel 10 秒(Bistro 20 秒,本图未列)[Fig. 4 图注, p5]。②读法:先读列头,再读行标,最后读格下的那对数字。列头是方法名(最后一列 GT 是参考图);左侧竖排是场景名;每个方法占两格:上格是渲染结果,下格是 FLIP 误差热力图,热力图越暗(越接近黑)表示误差越小;格下方那对数字是"FLIP(spp)"。判别点有两个:其一,这一栏比的是"同样的秒数",所以 spp 那一列在不同方法之间是不一样的,这正是表 1-1 里那一列数字的图形来源;其二,看热力图比看渲染图更可靠,因为渲染图之间的差别经常落在"噪一点/干净一点"这种主观判断上,而热力图把差异集中到了高误差区。 来源:Neural Importance Sampling of Many Lights, Fig. 4, p5 · SIGGRAPH Conference Papers '25 · © 2025 Copyright held by the owner/author(s) · Not for redistribution · 原样引用,未修改

③推导:格下那对"FLIP(spp)"就是表 1-1 的图形化。热力图的暗区集中在两类位置:镜面高光处与阴影边界处,前者考的是式 (2) 里的 f_s(BRDF),后者考的是 G(可见性)。换句话说,这张图把"前三篇方法在哪两项上二选一"这件事画成了颜色**。

④边界:图上只有五个场景(Bathroom、Bedroom、Living Room、San Miguel、Zero Day),Bistro 与两个 Staircase 不在其中;而 Bistro 恰恰是 20 秒预算、灯数第二多的那一处,所以这张图不能代表八个场景的整体格局。另,最右那一列 GT 是参考图,不参与排名。

原文对这张图另给了两句定性判词,它们点的是"赢在哪里"[§5.1, p5]:本篇在镜面反射上处理得最好(图 4-1 里 Bathroom 与 Zero Day 的红色插图);并且能无缝地学到局部的光照变化,比如阴影(Bathroom 与 San Miguel 的绿色插图)。

这两句值得和第 1 章的三因子对上:镜面反射考的是 BRDF 那一项,阴影考的是可见性那一项,正是前人在"要不要算可见性"上二选一时丢掉的两块。

9.7 逐行看表 1-1:基线之间是怎么分工的

把表 1-1 的每一行单独看一遍,能看出基线各有主场。把每行"最好的那条基线"挑出来,得到这张小表:

场景该行最好的基线灯数
BathroomVARL(0.1346)4.7k
BedroomVARL(0.1960)7.9k
BistroATS(0.1548)21.1k
Living RoomSLCRT(0.0977)64
San MiguelATS(0.2253)139k(VPL)
StaircaseATS(0.0763)6.7k
Staircase2VARL(0.0854)2.1k
Zero DayVARL(0.1338)8.9k

数一遍的结果:VARL 拿走 4 行(Bathroom、Bedroom、Staircase2、Zero Day),ATS 拿走 3 行(Bistro、San Miguel、Staircase),SLCRT 拿走 1 行(Living Room),ReSTIR 一行都没有。

这张小表有两个用处:

  • 它解释了为什么本篇要选 ATS 当基线做一个消融项(图 8-1):ATS 是"光层次树"这一族里在最多场景上拿到最好基线的方法之一(与 VARL 并列),而本篇只用它的树、不用它的在线学习。
  • 它让"最好的基线"这个分母变得具体:本篇在表 1-1 里相对的那个"最好基线",在 8 行里来自两个不同的方法,所以"降幅 16.5%–53.6%"这个区间不是与某一个固定对手比出来的。

原文没有做这张小表,它是本页从表 1-1 数出来的。读者如果要复核本篇"赢了谁",这张表是最短路径。

本章到此为止。第 10 章把"时间"这条腿换掉,改成"同样 128 个样本",再看一遍。

10等样本对照与收敛曲线:训练只花 15%,却全程第一

这一章把话说清楚:上一章那处"样本更少、误差更低"的读数,需要一个"样本数被拉平"的对照来兜底。这一章有三件图元:表 2-1 把 128 spp 下的 FLIP 与运行时间一并给出(§10.1–§10.3);图 5-1 是同一批数的视觉版(§10.4);图 6-1/图 7-1 把"误差随样本/时间怎么掉"画成两条曲线(§10.5)。本章的关键词是"15%"。

10.1 这一栏的设定只有一句

原文写得很短:在等样本设定下评测,是为了"不管速度、只看有效性";每个场景渲染 128 个样本每像素,把 FLIP 报在表 2-1 里,并给出定性的对照图 5-1[§5.1, p7]。

"128 spp"这五个字里藏着本章的题眼:本篇的训练预算是 15%,也就是说 128 个样本里约 19 个被拿去训练、剩下约 109 个用学到的分布去采。对照方法没有这个开销,它们 128 个全用来采。所以这一栏的比法是"让出去约 15% 的样本,看还能不能赢"。

10.2 表 2-1 摊开

原文表 2-1 的每格是"FLIP + 运行秒数"[Table 2, p7]。同样原样抄录,并把"本篇相对最好基线"与"运行时间相对 ATS"两栏自己算出来:

场景ATSSLCRTReSTIRVARL本篇本篇 vs 最好基线(FLIP)本篇 / ATS(时间)
Bathroom0.2059 / 2.8s0.1791 / 2.9s0.1780 / 4.7s0.1399 / 4.3s0.1090 / 3.9s−22.1%1.39×
Bedroom0.3780 / 3.2s0.2962 / 3.2s0.2757 / 5.2s0.1913 / 4.8s0.0994 / 4.4s−48.0%1.38×
Bistro0.1704 / 15.9s0.2944 / 15.3s0.2316 / 36.8s0.1658 / 44.3s0.1180 / 19.6s−28.8%1.23×
Living Room0.1488 / 3.2s0.1162 / 3.3s0.1387 / 5.2s0.1023 / 4.6s0.0689 / 4.8s−32.7%1.50×
San Miguel0.2454 / 7.9s0.3233 / 8.1s0.2675 / 12.4s0.2308 / 11.7s0.1842 / 8.6s−20.2%1.09×
Staircase0.0923 / 3.3s0.1002 / 3.2s0.1060 / 4.9s0.0969 / 4.7s0.0553 / 4.5s−40.1%1.36×
Staircase20.1246 / 2.7s0.1128 / 2.8s0.1206 / 4.0s0.0913 / 4.1s0.0721 / 3.8s−21.0%1.41×
Zero Day0.1929 / 5.1s0.1699 / 5.0s0.1771 / 8.1s0.1465 / 7.0s0.1224 / 7.0s−16.5%1.37×

三条复算结论:

  1. FLIP 一栏,本篇 8/8 全场最低,相对最好基线的降幅是 16.5%–48.0%。原文的说法是"尽管只训练了分配样本的 15%,我们的方法在所有场景里都排第一"[§5.1, p7],表里的数支持这句话。
  2. 时间一栏,本篇比 ATS 慢 1.09–1.50 倍(平均约 1.3 倍)。原文的说法是"与快速的树结构方法相比,我们的运行时间很有竞争力,说明神经训练与采样策略的开销很小"[§5.1, p7]。
  3. 但"有竞争力"要挑对参照:本篇对 ATS 平均慢约三成,对 ReSTIR 与 VARL 却基本是快的(例如 Bistro 上 19.6 秒对 36.8 秒与 44.3 秒)。这句判词的成立范围只包括后两者,把它读成"对所有基线都快"就过了。
表 2-1:等样本对照:样本数被拉平之后的误差与耗时(E 类 · 证据)· 原文 Table 2, p7
表 2-1 等样本对照:样本数被拉平之后的误差与耗时(E 类 · 证据)· 原文 Table 2, p7 怎么读 ①图注:原文说,表 2-1 是用 FLIP 度量、并附上运行秒数的等样本比较;所有场景都用每个方法渲染 128 个样本每像素[Table 2 图注, p7]。②读法:把这张表和表 1-1 并排看,唯一变化的是"括号里那个数",表 1-1 里是 spp(各列不同),这里换成了秒数(各列不同)。所以这两张表是同一批实验的两种切法:表 1-1 固定时间看样本,表 2-1 固定样本看时间。判别点:这一栏里"128"对所有人都是同一个数,因此 FLIP 的横向比较是干净的;但它不能回答"谁更快","谁更快"要看秒数列,而秒数列里最快的那一列在八个场景里并不总是同一列。 来源:Neural Importance Sampling of Many Lights, Table 2, p7 · SIGGRAPH Conference Papers '25 · © 2025 Copyright held by the owner/author(s) · Not for redistribution · 原样引用,未修改

③复算:FLIP 一列 8/8 全场最低,相对最好基线的降幅 16.5%–48.0%;时间一列,本篇比 ATS 慢 1.09–1.50 倍(平均约 1.3 倍)但对 ReSTIR 与 VARL 在多数场景上更快(Bistro 上 19.6 秒对 36.8 秒与 44.3 秒)。另有一处口径要自己算:128 个样本里约 19 个被拿去训练(15%),剩下约 109 个才是"用学到的分布采的样本"。

④边界:这一栏固定的是样本数,不是时间,而各方法的耗时差最多能到十倍(Bistro 上 15.9 秒对 44.3 秒),在时间受限的生产场景里,"等样本更准"不直接等于"更实用"。要判断实用与否,得把这张表和表 1-1 一起看。

10.3 把"开销很小"量化一下

原文那句"开销很小"是一句定性判断,但它其实可以从表里算出一个数。取本篇与 ATS 的时间差,再除以 ATS 的时间,得到"多花的比例":

场景多花的时间(相对 ATS)多花的比例
Bathroom+1.1 s+39%
Bedroom+1.2 s+38%
Bistro+3.7 s+23%
Living Room+1.6 s+50%
San Miguel+0.7 s+9%
Staircase+1.2 s+36%
Staircase2+1.1 s+41%
Zero Day+1.9 s+37%

最省的一处是 San Miguel(+9%),最贵的一处是 Living Room(+50%)。Living Room 最贵这一点并不意外,它只有 64 盏灯,簇数少,而网络的固定开销(前向推断)与场景规模无关;灯越少,"多出来的那一次网络推断"在总时间里占比就越高。这条读数是原文没有明写、但可以从它的表里算出来的。

10.4 等样本对照墙

表 2-1 是数值版,图 5-1 是同一个设定的视觉版。两张对照墙(图 4-1 与图 5-1)排在一起看,才看得出"换横轴"这件事改变了什么[Fig. 5 图注, p6]。

图 5-1:同样的 128 个样本,五种方法的对照墙(E 类 · 证据)· 原文 Fig. 5, p6
图 5-1 同样的 128 个样本,五种方法的对照墙(E 类 · 证据)· 原文 Fig. 5, p6 怎么读 ①图注:原文说,这是与若干当前最好方法的等样本对照,所有场景都用 128 spp[Fig. 5 图注, p6]。这一栏与图 4-1 的差别只有一处:样本数被拉平了。②读法:先做一件事,把这张图和图 4-1 摆在一起,只看"格下那对数字"。图 4-1 里各方法的 spp 不一样(那是等时间的结果)图 5-1 里全是 128;因此图 5-1 里各格的 FLIP 才具有"同样预算下的可比性"。另一个读法是看热力图的分布形状:等时间栏里强方法的误差集中在少数区域,等样本栏里弱方法会出现成片的高误差区。判别点:这一栏不能用来比较速度,128 spp 是同一个数,但不同方法跑完它花的时间不一样(那就是表 2-1 里"秒数"那一列的作用)。 来源:Neural Importance Sampling of Many Lights, Fig. 5, p6 · SIGGRAPH Conference Papers '25 · © 2025 Copyright held by the owner/author(s) · Not for redistribution · 原样引用,未修改

③推导:它与图 4-1 的格局完全相同,唯一被换掉的是"格下那对数字"里的第一项,从各列不同的 spp 换成了全列相同的 128。正因为样本数被拉平,"分布本身更准"这个解释才被独立验证:如果本篇的优势只来自"等时间栏里样本多",那么在这一栏上它应当退回基线水平,而事实并非如此。

④边界:这张图不能用来比较速度,128 对所有人是同一个数,但跑完它的时间各不相同(见表 2-1 的秒数列)。另,它与图 4-1 共用同一批场景与同一批基线,所以两张图之间不是互相独立的两次验证,而是同一实验的两种切法。

10.5 两条收敛曲线,与线上那条"训练结束"的竖线

原文另用两张图看"误差随预算怎么掉下来":等时间的那张是图 6-1,等样本的那张是图 7-1[§5.1, p7]。两张图的图注里都刻意点出了同一条竖线。

图 6-1:等时间收敛曲线:误差怎么随时间掉下来(E 类 · 证据)· 原文 Fig. 6, p7
图 6-1 等时间收敛曲线:误差怎么随时间掉下来(E 类 · 证据)· 原文 Fig. 6, p7 怎么读 ①图注:原文说,这是八个场景上所有方法的等时间收敛曲线;时间预算随场景复杂度上升;对所有场景,那条第二条竖线大致就是"本篇停止学习、改用已学到的分布去采剩余路径"的位置[Fig. 6 图注, p7]。②读法:先找那条竖线,再看竖线两侧的斜率。竖线左侧是"边学边采",右侧是"带着学到的分布纯采",曲线的斜率在两侧不一样,正是这两种状态的可观察差别。判别点:纵轴是误差、横轴是时间,所以曲线越低越好,但"低在哪一段"要分开看;有些场景里其他方法在早期反而更低,这一点原文在正文里自己承认了[§5.1, p7]。 来源:Neural Importance Sampling of Many Lights, Fig. 6, p7 · SIGGRAPH Conference Papers '25 · © 2025 Copyright held by the owner/author(s) · Not for redistribution · 原样引用,未修改

③推导:那条"第二条竖线"把每个格子切成了两段,两段的斜率差别正是"训练预算比"这个旋钮的可视化:竖线左侧是"边学边采",右侧是"带着学到的分布纯采"。这也解释了为什么图 10-1 那条曲线会存在一个内部最低点,训练太少,左侧那一段的分布就一直不准;训练太多,右侧那一段剩下的样本不够。

④边界:八个格子的纵轴刻度是各自独立的,所以不要把某一格的绝对高度与另一格横向比较;能横向比的只有"同一格里各条曲线之间的相对位置"。另,竖线的位置是原文给的近似值(图注写的是"大致"),不要把它读成一个精确的样本数。

第二张曲线图把横轴换成样本数。两条轴分开画的原因,原文在两张图注里没有解释,但它对应的问题很实在:等时间回答"给同样的秒数谁更省",等样本回答"给同样的样本谁更准"[Fig. 7 图注, p7]。

图 7-1:等样本收敛曲线:误差怎么随样本数掉下来(E 类 · 证据)· 原文 Fig. 7, p7
图 7-1 等样本收敛曲线:误差怎么随样本数掉下来(E 类 · 证据)· 原文 Fig. 7, p7 怎么读 ①图注:原文说,这是八个场景上所有方法的等样本收敛曲线,横轴从 8 spp 到 128 spp;第二条竖线同样大致是"本篇停止学习、改用已学分布采剩余路径"的位置[Fig. 7 图注, p7]。②读法:这张图与图 6-1 的横轴不同(时间对样本数)因此两者要配对读:图 6-1 回答"同样的秒数谁更省",图 7-1 回答"同样的样本数谁更准"。判别点在曲线尾段:样本数越高,曲线之间的差距越稳定,这正是原文那句"尤其在高 spp 下更好"的图形依据[§5.1, p7]。 来源:Neural Importance Sampling of Many Lights, Fig. 7, p7 · SIGGRAPH Conference Papers '25 · © 2025 Copyright held by the owner/author(s) · Not for redistribution · 原样引用,未修改

③推导:把横轴从时间换成样本数之后,本篇"从很低的 spp 起就有优势"这件事才显现出来,因为训练样本与渲染样本是同一批,网络从第一帧就在用学到的分布。它与图 6-1 的差别不是方法变了,而是"那 15% 的入场费"在这一条轴上被摊掉了:样本轴上看不到"花时间学",只看到"每个样本更值钱"。

④边界:这张图同样不回答速度;且它在 128 spp 那一端与表 2-1 是同一批数据,不是一次独立复现。把它当成"独立验证"会重复计算同一份证据。

原文对这两张图给出的判词,分两句,第二句是一处诚实的让步[§5.1, p7]:

  • 总体上,本篇一直比所有其他方法更好,尤其是在更高的 spp 下;
  • 在某些场景里,其他方法在等时间设定的早期反而结果更好,但是一旦训练阶段结束、能追更多样本,本篇的表现就显著改善。

第二句值得单独记。它描述的是一个"交点"形状:早期落后、后期反超。而这个形状与第 8 章的机制完全吻合,残差学习让开局等于基线(所以不会大落后),但网络还没开始修正之前,它与基线同速;随着修正累积,它才逐渐拉开。换句话说,"迟一点才赢"这件事本身就是残差学习的一个可观察指纹。

10.6 把两条曲线叠起来读

图 6-1(横轴是时间)与图 7-1(横轴是样本数)是同一批实验的两种切法。把它们叠起来读,能回答一个只有两张图合起来才能回答的问题:为什么在一条轴上"早"、在另一条轴上"晚"。

横轴本篇什么时候开始领先为什么
样本数(图 7-1)从很低的 spp 起就有优势训练样本与渲染样本是同一批,网络从第一帧起就在用学到的分布
时间(图 6-1)往往要等到"第二条竖线"之后才拉开在竖线之前,一部分时间被花在了训练上

这两行看似矛盾,其实一致:样本轴上的"早赢"说的是"每个样本更值钱",时间轴上的"晚赢"说的是"前期有一部分样本被拿去学习了"。原文自己那句"在某些场景里其他方法在早期反而更好",讲的正是时间轴上这一段[§5.1, p7],那是 15% 训练预算的可见代价。

这也给出一条实用的读法:看"这个方法值不值得用",应当以图 7-1(等样本)为主要判据,图 6-1(等时间)里的那一段落后是它的入场费;而"入场费贵不贵",要回到第 10.3 节那张"多花比例"的表去看。

本章到此为止。第 11 章把六个旋钮一个一个拧过去。

11消融六项:残差、编码、预算、学习率、连续表示、簇层级

这一章把话说清楚:前两章证明了"整体更好",这一章回答"好在哪几个部件上"。原文自己只把其中三项写进 §5.2,另三项散落在 §6 的限制与表 3-1 的图注与分析段里。本章把它们按"拧的是哪个旋钮"重排成六项,并把每张图上的读数逐格摊开自己算一遍。

11.1 旋钮一:残差学习值多少(图 8-1)

第一项问的是"第 8 章那个补丁到底值多少"。原文的设定是把残差学习(分别用 SLC、SLCRT、ATS 三条基线)与"让网络直接估计簇概率"(Direct)做对照[§5.2, p7]。

图 8-1:
图 8-1 "直接估计"对"学残差":四条方法、两组数(E 类 · 证据)· 原文 Fig. 8, p7 怎么读 ①图注:原文说,这张图把"用 SLC、SLCRT、ATS 三条基线做残差学习"的本篇方法,与"簇概率由网络直接估计"(Direct)的版本放在一起比;结论是:用任何一条基线做残差学习,都比直接估计显著更好,而时间开销极小;另外之所以选 ATS 当基线,是因为它排在第一[Fig. 8 图注, p7;§5.2, p7]。②读法:四列的排列本身就是一条"基线从弱到强"的序列(SLC → SLCRT → ATS)Direct 单独放在最左。先看 Direct 与最右那一列的热力图差别,再看格下秒数,这一项消融的要点不是"谁更准",而是"准了之后多花多少"。判别点:图里 GT 那一列只有 FLIP 值没有秒数,它是参考图,不参与速度比较。 来源:Neural Importance Sampling of Many Lights, Fig. 8, p7 · SIGGRAPH Conference Papers '25 · © 2025 Copyright held by the owner/author(s) · Not for redistribution · 原样引用,未修改

③推导:把两组数摆开就能读出这一项消融的分工:Direct 0.0829 → 三条基线 0.0699/0.0693/0.0689,落差约 17% 来自"学残差"这件事本身;而三条基线之间只差 0.001,说明"用哪棵树"是次要变量。这正好解释了原文那句选择理由:既然三条基线差不多,就挑最强的那一条(ATS)。

④边界:这一项只在 Living Room(64 盏灯)上做,是全篇场景里规模最小的一个。在 San Miguel(139k VPL)那种规模上残差学习的收益有多少,原文没有单独给数,把这个 17% 直接外推到 139k 场景,是超出这张图的证据范围的。

图上的数逐格抄下来,并算出两处差值:

配置FLIP时间相对 Direct 的 FLIP 变化
Direct(网络直接估计簇概率)0.08294.7 s—
SLC + 残差0.06994.9 s−15.7%
SLCRT + 残差0.06934.9 s−16.4%
ATS + 残差(本篇采用)0.06894.8 s−16.9%

两条结论:

  1. 残差学习本身贡献了约 17% 的误差下降(4.8 秒对 4.7 秒,时间只多了 2.1%),这就是原文那句"显著更好、开销极小"的量化版本[§5.2, p7]。
  2. 三条基线之间的差别很小(0.0699 / 0.0693 / 0.0689)而它们与 Direct 的差距都很大。换句话说,"学残差"这件事本身是主要贡献,"用哪棵树"是次要的。

第二点还解释了原文的一句选择理由:"选 ATS 当基线,是因为它排第一"[§5.2, p7]。从这张图上,三条基线的差距远小于"残差对 Direct"的差距,所以这句话更多是在说"既然都差不多,那就挑最强的那个"。

11.2 旋钮二:位置编码值多少(图 9-1)

第二项问的是"第 5 章那三条编码里,位置这一条该用哪种"。原文的设定是在等样本下比较四种位置编码:identity、frequency[Mildenhall 等 2020,12 个频率]、one-blob[Müller 等 2019,32 个 bin]、可学习稠密网格[Dong 等 2023][§5.2, p8]。

图 9-1:四种位置编码的对照:稠密网格凭什么被选中(E 类 · 证据)· 原文 Fig. 9, p8
图 9-1 四种位置编码的对照:稠密网格凭什么被选中(E 类 · 证据)· 原文 Fig. 9, p8 怎么读 ①图注:原文说,这张图在等样本设定下、在 Living Room 场景上评测位置的输入编码;比较的是 identity、frequency(12 个频率)、one-blob(32 个 bin)与可学习的稠密网格四种;最终选中稠密网格,因为它的噪声最小[Fig. 9 图注, p8;§5.2, p7]。②读法:四种编码是"对同一个量的四种表示",所以这张图里唯一变化的量就是"位置怎么喂给网络"。先看最左与最右两格的热力图差别,再看格下的秒数,编码越复杂,秒数越高,这一项消融考的是"多花的时间买到多少误差下降"。判别点:图注说的选它是"噪声最小",而不是"误差最低",这两件事在这张图上方向一致,但原文选的是前者,读的时候不要把它偷换成 FLIP 最优。 来源:Neural Importance Sampling of Many Lights, Fig. 9, p8 · SIGGRAPH Conference Papers '25 · © 2025 Copyright held by the owner/author(s) · Not for redistribution · 原样引用,未修改

③推导:四种编码给出的是一条单调曲线:FLIP 从 0.0832 一路降到 0.0689,耗时从 4.4 秒升到 4.8 秒;每一档的收益都大于它付的时间(−7.1% 换 0%、−12.0% 换 +4.5%、−17.2% 换 +9.1%)。这三档差值是这张图真正的读数,"选稠密网格"只是这条曲线的终点。

④边界:这张图只覆盖"位置"这一路编码。出射方向(4 阶球谐)与法线(one-blob,32 bin)两路没有单独的消融图,把这张图的结论说成"整套输入设计的最优解",超出了它的证据范围。

编码FLIP时间相对 identity 的 FLIP 变化相对 identity 的时间变化
Identity0.08324.4 s——
Frequency(12 频率)0.07734.4 s−7.1%0%
One-blob(32 bin)0.07324.6 s−12.0%+4.5%
Dense Grid(本篇采用)0.06894.8 s−17.2%+9.1%

这一项的结论是"单调的":四种编码从简到繁,误差一路下降,时间一路上升,而且每一档的收益都大于它的时间代价(−7.1% 换 0%,−12.0% 换 +4.5%,−17.2% 换 +9.1%)。换句更直接的话:在 Living Room 这个场景与这个时间量级下,稠密网格花掉的 0.4 秒买回了 17% 的误差下降,这笔账是划算的。

一处必须交代的口径:这张图上的编码消融只覆盖"位置"这一路,方向(SH 4 阶)与法线(one-blob 32 bin)两路没有单独的消融图[§5.2, p2;Fig. 9 图注, p8]。把这张图的结论推广到"整个输入设计"是超出原文证据的。

11.3 旋钮三:训练预算比值多少(图 10-1)

第三项是这一章唯一一个"越小越难但也不能太小的旋钮":把总预算的多少比例拿去训练网络。原文的设定是在等时间、Living Room、5 秒预算下扫描这个比例,并给出"选 15%"的结论[§5.2, p7;Fig. 10 图注, p8]。

图 10-1:训练预算比怎么选:15% 是怎么定下来的(E 类 · 证据)· 原文 Fig. 10, p8
图 10-1 训练预算比怎么选:15% 是怎么定下来的(E 类 · 证据)· 原文 Fig. 10, p8 怎么读 ①图注:原文说,这张图看的是训练预算比在等时间设定下对最终质量的影响;横轴的量是"拿去训练的比例",纵轴是最终渲染的 FLIP 误差,场景是 Living Room、时间预算是 5 秒;最终选择了 15% 这个最优比例[Fig. 10 图注, p8;§5.2, p7]。②读法:这张图是一条曲线,所以要找它的最低点;曲线左边陡、右边缓的形状说明了两件事:比例太小时网络没学够(左边陡升),比例太大时留给采样的样本不足(右边回升)。判别点:它是在"5 秒预算"这一个条件下扫出来的,原文另外补了一句"类似的趋势在所有场景上都能观察到"[§5.2, p7],但曲线本身只来自一个场景、一个预算。 来源:Neural Importance Sampling of Many Lights, Fig. 10, p8 · SIGGRAPH Conference Papers '25 · © 2025 Copyright held by the owner/author(s) · Not for redistribution · 原样引用,未修改

③推导:这条曲线两侧上升的原因不同:左侧是网络还没学够(分布不准),右侧是留给采样的样本不够;两种机制方向相反,所以中间必然存在一个最低点。15% 就是那个点。这也把"开销"这个词变具体了:本篇的固定成本不只是"多一次网络推断",还有"让出 15% 的样本"。

④边界:曲线本身来自单一场景(Living Room)与单一时间预算(5 秒)。原文补了一句"类似趋势在所有场景上都能观察到",但那句话没有配一张跨场景的图;严格来说,15% 这个数的直接证据只有这一条曲线。

这一项和另外五项有一处不同:它的结论是一个"最优比例",而不是"某个部件有没有用"。原文给的两句话要一起读[§5.2, p7]:训练预算比显著影响等时间设定下的质量;15% 这个比例在 5 秒的 Living Room 上取得最高质量,并且所有场景上都能观察到类似趋势。

读的时候要带上"为什么":这个比例是一个"学习与采样之间的分配"。比例小,分布学不好;比例大,采样预算被吃掉。它天然存在一个内部最优,这也是为什么本篇的"开销"不能简单地用"多了网络推断"来估计,还要加上这 15% 的采样预算。

11.4 旋钮四:学习率值多少(图 11-1)

第四项藏在原文的限制一节里,而不是消融一节[§6, p8]。原文的说法是:本篇用的是偏激进的优化策略,于是"用 3×10⁻² 这个激进的学习率,噪声比更稳的 3×10⁻³ 更低,代价是会出现离群的飞点"[Fig. 11 图注, p8]。

图 11-1:学习率的两难:噪声与飞点不能同时消掉(E 类 · 证据)· 原文 Fig. 11, p8
图 11-1 学习率的两难:噪声与飞点不能同时消掉(E 类 · 证据)· 原文 Fig. 11, p8 怎么读 ①图注:原文说,这张图比较的是等时间 Living Room 场景下两个学习率:激进的 3×10⁻² 给出比 3×10⁻³ 更低的噪声,代价是会出现离群的飞点[Fig. 11 图注, p8]。②读法:这张图的看点在于"干净的那一列哪里出了问题",热力图会把飞点暴露成零星亮点。判别点:这是唯一一项"没有绝对赢家"的消融:它是一个取舍(trade-off),不是一个结论;原文自己没有把它写成"我们应该用 3×10⁻²",而是把它写在限制一节里,这一点在读的时候要尊重。 来源:Neural Importance Sampling of Many Lights, Fig. 11, p8 · SIGGRAPH Conference Papers '25 · © 2025 Copyright held by the owner/author(s) · Not for redistribution · 原样引用,未修改

③推导:两档学习率的 FLIP 是 0.0859(3×10⁻³)对 0.0671(3×10⁻²),激进的那一档好 21.9%。但这个数不能直接当成结论:FLIP 是整幅图像上的平均型指标,而飞点是少数极亮的孤立像素,平均之后再比较,飞点对观感的破坏会被摊薄掉。这就是"指标赢了、观感要打折"的一个具体例子。

④边界:这是全篇六项消融里唯一一项没有绝对赢家的。原文没有把它写进 §5.2,而是写进了 §6 的限制一节,这个位置本身就是一条信息:作者自己把它算作代价,而不是收益。读的时候不要把它改写成"应该用 3×10⁻²"。

学习率FLIP相对更稳的那个
3×10⁻³(更稳)0.0859—
3×10⁻²(激进,本篇采用)0.0671−21.9%

这张图是六项消融里唯一一个"数字与判词方向不完全一致"的地方:数字上激进的学习率好 21.9%,但原文把它写成一条限制。原因在飞点:FLIP 是一个整幅图像的平均型指标,而飞点是少数极亮的异常像素,平均指标会低估飞点对观感的破坏。这正是一个"指标赢了、观感要打折"的例子,也解释了为什么原文没有把它放进 §5.2 的胜利叙事里。

11.5 旋钮五:连续表示值多少(表 3-1 左半张)

第五项是"位置输入到底是连续的还是离散的"。这一项写在表 3-1 的图注与分析段里:离散版本拿"最近的均匀网格单元中心"当输入(网格分辨率 32×32×32),并把归一化后的出射光线方向按每维 8 个桶离散化[Wang 等 2021][Table 3 图注, p8;§5.2, p8]。

表 3-1:一张图号下并排的两张表:连续表示,与簇层级(E 类 · 证据)· 原文 Table 3, p8
表 3-1 一张图号下并排的两张表:连续表示,与簇层级(E 类 · 证据)· 原文 Table 3, p8 怎么读 ①图注:原文说,表 3 分析的是连续表示与簇层级两件事的影响;左半张的结果显示,本篇在所有场景上都优于离散版本;右半张的比较指出,选定的簇层级 k = 6 在大多数场景上最好;用的是 FLIP 度量,并把每栏里最低(最好)的分数加粗[Table 3 图注, p8]。②读法:先把这张表当成两张独立的表来读。左半张两列是"离散对连续",比较的是输入表示;右半张三列是 k = 4 / 6 / 8,比较的是簇的粗细。两半之间没有共同的基线,所以左右不能相减。加粗的读法:左半张在每一行加粗的是 Ours 那一列(8/8 都更低)右半张加粗的是 k = 6(8 行里 6 行)换句话说,"加粗集中在哪一列"本身就是这张表的结论。判别点:右半张里 k = 8 一次都没有被加粗,这正是 §11.6 那条"簇取太细反而更差"的图形依据。 来源:Neural Importance Sampling of Many Lights, Table 3, p8 · SIGGRAPH Conference Papers '25 · © 2025 Copyright held by the owner/author(s) · Not for redistribution · 原样引用,未修改

③复算:左半张自己算一遍,8 行全部为正降幅,区间 2.6%–11.8%,最大两处是 Zero Day(−11.8%)与 Living Room(−11.4%)。右半张也自己数一遍,k = 6 在 8 行里赢 6 行,例外是 Bathroom 与 Living Room(两处都是 k = 4 更低),而 k = 8 一次都没有赢过。原文那句"大多数场景最好"因此可以精确到 6/8。

④边界:左右两半没有共同的基线,不能横向相减,左边比的是"连续对离散",右边比的是"簇的粗细"。另,右半张只在 8 个场景上扫了 3 档 k,不是对 k 的连续扫描,所以"最优是 6"这句话的精度到"6 比 4 与 8 都好"为止。

把左半张表摊开,并算出每一行的降幅:

场景离散版本篇(连续)降幅
Bathroom0.11380.1090−4.2%
Bedroom0.10270.0994−3.2%
Bistro0.13210.1217−7.9%
Living Room0.07780.0689−11.4%
San Miguel0.18910.1841−2.6%
Staircase0.07320.0695−5.1%
Staircase20.07580.0721−4.9%
Zero Day0.13870.1224−11.8%

8 行全部为正降幅,与图注那句"我们的方法在所有场景上都优于离散版本"完全对上[Table 3 图注, p8]。降幅在 2.6%–11.8% 之间,最大的是 Zero Day 与 Living Room。

这一项和 §11.2 的编码消融要连起来读,但不要混为一谈:§11.2 比的是"同样是连续表示,哪一种编码",这一项比的是"要不要连续表示"。两者不是同一件事,数字也不能互相印证,这边 0.0689 与 0.0994 都是本篇在 Living Room 上的读数(表 3-1 左半张的 Ours 那一列在该场景是 0.0689,与图 9-1 的稠密网格一致)这恰好说明两处的口径是同一个。

11.6 旋钮六:簇层级 k 值多少(表 3-1 右半张)

第六项是唯一一个"直接改簇数"的旋钮:把割取在树的不同层 k = 4 / 6 / 8 上[§5.2, p8;Table 3 图注, p8]。原文的结论是"选定的 k = 6 在大多数场景上最好"[§5.2, p8]。

把右半张表摊开,并把每行三个数的最小值标出来:

场景k = 4k = 6k = 8该行最低
Bathroom0.09690.09770.1081k = 4
Bedroom0.09240.09100.1021k = 6
Bistro0.12690.11570.1237k = 6
Living Room0.06170.06650.0668k = 4
San Miguel0.18560.17130.1782k = 6
Staircase0.06830.06300.0672k = 6
Staircase20.07120.06460.0673k = 6
Zero Day0.12300.11170.1377k = 6

自己数一遍的结论是:k = 6 在 8 个场景里赢 6 个,例外是 Bathroom 与 Living Room,这两处 k = 4 更低。原文那句"在大多数场景上最好"是准确的,但它没有给出比例,6/8 这个数是本页从表里数出来的。

两处值得单独看的地方:

  • k = 8 在 8 行里没有一次是最低的,而且它在 Zero Day 上(0.1377)明显比另外两档差。簇取得太细,每个簇分到的样本就少,似然估计的噪声盖过了分辨率带来的收益,这与 §7.4 讲的那条稳定性条件是同一件事。
  • k = 4 在两处胜出的场景(Bathroom、Living Room)有一个共同点:它们的灯数分别是 4.7k 与 64,都偏小或偏少。灯少的时候,粗一点的割就够用;这条观察是从数据里读出来的,原文没有明说。

11.7 六项消融合起来看

把六项排在一起,能看出"哪几个部件是这个方法真正的支柱":

旋钮换成更差的一档,代价是多少判断
残差学习FLIP 从 0.0689 退到 0.0829(+20.3%)支柱级,这是全篇最大的单点依赖
位置编码从稠密网格退到 identity:0.0689 → 0.0832(+20.8%)支柱级,与残差同量级
学习率回稳到 3×10⁻³:0.0671 → 0.0859(+28.0%)数字上最大,但要打上"飞点"这个折扣
连续表示退回离散:2.6%–11.8%稳定但幅度小,8/8 为正
簇层级 k偏离 6:多数场景 +6%~+10%有一个明确的最优点,且 k = 8 从没赢过
训练预算比偏离 15%:曲线两侧都上升内部最优点,不是单调旋钮

这张表里最该记住的是前两行:残差学习与位置编码各自值约 20%,而它们一个是训练策略、一个是输入设计,方法的核心收益并不只来自"用了个神经网络",还来自"怎么起步"和"喂什么进去"。

本章到此为止。第 12 章把原文自己承认的四条边界逐条摊开。

12边界与反例:飞点、固定割、光源内部、复杂灯具

这一章把话说清楚:前面九章都在讲"它赢了什么",这一章只讲"它在什么条件下会输"。原文把这些写在 §6 的 Limitations 一段里,一共四条,逐条都给了触发条件;其中两条原文给了做法或指出了方向,另两条明确写"留给未来工作"。本章按"能不能修"分档,这个分档本身就是判断这篇论文成熟度的依据。

12.1 边界一:飞点,来自一个刻意的激进选择

触发条件写得很具体[§6, p8]:在训练的初始迭代里,网络可能会给某些"重要的、但还没被观察到"的灯簇分配很低的概率;如果这时从这样一个簇里采到了一盏大功率的灯,它会对最终像素颜色贡献很大,于是产生一个离群的亮点。

这条边界值得把它拆成一条因果链,因为它是全篇唯一一条"由方法自身的选择直接导致"的问题:

环节内容
源头优化策略偏激进(学习率 3×10⁻²)
机制训练早期,未被观察到的簇概率被压低 → 一旦采到这种簇里的高功率灯,权重 F / p 会异常大
表现最终画面里出现离群飞点
原文给的权衡换成更保守的优化策略,飞点会变少,但收敛变慢[§6, p8;Fig. 11 图注, p8]
数字上的代价学习率从 3×10⁻² 退到 3×10⁻³,Living Room 上的 FLIP 从 0.0671 升到 0.0859(+28.0%)

第 3 行那个"权重会异常大"是本页补的机理,原文只写了"它会对最终像素颜色贡献很大"。但把第 3 章式 (4) 拿来对照,这一步是显然的:估计量里那一项是 L_Y / p(Y),p(Y) 越小、这一项越大;而 KL 训练还没来得及把这个簇的概率抬上去。

这条边界"能修,但只能换":原文的立场是"用更保守的策略可以少出飞点,代价是收敛慢",它没有为这两端之间的取舍给一个折中点。换句话说,这是一个必须由使用者按场景选的两档,而不是一个已经解决了的问题。

12.2 边界二:割是固定的,簇内那一半也不归网络管

第二条边界其实是两件事叠在一起,原文把它们写在同一段里[§6, p8]:本篇对整个场景用的是一个固定的全局割,并且依赖既有方法来采簇内的灯;于是,如果基线方法给出的灯采样概率很差,本篇无法把这些错误完全纠正过来。

这两句话的份量不同,要分开看:

子问题表现原文给的方向
割是全局固定的一个场景只有一个层 k,而树是不平衡的、不同区域的簇数差异很大可以像既有方法那样"局部自适应地调整割"[Pantaleoni 2020;Wang 等 2021],"这一组合留给未来工作"[§6, p8]
簇内采样依赖基线p(y|c) 由构树方法完全决定,与 θ 无关(第 7 章)原文只陈述了这个限制,没有给解法

第二个子问题与第 7 章那条推导正好是同一件事的两面:式 (11) 里 p(y|c) 之所以能被约掉,是因为它不含 θ;而它不含 θ 的代价,就是网络对它的错误无能为力。"化简"与"受限"在这里是同一个数学事实。

原文对第一条子问题的措辞是"我们把它留给未来工作",所以这条边界属于"指出了方向但没做"。

12.3 边界三:只学了"采哪盏灯",没学"采灯上的哪个点"

第三条边界指向系统里被忽略的另一半[§6, p8]:本篇只关注学习灯的采样分布;而在光源内部采点,对蒙特卡洛估计量的方差影响同样很大,尤其是对面积较大的光源;"在光源内部学一个采样分布"是另一条未来方向。

这条边界的量级可以从实验设置里读出来。第 9 章说过,San Miguel 用的是 139k 个虚拟点光源,VPL 恰恰是"每个光源都有自己的空间延展"的典型;而灯内采点这一半在本篇里一直沿用既有技术[Hart 等 2020;Shirley 等 1996][§3, p2]。换句话说,在"灯很大"的场景里,本篇只管了方差来源的一半。

这也解释了为什么原文在限制一节里没有给出这条边界的量化数字:它没有被单独消融过。表 1-1 与表 2-1 里的成绩是"整套系统"的成绩,其中灯内采点那一半的贡献来自既有方法。

12.4 边界四:还没和"给复杂灯具也学一套网络"的方法接起来

第四条边界是最"向前看"的一条[§6, p8]:作者希望把本篇与 Zhu 等[2021a]的方法结合起来,以便有效处理"含有大量复杂灯具"的场景;关键在于"设计一个能同时优化两套网络的框架",一套是本篇的光选择网络,另一套是灯具(luminaire)网络;这一点留给未来的探索。

这条边界要和边界三放在一起读,它们是同一条轴上的两段:

边界讲的是
边界三灯内部那个积分该不该学(本篇没学)
边界四整盏灯本身该不该用网络表示(别人学了,本篇没接)

两条合起来,划线很清楚:本篇学的是"哪些灯"这一个离散选择,其余部分(灯内采点、灯本身的表示)保持既有做法。这也正是第 1 章那句"它换的是采样分布 p(y) 的来源"的边界版本。

12.5 四条边界汇总,以及一处"没写出来但存在"的边界

#边界触发条件原文给的处置可修程度
1飞点训练早期、未被观察到的簇被压低概率,而其中有大功率灯换保守优化策略(代价是收敛变慢)可换档,未给折中
2固定割 + 簇内采样依赖基线(一条边界里的两个子问题)子问题 a:树不平衡、不同区域簇数差异大;子问题 b:基线给出的簇内概率差a 指出"局部自适应割"这条方向、留给未来;b 只陈述,未给解法半给:a 指了方向,b 未给
3灯内采点未学光源面积大(如 VPL 场景)列为未来方向指了方向
4未与灯具网络结合场景含大量复杂灯具列为未来探索指了方向

这张表里最需要看清的是第 2 行:它之所以能在一行里装下两个子问题,是因为两者的根是同一个,"本篇只管簇这一层"。割是簇的边界,簇内概率也是簇的内容,两处都不归网络管;只是前者原文给了一条"局部自适应"的路,后者连路都没有。

另有一条边界原文没有写进 Limitations,但可以从第 3 章的式子里读出来,本页在此标注:式 (3) 要求 p(y) 在 L_y ≠ 0 的地方都非零[§3, p2]。残差学习的式 (12) 用 softmax 归一化,指数项恒正,因此在数值上这条条件是满足的;但"概率极小但不为零"与"概率为零"在有限样本下几乎等价,当某个簇的真实贡献很大而网络的初始输出把它压到极小值时,就会回到边界 1 的飞点情形。这一条其实与边界 1 是同一个机制,原文只从"优化策略"那一侧描述,没有从"支撑集"这一侧描述。

12.6 把四条边界翻译成"现场症状"

边界如果只写成"某种情况下会失效",读的时候不容易对上自己的场景。把四条边界换成"使用者会看到什么",就变成了一张排查表:

边界现场会看到什么先试什么能不能在本篇内解决
飞点画面里出现个别极亮的孤立像素,位置随帧跳动把学习率换到 3×10⁻³ 看它是否消失(代价:Living Room 上 FLIP 从 0.0671 退到 0.0859)能换档,但没有折中点
固定全局割某些区域(簇数偏少的那一支)误差明显偏高,改 k 之后这块改善、别处变差在这一个场景内把 k 试一轮(表 3-1 右半张就是这套扫描)能缓解,自适应割留给未来
簇内依赖基线换一棵树(ATS → SLCRT)整体成绩跟着动,而网络学不到那部分换基线看差距(图 8-1 显示三条基线之间的差别其实很小)不能
灯内采点未学大面积光源(VPL)场景里,加大 spp 的收益不如小灯场景回到既有方法的灯内采样环节排查不能

这张表的关键在最后一列:四条边界里有两条是"本篇内解决不了的"。这也是评估一个方法时的常规读法,它赢的那部分归它,它不碰的那部分要自己另外去找办法。

本章到此为止。第 13 章把全文收成两条贡献。

13这篇论文的两条贡献

把全文收成两条。原文在 §1 末尾列了三条[§1, p1],但那三条里 ② 是 ① 为规模做的妥协、③ 是 ② 带来的问题的补丁,所以从"读者能拿走什么"的角度看,它们是两条:一条关于"分布怎么来",一条关于"怎么让它开局就能用"。

#贡献具体是什么证据在哪
①一个逐点的灯选择分布学习框架网络按着色点的局部信息直接输出簇上的 PMF,损失取与目标分布的 KL 散度,因此不需要空间数据结构、也不需要离线训练式 (1)–(11);图 2-1、图 3-1;表 1-1、表 2-1;图 4-1、图 5-1
②一个让"在线从零学"变得可用的训练策略以既有方法的簇概率为基线、网络只学残差,在对数域相加后归一化,于是随机初始化时输出近似零、开局即等于基线式 (12);图 2-1(左格"基线全程固定");图 8-1(残差对 Direct)

两条的分工要说清:① 解决"分布长什么样、怎么学"(第 3–7 章);② 解决"在渲染循环里从零学来不及"(第 8 章)。少了 ②,① 在等时间对照里会输在起跑线上,图 8-1 给了这一点的量化版本:把残差换成直接估计,FLIP 从 0.0689 退到 0.0829。少了 ①,② 就没有可修的东西,基线本身就存在,残差学习只是把它的答案当起点。

原文在 §6 的结论段里把主张又收了一遍[§6, p8]:本篇提出了一条神经的灯光重要性采样途径;网络利用每个着色点的局部信息预测"随空间变化"的灯光选择分布;训练是在线进行的、以最小化学到的分布与目标分布之间的 KL 散度为目标;为了高效处理大量灯,神经方法与既有的光层次技术被整合在一起;另外引入了一个残差训练策略来改善收敛;大量实验表明,本方法在光照复杂的挑战性场景上超过了既有方法。

这段里有一句要单独记:"随空间变化"(spatially varying)被原文放在结论句里,而不是放在技术细节里。它与第 1 章图 1-1 右侧那个灰虚线框是一对,框里是前人的"一片区域一份分布",结论句是"逐点分布",一图一句构成了这篇论文对外的核心主张。

两条贡献各自的证据链可以分开核,这也是读者复查时的最短路径:

贡献断言本页的证据在哪
① 逐点、不用空间数据结构同一批样本上误差更低第 10 章表 2-1(8/8 场景 FLIP 最低);第 9 章表 1-1(等时间同样 8/8 最低)
① 不吃可见性也能赢在镜面与阴影这两处拉得最开第 9 章图 4-1 的红色与绿色插图
① 规模可扩139k VPL 的场景(San Miguel)也能处理第 9 章表 1-1、第 10 章表 2-1 的 San Miguel 行
② 开局即等于基线不因为"要学"而先变差第 6 章图 2-1 左格(基线全程固定);第 8 章式 (12)
② 残差本身值约 17%残差对直接估计的差距第 11 章图 8-1(0.0689 对 0.0829)
② 不挑树换三条基线结果接近第 11 章图 8-1(0.0699 / 0.0693 / 0.0689)

这张表的读法是"一条断言配两处以上证据":① 有三条断言,分别落在两张主表、一张对照墙和一处定性判词上;② 有三条断言,全部落在图 8-1 与图 2-1 上,这也说明 ② 的成立门槛比 ① 低得多:它只要一张消融图就能说清。

再看它们与边界的对应:① 的代价写在边界 2(固定割 + 簇内依赖基线)与边界 3(灯内采点未学)里;② 的代价写在边界 1(飞点)里。两条贡献都不是免费的,账单分别写在"依赖别人"和"学得太急"这两处。

这一章到此为止。第 14 章交代出处、许可与怎么读这篇。

14出处、许可与怎么读这篇

14.1 这篇论文的出处

项内容
题名Neural Importance Sampling of Many Lights
作者Pedro Figueiredo(Texas A&M University, USA)、Qihao He(Texas A&M University, USA)、Steve Bako(Aurora Innovation, USA)、Nima Khademi Kalantari(Texas A&M University, USA)
出处SIGGRAPH Conference Papers '25(Vancouver, BC, Canada,2025-08-10–14)· ACM · DOI 10.1145/3721238.3730754 · 11 页
本页所据arXiv:2505.11729v1 [cs.GR](2025-05-16)
篇幅11 页(Letter 612.0×792.0 pt,双栏;左栏左缘 51.8、右栏左缘 318.0);文字层 51,147 字符
原文图元图 11 张(Fig. 1–11)+ 表 3 张(Table 1–3),共 14 件;编号式 (1)–(12) 共 12 条;无算法伪码块

页码口径:本页正文里的 pN 一律是 0 基读序号(p0 = 印刷第 1 页,p10 = 印刷第 11 页)。原文页眉印的是 1 基页码(如 p1 的页眉是 2•Figueiredo et al.)两者相差 1。

14.2 许可:两处证据同向,判定最干净

本篇的判法与前面"两处证据分叉"那几篇不同:所据 PDF 的 p0 底部直接印着权利块,而且明写了不可再分发。

证据源原文指向
PDF p0 底部(7.0 pt,五行)SIGGRAPH Conference Papers '25, Vancouver, BC, Canada / © 2025 Copyright held by the owner/author(s). / This is the author's version of the work. It is posted here for your personal use. Not for redistribution. / The definitive Version of Record was published in … (SIGGRAPH Conference Papers '25), August 10–14, 2025, Vancouver, BC, Canada, https://doi.org/10.1145/3721238.3730754.非 CC
PDF p0 的 ACM Reference Format(7.9–8.0 pt)Pedro Figueiredo, Qihao He, Steve Bako, and Nima Khademi Kalantari. 2025. Neural Importance Sampling of Many Lights. In … (SIGGRAPH Conference Papers '25), August 10–14, 2025, Vancouver, BC, Canada. ACM, New York, NY, USA, 11 pages.正式会议论文(不是纯预印本)
项内容
判定非 CC,与批次里篇目 61 同型(PDF 内明写 Not for redistribution)这是该型的第二例
落点两件:index.html + 封面缩略图;不含托管的 paper.pdf
卡片标记写 Not for redistribution,带 warn
图件原样零加工引用 + 逐图四字段署名(图号/页码/版权/未修改)

两处证据同向 ⇒ 判定最干净:权利块说"授权持有者的版权",同时也说"不再分发",没有任何一处指向 CC,因此不存在"以哪一处为准"的争议。

14.3 图件使用说明

  • 14 件图元全部为 E 类原样引用,自绘 0 件:图 1–图 11(原文图)与 表 1–表 3(原文表)。
  • 原文没有算法伪码块(与篇目 68 的 3 块、篇目 66 的位图伪码都不同型)因此本篇没有"照录伪码"这条轨。
  • 全部未裁切拼接、未加标注、未施滤镜,逐件给出「图号 + 页码 + 版权 + 未修改」四字段(见每张图的「来源」行)。
  • 封面取自原文 Fig. 2(三格总览,1400×245,纵横比 5.714),按原生比例等比缩放至宽 1200、未裁切。
  • 图 4-1 与图 5-1 是两张"对照墙",尺寸较大(1400×1576 与 1400×1576),在页面上按版心宽度等比缩放。

14.4 怎么读这篇

四条口径要先带上,否则会在几处读错:

#口径不带上会怎样
1它只管到簇,簇内那一半不归它管会把表 1-1/2-1 的成绩全算在网络上;实际上簇内那一半概率由既有构树方法给出,网络的贡献只到簇这一层
2"训练预算 15%"是"样本的 15%",不是"时间的 15%"会低估它的固定开销;等样本栏里 128 spp 中有约 19 spp 花在训练上
3等时间栏里各方法的 spp 不同会把表 1-1 读成"同预算对照";它比的是同样的秒数,而本篇在同一段时间里采到的样本往往更少
4VARL 那一列是作者改写过的版本会把表里那个数当成论文原版 VARL 的成绩;原文自己写明"改写后显著更快、结果也更好"

三处版面与口径上的事要留意:

  • 图 2-1 与图 3-1 的"红色节点/绿色线"是同一件事的两种画法:图 2-1 的中格给出抽样的两个阶段,图 3-1 给出"簇内概率怎么乘出来";两张图要连着看(§6.3–§6.5)。
  • 表 1-1 与表 2-1 的每格都是"两个数"(等时间是 FLIP + spp,等样本是 FLIP + 秒)读的时候不要把两个数混成一列(§9.4、§10.2)。
  • 表 3-1 是左右两张表拼在一个图号下,左半张比"连续对离散",右半张比"簇层级 k",两半的基线不同、不能横向相减(§11.5–§11.6)。

14.5 记号、术语与关键读数速查

(一)记号:本篇的式子只用下面这些符号,读到式 (12) 时它们都已出现过:

记号读法含义首现
L_o(x, ω_o)总反射辐射度点 x 沿 ω_o 的直接光照总量第 3 章
L_y(x, ω_o)单灯贡献只有第 y 盏灯亮时的反射辐射度第 3 章
M灯数场景里光源的总数第 3 章
F(x, z, ω_o)被积项L_i · f_s · G,含发光、BRDF、几何与可见性第 3 章
p(y)灯选择 PMF选中第 y 盏灯的概率;必须在 L_y ≠ 0 处非零第 3 章
p_θ(y)学到的 PMF网络参数化出来的灯选择分布第 4 章
q(y|x, ω_o)目标分布L_y / L_o,按贡献比例分配采样预算第 4 章
Z_j / p(z|y)灯内采样点与其概率由既有方法给出,本篇不学第 4 章
S / c / C_j簇数 / 簇编号 / 样本所属的簇割在树上取到的那一层第 6 章
k割的层全局固定,实验里取 6第 6 章
p(y|c)簇内条件概率沿树下钻路径上各节点概率的乘积;与 θ 无关第 6 章
w = w_1, …, w_S基线簇权重既有方法给出的初始簇概率,全程固定第 8 章
f_θ(x, ω_o)[c]网络输出(残差)对第 c 个簇的修正量第 8 章

(二)术语(中英对照,按分区译名单源):重要性采样(importance sampling)|概率质量函数(PMF)|KL 散度(KL-divergence)|光层次树(light hierarchy)|割(cut)|簇(cluster)|残差学习(residual learning)|虚拟点光源(VPL)|多重重要性采样(MIS)|重采样重要性采样(RIS)|路径引导(path guiding)。指标名 FLIP 与四条第基线(ATS/SLCRT/ReSTIR/VARL)保留英文。

(三)关键读数:全篇引用的硬数字,连同出处收在一处,方便对着原文复核:

读数出处
八个场景的灯数:4.7k / 7.9k / 21.1k / 64 / 6.7k / 2.1k / 8.9k / 139k(VPL)§5.1, p4
网络:3 个隐藏层 × 64 神经元、ReLU;tiny-cuda-nn§3.2, p2
输入编码:位置用 dense grid、出射方向用 4 阶球谐、法线用 one-blob(32 bin)§3.2, p2
训练:Adam、学习率 3×10⁻²、训练预算比 15%、割取在 k = 6§5.1, p4
时间预算:5 s(五个场景)/10 s(San Miguel、Zero Day)/20 s(Bistro)§5.1, p4
等时间:本篇 FLIP 8/8 最低,相对最好基线降 16.5%–53.6%表 1-1, p4
等样本(128 spp):本篇 FLIP 8/8 最低,相对最好基线降 16.5%–48.0%;比 ATS 慢 1.09–1.50 倍表 2-1, p7
残差消融:Direct 0.0829 对 ATS 基线 0.0689(时间 4.7 s 对 4.8 s)图 8-1, p7
编码消融:identity 0.0832 → dense grid 0.0689,时间 4.4 s → 4.8 s图 9-1, p8
学习率:3×10⁻² 得 0.0671,3×10⁻³ 得 0.0859(后者飞点更少)图 11-1, p8
连续表示:8/8 场景优于离散版,降幅 2.6%–11.8%表 3-1(左), p8
簇层级:k = 6 在 6/8 场景最优(例外 Bathroom、Living Room,均为 k = 4)表 3-1(右), p8

(四)本篇的两处清单订正与一处原文缺陷(阶段 1/2 实测,写在这里方便后来者复核):

#项判法
①图是 11 张、编号 1–11 不跳号阶段 1 首扫漏了 Fig. 3(p4 左栏):该注文被 PDF 切成「Fig.」+「3. Given」两个碎片行(x 间隙 7.2 pt)逐行跑「行首 Figure 或 Fig. + 图号」的正则必然漏。复扫办法:先把同一基线(y 差 ≤1.6)且 x 间隙 ≤13 的行碎片并成逻辑行,再做正则匹配,并行后图号 1–11、表号 1–3 全部连续
②式是 12 条 (1)–(12)首扫只数"独立成行的 (N)",漏了 (10),它与式子同行(p2 右栏 y 512.6,行尾 … ∇𝜃log𝑝𝜃(𝑌𝑗). (10))。要用"行尾正则"补扫
③原文有一处文字层空洞p2 右栏最后一行是 … normalized outgoing ray direction ωo,p3 左栏第一行是 so we can model the product of radiance and BSDF.;两行之间在文字层上没有任何字形(get_texttrace 0 命中)、也没有任何图形对象。⇒ 第 5 章只写可确证的三条编码,不替原文补那个从句(§5.3)
④原文式 (12) 的分母有一处笔误分母的指数里写作 [c],与求和的哑标 s 不一致;按上下文应为 [s]。本页照录并标注,不替原文改字(§8.4)

14.6 全篇路线速查:14 章各回答什么问题

这张表给"想直接跳到某一处"的读者:左列是章,中间是它回答的问题,右列是那章的判据落在哪件图元上。

章它回答的问题图元
1为什么"采哪盏灯"这件事要改、改成什么图 1-1
2前人两条路各自卡在哪、邻居有哪些—
3怎么把"挑灯"写成一个期望与一个估计量—
4损失怎么定、梯度怎么采、哪个因子可以扔—
5网络长什么样、三种输入各配哪条编码—
6灯太多怎么办、两阶段抽样怎么走图 2-1、图 3-1
7分簇之后梯度式为什么能化简—
8在线训练怎么才能"开局就能用"—
9实验怎么摆、等时间栏赢在哪、代价是什么表 1-1、图 4-1
10等样本栏还赢不赢、收敛曲线说什么表 2-1、图 5-1、图 6-1、图 7-1
11六个旋钮各值多少图 8-1 至图 11-1、表 3-1
12哪里会失手、哪些已给方向哪些还没有—
13这篇论文到底贡献了什么—
14出处、许可与怎么读—

三条读法建议:只关心"值不值得用"的读者,走 1 → 9 → 10 → 12 这条线(问题、两栏主结果、边界);准备复现的读者,补上 3 → 4 → 5 → 6 → 7 → 8(期望与估计量、损失、网络、分簇、梯度、残差);第 2 章是给第一次接触多灯采样的人铺路的,已经熟悉光层次树的可以略过。

本页完