(论文)[2016-SIG] Adjoint-Driven Russian Roulette and Splitting in Light Transport Simulation

ADRRS

  • Adjoint-Driven Russian Roulette and Splitting in Light Transport Simulation
  • 作者网站
  • Code:EARS 中有实现

贡献

  • 将 RR 和 Splitting 结合到一个统一的框架里(RRS)
  • 通过路径的 total expected contribution 来决定 RRS 系数
    • thoughput
    • pre-computed irradiance

Introduction

  • 传统
    • RR,基于
      • local surface reflectivity
      • accumulated path weight (a.k.a. throughput)
    • Splitting,基于
      • heuristics based on local BRDF roughness
    • local 的特征容易实现,但是效果不好
  • 问题:忽略了真实分布
    • actual distribution of light
    • visual importance
  • ex:暗表面长路径
    • local surface based RR:会被过早截断
    • 复杂可见性、参与介质场景中常见
  • 本文:根据路径的 total expected contribution 来决定 RRS 系数
    • path weight \(\times\) adjoint transport solution(预计算保存在场景中)
  • Particle transport
    • analog:根据物理的概率来决定 collisions、absorption、scattering,所有的粒子都等价
    • non-analog simulations:修改概率,提高效率
  • RR+S
    • throughout based:不考虑 expected future behavior
  • Importance sampling
  • Adjoints:TODO
  • Path guiding
  • Weight window
    • increases robustness
    • RR and splitting are combined in one variance reduction tool called the weight window
    • 当 weight 小于/大于 weight window 时使用 RR/S,从而使得 weight 保持在 window 内部
    • Booth and Hendricks [1984]
      • 让 window 的中心 inversely proportional to 重要性函数(让重要的地方粒子更多)
  • Go-with-the-winners
    • Szirmay-Kalos and Antal [2005]
      • efficiency analysis:基于 local material properties、scene dependent parameters

Background

  • particle tracing / unidirectional path tracing
  • MC 估计:weight \(\times\) radiance
    • \(\text{i}=\text{incident}\)

  • 在位置 \(\mathrm{y}\) 反射之后的出射权重
    • \(\text{o}=\text{outgoing}\)
    • \(\hat{\nu}\):在应用了 RRS 之后的 weight

  • 文章中的 \(\omega_o\) 指向 quantity 传输的方向

  • Russian roulette and splitting

Adjoint-Driven RR and Splitting

Unified Russian Roulette and Splitting

  • RRS
    • \(q<1\):RR
    • \(q>1\):S(非整数情况后面说明)

  • 示意图,所有新生成的粒子 \(\hat{\nu}\) 相同

Determining the RRS Factor

  • \(q\) 正比于期望的贡献值
    • 直观的,当达不到期望贡献值时,则倾向于停止
    • 理论在 weight invariant 部分

  • \(\Psi\) 的含义
    • light subpath:visual importance \(W\)
    • camera subpath:radiance \(L\)
  • 这里不考虑自发光,因为我们只在意 \(\mathrm{y}\) 处的 scatter 的能量的期望值
    • 合理的,自发光 RRS 不管是多少,结果都是一个精确值,不受影响

\[ \Psi^{\text{r}}=\Psi-\Psi^{\text{e}} \]

  • \(c(\mathrm{y},\omega_\text{i})\) 的可视化
    • 注意每一条虚线都是对 \(\Psi^{\text{o}}\)无偏估计

Weight Invariant in ADRRS

  • 设计的时候,保证如下不变量
    • which holds for particle weight in a zero-variance (ZV) scheme

Algorithm

  • 计算 RRS 系数 \(q\) 需要 \(I,\Psi\)
    • 我们对 \(I,\Psi\) 进行近似估计
    • 因为近似存在偏差(不够准确),weight window 用于修正

Weight Window

  • 放松 RRS(在 RRS 执行之前留有余地),提高鲁棒性
    • 放松 \(\hat{\nu}\) 的限制,保证 \(\hat{\nu}\in[\delta^{-},\delta^{+}]\) 即可,而不是 \(\hat{\nu}=C_{\text{ww}}\)
  • 保证权重 \(\hat{\nu}\) 都在设置的范围内
    • \(\nu_i\in[\delta^{-},\delta^{+}]\):不变 \(\Longrightarrow\) \(\hat{\nu}=\nu_i\)
    • \(\nu_i>\delta^{+}\):split,\(q=\dfrac{\nu_i}{\delta^{+}}\Longrightarrow\hat{\nu}=\delta^{+}\)
    • \(\nu_i <\delta^{-}\):RR,\(q=\dfrac{\nu_i}{\delta^{-}}\Longrightarrow\hat{\nu}=\delta^{-}\)

  • split 的非整数情况
    • 概率 \(\lfloor{q}\rfloor+1-q\) 发射 \(\lfloor{q}\rfloor\) 条光线
    • 概率 \(1-\lfloor{q}\rfloor+q\) 发射 \(\lfloor{q}\rfloor+1\) 条光线
  • window center 设置为式子 5 的值
    • 具体如何计算后面说

\[ \dfrac{\delta^{-}+\delta^{+}}{2}=C_{\text{ww}}=\dfrac{\tilde{I}}{\tilde{\Psi}_{\text{o}}^{\text{r}}(\mathrm{y},\omega_\text{i})}\qquad(6) \]

  • 推荐设置
    • \(\delta^{+}=s\delta^{-}\)
    • \(s=5\)
    • 早期一些核科学研究的推荐设置
  • 此时可以得到

  • 在 weight window 之后,我们还会对 \(q\) 加上 clamp
    • 很小的 RRS 系数会导致大方差(估计不准)
      • RR 必然带来方差的增大
  • weight window 相当于是给 \(\hat{\nu}\) 做了 clamp

Adjoint Solution Estimate

  • \(\tilde{\Psi}_{\text{o}}^{\text{r}}(\mathrm{y},\omega_\text{i})\)
  • 之前
    • photon/importon density estimate:慢而且不准
    • spatial-directional distribution
  • 我们:无方向的缓存,而且鲁棒
    • \((a)\) 就是我们的方法
    • \((b)\) 加上了 path guiding

  • 预训练 irradiance(/diffuse visual importance\(G\)

  • adjoint 的估计
    • \(\kappa(\mathrm{y})\):total material reflectivity(albedo)
    • \(\dfrac{\kappa(\mathrm{y})}{\pi}\):Lambert 漫反射的 BRDF

  • 为什么是上面的表达形式
    • 在方向上做平均(Lambert)
      • \(\Psi^{\text{r}}_{\text{o}}(\mathrm{y},\omega_i)=\Psi^{\text{r}}_{\text{o}}(\mathrm{y})\)

\[ \begin{aligned} \Psi^{\text{r}}_{\text{o}}(\mathrm{y}) &=\int_{\Omega}\Psi_{\text{i}}(\mathrm{y},\omega)\dfrac{\kappa(\mathrm{y})}{\pi}\cos\theta_{\mathrm{y}}\;\mathrm{d}\omega\\ &=\dfrac{\kappa(\mathrm{y})}{\pi}{\color{red}\int_{\Omega}\Psi_{\text{i}}(\mathrm{y},\omega)\cos\theta_{\mathrm{y}}\;\mathrm{d}\omega}\\ &=\dfrac{\kappa(\mathrm{y})}{\pi}{\color{red}G(\mathrm{y})}\\ \end{aligned} \]

  • 预计算:Vorba 2014(On-line learning of parametric mixture models for light transport simulation
    • 和他不一样的地方,我们双向追踪光线,构建 \(\tilde{G}\) 的估计(irradiance/diffuse visual importance)
    • Vorba:fit directional distributions
    • EARS 对于预计算的实现:空间划分做累计和(类似 PPG)
  • 细节:借鉴 Vorba(细节看论文)
    • \(\tilde{G}\) 无法获得的时候,使用 kernel density estimation 从临近的粒子中获取一个 estimate
      • 每一个粒子都带有一个半径(最深的最大),同时让光场快的地方更密集
    • 每一轮迭代使用 progressive kernel density estimation 更新 \(\tilde{G}\),同时计算 rel-error \(\dfrac{\text{stddev}(\tilde{G})}{\tilde{G}}\)
    • ADRRS 只有在 rel-error < 30% 的时候使用,否则使用一个全局固定的 large weight window
    • smoother:周围的缓存做平均

Measurement Estimate

  • \(\tilde{I}\):EARS 中使用降噪后的结果
  • 之前
    • 使用一个常数,而不是 \(\tilde{I}\),使得在一次 collision 的时候,particle 的权重恰好落在区间中心
  • camera ray
    • 实际实现上,使用记录的缓存用于更新
    • 发射 4 条 jittered primary rays,查询 irradiance
      • diffuse/glossy:碰到即返回
      • specular:继续
      • 10 条还没碰到,则在 10th 处查询
  • light ray
    • 已经获得的结果,所有像素的平均值(因为我们不知道会被贡献给哪一个像素)

Path Sampling Algorithm

  • First Collision
    • camera ray:第一次 RRS 系数 \(q=1\)
      • 第一次使用只会用于降低像素内的方差,这通常很小
        • Why
    • light ray:第一次也能发生
  • 避免 ray tree 太大
    • RRS <= 100
    • 每一条路径上的最大分裂次数 <= 1000
      • RRS 累乘
  • NEE:对每一条分裂的 ray 做 NEE
    • \(q\) pairs

Combining ADRRS with Path Guiding

  • Vorba 14
    • classic RR 可能会去除 Path Guiding 的效果
    • \(\delta^{-}=1\mathrm{e}^{-6}\) 设置很小,效果并不好,失去 RR 的意义了
    • 引入 splitting,当 weight > 2 original value 时使用 splitting,同时设置 \(s=2\times10^{6}\)
  • 我们
    • 基于 Vorba 14,同时预计算 \(\tilde{G}\) 和 directional sampling distribution
      • 训练的时候也加入 ADRRS
    • 进一步的,我们利用 distribution 构建更好的 adjoint
  • 利用 distribution 估计 adjoint \(\tilde{\Psi}_{\text{o}}^{\text{r}}(\mathrm{y},\omega_\text{i})\)
    • 利用前一个点 \(\mathrm{x}\) 进行估计
    • 根据 PG 的 ZV 估计设计要求(\(\tilde{G}(\mathrm{x})\) 做归一化),有如下式子,推导得到式子 10
    • 根据式子 10 和之前式子 9,得到实际使用的 adjoint 估计(式子 11)
      • \(\max\),则 \(C_{\text{ww}}\) 越小,则停止的光线数越少(\(\delta^{-}\) 也小了),避免方差太大(glossy 场景)

ADRRS and Zero-Variance Schemes

  • zero variance (ZV)
  • ZV 条件下,推导得到 \(\mathrm{y}\) 处的 \(q\) 如下,具体过程见附录
    • 前一个点 \(\mathrm{x}\)

  • ZV 下

  • 这样得到的 \(q\)\(\mathrm{x}\) 之前的情况都无关(不包含 \(\tilde{v}\) 项)
  • RRS as importance sampling
    • 这样子的 \(q\),好像是一种重要性采样
    • 实际 pdf 比零方差高了,就使用 RR,减小采样;低了,就使用 S,增加样本

  • Residual variance
    • RR 下,等价于拒绝采样(rejection sampling)
    • splitting 不能降低 \(\mathrm{x}\) 出的方差,因为其发生在 \(\mathrm{y}\)
    • 因此如果 pdf 很差,ADRRS 起到的补救作用很小
      • 光路:diffuse wall -> spacular-like floor -> light
      • diffuse 的 pdf 很差,则 floor 的 splitting 补救作用很小
  • Zero-variance sampling
    • ZV scheme:\(p(\omega\mid\mathrm{x})=p_{\text{zv}}(\omega\mid\mathrm{x}),\forall\omega\)
    • 如此可以获取 ZV 的 \(q=q_{\text{zv}}=1\)
    • 理解:pdf 是 ZV 了,就不需要 RRS 了
    • 不同点
      • PG:\(\mathrm{x}\) 点的估计是 ZV 的
      • ADRRS:\(\mathrm{y}\) 处的方差降低了
  • Path guiding methods
    • pdf 越接近 ZV,则就不需要 RRS 了
    • 否则,RRS 用于弥补 pdf 的偏差

Result

  • 1 hour on an Intel Core i7-2600K CPU using 8 logical cores.
    • training time included
  • max bounces:40
  • indirect light dominated scene

Limitation, Discussion, and Future Work

  • Inaccurate adjoint and measurement estimates
  • Efficiency-driven RR and splitting
  • Splitting and combined estimators
    • with BDPT
  • Participating media

sup

transport

  • radiance transport
    • 分母:归一化(分子的积分)
    • \(\mathrm{x}\):发射,\(\mathrm{y}\):收集

  • visual importance transport
    • 分母:归一化

  • light tracing
    • 估计如下
      • 可以看 PT 的 MC 估计,相当于此时的权重函数为 \(L\),此时收集的 transport 为 \(W\)
      • \(\mathcal{M}\):全表面空间
      • 想象一个像素是一个小 patch,到达/出去这个 patch 的 flux 定义如下
        • \(W\):这个 patch 直接可见的点及其方向 \(\Rightarrow\) 1
        • \(L\):radiance
        • flux:垂直,需要乘 \(\cos\)
      • 也就是说这里的 \(I\) 指的是通量 flux

  • path tracing
    • 估计如下

采样

  • 出射采样,以 light tracing 为例,配套的估计是 visual importance transport
  • emission:首先采样一个光源

  • scatter:发生散射的地方,出射方向的概率正比于总出射 \(L\)

Light Tracing 证明

  • survival probability
  • 这样的设计,能够让路径只有在相机处恰好完全终止(相机不与 visual importance 交互)

  • 证明如下式子

  • 已知
    • 采样是 ZV 的,包括 light ray/camera ray
    • 对称性
    • 红色:radiance transport

  • 分类讨论:主体思路,数学归纳法证明

emission

  • 注意光源不散射,除了发光外不与光线交互
  • RRS 前
    • 按照正比发射:\(p=\dfrac{WL\cos}{I}\)

  • RRS 后
    • RRS 的 ZV 定义(式子 7)+ RRS 前系数

中间节点

  • \(\mathrm{x}\):发射,\(\mathrm{y}\):收集
    • 归纳法,假设 \(\mathrm{x}\) 满足要求
  • RRS 前
    • \(\mathrm{x}\) 处散射
    • 根据式子 6,此时 \(L\) 变为 \(\hat{v}f_\text{s}\)

  • 归纳

\[ \hat{v}(\mathrm{x},\omega_{\text{i}}^{\text{x}})=\dfrac{I}{W_{\text{o}}^{\text{r}}(\mathrm{x},\omega_{\text{i}}^{\text{x}})} \]

  • 此时能够得到
    • \(\nu=\dfrac{\hat{\nu}f_{\text{s}}\cos}{p}=\dfrac{I}{W_{\text{o}}}\cdot f_{\text{s}}\cos\cdot\dfrac{W_{\text{o}}}{W_{\text{i}}f_{s}\cos}=\dfrac{I}{W_{\text{i}}}\)

  • RRS 后的推导和 emission 一样,于是得到 \(\mathrm{y}\) 也满足结果

PG

  • 原始论文中式子 12 的证明
    • 当前点 \(\mathrm{y}\) 的 RRS 系数由前一个点 \(\mathrm{x}\) 的采样 pdf 和 ZV pdf 决定
  • 更一般的版本:\(p^{\text{r}}_{\text{zv}}\) 代替 \(p_{\text{zv}}\)(不包含 emission,这样在 emission 处也正确)
    • 都替换成 \(X^{\text{r}}\) 就行

证明

  • 定义

  • transport