← Home

Paper Note: Generalized Resampled Importance Sampling - ReSTIR PT

17 October, 2024

书接上回,ReSTIR PT 即使用 ReSTIR 复用 path。由于不同像素的 path space 并不相同,我们必须找到合适的 path reuse 方式——也即 GRIS 理论中的 shift mapping。

ReSTIR PT 中 shift mapping 的形式定义

对于像素 \(k\) 和像素 \(j\), \(T: \Omega_k \to \Omega_j\) 是 k 的路径空间到 j 的路径空间上的映射:

$$ T\left(\left[ \textbf{x}_0, \textbf{x}_1, \textbf{x}_2, \textbf{x}_3, ... \right]\right) = \left[ \textbf{y}_0, \textbf{y}_1, \textbf{y}_2, \textbf{y}_3, ... \right] $$

注意到 \(\mathbf y_0\) 是相机,\(\mathbf y_1\) 是 primary RT 交出来的,我们要 map 的就是 \(\mathbf{y}_n, n \geq 2\)

可用的 shift mapping 策略

什么时候复用顶点?

作者提出了两个新的判断条件,用于决定顶点何时不能复用

距离条件

观察到在渲染方程

$$ L_o(\mathbf{x}, \omega_o) = L_e(\mathbf{x}, \omega_o) + \int_{\Omega} f_r(\mathbf{x}, \omega_i, \omega_o) L_i(\mathbf{x}, \omega_i) G(\mathbf{x}, \mathbf{x'}) V(\mathbf{x}, \mathbf{x'}) \text{d}\omega_i $$

中,几何项

$$ G(\mathbf{x}, \mathbf{x'}) = \frac{ \cos \theta_x \cos \theta_{x'} }{ |\mathbf{x} - \mathbf{x'}|^2 } $$

包含一个平方反比的顶点距离——在两个顶点距离特别近的时候会导致一个很大的权重,进而带来方差。因此,距离条件定义为当

$$ \|\mathbf{x}_i - \mathbf{x}_{i+1} \| \geq d_{\max} $$

满足时才可以复用,也即「若 \(\mathbf{x}_{i+1}\) 与 \(\mathbf{x}_i\) 的距离小于阈值,则不能复用顶点」

Lobe 条件

在检查表面 roughness 的时候,我们会遇到多个 lobe 的 BSDF(如一个 diffuse 上面加一层清漆)。在检查时一次只选择一个 lobe,当 \(x_i, x_{i+1}, y_{i+1}\) 的 roughness 都足够大的时候才能 reconnect。因为要每次选一个 lobe,因此要在路径上额外记录每个 path vertex 的 lobe ID.

最终使用的 hybrid mapping 就是在满足以上两个条件时进行 reconnection shift 而在不满足时进行 random replay。

Shift Mapping 的 Jacobian 矩阵

定义 \(\mathbf x_i \to \mathbf x_{i+1}\) 的单位向量为 \(\omega_i^\mathcal X\),这一步光传输的随机数是 \(\overline{\mathbf u}_i^\mathcal X\),那么

立体角视角

$$ \left|\frac{\partial \omega_i^y}{\partial \omega_i^x}\right| = \left|\frac{\cos \theta_2^y}{\cos \theta_2^x}\right| \cdot \frac{\|\mathbf x_{i+1} - \mathbf x_i\|^2}{\|\mathbf x_{i+1} - \mathbf y_i\|^2} $$

其中 \(\theta_2^\circ\) 是 \(\omega_i^\circ\) 和它对应的 surface normal 的夹角.

$$ \left|\frac{\partial \omega_i^y}{\partial \omega_i^x}\right| = \left|\frac{\partial \omega_i^y}{\partial \overline{\mathbf u}_i^y}\right| \left|\frac{\partial \overline{\mathbf u}_i^y}{\partial \overline{\mathbf u}_i^x}\right|\left|\frac{\partial \overline{\mathbf u}_i^x}{\partial \omega_i^x}\right| = \frac{p_{\omega_i^x}(\mathbf x_{i+1})}{p_{\omega_i^y}(\mathbf y_{i+1})} $$

即对应立体角采样的概率密度之比.

Primary Sample Space 视角

$$ \left|\frac{\partial \overline{\mathbf u}_i^y}{\partial \overline{\mathbf u}_i^x}\right| = \left|\frac{\partial \overline{\mathbf u}_i^y}{\partial \omega_i^y}\right| \left|\frac{\partial \omega_i^y}{\partial \omega_i^x}\right| \left|\frac{\partial \omega_i^x}{\partial \overline{\mathbf u}_i^x}\right| = \frac{p_{\omega_i^y}(\mathbf y_{i+1})}{p_{\omega_i^x}(\mathbf x_{i+1})} \cdot \left|\frac{\partial \omega_i^y}{\partial \omega_i^x}\right| $$

注意到因为每一步复用的决策是局部的,全局 Jacobian 就是所有局部 Jacobian 的乘积.

JS
Arrow Up