Stochastic Graph Compression for Constant-Memory Differentiable Light Tracing
Linas Beresna, Eugene Fiume
SIGGRAPH Asia 2026 Technical Com
cs.GR
2026-10-08
每条光路只随机保留一个传感器连接,配合路径重放回传,可微光追踪显存恒定 142MB,naive AD 深度超 16 即 OOM。
可微渲染计算渲染图像对材质、光源、几何等场景参数的导数,支撑逆向渲染这类梯度优化任务。参数一多,导数只能用 reverse-mode 自动微分(AD)来算:前向模拟的每一步操作都记进一张计算图,反向遍历一次,把标量损失的梯度送回所有参数。麻烦在 Monte Carlo 光传输模拟里,这张图要装下每条路径的每个散射事件,路径一深、采样一多,显存就见底。
视点路径追踪(从相机出发)已经有解:PRB(Path Replay Backpropagation)只存随机数生成器的种子,反向时重放同一串随机数、边重建路径边回传,内存从此与路径深度无关。light tracing(从光源出发)是另一种形态:光路的每个散射顶点都能连到传感器、把通量 splat 到像素上,深度 k 的路径最多产生 k 个独立贡献,每个各带一张计算图,PRB 依赖的非分叉结构到 splatting 上直接失效。这篇 Simon Fraser University 的 4 页短文(SIGGRAPH Asia 2026 Technical Communications)补的就是这个洞。
ResLRB 这个名字就是三个部件:蓄水池压缩、伴随光追踪、路径重放。
前向 pass 做三件事:
反向 pass 重置种子、确定性重放路径到深度 I:每个顶点只对局部散射计算开一个一次性 AD 作用域,用 log 导数恒等式(∇log f = ∇f/f)把缓存的前向 CI 当乘性权重,让每个顶点交出自己在 ∇CI 里的那份梯度,算完立刻丢弃。峰值内存被压到「微分单个散射事件」的成本,与路径深度、连接数都无关。
无偏性的来源很干净:估计量 (Wk/wI)·fI 对选中索引取期望,恰好还原全部 k 个 splat 之和,梯度同理。代价是方差上升,每条路径只真算了一个连接。
attached 扩展处理「参数一动、落点也跟着动」的情形(镜面、折射顶点最明显,玻璃板焦散是典型):用前向模式把逐顶点 Jacobian 链成路径 Jacobian,蓄水池选中时以常量额外存储缓存;完全漫反射顶点的 Jacobian 秩亏,需先正则化。
实现为 Mitsuba 3 / Dr.Jit 上的自定义 integrator,硬件 NVIDIA RTX 5080(16 GB),基线是 naive AD(Mitsuba 的 ptracer):
| 对照项 | naive AD (ptracer) | ResLRB |
| 峰值内存(扫最大路径深度) | 线性增长,深度超 16 即 OOM | 恒定 142 MB |
| 玻璃板焦散梯度(32 spp) | 能跑 | 与基线一致,只差 Monte Carlo 噪声 |
| 焦散场景采样上限 | 32 spp 后 OOM | 1024 spp,同一梯度、噪声更低 |
Grey & White Room 场景(路径长度 32、32 spp)对地板漫反射率的 L2 损失梯度,两者符号与空间结构一致,印证随机保留没有引入系统偏差。时间上,重放要把路径再走一遍,论文以图 6 的曲线呈现计算时间随深度的变化,显存收益换的就是这份遍历开销。
焦散这类光效靠 light tracing 的 splatting 才采样得动,而图像空间 splatting 形态的可微光追踪,此前没有常量显存的反向传播方案。ResLRB 补上了这个选项,而且梯度无偏,可以直接放进梯度优化管线,不会把系统偏差埋进优化目标。机制上也有可迁移的点:ReSTIR 一系把流式蓄水池当降方差工具,这里把同一件武器转向压计算图,「图随分支数爆炸」的可微模拟都可能套用。也说清楚定位:这是 4 页 Technical Communications,给 PRB 补 splatting 缺口的结构性补洞,不是范式级变化。