篇目 56 · 单篇论文精读

3DGS 把三维压成了二维;体介质要的是另一条路

Don't Splat your Gaussians · 3DGS 这条线一直在把表示做得更省、把渲染做得更快,但有一处它从没打算改:成像模型。它的每个基元在渲染时变成一张朝向相机的 billboard,沿射线的密度于是退化成 delta 函数之和 —— 这一步是为光栅化速度付的账,代价是离开了物理运输过程。本篇把方向反过来:三维密度留在原地,用「三维核的混合」表示介质,在辐射传输框架里推出闭式的透射率与自由飞行距离采样,再用硬件射线追踪查基元边界、沿射线分段积分。得到的是一个能进物理渲染器的体介质表示:同一组基元既做云与烟的前向渲染,也做逆层析与逆散射,还能当 radiance field 用。除高斯核之外还引入并实测了 Epanechnikov 核。账面口径:同一朵云,4GB 的 10,243 体素网格 对 5.6k 个基元的 224KB(约 ×5251 压缩,OpenVDB 为 ×6.823);烟用 900 个高斯(37KB) 对 512³ 网格(550.4MB),单样本零方差且每样本开销最小;同画质(PSNR 38.05dB)下 Epanechnikov 快 3.26×。而 radiance field 那一节要分两面读:画质上落后于光栅化的 3DGS(MipNeRF-360 上 22.07/0.536 对 25.25/0.771),但在射线追踪这一类里它最快(复杂场景平均 40–50 FPS),且是表里唯一「复杂相机模型 = Yes 而框架 = Ray-tracing」的解。三条自陈局限要一起读:逆渲染训练时间明显更长、绝对画质略逊于 3DGS、资产目前只支持「只有密度非均匀」。另有一句必须写在正文里,否则标题会被读反:「不 Splat」指的是不把三维压成 billboard,核用的恰恰就是高斯。

Jorge Condor、Sébastien Speierer、Lukas Bode、Aljaž Božič、Simon Green、Piotr Didyk、Adrián Jarabo Meta Reality Labs / USI Lugano · 代码 github.com/facebookresearch/volumetric_primitives arXiv:2405.15425v3 · 18 页 · 612×792 pt(Letter)· 双栏 · 版心 x 10.9–573.3 原文编号式 (1)–(30) · 原文图 17 张 · 表 2 张 · 许可:非 CC(arXiv 存缴版)
14 章一级章节(按拆解点切)
18 式原文编号式 (1)–(30) 重排
17 张配图(原文 17 / 自绘 0)
12 条边界与反例(独立成节)

图-段配对表 · 本稿 17 张

图角色档归属支撑的论断层次状态
图 1-1E§1先把「换了什么、换来什么」落到肉眼可见处①②原文 Fig. 1, p.0 · 原样引用
图 2-1E§4基元边界把射线切段、逐段积分①②原文 Fig. 2, p.3 · 原样引用
图 3-1E§6两种核的形状差别(无限/有限支撑)①②原文 Fig. 3, p.4 · 原样引用
图 4-1E§8粉尘爆炸,40k 基元对 512³ 网格①②原文 Fig. 4, p.7 · 原样引用
图 5-1E§5有偏段内均匀采样与半解析无偏的偏差量化①②原文 Fig. 5, p.7 · 原样引用
图 6-1E§8烟,透射率估计器的正面比较①②原文 Fig. 6, p.8 · 原样引用
图 7-1E§8压缩率与「画质换内存」的可调性①②原文 Fig. 7, p.9 · 原样引用
图 8-1E§9逆层析,900 高斯拟合原网格①②原文 Fig. 8, p.9 · 原样引用
图 9-1E§9焦栈,远心相机单视角重建三维结构①②原文 Fig. 9, p.9 · 原样引用
图 10-1E§9逆散射,从 1 个基元长到 551 个①②原文 Fig. 10, p.10 · 原样引用
图 11-1E§10四个真实场景与四条基线的定性对照①②原文 Fig. 11, p.11 · 原样引用
图 12-1E§10壳体消融,三角网格 icosphere 快 4.96×①②原文 Fig. 12, p.12 · 原样引用
图 13-1E§10最大深度消融,画质与时间的权衡①②原文 Fig. 13, p.12 · 原样引用
图 14-1E§12360° 相机,光栅化框架给不了的那一格①②原文 Fig. 14, p.12 · 原样引用
图 15-1E§12按均值排序+泼溅造成的跳变伪影①②原文 Fig. 15, p.12 · 原样引用
图 16-1E§11玩具层析,Epanechnikov 的快速衰减更贴硬边①②原文 Fig. 16, p.13 · 原样引用
图 17-1E§11同辐射场下 Epanechnikov 快 3.26×①②原文 Fig. 17, p.13 · 原样引用
角色档:本篇 17 张全部登记为 E 类(证据图)——它们承载可核对的读数(结果对照、消融曲线、边界示例、结构示意),按分区裁决 E 类禁止自绘,故一律引用原图。自绘 0 张,S 类配额未动用。
取图口径:17 张按实测包围盒从原文 PDF 区域渲染(本篇 17 张的图域为位图与矢量标签混合;3.0× 位图导出约 216 dpi),未裁切拼接、未加标注、未施滤镜,逐图署名(图号 + 原文 Fig. 号 + 页码 + 未修改声明)。17 张的图注一律在图之下(17/17 实测)。包围盒判据是「自图注上缘向上聚合图元簇、遇到正文文本行即停」;本篇与篇目 55 的一处差异是:图内文字标签(如 t1,0、Reference)会落在图形簇上缘之上约 12 pt,只聚合图形块会把它们切掉(图 2-1 上边缘墨迹曾达 4.8%)⇒ 判据改为「宽 < 0.6×栏宽的行视为图内标签、并入聚合;宽 ≥ 0.6×栏宽的行视为正文、只作阻断」,聚合间距容差 14 pt。复核读数:17 个框的四边墨迹全为 0,框内没有一行正文段。其中 5 张为通栏(图 1-1/6-1/7-1/11-1 及图 7 页的通栏行)、12 张为单栏;图 11-1 是近整页竖构(1538×1635),图 15-1 是最小的一张(594×226)。正文一律不逐格复述图内读数,只引原文写出的结论与图内已写的标签;曲线图不逐点读值。
表:共 2 张编号表(原文 Table 1, p.10 / Table 2, p.12)——不以截图呈现,按原文文字层逐格取值后以 HTML 重排(两表的 token 多重集与文字层逐表一致:表 10-1 计 66、表 10-2 计 91),数值未改位数、未做换算。原始裁图(tables/tab1.png/tables/tab2.png)留作核对凭据。本篇体例:原文这两张表的表注都写在表体之上(2/2 实测,且两张的注都落在页面顶部 y ≈ 79,表体紧接其下),站内沿用同一位置,注文逐字照录。另一处原文侧的版式照录不改:表 10-2 的表头是三层(方法名/各方法的引用/最左侧竖排的 Method 行标签),站内按「两行表头 + 行标签列」重排。
式:原文编号式 (1)–(30) 共 30 条,本篇落 18 块(原文式 (1)(3)(5)(6)(7)(8)(9)(10)(11)(12)(13)(14)(16)(18)(19)(22)(23)(24));附录 A 的 (25)(26)、附录 B 的 (27)(28)(29) 与附录 C 的 (30) 按分区惯例不落块,其余按原文行内引用。篇内显示编号 (1)…(18) 按行文顺序连续,每块尾注写「原文式 N」。一处原文侧的坑照录:式 (8) 的编号在文字层里与公式体同处一行,按「独立成行」检索会漏掉它。
许可(本篇与篇目 53/55 不同,须单独写):非 CC。arXiv 摘要页的许可链接是 nonexclusive-distrib/1.0(arXiv 非独占分发,非 CC);而本页所据 PDF 首页的版权块里同时印着模板警告 Please use nonacm option or ACM Engage class to enable CC licenses 与 This work is licensed under a Creative Commons Attribution 4.0 International License. 两行 —— 那行警告说明这条 CC 权利行并未被正式启用。站内按更严的一侧处置:不站内托管 paper.pdf,落点两件,文末只给 arXiv canonical 与 ACM DOI 两条链接,列表页卡片用 pp-lic warn「非 CC · 逐图署名引用」。
出处:ACM Trans. Graph. 44(1), Article 10(February 2025),DOI 10.1145/3711853。确认依据是四处互证:PDF 页脚逐页印 ACM Trans. Graph., Vol. 44, No. 1, Article 10. Publication date: February 2025.、PDF 首页的 ACM 0730-0301/2025/2-ART10 与 DOI、arXiv 摘要页的 Journal reference 与 Related DOI。本页所据版本为 arXiv:2405.15425v3(2025-09-08)。
原文摘要 Abstract, p.0(英文原样引用)

"Efficient scene representations are essential for many computer graphics applications. A general unified representation that can handle both surfaces and volumes simultaneously, remains a research challenge. In this work we propose a compact and efficient alternative to existing volumetric representations for rendering such as voxel grids. Inspired by recent methods for scene reconstruction that leverage mixtures of 3D Gaussians to model radiance fields, we formalize and generalize the modeling of scattering and emissive media using mixtures of simple kernel-based volumetric primitives. We introduce closed-form solutions for transmittance and free-flight distance sampling for different kernels, and propose several optimizations to use our method efficiently within any off-the-shelf volumetric path tracer. We demonstrate our method in both forward and inverse rendering of complex scattering media. Furthermore, we adapt and showcase our method in radiance field optimization and rendering, providing additional flexibility compared to current state of the art given its ray-tracing formulation. We also introduce the Epanechnikov kernel and demonstrate its potential as an efficient alternative to the traditionally-used Gaussian kernel in scene reconstruction tasks. The versatility and physically-based nature of our approach allows us to go beyond radiance fields and bring to kernel-based modeling and rendering any path-tracing enabled functionality such as scattering, relighting and complex camera models. Code is available at https://github.com/facebookresearch/volumetric_primitives"

这一篇要讲清的 26 件事
  • 缺口的形状在一处「从没打算改」的地方:成像模型,不是表示。3DGS 用一组显式三维基元表示场景,这一步它做得很省;但在渲染时,每个基元会变成一张朝向相机的 billboard,沿射线的密度因此成了 delta 函数之和。原文对这一处取舍的评价是:这让它能落进一条极高效的光栅化管线,代价是不保互易性、并且要处理按视角排序带来的问题[§1, p1]。本篇动的是这一处,不动表示。
  • 体介质那一侧有另一套标准做法,它的问题在内存与方差。体素网格在研究与生产渲染器里都是标准件,查询 O(1)、还带空间连通性(可以下采样、可以做 LOD);但它的内存随细节变差,而且要做无偏的透射率就得靠随机追踪(null-scattering 一类),于是引入方差[§1, p1;§2, p1–p2]。
  • 缺口的判词由此定下来:需要一套既紧凑、又能在物理渲染器里做无偏透射率与采样的表示[§1, p1]。本篇给出的东西正好落在这个交叉点上:表示来自 3DGS 那条线,成像模型与渲染路径来自物理渲染器那一条线。
  • 本体主张是一条等式:每个基元 P_i 是一团「统计意义上的物质」,内部发射、截面、相函数都相同,密度 ρ_i 由一个三维未归一核 K_i(x) 定义;消光于是写成核的混合:μ_t(x) = Σ σ_i K_i(x)(原文式 (6))[§4, p3]。
  • 「有限支撑」是整套效率的来源。核若支撑有限,一条射线只会与少数基元重叠(N < N_total);正因为支撑有限,射线上所有基元的进点与出点才能把射线切成有序的段,段内的一切才有闭式[§4, p3–p4]。原文对核只提两条要求:支撑有限(或衰减到能被有效界定/裁剪),以及线积分有闭式或能高效数值计算[§5, p4]。
  • 分段重写是本体最关键的一步。因为核有限支撑,体渲染方程可以改写成「段的和」:段内出射辐射是该段内重叠基元之和(原文式 (7)、式 (8)),段间用递归透射率串起来(原文式 (9)),而段内透射率就是该段内所有重叠基元光学深度之和的指数(原文式 (10))[§4.1, p4]。原文点明这与生产渲染器处理重叠介质的做法同形,差别在于本篇用的是基元:所以那个线积分有闭式。
  • 透射率不用估计,是算出来的。光学深度 τ_i 是核沿射线的线积分(原文式 (11));选定核之后,这个积分有闭式解[§4.1, p4]。这一句是整篇与「透射率估计」那一整条前人线(ray marching、delta tracking、比追踪、控制变量、power-series)的分界。
  • 距离采样被换成了一个反解问题。一般情形下每段都做 Monte Carlo 不现实,所以每条射线只采一段,采样分布希望是 p(t) = μ_t(x_t)·T(x_0, x_t);本篇的做法是均匀采样透射率 ξ ∈ (0,1),再反解距离 t 使透射率等于它:先找到满足 (1−ξ) ∈ [T_{k−1}, T_k] 的那一段,再在段内反解(原文式 (12))[§4.2, p4]。
  • 这一式有没有闭式,取决于核与重叠数。单个核可以闭式,多核重叠就得数值求根:Newton-Raphson 为主(原文说问题良态,1–3 次迭代收敛,精度不错),少数长尾核(例如高斯)偶发数值不稳时退到稍慢但更稳的二分[§4.2, p4]。
  • 一处刻意的有偏取舍:在「很多小核」的复杂资产里可以不做反解,直接在段内均匀采样。它并不满足 p(t) = μ_t·T,实现里假设「分布足够接近」从而在算路径吞吐时把透射率约掉,换来的是大幅加速,代价是一点偏差;偏差在 §7.1 的云的例子上量化过(图 5-1)[§4.2, p4]。
  • 两种核的性格完全不同,而差别就来自「支撑」两个字。高斯核(原文式 (13))归一化、无限支撑,实践里截到 3σ(覆盖 99.73%);在「白化空间」里把积分域对称化,可以把需要的 erf 从两个减到一个,得到光学深度闭式(原文式 (14)),单核的距离采样也有闭式反解(原文式 (16));但GPU 上 erf⁻¹ 的分段近似在某些输入下误差很大,这时同样退到二分[§5.1, p5]。
  • Epanechnikov 核的好处是「壳更紧」:有限支撑(原文式 (18))意味着更紧凑的基元壳、更少的重叠、更有效的加速结构;它的光学深度是一条三次多项式(原文式 (19),常数在附录 B);但它的反解虽然有解析式却不实用,所以单核与多核一律走 Newton[§5.2, p5]。
  • 实现落在 Mitsuba 3 上,两个积分器分工:VPPT 是支持散射介质的体路径追踪器(含 next-event estimation),VPRF 是只沿主射线算辐射场的简化版[§6, p5–p6]。两者都按 §4 的分段式有序迭代,这刚好贴合射线追踪查基元的方式:从前一个交点再打一条射线就收集到新的一段。
  • 壳体几何一处反直觉的结论:先写的是 ray–ellipsoid 自定义求交,结果发现它产出的 BVH 次优(基元包围盒太大),而且自定义求交远慢于硬件 ray–triangle ⇒ 改为把椭球三角化,实测高细分的 icosphere 最快(图 12-1:平均快 4.96×)。原文也说明了为什么不用 mesh instancing:那会把实例级 AABB 的问题重新引回来[§6.2, p6]。
  • 一处工程硬骨头值得单独写:段迭代需要在栈上保存基元出口点与当前活跃基元列表,而 Dr.Jit/PyTorch 这类 JIT 框架没有低到能做指针算术的 API。本篇为此改了 Dr.Jit 核心,让 JIT 生成 PTX 局部状态空间(每线程私有内存)的 intrinsics[§6.2, p6]。
  • 前向渲染的基线是「调到最好」的那一档:网格 + 加权 delta tracking 自由飞行采样 + residual ratio tracking 估透射率,majorant 用超体素的局部统计(局部 majorant/minorant/平均密度,4³ 邻域)配 DDA 遍历。原文的说明是:更紧的局部 majorant 能显著改善复杂非均匀介质里的自由飞行采样,减少零碰撞事件[§7.1.1, p7]。
  • 前向渲染的主结果有两层:一是性能与内存两侧都优于网格法(高反照率 α = 0.99 的复杂资产);二是透射率估计器的正面比较:烟用 900 个高斯(37KB)对 512³ 网格(550.4MB),对手含 track-length delta tracking、比追踪、残差比追踪、ray marching 与两版 power-series;本篇单样本零方差,且每样本开销最小[§7.1.2, p7–p8]。
  • 一处很实用的实现细节:关掉逐段积分、把整条主射线上的高斯一次性积分,每样本可降到 2.84ms 而画面相同。本篇的用法是采样时走逐段、NEE 时走整体,两边各取所长[图 6-1 的图注]。
  • 压缩率与 LOD:减少基元数可以大幅提升紧凑度与速度(对稠密体素网格 ×5251,OpenVDB 是 ×6.823),代价是细节(锐度);原文由此说这套表示很适合做 LoD[§7.1.2, p8–p9]。
  • 逆渲染那一条链上有三件东西:参数化(像 3DGS 那样蒸馏成均值/尺度/旋转,但用 Euler 角而不是四元数,再算协方差 Σ = R S Sᵀ Rᵀ,原文式 (23));渐进生长(从一个基元起,在当前所有基元的包围球上随机采样生子);以及 Bounded Adam:梯度步碰到参数边界时只走一半距离,既保证不越过边界,又顺带重置该参数的优化器状态(原文说这比直接 clamp 更好)[§7.2, p8–p9]。
  • 损失是四项:λL1 + (1−λ)L_SSIM,再加各向异性与小基元密度两项正则(原文式 (24));两项正则只在超过某阈值之后生效,目的是防止个别基元去过拟合训练图里的具体细节[§7.2, p9]。
  • 伴随的难点是「循环」。与 Vicini 等人的做法一样复用同一串随机数、在正向与反向渲染里生成同样的光路,但自动微分系统不支持沿循环传播导数,而「沿射线遍历基元并影响各个段」正是本篇的核心循环 ⇒ 必须手写循环内的伴随(附录 C)。原文也点出这件事的回报:反向传播能同时把梯度送到全部基元参数上,这是有限差分做不到的[§6.3, p6–p7]。
  • 逆渲染的三个问题各有一个读数:逆层析(烟,900 个高斯、PSNR 54.028dB、相对原体积 ×291 压缩,而且这条管线就是 §7.1 里全部资产的来源)|焦栈(远心相机、单视角、32 张、907 个基元、PSNR 39.3186,还能从没见过的视角重建)|逆散射(从 1 个基元长到 551 个、平均 PSNR 36.64dB)[§7.2.1, p9–p10]。
  • radiance field 那一节要按「粗近似」读。VPRF 是 §4 物理模型的粗近似(丢掉逐段积分、关掉重叠逻辑);原文给的理由是「参数被优化去贴合输入数据,近似被补偿了」。另外全部实验用同一套参数(合成与真实数据集都不逐集调参),原文自陈逐集微调会明显更好[§7.3, p10]。
  • 那一节的账面必须分两面读:表 1 里 MipNeRF-360 上 Ours - Gaussian 是 22.07/0.536、3DGS 是 25.25/0.771;Tanks 上是 23.93/0.850 对 25.19/0.879;Blender 上是 32.11/0.957 对 36.073/0.982 ⇒ 画质上落后于光栅化的 3DGS,与射线追踪类(如 iNGP-Base 的 22.19/0.491)相当。但表 2 那一面:它是最快的射线追踪解,复杂场景平均 40–50 FPS,而且是表里唯一一列「复杂相机模型 = Yes 而框架 = Ray-tracing」的射线追踪解[表 10-1/表 10-2, p10、p12]。
  • 「不 Splat」指的是不把三维压成 billboard,不是不用高斯。这句话必须写进正文,否则标题会被读反:本篇的核就是高斯(以及 Epanechnikov),被换掉的是成像模型与渲染路径。同理,准确顺序这件事也要读对:射线追踪天然给出递归得到的顺序,不需要排序、且把基元的各向异性形状考虑进去;3DGS 只按均值排序再变 billboard,因此会有跳变伪影(图 15-1)与跨视角顺序不一致[§7.3.2, p10–p11]。

13DGS 把三维压成了二维;体介质要的是另一条路

一朵云是这篇最好的开场。原文的 teaser 把同一朵云画了三遍:左右两幅是传统的网格法(10,243 的体素网格,4GB),中间一幅是本篇的方法(5.6k 个基元,224KB);渲染时间上,本方法 6.022s、右侧参照 8.144s,而图注自己先承认了代价:「以可能的细节损失为代价」[图 1-1]。先把这个账面读法钉住:这一张不是「本方法全面更快」的证明,它给的是同一朵云的三种表示,以及表示层那一次换法换来多少内存。

要把这件事讲清,得先说体介质那一侧的标准做法长什么样。 云、烟、布料、毛发这类外观,在图形学里一向交给体积表示来扛。最常见的是体素网格:查询时间是 O(1),天然带空间连通性(可以下采样、可以做层次化的 LOD,也可以做滤波),而且研究渲染器与生产渲染器里都有高度成熟的高效实现[§1, p1]。原文对它的评价是「灵活、标准」,随后给出了它的问题:内存随细节变差,尤其是要表示很细的细节与很稀的结构时;而分层网格法虽然能把复杂的非均匀模型切成更简单的局部块,它的构件仍然是网格,于是同样的问题被继承下来[§1, p1]。

还有第二重代价,它比内存更难绕。 体素网格上要算无偏的透射率,得用随机追踪一类的技术(null-scattering 估计器那一族),而被追踪本身就会引入额外的方差[§1, p1;§2, p1]。原文在讲前人工作时把这件事说得更完整:现代体光传输的核心就是透射率的数值估计,从有偏的求积(ray marching)到无偏的追踪,再到控制变量、幂级数、以及面向逆渲染的可微形式:而几乎所有这些做法都需要一个足够紧的「最大密度」(majorant)估计,要么预先算,要么在飞行中估,否则性能撑不住[§2, p1–p2]。一句话:网格法把「介质长什么样」表示得很方便,但把「光怎么穿过它」变成了一道必须靠随机过程逼近的题。

另一条线是 3DGS,它给出的是一组显式的三维基元。 用一组三维高斯基元重建场景这件事,把训练与渲染都做得又快又好,而且比体素网格紧凑得多(原文也补了一句边界:隐式神经模型通常在压缩率上更好,而基于点的方法在画质与渲染速度上是辐射场渲染的当前最好水平)[§2, p1]。到这里为止,它看起来正好是缺口要的那件东西。

问题出在成像模型这一层,而这一层它从来没打算改。 原文把差别写得很直:Kerbl 等人假设每个基元变成一张朝向相机的 billboard,于是沿射线的密度成了一个 delta 函数之和;这么做的回报是它能落进一条极高效的光栅化管线[§1, p1]。代价有两笔。第一笔是物理性:本篇的表述是, radiative primitive-based 的写法保留基元的三维密度、按物理运输过程积分,这对基于物理的渲染是关键的,因为它保住了互易性;而 billboard 化的写法不保。第二笔是排序:当基元被压成 billboard、且只按均值决定先后时,就出现了随视角变化且互相不一致的顺序问题[§1, p1]。

缺口的判词于是落在一处很具体的位置上。 原文的写法是:需要一个既紧凑、又能在物理渲染器里做无偏透射率与自由飞行采样的表示[§1, p1]。把这句话拆开看,它同时约束了三件事:表示要省(否则回到网格法的内存问题),透射率要能算(最好不用随机过程),采样也要能采(而且最好无偏)。本篇的答案是从 3DGS 那条线拿走表示、把成像模型与渲染路径换成物理那一侧的:用「三维核的混合」表示介质,在辐射传输的框架里推导闭式的透射率与采样例程,再用硬件射线追踪去找基元的边界、沿射线分段积分[§1, p1]。

这里有一句话要在开篇就写清,否则整篇的标题会被读反。 本篇的核就是高斯(除了高斯之外还引入并实测了 Epanechnikov 核),它「不 Splat」的只有一件事:不把三维压成二维的 billboard。原文写这句时的用词是「与高斯泼溅技术(的表示)相似,但成像模型根本不同」[§1, p1]。所以正确的读法是:这是一篇在 3DGS 的表示上换掉成像模型与渲染器的论文,而不是一篇「不用高斯」的论文。

同一朵云的三种表示:左侧与右侧为 10,243 体素网格(4GB),中间为本篇的 5.6k 个高斯基元(224KB)
图 1-1 E 类·证据 · 原文 Fig. 1, p.0 · 原样引用 怎么读 ①指认:图注写明三块的分工:左与右是传统的网格法结果(10,243 体素网格分辨率,4GB),中间是本篇用高斯基元表示的同一朵云(5.6k 个基元、224KB);图内另有本方法与若干基线追踪器的渲染时间对照(本方法 6.022s、右侧参照 8.144s),以及两组 MSE(本方法 3.458e-3、参照 3.782e-3)。②读法(怎么读):先看内存标签再看时间标签:关键读数是 4GBs 对 224KBs(约三个数量级的差),时间那一栏则相当接近;图注自己写明这是「以可能的细节损失为代价」。③对照:与图 7-1 连起来读:那一张把「画质—内存—时间」这条可调曲线铺开,本图只是它的一个取值点;与图 6-1 连起来读,那一张把透射率估计器单独拉出来比。④落点:这张图承载的是表示层的替换(网格 → 核混合),不是渲染器的胜负;它是同一朵云的三次表示,不是三个场景。图内标签之外不逐格读值。 来源:Don't Splat your Gaussians(ACM TOG 44(1) · arXiv:2405.15425v3 · Jorge Condor et al.)· 图 1(p.0)· 未修改引用(原样引用,署名保留)

2别人怎么做的:透射率估计、体介质表示、逆体渲染

这一章要处理的是「前人做到了哪一步」,而本篇的位置只有在三条线都摆出来之后才清楚。原文的相关工作分了四个小节,其中三节各管一条线,第四节点的是球面上的高斯混合这段旧历史。

第一条线是透射率的数值估计,它是现代体光传输的核心。 原文的谱系从有偏的求积(ray marching,以及它更早的形式)讲到现代的无偏变体,再讲到随机追踪(null-scattering 估计器,其源头是 1965 年的 Woodcock 追踪),然后是一串方差削减与替代形式:控制变量(含把分布矩也考虑进去的版本)、基于幂级数的替代表述、以及面向逆渲染的可微表述[§2, p1–p2]。原文对这些方法的总评是一句很实用的话:它们都需要足够紧的最大密度(majorant)估计,无论是预计算出来的还是飞行中估出来的,否则性能无法接受[§2, p1]。本篇在这一节末尾给出的分界是:上面这些方法都在估计透射率,而本篇可以把它算成闭式:就是沿射线所有基元透射率的乘积[§2, p2]。

第二条线是「物质长什么样」,即体介质的表示。 对非均匀介质,离散的体素网格因为简单灵活而随处可见,它也能带多级层次结构(加速遍历、做 LOD 滤波),但当介质带有更细的细节时,内存的可扩展性就不行了[§2, p2]。原文接着点了两条旁支:一类是各向同性简单体积的集合(这一类在别的领域里用过,例如粒子物理里建模中子输运),它的好处是单个体积有闭式的透射率与采样解、因此比大多数追踪法方差更低,但找这些体积的边界在很多情况下既低效又慢;另一类是分层网格,把复杂而稀疏的体积切成更小更紧凑的表示,但最终仍依赖更小的体素构件[§2, p2]。隐式那一侧(大 MLP、或稀疏哈希特征配小 MLP)能给出很大的压缩率,代价是查询昂贵[§2, p2]。

这条线上最接近本篇的是 Knoll 等人的工作,而差别正好落在两个词上。 他们提出用各向同性的高斯混合模型建模发射性与吸收性介质(放在基于粒子的体积这一脉络里);但原文指出两处不足:他们并没有利用闭式的透射率表达式,仍需要靠追踪做随机积分;而且它不能表示散射介质[§2, p2]。对照之下本篇列出的三条增量是:闭式的透射率与采样解、对散射介质的支持、以及各向异性核与高效的逆渲染[§2, p2]。这三条也正好是后面三章各自要兑现的东西。

第三条线是逆体渲染,它比前两条更早,但用的工具一直是网格。 原文点了一串:把微米级布料贴片与实测数据对齐的早期工作、多尺度体积表示的近似、为 3D 打印做散射补偿、以及用手工导数做的逆散射;此后有人提出了适合逆体渲染的可微辐射传输框架[§2, p2]。这一小节末尾有一句容易被略过的判断:这些工作都用体素网格表示介质密度,而本篇提出的表示「可以装进这些逆管线里」[§2, p2]。换句话说,本篇在逆渲染这一侧并不与它们竞争位置,而是提供一个可以替换进去的表示。

radiance field 那一段的谱系要从 NeRF 数起,落点则在「去掉 MLP」这一步。 NeRF 引入了基于 MLP 的连续隐式体积表示;后续工作补上多尺度表示、并把范围扩到无界场景;而训练与求值 MLP 始终要吃掉大量算力。Instant-NGP 改用稀疏的哈希特征网格配一个小 MLP,把重建速度提上来;此后稀疏化与层次化成为优化拟合与渲染的一条主路(做到移动端实时,或加速复杂资产的离线渲染)[§2, p2]。最后一步是 3DGS:它完全去掉了 MLP,改用显式的基于高斯的表示,配上高效的光栅化泼溅技术,于是能同时做到快渲染与高质量重建,并且把更多基元分配到需要更细细节的地方[§2, p2]。原文对这一段的定位是一句自陈:本篇「取了 Kerbl 的方法,并把它扩展到辐射传输框架下的一般散射介质」[§2, p2]。

第四节讲的是球面上高斯混合模型的旧历史,它的作用是划清「拟合亮度」与「建模物质」的分界。 定义在球面上的高斯混合在图形学里用了很久:拟合 BRDF 与环境图、预计算辐射传输、以及在线的路径引导;也有人拟合过四维高斯混合来加速闪耀表面的渲染;Jakob 等人则用三维各向异性高斯混合去拟合介质中辐射亮度的分布,展示了基于光子的加速渲染[§2, p2–p3]。原文特意说明:这项工作与本篇有相似之处(都是沿高斯做闭式积分),但它拟合的对象是辐射亮度、场景是辐射估计;而本篇建模的对象是物质(密度),因此可以放进任意体渲染器里。原文随后留了一句未来方向:把两种表示合起来(介质与亮度都用核表示)会是一条有意思的线[§2, p3]。

3本体主张:把物质写成核的混合

前一章的三条线看完,本篇要加的那一步就显得很小:把介质本身写成一堆核的混合。这一章把那个定义说清,并且交代它与「泼溅」那条路的分界在哪里。

先给基元下一个可操作的定义。 每个基元 P_i 代表一团「统计意义上的物质聚合」,团内的发射、截面与相函数都相同,而它的密度 ρ_i(x) 由一个三维的、未归一的核 K_i(x) 给出[§4, p3]。这个定义与 3DGS 里「一个高斯就是一个带颜色和透明度的椭球」很像,但有一处根本差别:这里的高斯首先是一团有密度的物质,它的观感来自光穿过这团物质后的积分;那边的高斯首先是一块带颜色的面片。

把定义写成等式,就是这一篇的核心公式。 给定这些基元,物质的分布(也就是消光概率)就成了这些体基元的混合:

(1) μt(x) = Σi=1N σi Ki(x) (本篇的核心定义:消光=核的混合。N 是影响到点 x 的基元个数(不是场景里的基元总数 Ntotal),σi 是第 i 个基元的截面,Ki 是它那个三维未归一核。原文紧接的一句是效率的来源:对无限支撑的核 N 就等于 Ntotal,而本篇假设所有核都有限支撑,所以典型情形是 N < Ntotal)(原文式 6)

式子里的 N 是影响到点 x 的基元个数,σ_i 是它们的截面。这里紧跟着一句很要紧的话:对于无限支撑的核,N 就是全部基元数 N_total;而本篇假设所有核都是有限支撑的,所以典型情形是 N < N_total[§4, p3]。这句话是全篇的效率来源,后面第四章与第七章都靠它。至于单次散射反照率与相函数,算法同理,唯一的区别是它们需要归一化(推导在附录 A)[§4, p3]。

有限支撑带来的第一份红利,是「一条射线只碰少数几个基元」。 这不是一个近似,而是定义自带的性质:只要核在某个范围之外恒为零,射线与场景的交点集合就是有限的、可枚举的。原文没有把这句当卖点写,但它在第四章里立刻兑现了:因为可枚举,射线上所有基元的进点与出点才能被收集起来,才有「段」这个概念。

一份不那么显眼、但必须写的红利是:这一步顺手把「排序」这件事从渲染里拿掉了。 泼溅那条路必须决定基元的先后,而它的做法是按均值排一遍、再把基元压成面片;这件事在基元形状各向异性、或者多个基元的深度互相穿插时会出错。本篇的做法不同:顺序由递归的射线遍历天然给出,而且把基元的各向异性形状考虑了进去[§7.3.2, p10]。原文在讲与 3DGS 的对照时,把这一点列为第一条优势,并举了跳变伪影与「不同视角之间顺序不一致」两个现象(那一处在第十二章展开,图 15-1)。

本章最后要把分界写死,因为它是全篇最容易被读反的地方。 原文的表述是:场景表示与高斯泼溅技术相似,但成像模型根本不同:Kerbl 等人假设每个基元变成一张朝向相机的 billboard,于是沿射线的密度成了 delta 函数之和,这让他们能把模型实现在一条极高效的光栅化管线上;而本篇保留基元的三维密度、按物理运输过程积分[§1, p1]。两句话分开看都不稀奇,合起来才是这一篇的位置:表示可以共享,成像模型不能共享。

4把 RTE 改写成「基元的分段和」

前面说本篇「在辐射传输框架里做」,这一章就是把那句话兑现成一条可算的式子。它要处理的技术动作只有一个:把沿射线的积分,改写成沿射线的有限个段的和。

起点的三件标准件先摆出来。 在几何光学的假设下,参与介质里的光传输由辐射传输方程(RTE)支配:

(2) (ω · ∇) L(x, ω) = −μa(x) L(x, ω) − μs(x) L(x, ω) + μa(x) Q(x, ω) + μs(x) S(x, ω) (辐射传输方程 RTE。左边是在点 x、沿方向 ω 的入射辐射沿该方向的导数;右边两项负号是吸收与出射散射造成的损失,μa 与 μs 是吸收与散射系数(消光 μt = μa + μs),Q 是发射,S 是内散射项 —— 也就是那个把单位球面 S² 上所有方向的来光按相函数 fp 加进来的积分,它必须靠 Monte Carlo 求值。原文在此处另外给了密度与截面的关系 μt(x) = ρ(x)·σ(x))(原文式 1)

式子里第一行是在点 x、沿方向 ω 的入射辐射,右边的 −μ_a·L 与 −μ_s·L 分别是吸收与出射散射造成的光量损失,μ_a(x) 与 μ_s(x) 是吸收与散射的微分概率(系数),而消光系数 μ_t = μ_a + μ_s;另外两项里,Q(x, ω) 是发射,S(x, ω) 是内散射项:它把来自单位球面 S² 上所有方向的光按相函数 f_p 加进来,也就是本篇里那个「需要 Monte Carlo」的积分。密度与截面之间还有一层关系:在物质统计不相关的假设下,μ_t(x) = ρ(x)·σ(x),即密度(单位 m⁻³)乘截面(单位 m²)[§3, p3]。

把微分形式沿方向积起来,就得到体渲染方程。 这一步是标准推导:把式 (1) 两边沿方向 ω 积分,辐射就写成沿射线的累积,透射率按 Beer–Lambert 律给出(原文式 (3) 与式 (5))[§3, p3]。原始的写法里还带上边界处的出射辐射,本篇在后面的改写中先把它省略,因为那一段与本文要处理的部分无关[§4.1, p4]:

(3) L(x0, ω) = ∫0s T(x0, xt) μt(xt) Lo(xt, ω) d t + T(x0, xs) L(xs, ω) (体渲染方程:把 RTE 沿方向 ω 积分得到。含义是「沿射线的累积发射/内散射」加「边界处透射过来的那部分」。其中 xt = x0 − t ω,α(x) = μs(x)/μt(x) 是单次散射反照率,Lo(x, ω) = (1 − α(x)) Q(x, ω) + α(x) S(x, ω) 是该点的出射辐射,T 是透射率。本篇后面的分段改写会先把边界项省略,因为它与本文要处理的部分无关)(原文式 3)
(4) T(x0, xt) = exp( −∫0t μt(xt′) d t′ ) (透射率,按 Beer–Lambert 律。物理含义是「因为吸收与出射散射而造成的 fractional visibility」,即光走这段距离没有被拦下的概率。原文把它写成指数形式,是因为接下来要在这个指数里做文章:把指数里的积分按基元拆开,就得到后面那条「段内透射率=重叠核光学深度之和的指数」)(原文式 5)

式 (3) 里的 α(x) = μ_s(x)/μ_t(x) 是单次散射反照率,L_o(x, ω) 是该点的出射辐射;式 (5) 给出的透射率 T,物理含义是「因为吸收与出射散射而造成的fractional visibility」,也就是光走这段距离没被拦下的概率。

关键的一步在这里:因为核有限支撑,射线上出现了一组天然的「切点」。 每个基元的边界 t_{i,0} 与 t_{i,1} 把射线切成有序的段 S_k,段与段首尾相接;于是体渲染方程被改写成段的求和[§4.1, p4]:

(5) L(x0, ω) = Σk=1M Tk−1(x0, xt) Lk(xbtk,0, ω) (分段求和:整条射线的辐射 = 各段贡献之和,而每段前面乘的是它之前所有段的累积透射率。M 是射线上的段数。原文说这一步之所以成立,是因为核有限支撑 —— 射线上所有基元的进点与出点把射线切成了有序的段)(原文式 7)
(6) Lk(xbtk,0, ω) = ∫btk,0btk,1 T(xbtk,0, xt) [ Σi ∈ Sk σi Ki(xt) Lo,i(xt, ω) ] d t (单段的出射辐射:是该段内所有重叠基元的贡献之和,每一项再乘上它在段内的透射率。Sk 是第 k 段里重叠的基元索引集合,|Sk| ≤ N。原文在这一式上标注的编号 (8) 在文字层里与公式体同处一行,所以按「独立成行」检索会漏掉它 —— 这也是本篇式号普查里的一处坑)(原文式 8)

式 (7) 说的是:整条射线的辐射 = 各段贡献之和,其中每段前面乘的是它之前所有段的累积透射率。式 (8) 给的是单段的出射辐射:它是该段内所有重叠基元的贡献之和,每一项再乘上该基元在该段内的透射率。

段与段之间的串联,用的是递归写法。 原文没有把透射率写成一个大乘积,而是写成一个递推算子:

(7) Tk(x0, xt) = Tk−1(x0, xbtk−1,1) · T(xbtk,0, xt) (递归形式的透射率。边界条件是 T0 = 1、TM = T,也就是递归自然给出整条射线的透射率。原文特意不把它写成一个连乘的大式子 —— 因为后面的距离采样要沿着这个递归逐段搜索)(原文式 9)

它的边界条件是 T_0 = 1、T_M = T,也就是递归自然给出整条射线的透射率。而段内的透射率有一条很干净的式子:它就是该段内所有重叠基元的光学深度之和的指数:

(8) T(xbtk,0, xt) = exp( − Σi ∈ Sk τi( xbtk,0, xmin(t, btk,1) ) ) (段内透射率=该段内所有重叠基元光学深度之和的指数。这一式是全篇「透射率可以闭式算」这句话的落点:只要每个 τi 能解析积分,段内透射率就是乘积,不需要任何随机追踪)(原文式 10)
(9) τi(xa, xb) = σi ∫max(a, ti,0)min(b, ti,1) Ki(xt′) d t′ (单个基元 Pi 在区间 [a, b] 上的光学深度,即核沿射线的线积分乘上截面。积分的上下限取「区间端点」与「基元进出点」的较紧一侧 —— 这正是有限支撑带来的好处:基元之外核恒为零,积分区间自动被裁短)(原文式 11)

式 (11) 定义了单个基元 P_i 在区间 [a, b] 上的光学深度 τ_i:它是核 K_i 沿射线的线积分(乘上截面 σ_i)。到这里,本篇的技术骨架就齐了:剩下的所有工作,都是为不同的核把式 (11) 这个积分算出来(第六章),以及把「按透射率采样距离」这件事解出来(第五章)。原文在这一章末尾给了一句预期:「选定合适的核之后,我们会在第 5.1 节说明这个积分可以闭式算出」[§4.1, p4]。

这一段改写与生产渲染器的既有做法同形,差别只在「构件是不是基元」。 原文明确说了这一点:把射线按基元的进出点切成段、用前到后的顺序积分、并跟踪一个解析计算的乘法透射率,这与生产渲染器处理复杂重叠介质的方式相似(引用的是 Fong 等人的体积渲染章节);关键差别在于本篇用基元来近似介质,于是闭式的透射率与采样表达式才成立[§4.1, p4]。这句话值得停一下:同一套分段框架在网格法里早就有了,网格法缺的是「段内那个积分有闭式」;而基元恰好把这件事补上了。

Flatland 示意:基元的边界把射线切成段,段内叠加重叠基元的贡献
图 2-1 E 类·证据 · 原文 Fig. 2, p.3 · 原样引用 怎么读 ①指认:图注写明上下两半的分工:上半是一个「Flatland」(二维平面)里的介质,用 N_total = 5 个基元 P_i(i ∈ [1, 5])建模,而从相机出发的那条射线只与其中三个基元直接相交;下半把基元沿射线投成一维,它们的密度、发射与内散射都在那条线上积分,而这条线可以被基元的边界切成互不相交的段。②读法(怎么读):先在下半找三件事:段的边界从哪来(基元的进出点)、哪几个基元在同一段里重叠、以及每段末尾那个「S_k」在标注什么。图注给出的判词是:每段 S_k 的贡献,是「在该段上重叠的那些基元」的积分。③对照:与图 3-1 连起来读,那一张是核的形状;与图 5-1 连起来读,那一张量的是「段内距离怎么采」带来的偏差。④落点:这张图是第 4 章那组式子的几何底稿:它把「分段和」这件事从公式变成了可以指着看的东西;它不含任何读数,正文里也没有从它读出数字。图内标签之外不逐格读值。 来源:Don't Splat your Gaussians(ACM TOG 44(1) · arXiv:2405.15425v3 · Jorge Condor et al.)· 图 2(p.3)· 未修改引用(原样引用,署名保留)

5距离采样:把「求一个 t」变成「反解一个方程」

第四章把辐射写成了段的和,但那只是「给定一条射线,怎么把它积出来」。渲染里还差一半:光在路上哪里与介质发生作用。这一章处理的就是这件事,而且它有一处刻意的有偏取舍。

先说为什么不能逐段做 Monte Carlo。 式 (7) 看起来是一串可以解析算的求和,但在最一般的情形下,段内的出射辐射 L_{o,i} 里藏着内散射积分,那部分必须用 Monte Carlo 求值。原文的判词是:逐段都做 Monte Carlo 估计会很快变得不现实;因此需要每条射线只采一段,而这就要求沿射线采样距离 t,且采样分布应该正比于 μ_t(x_t)·T(x_0, x_t)[§4.2, p4]。

本篇没有去做 delta tracking,而是把透射率当成自变量。 原文给了两条可走的路:本篇的基元介质允许使用 delta tracking(或任何其他 Monte Carlo 估计器)来做距离采样,但作者选择利用式 (9) 的递归透射率,把问题改写成一道迭代搜索题:先均匀地采一个透射率值 ξ ∈ (0,1),再去找那个使透射率等于它的距离 t。原文特意点了这个做法的出处与增量:它与经典的「regular tracking」很接近,增量在于把「多个核互相重叠」这件事高效地处理了进去[§4.2, p4]。

具体的两步很干净。 第一步先找段:寻找那一段满足 (1 − ξ) 落在 [T_{k−1}, T_k] 之间;第二步在该段内部把透射率反解出来,也就是解下面这一式:

(10) log(1 − ξ) = − Σi ∈ Sk τi( xbtk,0, xt ) (距离采样的反解方程。做法是先均匀采一个透射率值 ξ ∈ (0,1),再解出使透射率等于它的距离 t。这一式有没有闭式解,取决于核的类型与段内的重叠数:单核可闭式,多核重叠则用 Newton-Raphson(原文说问题良态、1–3 次迭代收敛),长尾核偶发不稳时退到二分。原文另有一处刻意的取舍:在「很多小核」的资产里可以跳过这一式,直接在段内均匀采样,用一点偏差换大幅加速)(原文式 12)

这一式有没有闭式解,取决于核的类型与段内的重叠数。 原文的说法是:对于某些核、以及段内重叠不多的情况,它有解析解;但「同一个段里很多个核重叠」这类情形没有简单解,于是改用数值求根。具体的分工是:以 Newton-Raphson 为主:原文给的理由是这个问题的条件很好(well-conditioned),所以1 到 3 次迭代就能收敛到不错的精度;但对于某些长尾的核(原文举的例子正是高斯),它偶尔会数值不稳,这时退到稍慢但更稳的二分法[§4.2, p4]。

接下来是本章最需要写清的一处取舍:段内均匀采样,而且它是有偏的。 原文的动机是「最大化速度」:在用很多个小核拟合出来的复杂资产里,可以完全跳掉式 (12) 的反解,直接在每一段里均匀采样。原文把代价写得毫不含糊:这意味着我们采样的概率密度 p(t) ≠ μ_t(x_t)·T(x_0, x_t);而实现里之所以还能算下去,是因为假设这个分布「足够接近」目标分布,于是可以在计算路径吞吐时把透射率约掉。它换来的是大幅的性能提升,代价是引入了一点偏差;这一点偏差在 §7.1 的云的例子上被量化过[§4.2, p4]。

所以这一章实际上给了两条距离采样路线,而它们的分工在第七、第八章才显出来。 一条是无偏的半解析路线:靠式 (12) 反解,求解器自选 Newton 或二分;另一条是有偏的均匀路线:不反解、直接采,用假设换速度。原文在后面的实验里把两条都跑了出来,并且给出了一张图专门量偏差(图 5-1),也给出了「什么时候该担心、什么时候可以放心」的判词:那一条判词属于第八章。

云的两种段内距离采样:左侧为无偏半解析,右侧为有偏均匀采样
图 5-1 E 类·证据 · 原文 Fig. 5, p.7 · 原样引用 怎么读 ①指认:图注写明这是同一朵云、均为 1024 spp 的两幅渲染,左是本篇无偏的半解析段内距离采样,右是本篇有偏的段内均匀采样;图内另印有时间与误差读数(均匀采样一侧标 Rendering time: 15.567mins、MSE to reference: 1.978e-5,二分求解器一侧标 8 iterations per critical segment、Rendering time: 6.275mins (x2.48 faster))。②读法(怎么读):先看两幅画面有没有可见差别,再去看那两个数字:图注给的判词是:由于透射率估计的精度高、而且像云这种复杂资产里段本身很小,均匀采样引入的偏差极小,而加速显著。③对照:与图 6-1 连起来读:那一张比的是透射率估计器(两边都无偏地算透射率),本图比的是同一估计器之内的距离采样方式,两处比的不是同一件事;与图 7-1 连起来读,那张把「画质换内存」的可调性铺开。④落点:这张图是「有偏但可控」这条判词唯一的读数依据:引用时必须把「偏差小」和「资产类型/段的尺寸」一起带上,不能读成「均匀采样没有代价」。图内标签之外不逐格读值。 来源:Don't Splat your Gaussians(ACM TOG 44(1) · arXiv:2405.15425v3 · Jorge Condor et al.)· 图 5(p.7)· 未修改引用(原样引用,署名保留)

6两种核:一个无限支撑,一个有限支撑

第四章把式 (11) 那个积分留给了这一章。本章要做的事有两件:给出两种核的定义,并把它们的光学深度、透射率与距离采样算到可用;同时把「分析地选哪一种核」这件事的判断依据交出来。

框架对核只提两条要求,而这两条决定了哪些核能进来。 原文写得很清楚:任何核都可以用在本篇的框架里,只要满足 ① 它支撑有限,或者它的衰减足够快、能被有效地界定或裁剪;② 它的线积分有闭式解,或者能被高效地数值计算[§5, p4]。本篇据此实现了两种核:高斯与 Epanechnikov;原文给的理由是这两种在信号处理、密度估计、渲染与逆图形学里都被成功用过[§5, p4]。

第一种是高斯核,问题出在「无限支撑」这四个字上。 归一化的三维高斯基元(原文式 (13))由一个均值与一个 3×3 协方差矩阵给出:

(11) gi(x) = 1 ⁄ [ (2π)3/2 |Σi|1/2 ] · e−½ (x − ci)T Σi−1 (x − ci) (归一化的三维高斯核。Σi 是 3×3 协方差矩阵、ci 是均值。它的麻烦全在「无限支撑」四个字上:理论上一条射线要评估场景里所有基元;实践里的做法与 3DGS 一致 —— 截到三倍标准差,覆盖高斯密度的 99.73%)(原文式 13)

因为高斯没有有限的支撑,理论上一条射线要评估场景里所有基元才能算准;实践里的做法与 Kerbl 等人一致:把支撑截到三倍标准差,这样覆盖了高斯密度的 99.73%[§5.1, p5]。这一步是近似,但原文随后给出了它换来的东西:闭式的光学深度。

求光学深度的过程里有一处值得学的技巧:把积分域对称化。 本篇先把射线线性变换到高斯的局部坐标系(原文叫 whitened space,即把高斯的椭球壳变成半径 1 的球);因为高斯关于均值对称,可以把积分原点平移到区间中点,让积分域变成对称的:原文直接点出这一步的实际收益:它把需要的 erf 从两个减到一个[§5.1, p5]。把式 (13) 代进式 (11) 之后,光学深度长成:

(12) τi(x−ts, xts) = σi ∫−tsts gi(xt) d t = G · e−½ (a − b²) · erf( √( ½ (a − b²) ) ) (高斯的光学深度闭式。原文先做两步预处理:把射线线性变换到高斯的局部坐标系(原文叫 whitened space,椭球壳在这一坐标下变成半径 1 的球);再利用高斯关于均值的对称性,把积分原点平移到区间中点使积分域对称 —— 这一步的实际收益是把需要的 erf 从两个减到一个。式中的 a、b、G 由射线位置方向与协方差矩阵的特征值决定(原文式 (15)):G = σi ⁄ √( 2π vT Σi−1 v |Σi| )。须注明:原文的排印是二维的(分式、根号、积分号分层),此处按线性写法展开,层级关系以原文为准)(原文式 14)

其中三个量 a、b、G 由射线位置与方向、以及协方差矩阵的特征值决定(原文式 (15))[§5.1, p5]。若假定介质是指数型的,透射率就是 T = exp(−τ_i),回到式 (8) 那条路。

单核的距离采样也有闭式,但它有个工程上的坑。 对一个高斯基元按 p(t) = α_i·G_i(x_t)·T(x_0, x_t) 采样自由飞行距离,需要把式 (14) 的光学深度反解;原文在 t_0 = 0、并假设到 t_0 为止的累积透射率为 β 的条件下给出了闭式解:

(13) t(ξ) = −b + (1/G) · e½ (a − b²) · √( −2 log(ξ / β) ) · erf−1( √( ½ (a − b²) ) ) (高斯单核的距离采样闭式反解。前提是 t0 = 0、随机数 ξ ∈ (0,1)、并假设到 t0 为止的累积透射率为 β。原文紧随其后给了一处工程提醒:GPU 数学库里常见的 erf−1 分段近似在某些输入上误差很大,遇到这些输入时本篇同样退到二分求解器 —— 也就是说「纸面上的闭式成立」不等于「硬件上可用」。须注明:原文的排印是二维的,此处按线性写法展开)(原文式 16)

而那个坑是这么写的:GPU 数学库里常见的 erf⁻¹ 分段近似在某些输入上会产生很大的误差,遇到这些输入时,本篇同样退到二分求解器,代价是一点性能[§5.1, p5]。这一段值得记下来,因为它说明了一件事:闭式解在纸面上成立,不等于在硬件上可用。

第二种是 Epanechnikov 核,它的全部好处都来自「有限支撑」。 原文一上来就给了它的用处:在本篇的框架里,Epanechnikov 相对高斯有一个显著优势:支撑有限,于是基元壳更紧凑,而更紧凑的壳减少重叠数、从而加速渲染[§5.2, p5]。它的定义(原文式 (18))用一个三次多项式在椭球内取值、椭球外恒为零:

(14) Ei(x) = (15 ⁄ 8π) · ( 73 |Σi| )−1/2 · [ 1 − 1/7 · d(x) ]2 当 d(x) ≤ 1;否则 Ei(x) = 0 (Epanechnikov 核。与高斯同样的 Σi、ci,d(x) = (x − ci)T Σi−1 (x − ci)。它的全部好处来自支撑有限:椭球之外恒为零 ⇒ 基元壳更紧凑、重叠更少、加速结构更有效。须注明:原文的分式与指数按二维排印,此处按线性写法展开)(原文式 18)

透射率那一侧,Epanechnikov 的光学深度是一条三次多项式。 把它的核代进式 (11) 积分,得到

(15) τi(xt0, xt1) = σi ∫t0t1 Ei(xt) d t = σi Knorm ( K3(t03 − t13) + K2(t02 − t12) + K1(t0 − t1) ) (Epanechnikov 的光学深度:一条三次多项式。K1、K2、K3 与 Knorm 是依赖射线位置方向与核协方差特征值的常数,显式表达式在附录 B。透射率同样按 T = exp(−τi) 给出。一处明确的不对称要写清:它的距离采样没有可用的闭式 —— 原文说反解虽有解析形式、但「考虑到复杂度并不实用」,因此单核与多核一律走 Newton-Raphson)(原文式 19)

式中的 K1、K2、K3 与 K_norm 是依赖射线位置方向与核协方差特征值的常数,具体表达式在附录 B[§5.2, p5]。透射率同样按 T = exp(−τ_i) 给出。

但它的距离采样没有可用的闭式,这是一处明确的不对称。 原文的表述很直:虽然对单个 Epanechnikov 核来说,式 (12) 的反解确实存在解析形式,但它并不实用(考虑到它的复杂度);因此本篇对它直接使用 Newton-Raphson 求解器,无论段内是一个核还是多个核重叠[§5.2, p5]。把这两半合起来看,两种核的分工是这样的:高斯的闭式更全(透射率与单核采样都有),但支撑无限、壳更松;Epanechnikov 的壳更紧,但采样只能靠迭代。这两条会一直用到第十一章的那组实测对照。

两种核的形状对照:高斯(无限支撑)与 Epanechnikov(有限支撑)
图 3-1 E 类·证据 · 原文 Fig. 3, p.4 · 原样引用 怎么读 ①指认:图注写明这是一维(插图)与二维两种情形下、高斯核与 Epanechnikov 核的视觉对照;图内画出的是 ±3σ 的支撑范围,用来暴露两者的主要差别:高斯的支撑是无限的,而 Epanechnikov 是有限的、并且会迅速衰减到 0。②读法(怎么读):对着看「往外走的时候谁先归零」:高斯那一侧要靠「截到 3σ」这个近似才结束,Epanechnikov 那一侧是真的到此为止;这一处差别正是后面两处实测结论的源头(快速衰减更贴硬边,见第 11 章;壳更紧导致更快,见第 11 与第 12 章)。③对照:与图 2-1 连起来读,那一张讲的是「壳的边界被用来切段」;与图 16-1、图 17-1 连起来读,那两张分别是这一处差别在拟合质量与渲染速度上的读数。④落点:这张图是形状层面的底稿,它本身不含读数;正文里没有从它读出任何数字。图内标签之外不逐格读值。 来源:Don't Splat your Gaussians(ACM TOG 44(1) · arXiv:2405.15425v3 · Jorge Condor et al.)· 图 3(p.4)· 未修改引用(原样引用,署名保留)

7实现:射线查边界、把椭球三角化、以及「栈上数组」

前面五章都是纸面上的东西。这一章要处理的是「把它真的跑起来」时撞到的三处工程问题,其中最后一处特别值得写,因为它越出了图形学的边界。

先交代落点:本篇建在 Mitsuba 3 上,提供了两个积分器。 原文的做法是扩展 Mitsuba 3,让它支持带不同壳体几何的核基元体,并用射线追踪来查询射线上的基元。两个积分器按目标应用分工:其一是 VPPT(volumetric-primitives path tracer),一个支持散射介质的体路径追踪器;其二是 VPRF(volumetric-primitives radiance field),一个只沿主射线计算辐射场的简化版[§6, p5]。

两者共用同一套分段框架,而它恰好贴合射线追踪的查询方式。 原文的说法是:两种情形下都按 §4.2 描述的分段式有序迭代段;这一点与「用射线追踪查基元」配合得很好:因为只要从上一个交点再打一条射线,就收集到了新的段[§6, p5]。Listing 1 给出了两个积分器共用的伪代码骨架:维护一个「基元出口点」列表与一个「当前活跃基元」列表,每次取出最近的那个点当作下一段的边界,处理完这一段后更新两个列表、把射线移到新的位置、深度加一,如此往复[§6, Listing 1, p6]。

第一处工程问题:壳体到底用什么几何去求交。 本篇先写的是 ray–ellipsoid 的自定义求交,但实测发现两个问题:一是它产出的 BVH 次优,原因是基元的支撑范围可能很大;二是自定义求交核明显慢于硬件加速的 ray–triangle 求交。于是改道:把椭球三角化,在三角形上做射线追踪。原文说他们分析了一组三角化方案(见第 10 章的图 12-1),发现尽管场景里的三角形数量变多了,性能却显著提升,其中细分度很高的 icosphere 在执行时间上最好[§6.2, p6]。原文还顺手排除了另一条看似更省的路:用 mesh instancing 避免复制壳的几何,但那会把「用轴对齐包围盒做实例级 BVH」的问题重新引回来[§6.2, p6]。

第二处工程问题:段迭代需要「栈」,而 JIT 框架不给你栈。 原文把这一点单独写成一个小节(Stack array allocation)。问题是这样:沿射线迭代基元时,必须保存一组状态:既有「基元的出口点列表」(用来决定段的边界),也有「当前段里活跃的基元记录」;这两样都要求在寄存器里高效地分配、访问与写入变量数组(也就是栈上的数组,而不是堆上的)。而麻烦在于:大多数 JIT 框架(原文点名 Dr.Jit 与 PyTorch)并没有提供低到能做指针算术的 API。本篇的解法是把工具链拆开动:NVIDIA 的 PTX 汇编语言提供了「局部状态空间」(local state space):每个线程可以有自己的私有内存,于是他们修改了 Dr.Jit 的核心,在 JIT 编译器里加入生成这类 intrinsics 的例程[§6.2, p6]。

第三处是本篇与 3DGS 在「能不能做逆问题」上的分水岭:把伴随写进循环里。 本篇为积分器开发了一条反向导数传播的例程,让它们可以用于求解逆问题。做法上与 Vicini 等人的工作平行:正反两个渲染阶段复用同一串随机数,从而生成完全相同的光路,再沿这些光路把梯度送到场景参数、并从参数取回梯度;此外这条例程接受「沿光路的辐射总量」作为输入,用它去取回反向模式微分所需的各种量[§6.3, p6]。

难处在于本篇的核心循环,而自动微分恰恰不支持它。 原文点出一个特殊之处:本篇的伴随实现里包含「沿射线遍历基元、并影响各个段」的循环。而 Dr.Jit 这类自动微分系统不支持沿循环自动传播导数;就算去改它、让它自动生成相应的变换,也不会高效:因为要让循环在一般情况下可逆,每一次迭代都得把所有循环变量复制一份存下来。结论是:必须为这些循环手写伴随形式(附录 C 给出了两个积分器的伴随;完整推导与实现细节在补充材料里,并附有与有限差分的对照)[§6.3, p6–p7]。

这件事的回报在原文里写得也很直白。 原文强调了反向传播的能力范围:本篇的实现可以同时把梯度传播到所有基元参数上,这是相对有限差分的一个显著优势:因为有限差分通常一次只能处理一个参数[§6.3, p7]。把这句话与第 9 章的三个逆问题连起来看,就知道它为什么重要:逆层析、焦栈、逆散射这三件事都要求「一次迭代里把所有基元的参数一起更新」,而参数化的基元数量从 8 个到 900 个不等。

8前向渲染的账:云、烟、粉尘

从这一章开始进入实测。前向渲染要回答的问题很朴素:这套表示在真实的云与烟上,比网格法省多少、快多少,以及代价落在哪里。

先交代实验设置,因为本篇在这一节里做了一件容易被忽略的事。 前向渲染的实验只让密度变化,把单次散射反照率与相函数固定下来;核选用高斯,原文给的理由是高斯更适合表示云、烟这类光滑的体数据[§7.1, p7]。三件资产都来自体素网格,而从网格到高斯混合(GMM)的转换,用的是第 9 章那套逆层析管线(可选先用期望最大化做初始化)。拟合的代价随基元数变化:从烟(图 6-1)的 15 分钟,到最复杂的云(图 1-1)的数小时;原文特意补了一句:这一步在本篇的实现里没有优化过,可以被显著加速[§7.1, p7]。

基线的配置要写全,因为它不是「朴素网格法」。 原文用作对照的是一个网格表示的体积,渲染时用加权的 delta tracking 做自由飞行采样,透射率用残差比追踪计算;而自由飞行采样与透射率估计两处所用的 majorant,都来自一个更粗的网格:每个超体素里存着该处 4³ 体素邻域上的局部统计量(局部 majorant、minorant 与平均密度),采样时用 DDA 遍历这个超体素网格。原文对这一步的解释是:更紧的(局部)majorant 能显著改善复杂非均匀介质里的自由飞行采样,减少零碰撞事件的概率[§7.1.1, p7]。还有一处口径要写清:参考用的体素网格,是把本篇的混合模型体素化得到的,目的是让两边的密度分布尽量一致,这样才能做逐像素的误差比较[§7.1.1, p7]。

本篇这一侧也有自己的取舍。 用的是 VPPT 加 next-event estimation(NEE);用解析的透射率估计换质量与速度,NEE 上用俄罗斯轮盘赌终止,并把采样简化成「在关键段上均匀采一个位置」而不是「对所有相交高斯反解 CDF」[§7.1.1, p7]。这条简化正对应第 5 章那处有偏取舍。

主结果第一层:性能与内存两侧都赢。 原文用图 1-1 与图 4-1 展示高反照率(α = 0.99)复杂资产的渲染,并给出判断:在这些场景里方差的主要来源是自由飞行采样,而本方法与网格类的最新技术相比,在性能与内存占用上都占优。原文随后把这件事放回生产语境:传统上生产体积渲染器的主要瓶颈是内存带宽,所以本篇这条路可能带来可观的加速,在内存更受限的环境里尤其有吸引力[§7.1.2, p7]。粉尘爆炸那一张给出的规模差是:40k 个基元(1.6MB)对 512³ 分辨率网格[图 4-1]。

主结果第二层:透射率估计器的正面比较,这是本篇最硬的一处读数。 原文设计了一个只有透射率会贡献方差的实验:一个被恒定白色环境照亮的吸收介质,烟资产用 900 个高斯近似;对手包括 track-length delta tracking、比追踪、残差比追踪、ray marching,以及幂级数的两版(累积式与 CMF 式)。原文特意说明:除 ray marching 之外,这些估计器都是无偏的;残差比追踪用平均局部密度作控制系数,而它、比追踪与 track-length delta tracking 三者都利用了局部统计量来降低每样本开销、提高采样效率,其余估计器用的是全局统计量[§7.1.2, p8]。结论是两条:本篇的解析透射率积分器在单样本每像素(1 spp)下就零方差;而且每样本开销是所有被测方法里最小的[§7.1.2, p8]。

这一节的图注还给出一条很实用的实现细节,值得单独写出来。 关闭「逐段积分」、改成把主射线上每一个相交的高斯当作一个整体一次性积分,每样本开销可以进一步降到 2.84ms,而画面相同。本篇的实际用法是两套都用:距离采样时用逐段的那一套,next-event estimation 时用整体积分的那一套,从而在不引入偏差的前提下把效率最大化[图 6-1 的图注, p8]。

最后是可扩展性,而它把「细节」明码标价地卖了。 本篇的性能取决于用多少基元来建模密度分布,尤其取决于基元之间的重叠量;而高斯的聚合是直接的,于是原文用图 7-1 探索了可扩展性:在牺牲一点视觉保真度的前提下,可以大幅提高紧凑度与渲染速度,这让这套表示很适合做 LOD[§7.1.2, p8]。具体的压缩读数也在那一张:相对稠密体素网格 ×5251(OpenVDB 是 ×6.823),代价落在锐度上。

粉尘爆炸:40k 个高斯基元(1.6MB)与 512³ 网格的收敛渲染对照
图 4-1 E 类·证据 · 原文 Fig. 4, p.7 · 原样引用 怎么读 ①指认:图注写明这是粉尘爆炸资产,一边是拟合到 40k 个高斯的结果,另一边是被离散到 512³ 分辨率网格的结果,两边都渲染到收敛;可点名的读数是图内标注的 40k Primitives (1.6MB) 与 512³ Resolution (550.4MBs)。②读法(怎么读):把注意力放在「收敛」两个字上:图注的原话是本篇「在很小的内存预算上取得了高质量的拟合与渲染」;它比的是同样的收敛质量下的内存规模,而不是「谁更快出图」。③对照:与图 1-1 连起来读,那一张的资产是云、本图是粉尘爆炸,两处给的是同一类结论的不同资产;与图 6-1 连起来读,那张是单样本下的估计器对照,读完法不同。④落点:这张图支撑的是「性能与内存两侧都赢」这半句里的内存一侧;它不含速度读数。图内标签之外不逐格读值。 来源:Don't Splat your Gaussians(ACM TOG 44(1) · arXiv:2405.15425v3 · Jorge Condor et al.)· 图 4(p.7)· 未修改引用(原样引用,署名保留)

上面那张量的是同一朵云在不同表示下的规模差,下面这张换一件资产、也换一个问法:透射率到底该怎么算。

烟:900 个高斯(37KB)与 512³ 网格(550.4MB),以及六种透射率估计器的对照
图 6-1 E 类·证据 · 原文 Fig. 6, p.8 · 原样引用 怎么读 ①指认:图注写明这是烟资产:拟合到 900 个高斯(37KB),另一边被离散到 512³ 分辨率网格(550.4MB) 供前人方法使用;超体素网格的分辨率是 64³;在这个积分器里只追踪主射线,图中所有渲染都是单样本每像素(1 spp)。格内印的是各方法的误差与时间:Reference (512³, 550.4MBs)、Track-length delta tracking、Ratio Tracking、Residual Ratio Tracking、Power-series Cumulative、Power-series CMF、Ray Marching (biased),以及本篇 Ours - Gaussian Kernels 的两版(带重叠 (\w overlaps) 与不带重叠 (\wo overlaps),后者标注 900 primitives, 56.7KBs)。②读法(怎么读):先看误差栏再看时间栏:图注给的判词是:本篇的解析透射率估计单样本即零方差(报告出来的那点误差主要来自 GMM 与体素网格两种分布之间的离散化差异),同时每样本开销低于其余基于 Monte Carlo 的估计器,而且内存只占一小部分;另有一处实现读数:关掉逐段积分后每样本可降到 2.84ms,画面相同。③对照:与图 5-1 连起来读:那一张比的是距离采样方式(有偏 vs 无偏),本图比的是透射率估计器,两张回答的不是同一个问题;与图 8-1 连起来读,本图用的这 900 个高斯正是那张图里拟合出来的资产。④落点:这张图承载「闭式透射率」这条主张的全部量化依据;引用时必须带上「且除 ray marching 外对手都无偏」这个前提,不能把它读成「比有偏的追踪快」。图内标签之外不逐格读值。 来源:Don't Splat your Gaussians(ACM TOG 44(1) · arXiv:2405.15425v3 · Jorge Condor et al.)· 图 6(p.8)· 未修改引用(原样引用,署名保留)

上面那张把几种透射率算法摆在一起比,下面这张把表示本身的规模当成旋钮:基元越少,内存与时间各走成什么样。

云:从 16.2k 到 2.6k 个基元的复杂度消融,以及与原 VDB 体积的压缩对比
图 7-1 E 类·证据 · 原文 Fig. 7, p.9 · 原样引用 怎么读 ①指认:图注写明这是云资产在 1024 spp 下、用不同数量的高斯基元渲染的结果,并与原始的 VDB 体积对照;图内可点名的读数是原始云的有效分辨率 999×634×1224、480MB 的 VDB 体积,以及本篇三档的规模与时间:16.2k 基元(639KB)/MSE 1.621e-4/26.27 分钟、5.6k 基元(224KB)/MSE 1.717e-4/19.43 分钟、2.6k 基元(107KB)/MSE 2.72e-4/11.67 分钟。②读法(怎么读):沿着基元数往下读,看画质与时间怎么走:基元数降到约 1/6(16.2k → 2.6k)时,误差从 1.621e-4 升到 2.72e-4、渲染时间从 26.27 分钟降到 11.67 分钟;图注的判词是本篇取得了很高的压缩率(相对稠密体素网格 ×5251,而 OpenVDB 是 ×6.823),并且可以很容易地在质量与内存/性能之间做取舍,因此很适合 LOD。③对照:与图 1-1 连起来读,那一张是这一族曲线的一个取值点(5.6k/224KB);与图 6-1 连起来读,那一张量的是透射率估计器,本图量的是表示规模,两处不可互换。④落点:这张图是「画质换内存」这处取舍的读数依据,同时也是本篇尚未做 LOD 这条边界的注脚:原文把 LoD 明确列为未来工作,本图只证明「有这条可调曲线」,没有证明「已经做了 LOD」。图内标签之外不逐格读值。 来源:Don't Splat your Gaussians(ACM TOG 44(1) · arXiv:2405.15425v3 · Jorge Condor et al.)· 图 7(p.9)· 未修改引用(原样引用,署名保留)

9逆渲染:伴随、Bounded Adam,与「从 1 个基元长成 551 个」

第七章把伴随写了出来,这一章是它换回来的东西。原文对整节的定位先要说清:这一节是概念验证(proof-of-concept),不是一条稳健完整的优化管线,原文明确说那需要更多工作;而且资产目前只支持「只有密度非均匀」[§7.2, p8–p9]。

参数化这一步与 3DGS 同源,但有一处刻意的不同。 本篇把高斯基元蒸馏成均值、尺度与旋转三件,再用它们算出基元的协方差矩阵:

(16) Σi = Ri Si SiT RiT (协方差的参数化。Ri 与 Si 分别是基元的旋转与尺度矩阵;本篇像 3DGS 那样把基元蒸馏成均值、尺度与旋转三件再算协方差,但有一处刻意的不同 —— 旋转用 Euler 角而不是四元数。这一处选择与后面的 Bounded Adam 配套:Euler 角是有界量,给它设硬边界是自然的)(原文式 23)

原文特意点出那一处不同:旋转用的是 Euler 角,而不是四元数[§7.2, p8]。这一处选择没有被展开解释,但它与后面的 Bounded Adam 是配套的:因为 Euler 角是有界量,给它设硬边界是自然的。

优化的开局方式,是「从一个基元长出来」。 本篇的做法是:初始集合里只有一个基元,然后在当前所有基元的包围球上随机采样点,用这些点为位置逐代生出新的基元,于是细节是渐进加上去的[§7.2, p9]。

Bounded Adam 是这一节里最值得单独讲的一件小发明。 它针对的是「有些参数不能越界」这件事:极小基元会产生求交伪影、基元可能跑到场景包围盒之外、而太大的基元会拖慢渲染(因为 BVH 用的是轴对齐包围盒,大基元的包围盒必然更大)。本篇的做法不是简单地夹住(clamp),而是:如果某一步梯度把参数推到了边界,就把这一步的位移改成「朝边界方向走一半距离」。原文给的理由有两层:一是这样优化过程可以无限逼近边界而永远不会跨过去;二是这个过程会顺带把该参数上的优化器状态重置(而单纯 clamp 不会)。原文还给出经验判断:在他们的实践里,这比直接夹值效果更好[§7.2, p9]。

损失由四项组成,其中两项是带阈值的正则。 基础项是 λ 加权的 L1 与 D-SSIM 组合;再往上加两项正则,一项管各向异性、一项管小基元的密度:

(17) L = λ L1 + (1 − λ) LSSIM + Lani + Ld (重建损失。前两项是 λ 加权的 L1 与 D-SSIM 组合;后两项是正则 —— Lani 管各向异性(与最小/最大特征值之比有关),Ld 管小基元的密度(与 |Si| 有关),权重分别是 wani 与 wd。原文注明这两项正则只在超过某个阈值之后才生效,目的是防止个别基元去过度拟合训练图里的具体细节)(原文式 24)

原文对这两项正则的作用说得很直:防止个别基元去过度拟合训练图里的具体细节;并且注明这两项只在超过某个阈值之后才生效[§7.2, p9]。

三个逆问题各给一个读数,而其中第一个还兼任了整篇的「资产工厂」。 原文依次演示了三种设定:

其一,逆层析(纯吸收介质)。 在一个被恒定白色环境照亮的纯吸收介质上重建非均匀密度,核用高斯。烟资产上的结果是:只用 900 个高斯、PSNR 达到 54.028dB,起点是一组随机高斯,输入是围绕烟羽的 16 张图。原文随后补了一句关键的用途说明:这条管线被用来生成第 8 章里全部资产[§7.2.1, p9]。

其二,焦栈(更难的相机模型)。 这一处模仿的是层析显微:用一个远心(正交薄透镜)相机、只在一个点位上,对一块吸收性的 Bulldozer 资产拍出一个焦栈,焦栈由 32 张图组成、焦平面在远近之间线性插值。结果是:从这一叠焦栈里重建出 907 个高斯,PSNR 39.3186;原文的判词是「即便只用一个视点、且只用了有限的基元数」,仍然从焦栈里得到了不错的三维重建,甚至能给出没见过的视角下的渲染[§7.2.1, p9]。

其三,逆散射(难度最高的一档)。 原文对这一处的定性是:它比层析难得多,因为问题的维度高得多(路径长、多次散射带来的采样方差大)。设置是:重建烟羽的一个高散射版本、各向同性相函数,输入是围绕资产的 32 张图(分辨率 256² 像素)。做法与第一处不同:从一个高斯开始,在它周围逐代生出子高斯以渐进增加细节,跑 1200 次迭代;结果是收敛到 551 个高斯的拟合、平均 PSNR 36.64dB[§7.2.1, p9–p10]。

逆层析:原烟体素网格(左)与用 900 个高斯拟合的结果(右)
图 8-1 E 类·证据 · 原文 Fig. 8, p.9 · 原样引用 怎么读 ①指认:图注写明左是原始的烟体素网格、右是本篇用逆层析管线拟合出的 900 个高斯,而且起点是一组随机基元;可点名的读数是 PSNR 54.028dB,以及相对原体积 ×291 的压缩率。②读法(怎么读):把「起点是随机的」和「只有 900 个基元」两件事一起看:它们说明这张图量的是「拟合能力」,不是「精调过的结果」;图注另注明这 900 个高斯被用于图 6-1。③对照:与图 6-1 连起来读(同一件资产、两种不同的量法:本图量压缩与拟合精度,那张量透射率估计器);与图 9-1、图 10-1 连起来读,三张分别是逆层析、焦栈与逆散射,难度依次上升、基元数也是从 900 到 907 再到 551,但三处的输入完全不同,不可横向比质量。④落点:这张图同时是第 8 章全部资产的来源说明:引用第 8 章任何一个读数时,都应当知道那个资产是先经过这一条管线拟合出来的。图内标签之外不逐格读值。 来源:Don't Splat your Gaussians(ACM TOG 44(1) · arXiv:2405.15425v3 · Jorge Condor et al.)· 图 8(p.9)· 未修改引用(原样引用,署名保留)

上面那张是多视角输入下的层析,下面这张把输入条件收紧到一个视点。

焦栈逆层析:远心相机单视角 32 张焦栈 → 907 个基元 → 新视角渲染
图 9-1 E 类·证据 · 原文 Fig. 9, p.9 · 原样引用 怎么读 ①指认:图注写明这是从焦栈做逆层析;左是一个由 32 张图组成的焦栈中选出的若干帧(同一相机位姿、焦距离在远近平面之间线性插值;上排为输入、下排为拟合结果),右是参照评估视角(上排)与新视角渲染(下排);可点名的读数是 1500 次迭代后 907 个基元、PSNR 39.3186。②读法(怎么读):把注意力放在「训练时的视点只有一个」这件事上:图注的判词是「即使只在一个相机位姿上训练,它也能重建出三维结构」;因此这张图真正在证的是自由度不足时的可重建性,不是画质上限。③对照:与图 8-1 连起来读,那张是多视角下的层析、这张是单视角下的层析,两者的输入条件差别很大;与图 14-1 连起来读,那一张说的是「框架支持复杂相机模型」(远心相机正是这里用的那一种)。④落点:这张图支撑「逆渲染这条链能处理不常见相机模型」这半句;它刻意用的是最难的输入(单视点),所以不能把它与多视角的结果放在一起比质量。图内标签之外不逐格读值。 来源:Don't Splat your Gaussians(ACM TOG 44(1) · arXiv:2405.15425v3 · Jorge Condor et al.)· 图 9(p.9)· 未修改引用(原样引用,署名保留)

上面两张用的都是吸收介质,下面这张把介质换成高散射的那一档。

逆散射:从单个基元(a)经中间态(b)到收敛(c),以及参照(d)
图 10-1 E 类·证据 · 原文 Fig. 10, p.10 · 原样引用 怎么读 ①指认:图注写明这是烟资产上的逆散射结果;四块分别是 (a) 初始(从单个基元出发)、(b) 中间态、(c) 收敛、(d) 参照;可点名的读数是最终混合模型只用 551 个高斯、平均 PSNR 36.64614dB;另注明照明用白色环境、且为便于观察已把环境移除。②读法(怎么读):按 (a)→(b)→(c) 的顺序看「细节是怎么长出来的」:图注的原话是:从单个基元开始迭代优化它的参数、并在它周围生出子基元,逐步加进更多细节。这一处与图 8-1 的做法不同(那张是从随机初始化的 900 个基元拟合),也正因如此,(c) 与 (d) 的差距比层析那一处大得多。③对照:与图 8-1、图 9-1 连起来读,三张构成「纯吸收/焦栈/高散射」三级难度;与第 12 章的那组边界连起来读:单个基元起步的渐进生长正是逆管线的一条可写清的策略。④落点:这张图是逆散射那一节的读数依据,也是渐进生长策略唯一的可视化;引用时不要把它与层析的 54.028dB 横向比,两者的介质类型与观测条件都不同。图内标签之外不逐格读值。 来源:Don't Splat your Gaussians(ACM TOG 44(1) · arXiv:2405.15425v3 · Jorge Condor et al.)· 图 10(p.10)· 未修改引用(原样引用,署名保留)

10radiance field:把 VPRF 接上球谐,与 3DGS 摆在同一张表里

这一章是本篇唯一一处与 3DGS 正面摆在同一张表里的地方,也是全篇读数最容易被读歪的地方。先把一句前提写在前面:这一节用的不是第四章那套物理模型,而是一个粗近似。

VPRF 是什么,以及原文为什么认为它在这里够用。 VPRF 是把辐射场的成像模型装进本篇的基元框架里得到的简化积分器(与 3DGS、NeRF 那一类类似)[§6.1, p6]。它把 VPPT 的成像模型大幅简化:只考虑来自相机的主射线,沿射线通过查询基元里的球谐发射来累积辐射;此外它关掉了重叠逻辑,为的是速度。原文把这种近似写成一条式子:用段内的透射率与「基元发射之和」的比值去近似该段的贡献:

(18) Lk(xbtk,0, ω) ≈ [ 1 − Tk(xbtk,0, xbtk,1) ] ⁄ [ Σj ∈ Sk τj(xbtk,0, xbtk,1) ] · Σi ∈ Sk Qi(ω) (VPRF 的粗近似:用「段内的透射率」与「段内各基元光学深度之和」的比值,去近似该段的贡献,再把球谐发射 Qi(ω) 加总。原文对这一处的交代要一起读:VPRF 是第 4 章物理模型的粗近似(丢掉逐段积分、关掉重叠逻辑),但参数被优化去贴合输入数据、因而把近似补偿掉了;因此这一式支撑的是辐射场那一节的读数,不构成对物理正确性的验证。须注明:原文的分式按二维排印,此处按线性写法展开)(原文式 22)

原文对「为什么近似可以被接受」给了一个明确的理由。 原文承认 VPRF 是对第四章物理模型的粗近似,但接着说:在这个应用里这件事不那么重要,因为核基元的参数会被优化去贴合输入数据,因而把近似补偿掉了;而简化带来的收益是丢掉逐段积分支持、从而提升性能[§7.3, p10]。这句理由要照写,因为它划定了这一节读数的适用范围:表 10-1 与表 10-2 的数字,不构成对第四章物理正确性的验证。

设置上有两处要写清。 其一:因为重建的场景带类表面特征,这一节同时使用高斯与 Epanechnikov 两种核;发射用球谐展开建模每个基元的各向异性发射 Q_i(ω)(与 3DGS 的做法类似)[§7.3, p10]。其二:全部实验用同一套参数,合成数据集与真实数据集都不逐集调参;原文自陈「逐集微调会明显改善本文呈现的结果」[§7.3, p10]。换句话说,这一节的数字不是「调到最好」的结果。

表 10-1 是量化那一面,而它的读法必须按数据集分开。 表内三个数据集、两件指标(PSNR 与 SSIM),七行方法。把关键几行摘出来对照:MipNeRF-360 上 iNGP-Base 是 22.19/0.491、Mip-NeRF 360 是 24.31/0.685、3D Gaussian Splatting 是 25.25/0.771,而本篇两行分别是 Ours - Gaussian 22.07/0.536 与 Ours - Epanechnikov 21.56/0.515;Tanks 上是 3DGS 25.19/0.879 对 Ours - Gaussian 23.93/0.850;NeRF-Blender 上是 3DGS 36.073/0.982 对 Ours - Gaussian 32.11/0.957。结论不在「谁赢」上,而在「赢了哪一条线」上:本篇与射线追踪类(例如 iNGP)相当,落后于光栅化的 3DGS。

表 10-2 是性能那一面,而它才是本篇在 radiance field 这一节真正的落点。 这张表把六个量摆成五行:优化时间、渲染速度、内存占用、渲染框架、是否支持复杂相机模型。可点名的读数:优化时间上 Ours - Gaussian 是 ∼2h–16h、Ours - Epanechnikov 是 1h–10h,而 3DGS 是 ∼0.3–0.5h、Mip-NeRF 360 是 ∼48h;渲染速度上 Ours 两行是 ∼28–39 FPS 与 ∼42–53 FPS,3DGS 是 ∼134–197 FPS,Mip-NeRF 360 是 ∼0.06–0.14 FPS;内存上 Ours 两行都是 ∼100–900MB,3DGS 是 ∼100–730MB。而框架那一行是这张表最要紧的一格:3DGS 是唯一标 Rasterization 的,其余全部是 Ray-tracing;与之配套的复杂相机模型那一行,3DGS 也是唯一写 No 的。

把两表面合起来,原文给出一句相当克制的判词。 原文的说法是:本篇的结果在画质上与先前的射线追踪类辐射场解(例如 instant NGP)相当,而落后于光栅化的 3DGS;但它在射线追踪这一类里更快,复杂场景上平均可达 40–50 FPS(用 quality 预设);并且在很多情形下,Epanechnikov 不只在渲染速度上、也在视觉质量上优于高斯[§7.3.1, p10]。

两处消融要分开记,因为它们回答的是不同问题。 第一处是壳体(图 12-1):优化阶段为了内存紧凑用的是解析椭球壳,渲染阶段(前向或逆向)在内存预算更大时可以用别的壳体;在一个合成数据集上做消融,用三角网格壳最多可以把渲染速度提到 4.96 倍[§7.3.1, p10]。第二处是最大基元深度(图 13-1):限制每条射线积分的基元个数,就可以用画质换性能;原文特意在这一处写出机制上的差别:因为 3DGS 是先排序再泼溅,靠提前终止积分能拿到的性能收益有限;而射线追踪可以靠提前终止递归拿到明显的加速[§7.3.1, p10]。

表 10-1 量化质量对照(原文 Table 1) (原文 Table 1, p.10 · 数值取原文文字层,逐格未改)

MipNeRF-360TanksNeRF-Blender
MethodPSNR↑SSIM↑PSNR↑SSIM↑PSNR↑SSIM↑
NeRF21.760.45521.760.45532.540.961
Plenoxels21.910.49623.220.77434.100.975
iNGP-Base22.190.49123.260.77935.640.981
Mip-NeRF 36024.310.68524.910.85736.100.980
3D Gaussian Splatting25.250.77125.190.87936.0730.982
Ours - Gaussian22.070.53623.930.85032.110.957
Ours - Epanechnikov21.560.51523.980.84533.600.972

读这张表有四处要点。其一,三个数据集的行不是同一组方法:NeRF 与 Plenoxels 在 Tanks 与 Blender 上都有数,但数值分布不同,不要跨数据集横向比较同一方法。其二,3D Gaussian Splatting 是这张表的画质上界,三个数据集的两件指标里它都是最好或接近最好;本篇与它的差距在 MipNeRF-360 上最明显(22.07 对 25.25)。其三,表内有一处读数重复,原文如此排印、站内照录不改:NeRF 行在 MipNeRF-360 与 Tanks 两个数据集上的 PSNR 与 SSIM 完全相同(21.76/0.455)。其四,两个 Ours 行的相对关系随数据集变化:MipNeRF-360 上高斯那行更好(22.07 对 21.56),Tanks 上 Epanechnikov 那行更好(23.98 对 23.93),到 Blender 上又是高斯那行明显更好(32.11 对 33.60,这里 Epanechnikov 反而高): 也就是说「哪种核更好」在画质上没有单向结论,单向的结论只在速度上(见第 11 章)。

表 10-2 与主流辐射场方法的性能与能力对照(原文 Table 2) (原文 Table 2, p.12 · 数值取原文文字层,逐格未改)

MethodNeRFPlenoxelsiNGPMip-NeRF 3603DGSOurs - GaussianOurs - Epanechnikov
[Mildenhall et al. 2020][Fridovich-Keil et al. 2022][Müller et al. 2022][Barron et al. 2022][Kerbl et al. 2023]
Optimization time (RF)∼12-24h∼0.1-0.5h∼2-8m∼48h∼0.3-0.5h∼2h-16h1h-10h
Rendering speed (RF, real datasets)∼0.05-0.1 FPS∼6-13 FPS∼3-17 FPS∼0.06-0.14 FPS∼134-197 FPS∼28-39 FPS∼42-53 FPS
Memory footprint (RF)∼5-10MB∼1-2.7GB∼13-48MB∼5-10MB∼100-730MB∼100-900MB∼100-900MB
Rendering frameworkRay-tracingRay-tracingRay-tracingRay-tracingRasterizationRay-tracingRay-tracing
Complex camera modelsYesYesYesYesNoYesYes

这张表的读法有三处。其一,它量的是「平均性能指标」,图注写明报告值是在所测真实数据集上的平均,而且本篇用的是 quality(下界)与 performance(上界)两档预设;表内的时间取自同一类配置(RTX A6000),前人方法的时间引自 3DGS 那篇论文[表 10-2 的图注, p.12]。其二,Complex camera models 那一行是理解本篇位置的关键:整张表里只有光栅化的 3DGS 一项是 No,而本篇两行都是 Yes。其三,表头第二行给的是各列方法的出处(NeRF 为 Mildenhall 等、Plenoxels 为 Fridovich-Keil 等、iNGP 为 Müller 等、Mip-NeRF 360 为 Barron 等、3DGS 为 Kerbl 等),而最左一列是指标名:这一格的表头在原文里写作 Method,内容其实是行标签,照录不改。

四个真实场景与四条基线的定性对照(garden/train/playroom/counter)
图 11-1 E 类·证据 · 原文 Fig. 11, p.11 · 原样引用 怎么读 ①指认:图注写明这是与先前辐射场渲染方法的定性对照,对手包括 Plenoxels、Instant NGPs、Mip-NeRF360 与光栅化的 3DGS;场景是 garden、train、playroom、counter 四个真实数据集(来自 Tanks and Temples 与 MipNeRF360)。②读法(怎么读):先在四个场景里各找一处「细节区」,再横向看同一处的退化顺序:图注给的判词有三条:本篇的质量相对于当前最好水平是有竞争力的、它是最快的射线追踪解(引表 10-2)、并且两种核在真实场景的画质上表现相近,而 Epanechnikov 明显更快;图注另说明完整的量化评估在附录、本图的局部放大图也在附录。③对照:与表 10-1 连起来读(同一批实验的量化面);与图 13-1 连起来读,那一张量的是「限制最大深度」这一处旋钮;不要把本图的观感与表 10-1 的数值当成两批互相印证的证据,它们是同一次实验的两种呈现。④落点:这张图承载「与射线追踪类相当、落后于 3DGS」这半句里的观感一侧;它不含读数,正文里没有从它读出任何数字。图内标签之外不逐格读值。 来源:Don't Splat your Gaussians(ACM TOG 44(1) · arXiv:2405.15425v3 · Jorge Condor et al.)· 图 11(p.11)· 未修改引用(原样引用,署名保留)

上面那张是四个场景的观感对照,下面两张是同一次实验里的两处消融,先看壳体这一处。

三种壳体在合成数据集上的渲染时间:三角网格 icosphere 平均快 4.96 倍
图 12-1 E 类·证据 · 原文 Fig. 12, p.12 · 原样引用 怎么读 ①指认:图注写明这是在用本篇方法优化过的合成数据集场景上,比较不同壳体的渲染时间;可点名的结论是:基于三角网格的壳在性能上更优,原因是硬件支持 ray-triangle 求交、且遍历更有效,代价是每个基元多占一点内存。②读法(怎么读):看「高出多少」这一栏:图注给出的平均值是:用三角网格 icosphere 相对解析三维椭球平均快 4.96 倍。③对照:与第 7 章那处实现叙述连起来读(自定义 ray–ellipsoid 求交产出次优 BVH、且慢于硬件求交),本图是那句话的读数;与图 13-1 连起来读,两张是同一次实验里的两处消融,一处改壳体、一处改深度,不可混读。④落点:这张图支撑的是工程取舍的量化(壳体的几何形式),不是算法本身的能力;它也是「为什么不用 mesh instancing」那处解释的旁证。图内标签之外不逐格读值。 来源:Don't Splat your Gaussians(ACM TOG 44(1) · arXiv:2405.15425v3 · Jorge Condor et al.)· 图 12(p.12)· 未修改引用(原样引用,署名保留)

上面那张改的是壳体的几何形式,下面这张改的是每条射线容许积分的基元个数。

最大基元深度对画质与渲染时间的影响(合成数据集)
图 13-1 E 类·证据 · 原文 Fig. 13, p.12 · 原样引用 怎么读 ①指认:图注写明这是最大深度(一条射线里积分的基元个数)对 PSNR 画质与渲染时间的影响,数据是合成数据集。②读法(怎么读):盯住图注给出的两档配置:在每条射线最多 14 个高斯时,全部数据集平均 2.36ms 一帧(434.78 FPS),画质与性能取得较好平衡;再激进一档、每条射线 10 个高斯时,平均执行时间 1.82ms(549.45 FPS)。③对照:与图 12-1 连起来读(同一次实验的另一处消融);与第 12 章那条「与 3DGS 的机制差别」连起来读:原文特意在这一处说明:因为 3DGS 先排序再泼溅,靠提前终止能拿到的收益有限;射线追踪则可以靠提前终止递归拿到明显加速,本图正是这句话的读数。④落点:这张图是「画质—性能可平滑退让」这处说法的依据(原文在讨论里把它列为射线追踪框架的好处之一);引用时要带上数据集是合成这个限定。图内标签之外不逐格读值。 来源:Don't Splat your Gaussians(ACM TOG 44(1) · arXiv:2405.15425v3 · Jorge Condor et al.)· 图 13(p.12)· 未修改引用(原样引用,署名保留)

11两种核的实测差别:谁更准、谁更快

第六章给了两种核的定义,这一章是把它们摆在一起量。原文在这一章开头先把「各自的长处」写清,再给出两组实验。

先说各自的长处,因为这里有一处不对称。 原文的表述是:高斯有它自己想要的性质:例如高斯的卷积还是高斯,而在 GMM 上做高斯卷积,可以用来高效地模拟动画、LOD 与运动模糊;而 Epanechnikov 的长处是有限支撑,于是基元更紧凑、加速结构更有效、表示更稀疏[§8, p13]。这一句话解释了为什么本篇没有把高斯换掉:核的选择取决于应用,而不是「哪个更先进」。

第一处实测是拟合质量,用的是实验条件很受控的玩具层析。 原文搭的是一道简单的逆层析题:优化一个非均匀的吸收介质,用 8 个基元的混合模型,介质被一个恒定环境发射体包围。结果是:Epanechnikov 的锐利衰减与更小的足迹,带来了明显更锐利的拟合;原文由此给的判词是:它们可能是硬表面与高频细节上更好的候选[§8, p13]。这一处的价值在于受控:8 个基元、同初始化,变量只有核本身。

第二处实测是渲染速度,用的是更复杂的辐射场例子。 设置是:在本篇的辐射场管线(第 10 章)上,先对 Bulldozer 资产训练一个高斯混合模型;然后把高斯核换成 Epanechnikov,只用高斯渲染出来的图作参照(不是原始图)再优化尺度若干步,使两者产生几乎相同的图像;随后比较渲染性能。原文给出两条:同画质(不同混合体渲染之间的 PSNR 为 38.05dB)下,Epanechnikov 比高斯快 3.26 倍;而且原因不在每样本的算术量上,而在加速结构上:原文点明本篇的主要性能瓶颈是在可能退化的 BVH 里做射线遍历,而大而重叠的核会让 BVH 退化,紧凑化则显著改善这一点;原文还给了一句尺度提示:在大型场景里差别可能更大,因为天上一个巨大的基元就能显著拉低整体性能[§8, p13]。

把两处合起来,本章的结论只有一句,而它是单侧的。 「谁更准」在受控的玩具实验里偏向 Epanechnikov(更贴硬边),在真实场景的对照里两种核相近(见图 11-1 的判词);「谁更快」则明确偏向 Epanechnikov(3.26 倍)。原文在讨论章里把这两件事合并成一句立场:本篇已经展示了对不同核的灵活性,以及在渲染任务里超越经典高斯核的潜在收益,并为未来引入其他种类的核开了路[§9, p13]。

玩具层析:8 个基元的吸收介质,两种核的拟合对照
图 16-1 E 类·证据 · 原文 Fig. 16, p.13 · 原样引用 怎么读 ①指认:图注写明这是一个受网格约束的吸收介质的玩具层析例子;为了比较,两种核都从同样 8 个随机采样的基元出发,各自优化这固定的一组直到收敛(耗时 1–2 分钟);图内会绕该体积渲染 8 个不同视角。②读法(怎么读):盯住边缘的锐度:图注的判词是:Epanechnikov 在这个受控例子里明显更好,它的更快衰减似乎更擅长建模锐边;并且说明在 §7.3 那些不受控的辐射场优化实验里观察到了类似的行为。③对照:与图 17-1 连起来读:两张构成本章的两半:本图量质量、那张量速度,实验设定完全不同,不可混读;与图 3-1 连起来读,形状那一张是这一处差别的几何来源。④落点:这张图是「Epanechnikov 更贴硬边」这条判词的唯一受控依据;引用时必须带上「只有 8 个基元、同初始化、受网格约束」这三个条件,不能把它外推成普遍的画质结论(真实场景里两核相近,见表 10-1 与图 11-1)。图内标签之外不逐格读值。 来源:Don't Splat your Gaussians(ACM TOG 44(1) · arXiv:2405.15425v3 · Jorge Condor et al.)· 图 16(p.13)· 未修改引用(原样引用,署名保留)

上面那张量的是质量(谁的拟合更贴硬边),下面这张量的是速度(同样的辐射场差多少)。

同辐射场下的速度对照:Epanechnikov 比高斯快 3.26 倍
图 17-1 E 类·证据 · 原文 Fig. 17, p.13 · 原样引用 怎么读 ①指认:图注写明这是高斯与 Epanechnikov 两种混合模型在渲染性能上的对照;为使比较成立,先说明两者的辐射场几乎相同:不同混合体渲染之间的 PSNR 为 38.05dB。②读法(怎么读):记住「1spp、6 个视角平均、解析壳」这三个限定再看倍数:图注给出的结论是 Epanechnikov 比高斯快 3.26 倍;机制在图注之外、正文里写得更直:瓶颈是退化 BVH 里的射线遍历,紧凑的壳让 BVH 退化减轻。③对照:与图 16-1 连起来读(同章的另一半:质量);与第 10 章图 12-1 连起来读:那一张量的是换成三角网格壳的收益(4.96×),本图量的是换核的收益(3.26×),两者是两条不同的优化路径,收益不可相加。④落点:这张图支撑「更紧凑的壳 ⇒ 更少的重叠 ⇒ 更有效的加速结构」这条因果链;引用时要带上它的实验限定(同一辐射场、1spp、解析壳)。图内标签之外不逐格读值。 来源:Don't Splat your Gaussians(ACM TOG 44(1) · arXiv:2405.15425v3 · Jorge Condor et al.)· 图 17(p.13)· 未修改引用(原样引用,署名保留)

12与 3DGS 的另一笔账,以及边界与反例

这一章把「与 3DGS 的关系」收口,并把本篇自己的边界一条条摆出来。原文在讨论章里先给了整篇的总结,再单开一节写局限与未来工作。

先说标题那一笔账,它是全篇最容易读反的地方。 本篇的核就是高斯(以及 Epanechnikov),它「不 Splat」的只有一件事:不把基元压成朝向相机的 billboard。原文对这一处的完整表述是:场景表示与高斯泼溅相似,但成像模型根本不同:那边假设基元变成朝相机的 billboard、于是沿射线的密度成为 delta 之和、从而能实现在极高效的光栅化管线上;这边保留基元的三维密度、按物理运输过程积分,因此保住了互易性,并解决了泼溅里一部分「按视角排序」的问题[§1, p1]。

第一处从这条分界里直接长出来的优势是「顺序」。 原文把它列在与 3DGS 对照的第一条:由于顺序由递归的射线追踪天然获得,本篇不需要排序,而且顺序是精确的、把基元的各向异性形状考虑了进去;对照之下,3DGS 的基元只按均值排序、泼溅时被变换成 billboard,因此可能出现跳变伪影(图 15-1)以及不同视角之间的顺序不一致[§7.3.2, p10]。

第二处优势是「相机」。 原文的说法是:在射线追踪框架里工作、而不是光栅化的诸多好处之一,是可以为重建与渲染使用任意复杂的相机模型、而不需要做透视校正;他们用一个 360° 相机渲染本篇优化出的一个场景来展示这一点(图 14-1);此外这条路线也便于支持更好的中心凹渲染与广角渲染(对 VR 有用),并可以进一步加速那些依赖预计算辐射发射来建模复杂光源的路径追踪管线[§7.3.2, p10–p11]。与之配套的一处推论是:基于物理的射线追踪表述进一步为未来扩展开了口子:重光照、全局光照、软阴影等[§7.3.2, p11]。

这两处优势合起来,就是本篇在讨论章里给出的自我定位。 原文的总结是:本篇提出了一个用三维核体基元建模散射与发射介质的通用框架,配以在不同积分器(及其伴随)里的高效实现,展示了从基于物理的前向与逆向介质渲染到辐射场渲染的一串应用;这套体基元灵活、紧凑、渲染高效;原文还说这件工作为未来引入其他种类的核清了路,并预期这套方法在越来越关注路径追踪与基于物理渲染的实时解的媒体制作环境里会有意义[§9, p13]。

三条作者自陈局限(照写):①逆渲染管线的训练时间明显更长,原文给的主要原因是场景的 JIT 编译在每次新迭代都要重跑;他们说这一点可以通过跨迭代复用已编译的代码大幅改善,而这只是 Dr.Jit 的技术限制、近期就能解除[§9, p14]。②绝对画质略逊于光栅化的 3DGS;原文同时强调它在射线追踪类里表现相当,并提供了可以平滑退让的画质—性能工具,最后表态说在优化管线上再做投入就可以把画质提到与 3DGS 相当[§9, p14]。③资产目前只支持「只有密度非均匀」:原文承认要优化更复杂的体介质还需要更多工作,需要更彻底地分析初始化、损失与优化策略,尤其是在光传输理论的复杂度上升之后[§9, p13–p14]。

九条口径边界(读数字前必须带上):①标题要读对:「不 Splat」指的是不把三维压成 billboard,核用的恰恰就是高斯(以及 Epanechnikov)。②后向基线是「调到最好」的那一档:超体素的局部 majorant/minorant 加 DDA 遍历,再配残差比追踪,不是最朴素的 ray marching。③参考网格的来路要写清:前向渲染的参考体素网格是把本篇的混合模型体素化得到的,目的是让两边密度分布尽量一致、以便逐像素算 gain ⇒ 这不是「与原资产比」。④拟合代价不计入渲染时间:三件资产的 GMM 都是用第 9 章那条逆层析管线拟合出来的(可选 EM 初始化),拟合从 15 分钟到数小时,原文自陈这一步没有优化过。⑤radiance field 那一节用的是粗近似:VPRF 丢掉了逐段积分、关掉了重叠逻辑,参数被优化去贴合输入数据因而「补偿」了近似 ⇒ 表 10-1 与表 10-2 的数字不构成对第四章物理正确性的验证。⑥那一节不是「调到最好」的结果:全部实验共用同一套参数,合成与真实数据集都不逐集调参,原文自陈逐集微调会明显更好。⑦表 10-1 有一处读数重复,照录不改:NeRF 行在 MipNeRF-360 与 Tanks 两个数据集上的 PSNR/SSIM 完全相同(21.76/0.455)。⑧段内均匀采样是有偏的(p(t) ≠ μ_t·T),偏差只在云的例子上被量化过。⑨逆管线只做到密度:前向实验里反照率与相函数是固定的,逆渲染那三节也只逆密度。

最后一条不是「局限」,而是一处机制性的适用条件。 第 11 章已经点过:本篇的主要性能瓶颈是在可能退化的 BVH 里做射线遍历,而大而重叠的基元会让 BVH 退化;极端例子是大型场景里天上一个巨大的基元,它一个人就能显著拉低整体性能[§8, p13]。这一条与「紧凑的壳更快」是同一件事的两面,写正文时应当放在一起。

原文另列了三条明确标注为「未来工作」的方向,它们不是缺陷而是开口。 其一是介质类型:把辐射框架推广到各向异性或相关介质,会扩大可支持的场景范围,其中包括带实体表面的体积表示[§9, p13]。其二是 LOD:探索如何把基元式的通用介质用于复杂外观的细节层次,与基于体素网格的做法相比是一条有前景的路(原文在第 8 章也已经指出这套表示「很适合做 LOD」)[§9, p13]。其三是核的家族:可能的核有很多,不同应用可能受益于不同的核;原文特别点出参数化核这条方向:它可能带来更高的灵活性与每基元的表现力,从而减少建模一个资产所需的基元数[§9, p14]。

360° 相机渲染 playroom:光栅化框架给不了的那一格
图 14-1 E 类·证据 · 原文 Fig. 14, p.12 · 原样引用 怎么读 ①指认:图注写明这是辐射场里的复杂相机模型:用一台 360 度相机渲染 playroom 数据集(属 MipNeRF360 数据集);可点名的判词是:本篇基于射线追踪的框架允许使用任意复杂的相机模型,而 3DGS 不能。②读法(怎么读):把「相机」当成一个自由度来看:图注同时交代了画面缺陷的来源:天花板与桌子下方的伪影来自训练数据的欠采样(而不是相机模型本身的问题);这一句要一起读,否则会把它误读成方法缺陷。③对照:与表 10-2 连起来读:那张表里 Complex camera models 一行只有光栅化的 3DGS 写 No,本图正是那一格的具体演示;与图 9-1 连起来读,那一张用的远心相机也是「非标准相机」的一种,两处合起来说明这套框架在相机侧的自由度。④落点:这张图承载「射线追踪表述带来额外自由度」这条主张的可视化证据;它不含读数,正文里没有从它读出数字。图内标签之外不逐格读值。 来源:Don't Splat your Gaussians(ACM TOG 44(1) · arXiv:2405.15425v3 · Jorge Condor et al.)· 图 14(p.12)· 未修改引用(原样引用,署名保留)

上面那张是这套框架在相机侧的自由度,下面这张把镜头转回泼溅那条路,看它的排序会付出什么。

按均值排序的高斯栈在泼溅时产生的跳变伪影
图 15-1 E 类·证据 · 原文 Fig. 15, p.12 · 原样引用 怎么读 ①指认:图注写明这是把一叠按均值排序的高斯做泼溅时产生的明显伪影;可点名的机制是:旋转 3DGS 的高斯时,它们的顺序会随视角发生剧烈「跳变」。②读法(怎么读):注意图注后半句里那个「通常怎么被盖住」:原文说这一现象通常被优化过程掩盖,办法是加更多的高斯;也就是说,这张图里的伪影在完整训练过的场景里不一定显眼,它的价值是把机制暴露出来,而不是说 3DGS 的实际结果很差。③对照:与第 3 章「顺序由递归遍历天然给出」那一段连起来读,本图是那一处的反面;与图 16-1、图 17-1 连起来读时注意,那两张是本篇自己的核比较,与本图的主题无关。④落点:这张图是「精确顺序」这条优势的动机图(而不是量化证据);引用时要带上「靠加更多高斯来掩盖」这半句,不能把它写成「3DGS 有严重伪影」。图内标签之外不逐格读值。 来源:Don't Splat your Gaussians(ACM TOG 44(1) · arXiv:2405.15425v3 · Jorge Condor et al.)· 图 15(p.12)· 未修改引用(原样引用,署名保留)

一条额外的读法建议

如果只读一章,读第 4 章:把 RTE 改写成「基元的分段和」这一步是全篇的支点,后面所有的闭式、所有的效率、以及「不需要排序」这条优势,都是它的推论。如果要判断这条路值不值得跟,读第 8 章的图 6-1 与第 11 章的图 17-1:前者给出「闭式透射率」在无偏对手面前的正面读数,后者给出「换核」的收益,两处合起来才是这套表示真正的卖点。如果关心它与 3DGS 的关系,先读第 12 章的第一段(标题那一笔账),再读第 10 章的两张表:顺序反过来读,很容易把这篇读成「一个更慢的 3DGS 竞争者」。

13贡献块

这一篇的贡献(精读视角)

原文在引言末尾明确列了四条贡献[§1, p2]。四条读下来是「一件主张 + 两处配套 + 一个前提」,而不是四件并列的事。

第一条是核心主张:一个基于核的体介质基元表示,它嵌进辐射传输框架、并且可以接入任意基于物理的渲染引擎[§1, p2]。这一条里最值得注意的词是「可以接入任意」:它意味着这套表示不是绑在某个渲染器上的技巧,而是一层可替换的表示——原文在后面各节里正是这么用的:前向渲染时它替掉了体素网格,逆渲染时它接进了可微管线,辐射场那一节它又回头去和 3DGS 比。这一条也解释了本篇为什么敢用「不 Splat」当标题:它要动的是表示的位置,不是某个渲染器的实现。

第二条是方法主体:为三维高斯核与 Epanechnikov 核给出闭式的透射率与发射表达式,以及按透射率成比例的距离采样例程[§1, p2]。这一条是整套东西能成立的技术核心:第四章把沿射线的积分改写成「段的和」,第六章把段内那个线积分对两种核算成闭式,第五章再把「按透射率采样距离」变成一道反解题。原文在引言里对这条贡献的表述是「不需要随机采样」;不过正文里有一处诚实的补充:多核重叠与长尾核仍会退到 Newton-Raphson 或二分,所以准确的读法是「透射率与发射是闭式的,距离采样在多数情形是解析、少数情形退化为迭代」。

第三条是配套的实现:一个基于射线追踪的高效实现,用来解这套表示下的光传输,同时面向散射介质与发射(辐射场)介质[§1, p2]。这一条的分量在第七章:把椭球三角化成 icosphere、把「沿射线的段迭代」做成栈上数组(为此改了 Dr.Jit 核心让它生成 PTX 局部状态空间的 intrinsics)、以及从上一个交点再打一条射线来收集新段。这一条也是本篇与「只发一篇论文、不做实现」的分界:第 8 章那两个读数(单样本零方差、每样本开销最小)都建立在这条实现上。

第四条是前提:前向方法的伴随导数,用来高效求解逆重建问题[§1, p2]。把它放在最后不是因为它最轻,而是因为没有它就没有第 9 章那三个逆问题。这一条的技术难点在「循环」:自动微分系统不支持沿循环传播导数,而「沿射线遍历基元并影响各个段」正是本篇的核心循环,所以必须手写循环内的伴随形式(附录 C)。原文也给了这条贡献的回报读数:反向传播能同时把梯度送到全部基元参数上,而有限差分一次只能处理一个参数。

四条的关系可以压成一句:第一条是「把表示放到哪里」,第二条与第三条是「让它能算、能跑」,第四条是「让它能反过来解」。 四条里最硬的是第一条:因为「嵌进辐射传输框架、可接入任意物理渲染引擎」这个定位是可以迁移的:任何显式基元表示都可以去问一遍「它的成像模型是不是把物理性卖掉了」。最容易被高估的是第三条里的速度读数:本篇在辐射场那一节并不比 3DGS 快(表 10-2 里优化时间 ∼2h–16h 对 ∼0.3–0.5h、渲染 ∼28–53 FPS 对 ∼134–197 FPS),它快的是射线追踪这一类;这条贡献真正的分量在于「同一套基元能从云与烟一路做到辐射场」这件事本身。

14出处块

原文出处

原文出处:Don't Splat your Gaussians: Volumetric Ray-Traced Primitives for Modeling and Rendering Scattering and Emissive Media,ACM Transactions on Graphics(TOG)第 44 卷第 1 期、Article 10,2025 年 2 月出版;DOI 10.1145/3711853(Crossref 与 arXiv 摘要页的 Related DOI 互证)。收稿、修回与录用日期由 PDF 末页给出:Received 17 July 2024; revised 1 November 2024; accepted 2 December 2024。作者为 Jorge Condor(Meta Reality Labs / USI Lugano)、Sébastien Speierer(Meta Reality Labs)、Lukas Bode(Meta Reality Labs)、Aljaž Božič(Meta Reality Labs)、Simon Green(Meta Reality Labs UK)、Piotr Didyk(USI Lugano)、Adrián Jarabo(Meta Reality Labs Spain)。原文地址 https://arxiv.org/abs/2405.15425(本页所据版本为 arXiv:2405.15425v3,2025-09-08),代码 https://github.com/facebookresearch/volumetric_primitives(原文摘要给出)。

两处与本页出处标注有关的说明(照录不改):①摘要有一处版本差异:arXiv 元数据里的摘要写作「We demonstrate our method as a compact and efficient alternative to other forms of volume modeling for forward and inverse rendering of scattering media」,而PDF 正文里的摘要写作「We demonstrate our method in both forward and inverse rendering of complex scattering media」;本页以所据源件(PDF)的写法为准。②编号式共 (1)–(30) 三十条,其中 (8) 号的编号与公式体同处一行(文字层里是 … d𝑡, (8)),因此按「独立成行」检索时会漏掉它;本页按实读计为 30 条,并只落其中的主干 17 条为式块(附录 A 的 (25)(26)、附录 B 的 (27)(28)(29)、附录 C 的 (30) 按分区惯例不落块)。

许可与本站处置(须单独写清,因为这里有一处互相矛盾):本站逐处实测的读数并不一致:arXiv 摘要页的许可链接是 http://arxiv.org/licenses/nonexclusive-distrib/1.0/,也就是 arXiv 的非独占分发许可,不是 CC;而本页所据 PDF 的首页上,版权块里同时印着两行:上一行是模板警告 Please use nonacm option or ACM Engage class to enable CC licenses,紧接下一行是 This work is licensed under a Creative Commons Attribution 4.0 International License.(ACM 的 CC BY 4.0 权利行)。这两行指向相反的处置:那条 CC BY 4.0 权利行并未被正式启用(作者既没用 nonacm 选项、也不是 ACM Engage 类),否则不会印出那行要求启用 CC 的警告。同一页另有 © 2025 Copyright held by the owner/author(s). 与 ACM 0730-0301/2025/2-ART10。

本站的处理按分区惯例走更严的一侧:既然 arXiv 存缴页给的是非 CC、而 PDF 里那条 CC 行又自带「未启用」的警告,本站就不采信那条 CC 行,按非 CC 处置:17 张原图与 2 张表原样、零加工引用(未裁切拼接、未加标注、未施滤镜;表体按文字层逐格重排、不改数值),逐图署名并给出原文出处;不站内托管 paper.pdf,文末只给 arXiv canonical 与 ACM DOI 两条链接,并声明未对原文作任何修改。列表页卡片标「非 CC · 逐图署名引用」。

原文全文:arXiv:2405.15425(canonical 版本) · DOI 10.1145/3711853(ACM 正式版) · 代码仓库(Meta Research)

图件署名(17 件,全部为 E 类证据图、原样引用、未修改)

  • 图 1-1=原文 Fig. 1(p.0)|Don't Splat your Gaussians(ACM TOG 44(1) · arXiv:2405.15425v3)
  • 图 2-1=原文 Fig. 2(p.3)|同上
  • 图 3-1=原文 Fig. 3(p.4)|同上
  • 图 4-1=原文 Fig. 4(p.7)|同上
  • 图 5-1=原文 Fig. 5(p.7)|同上
  • 图 6-1=原文 Fig. 6(p.8)|同上
  • 图 7-1=原文 Fig. 7(p.9)|同上
  • 图 8-1=原文 Fig. 8(p.9)|同上
  • 图 9-1=原文 Fig. 9(p.9)|同上
  • 图 10-1=原文 Fig. 10(p.10)|同上
  • 图 11-1=原文 Fig. 11(p.11)|同上
  • 图 12-1=原文 Fig. 12(p.12)|同上
  • 图 13-1=原文 Fig. 13(p.12)|同上
  • 图 14-1=原文 Fig. 14(p.12)|同上
  • 图 15-1=原文 Fig. 15(p.12)|同上
  • 图 16-1=原文 Fig. 16(p.13)|同上
  • 图 17-1=原文 Fig. 17(p.13)|同上

图件为区域渲染取得(位图与矢量标签一起渲染,3.0× 位图导出、约 216 dpi),未做任何修改。17 张里 5 张为通栏(图 1-1/6-1/7-1/11-1,以及图 7 页上的通栏行),12 张为单栏;其中图 11-1 是一张近整页的竖构图(1538×1635 像素,对应原文 545 pt 高),图 15-1 是本篇最小的一张(594×226),图 5-1 的图内标签为两栏对照。图注体例一律 Fig. N. 起(非 Figure N.),17 张的图注一律在图之下(17/17 实测)。

表格(2 张,数值按原文文字层逐格取值,未改位数、未做换算)

  • 表 10-1=Table 1(p.10,原文位于 §7.3)|7 列 × 9 行(数据集分组行 + 指标行 + 7 个方法行)|列:(空)/MipNeRF-360 PSNR↑/SSIM↑/Tanks PSNR↑/SSIM↑/NeRF-Blender PSNR↑/SSIM↑;行:NeRF/Plenoxels/iNGP-Base/Mip-NeRF 360/3D Gaussian Splatting/Ours - Gaussian/Ours - Epanechnikov。共 66 个 token,机器校验与文字层差异 0。
  • 表 10-2=Table 2(p.12,原文位于 §7.3)|8 列 × 7 行(方法名行 + 引用行 + 5 个指标行)|列:Method(行标签列)/NeRF/Plenoxels/iNGP/Mip-NeRF 360/3DGS/Ours - Gaussian/Ours - Epanechnikov;行:Optimization time (RF)/Rendering speed (RF, real datasets)/Memory footprint (RF)/Rendering framework/Complex camera models。共 91 个 token,机器校验与文字层差异 0。

表体统一以 HTML 重排呈现,不使用截图(原始裁图 tables/tab1.png 与 tables/tab2.png 留作核对凭据)。本篇体例:原文这两张表的表注都写在表体之上(2/2 实测,ACM 惯例;且两张的注都落在页面顶部 y ≈ 79,表体紧接其下),站内沿用同一位置,注文逐字照录。另有一处原文侧的版式照录不改:表 10-2 的表头是三层(方法名/各方法的引用/最左侧竖排的 Method 行标签),站内按「两行表头 + 行标签列」重排。

附录索引(正文按节引用)

  • 附录 A SINGLE-SCATTERING ALBEDO AND PHASE FUNCTION(p16):把第 4 章的「混合式」光学属性推广到核混合形式的单次散射反照率 α(x) 与相函数 f_p(x, ω′→ω);与式 (6) 的消光同构,唯一区别是需要归一化(原文式 (25)、(26))。
  • 附录 B KERNEL TRANSMITTANCE EXPRESSIONS(p16):核的透射率表达式。B.1 Gaussian kernel(p16):在「已归一化并白化」的坐标下给出单个加权三维高斯沿给定射线的累积分布函数(CDF),即光学深度闭式(原文式 (27))与其中各常数的显式表达。
  • 附录 C INTEGRATOR ADJOINTS(p16–p17):两个积分器的伴随形式(原文式 (30) 等)。这一节回应第 7 章那处难点:沿射线的循环不支持自动微分,必须手写循环内的伴随;完整推导与实现细节在补充材料里,并附与有限差分的对照。

怎么读这篇:如果只读一章,读第 4 章:把 RTE 改写成「基元的分段和」是全篇的支点,后面的闭式解、效率、以及「不需要排序」这条优势都是它的推论。如果要判断这条路值不值得跟,读第 8 章的图 6-1(闭式透射率在无偏对手面前的正面读数)与第 11 章的图 17-1(换核的收益),两处合起来才是这套表示真正的卖点。如果关心它与 3DGS 的关系,先读第 12 章的第一段(标题那一笔账),再读第 10 章的两张表:顺序反过来读,很容易把它读成「一个更慢的 3DGS 竞争者」。如果关心它的边界,注意第 12 章后半那六条与第 8 章末尾那条机制性的适用条件(大而重叠的基元会让 BVH 退化)。

致谢照录:原文致谢 Christophe Hery 与 Olivier Maury 在整个项目过程中的持续支持与审阅;并写明 Jorge Condor 与 Piotr Didyk 受瑞士国家科学基金会(SNSF,Grant 200502)与 Meta 的学术捐赠支持。