NILE: Nested Interleaving of Low-Dimensional Elements
Shenzhen University; NVIDIA; CNRS
一句话总结
NILE 提出了一个模块化的”元采样器”架构,用一条高维低差异序列去编排一组可自由定制的低维采样器,从而在同一个框架里同时拿到”逐子空间可控的局部分布”和”联合高维空间的均匀覆盖”。
研究背景
- 领域现状:渲染里的采样长期分成两派。局部采样在每个像素上独立优化低维分布(如分层、蓝噪声),贴合光路的低维本质,但各像素之间、各维度之间不协调;全局采样用一条高维低差异(LD)序列一次性为所有像素、所有维度生成样本(典型是全局 Sobol),收敛率通常更好,如今是主流。
- 核心痛点:两派互不相通,只能二选一。全局采样虽然收敛好,但对”样本在某个子空间上的分布”几乎没有用户控制权,难以对付常见的走样瑕疵;而且它一旦被广泛采用,反而压制了对局部采样器的研究——尽管某些局部分布在受控实验里明显更优。本质上,是积分器被迫迁就采样器,而不是采样器去适配积分器和具体问题。
- 本文 idea:与其把蓝噪声之类的局部性质”焊死”进 LD 序列,不如把局部采样器和 LD 序列拆成架构中相互独立的模块。让每个低维元素负责生成实际样本、保留自己的低维结构,把”高维均匀性”这件事外包给一条现成的高维 LD 序列去做交错编排,最后再用 Z-indexing 把样本分发到各像素。
方法
整体框架分三级流水线,目标是让样本在三个域上都均匀:源子空间、联合高维空间、屏幕像素。第一级是一组可扩展的低维元素(element),每个元素生成一条低维样本序列;第二级是一条高维 LD 序列(本文用 SZ 序列),它为每个元素分配一个维度,用该维度去”嵌套”并交错各元素的样本流,就像它交错自己原生分量那样,从而带来全局高维均匀性;第三级是 Z-indexing 单元,把样本按 Morton 序映射到各(子)像素。
flowchart LR
A["低维元素库 (分层/蓝噪声/网/圆盘...)"] --> B["高维 LD 序列 (SZ) 交错编排"]
B --> C["Z-indexing 分发到像素"]
C --> D["渲染图像"]
关键设计:
- 从”点”到”区间”的视角转变:这是整套方法的概念基石。van der Corput 序列把索引流映射为逐步加密的二进制分数流 \(.0, .1, .01, .11, .001, \ldots\),通常被解释为单位区间上的样本点,但这种解释是任意的。NILE 改把这些拼接位分数解释为多分辨率区间(strata):一个满的 2 的幂长度列表就代表被完整填充的分层。于是采样不再是”往域里放点”,而是给每个像素样本分配一张逐步细化的”域的图像”——像素块越大,看到的域图像分辨率越高。
- 嵌套交错(Nested Interleaving):只要把每个被采样的域递归划分成一棵二叉(dyadic)树,并把它的区间对齐到嵌套用的 vdC 序列区间,LD 序列就会”透明地”帮你交错这些样本流。此时 LD 序列张成的单位超立方体被重新解释为各定制区间的笛卡尔积组合空间。索引位被分成三段 \(.o_1 o_2 \ldots o_s\, d_1 \cdots d_r\, j_1 j_2 j_3 \cdots\):前缀 order 位 \(o_i\) 决定样本落在哪个主区间(只影响顺序,可用来打乱、去相关不同元素);design 位 \(d_i\) 控制到设计分辨率的实际布局;尾部 jitter 位 \(j_i\) 决定子区间内的抖动。一条硬约束是区间的访问顺序必须静态,否则会破坏 LD 序列精心编排的洗牌。
-
元素构造的通用逻辑:所有元素共享同一套运行时逻辑(见下),差别只在”如何定义并索引子切片”这一步,且这个索引通常是递归确定、从不显式展开的。设计元素时要满足若干要求:Sequencing(细分到总样本数分辨率、每个域像素恰好分配一次)、Modularity(要的是像 \((t,s)\)-序列那样的”样本集序列”,而非单一渐进序列)、Resolution(细分前想控制的切片数,是自由参数)、Partitioning(把切片集划分成符合模块化目标的子集)。
1 2 3 4 5 6 7 8
输入:2D 元素域 Ω,二进制分数索引 V ∈ [0,1) S ← Ω // 初始化为整个域 repeat q ← ⌊4V⌋ // q ∈ {0,1,2,3} V ← 4V − q // 丢弃已消费的位 S ← subslice(S, q) // 用第 q 个子切片替换 S until 达到数值精度 返回 S 中任取一点 x - 一套可插拔的示例元素:论文展示了如何把经典局部分布重构成 NILE 元素。StART(Stratification with ART)把分层采样等价成 base-4 Owen 加扰的 vdC 序列,用 Q-ART 算法实现;Jittered Grid(JG)用 Morton/Z 序索引直接给出抖动网格;CMJ(相关多重抖动)通过对 XOR 加扰码取笛卡尔积来同时满足 1D 投影与 2D 空间的分层;Blue Noise(BN)复用 ART 蓝噪声瓦片;Triangles/Discs 用 Basu–Owen 索引把 StART 推广到非方形域;O2 / One-Three 则把自相似 \((0,2)\)-序列嵌进来,作者还发现嵌套 \((0,2)\)-序列到 2D Sobol 第一维恰好等价于 3D Sobol(up to shuffling),这让”公认最好的 3D 采样序列”能被复用到场景中任意 3D 子空间,且无表、更快。
实验结果
评测在 pbrt-4 的 GPU 版上完成,参考图用 220-spp 的 StART 生成。核心结论有两条:其一,NILE 编排的 StART 相比”独立实例化”的分层采样有明显提升,在部分场景甚至超过全局 Sobol;其二,多数 NILE 采样器能达到底层 SZ 序列同阶的收敛,其中 O2 最好、常超过原生 SZ,而 JG 因差的差异性表现最弱。在被 SZ 论文列为失败案例的 “Head” 场景上,所有 NILE 采样器都成功避开了 SZ 的瑕疵。
下表汇总不同 NILE 元素在文中报告的相对表现定性判断(收敛与屏幕空间误差):
| 采样器 | 收敛表现 | 屏幕空间(低采样率) | 备注 |
|---|---|---|---|
| O2 / One-Three | 最好,常超原生 SZ | 最佳 | 无表、最快、省内存 |
| BN(蓝噪声) | 与 SZ 同阶 | 次优 | 随机元素,鲁棒 |
| StART | 与 SZ 同阶 | 好 | 适合做无偏参考图 |
| CMJ | 与 SZ 同阶 | 有竞争力 | Latin-hypercube 性质 |
| JG(抖动网格) | 最弱 | 背景好、反射区差 | 差异性差,宜用于平滑积分 |
此外,作者指出全局 Sobol/Halton 存在”用同一采样器渲染的参考图会偏袒同款采样器”的偏差问题,而 NILE(以及所有 Z-indexed 采样器)基本不表现这种偏差,因此更适合用来生成基准参考图。在速度与内存上,因为都是二进制索引序列,NILE 元素与 Sobol/SZ 同阶,O2 无表在速度和内存上尤其占优;”2 合 1”打包让 StART 的查找表在 8×2D 之后反超 Sobol。
亮点与局限
- 亮点:
- 用”模块化元素 + LD 序列编排 + Z 分发”的三级架构,真正打通了局部与全局采样两条长期割裂的路线,且让每个模块保持独立身份、可混搭。
- “把点看成多分辨率区间”的视角转变很有启发性,直接催生了统一的嵌套机制,并意外揭示了嵌套 \((0,2)\)-序列与 3D Sobol 的等价关系。
- 复活了四十年来关于低维分布的研究成果,证明蓝噪声等低维性质与高维覆盖并不互斥;框架也降低了研究者验证新分布的编码成本。
- 局限:
- 整体模型仍是启发式的,缺乏可证明的性能保证。嵌套后当每个子空间被看作单一维度时保持低差异,但把子空间展开成各个轴后就不再成立,因此失去了 Koksma–Hlawka 这类误差界。
- 收敛性能主要来自底层高维 LD 序列,因此在需要完全收敛的场景下,NILE 不应被期待大幅超越其底层 LD 采样器;它的价值更多在于以极小代价换取用户对分布的控制权。
- 对多数分布而言,构造 NILE 兼容元素比独立生成对应的逐像素样本集更复杂。
延伸思考
- NILE 与 SZ 序列、Z-sampler 的组合是本文验证过的一条路,但这些选择本身仍值得深挖:也许可以专门为”被用作嵌套编排”这一用途设计新的 LD 序列或样本分发器。
- “点即区间”的解释一旦被证明有实用价值,很可能在其它高维 LD 采样的应用里被复用,这是一条通用的思路线索。
- 论文结尾特别提到,模型提供的可追踪、带索引的样本天然契合现代机器学习管线,为”面向学习的采样(learning-aware sampling)”打开了空间——对做可微渲染或神经渲染采样的研究者,这是个值得追问的方向。