“Subsurface scattering is an important visual cue and in real-time rendering it is often approximated using screen-space algorithms. Path tracing with the diffusion approximation can easily overcome the limitations of these algorithms, but increases image noise. We improve its efficiency by applying reservoir-based spatiotemporal importance resampling (ReSTIR) to subsurface light transport paths. For this, we adopt BSSRDF importance sampling for generating candidates. Further, spatiotemporal reuse requires shifting paths between domains. We observe that different image regions benefit most from either reconnecting through the translucent object (reconnection shift), or one vertex later (delayed reconnection shift). We first introduce a local subsurface scattering specific criterion for a hybrid shift that deterministically selects one of the two shifts for a path. Due to the locality, it cannot always choose the most efficient shift, e.g. near shadow boundaries. Therefore, we additionally propose a novel sequential shift to combine multiple shift mappings: We execute subsequent resampling passes, each one using a different shift, which does not require to deterministically choose a shift for a path. Instead, resampling can pick the most successful shift implicitly. Our method achieves real-time performance and significantly reduces noise and denoising artifacts in regions with visible subsurface scattering compared to standard path tracing with equal render time.”
- 次表面散射的积分为什么天然高方差:它比表面反射多了一重对表面的空间积分,而不只是多了一个更宽的高光。
- ReSTIR 能套上去的前提是:候选样本的无偏贡献权重可算,且路径能在域之间被搬运并给出 Jacobian。
- 论文的三处改动各打一处要害:候选生成浪费交点、两种 shift 各自只在部分区域有效、局部判据在阴影边界必然选错。
- 第三处改动逼出了一个纯数学问题:路径空间与主样本空间维数不匹配、没有双射,必须用概率反演补齐。这一步属于正确性前提,不属于实现优化。
- 它的收益与材料的平均自由程尺度直接挂钩。这既是有效区间,也是失效条件。
1一张半透明皮肤,卡死了实时渲染在哪一环
次表面散射(SSS)是半透明材质的核心视觉线索:光从一处进入物体、在内部多次散射后从另一处离开。结果是外观更柔和、并伴随轻微的颜色渗透。大理石、皮肤、树叶、蜡、牛奶、果汁、水果都属于这类材质。
实时渲染里处理 SSS 有三条路线,各自的瓶颈不同:
| 路线 | 做法 | 瓶颈 |
|---|---|---|
| 屏幕空间 / 纹理空间卷积 | 把扩散剖面当卷积核,对入射辐照度做模糊 | 信息不够:拿不到被遮挡的背面、拿不到屏幕外的入射光 |
| 体路径追踪 | 模拟完整的体光传输,做真实的随机游走 | 代价不够:需要大量长路径穿过物体,实时不可行 |
| 路径追踪 + 扩散近似 | 用 BSSRDF 描述输运,在世界空间做重要性采样 | 噪声太大:多一重空间积分,方差显著上升 |
论文选的是第三条路线,并且明确承认它的代价:扩散近似能"轻易绕开"屏幕空间的信息限制(因为它天然在世界空间工作),但会让画面变噪。于是论文不做改扩散模型这条路,改用 ReSTIR 把这类路径的采样效率提上来。。
具体来说,ReSTIR 的价值在于它能在像素之间与帧之间重用路径。对 SSS 而言,最需要重用的一类路径恰好是"散射穿过物体、携带光从被照亮区域进入阴影区域"的那些。它们就是最难找到、也最贵的路径。但要重用,路径必须在不同像素的域之间被搬运(shift),而现有的两种 shift 各自只在半透明物体的部分区域有效。表面反射领域已有基于粗糙度的启发式来组合 shift,论文的起点就是这一观察:SSS 需要一套不同的判据。
path tracing 8 spp、ReSTIR SSS hybrid shift、sequential shift、reference;每幅下方标注 RMSE 与毫秒数。②读法:这是同等渲染时间下的横向对照,读的是"同样时间里谁更干净"——所以不能只看观感,必须把底下的 RMSE 与耗时一起读。另外注意 denoised 8 spp 那一格的存在:论文的主张不只是"噪声少",还包括"少让去噪器去猜"。
来源:ReSTIR Subsurface Scattering for Real-Time Path Tracing, Fig. 1, p.1 · © 2024 作者(ACM 标准版权声明,非 CC)· 原样引用,未修改
把图注里的数摘出来单独算一遍,收益量级就清楚了(这是数据复算,不是照抄):
| 配置 | RMSE | 耗时 | 相对基线降噪 | 耗时变化 |
|---|---|---|---|---|
| path tracing, 8 spp | 0.1304 | 25.1577 ms | 基线 | — |
| ReSTIR SSS · hybrid shift | 0.0741 | 23.5934 ms | 43.2% | −6.2% |
| ReSTIR SSS · sequential shift | 0.0642 | 28.7960 ms | 50.8% | +14.5% |
三点需要注意。一是 hybrid 的耗时比基线还低(−6.2%):这里的耗时下降并非来自某种加速技巧:短散射路径被更早重用,多数像素实际跟踪的路径更短,也就是说"降噪"与"降耗时"在这里不是取舍关系。二是 sequential 用 +14.5% 的耗时换来相对 hybrid 再 13.4% 的降噪((0.0741−0.0642)/0.0741),换得划算。三是 8 spp 的基线本身就在 25 ms 量级。这说明论文的目标场景是实时路径追踪,而不是离线渲染的加速。
论文自报的三条贡献按顺序是:①把 ReSTIR 套到 BSSRDF IS 上(§3);②为混合 shift 设计确定性的判据(§4.1);③推导顺序 shift,使多次重采样 pass 各自使用不同 shift,从而不必逐样本确定性地选 shift(§4.2、§4.3)。本稿按这个顺序拆解,并在第 8 章单独处理第 ③ 条里那个容易被忽略的数学前提。
2光进了又出的那笔账:BSSRDF 与扩散剖面
表面渲染方程里,一个点的出射光只依赖这一个点的入射光。次表面散射打破了这个假设:出射光来自物体表面其他位置透进来的光。于是积分从"方向半球"扩展为"方向半球 × 整个表面":
这里的 S 就是 BSSRDF(双向表面散射反射分布函数)。对照 BSDF 版本可以看出,多出来的 ∫A dxi 就是方差的来源:蒙特卡洛要同时把入射方向与入射位置都采对,两个积分相乘,方差自然更高。这就是第 1 章那句"路径追踪会增加噪声"的准确含义:SSS 不是更难算,是维度更高。
直接对 S 做随机游走(体路径追踪)在实时里不可行,所以论文采用扩散近似,把 S 拆成三个因子的乘积:
式 (2) 里 C 是归一化常数、两个 Ft 是方向相关的 Fresnel 透射、只有 Rd 是纯径向的。论文选择 Burley 的归一化扩散作为 Rd:
| 符号 | 含义 | 取值 / 约束 |
|---|---|---|
| a | 表面反照率(实际是波长相关的三分量向量) | 0 < a < 1 |
| r | 入口点与出口点之间的距离 | ≥ 0,单位长度 |
| d | 平均自由程 l 的尺度化版本,d = l/s | 波长相关,三个通道各一份 |
| s | 尺度因子,调 d 即调"透光深度" | 论文用它对 d 做扫描实验(Fig. 9) |
| rmax | 半径上界(扩散剖面在此球外为零) | 由 d 决定 |
式 (3) 的形状需要展开:它是两项指数之和再除以 r。长项 e−r/d 决定整体的透光深度,短项 e−r/(3d) 提供近处的锐利衰减,1/r 使得 r → 0 时名义值发散、但被指数压住。这个剖面并非从物理第一性原理推出,而是为同时贴合单次散射与多次散射而设计的近似。这一点直接决定了第 13 章的边界条件。
要做重要性采样,还需要 Rd 的 PDF 与 CDF:
两个实现细节需要单独指出。一是 PDF 里没有 a:反照率只影响权重、不影响形状,采样时不必管它,着色时乘回去即可。这是一次典型的"把常数挪出采样器"的做法。二是 CDF 的两项系数 0.25 与 0.75,正好是式 (3) 两项各自积分后的占比:把两个指数项分别积分会得到 1/4 与 3/4 的权重,所以这个 CDF 是精确归一化的。反解 r 需要一个一维求根(因为 r 同时出现在指数与分母里),这是每个样本都要付的常数开销:到第 9 章会看到,这笔开销正好是概率反演要反解的量。
3三个采样入口,各有各的死角
有了 Rd,就能用 King 等人提出的 BSSRDF 重要性采样把"对表面的积分"落到具体采样过程上。它分三步,每一步的代价与失败模式都不同:
第一步,在切平面的圆盘里采一个点。以出口点的法线为轴,切线 t 与副切线张成一个圆盘;按 Rd 采样半径 r、再均匀采样角度 φ,得到圆盘内一点。半径分布天然被 rmax 截断:圆盘之外扩散剖面为零,采样不会落到那里。
第二步,把它投影回表面。从圆盘点沿某个轴发射一条射线,与物体表面的交点就是候选入射点。这里出现了论文特别强调的实际问题:只沿法线投影是不够的:在弯曲几何上,沿法线的射线打到曲面的概率很低甚至为零(凸面上尤其明显)。所以要在法线、切线、副切线三个轴上分别投影,并对三轴 × 三通道做多重重要性采样(MIS)把它们加权合并。三通道的必要性来自 d 的波长相关性:采样半径时要在三个通道里选一个,这个选择也是随机的。
第三步,筛掉无效交点。射线可能得到多个交点(穿过薄壳物体时尤其常见),只有落在 rmax 范围内的才算有效。
这一章末尾还有一个伏笔:每个圆盘点常常命中多个交点。常规做法是随机挑一个,这就引入了一个 1/Ni 的概率质量因子(Ni 是交点个数)。第 5 章会专门处理这件事:论文在这里看到了一个被浪费掉的机会。
论文随后做了两处工程收敛,它们决定了后面所有讨论的适用面:①把 SSS 限制在主命中,即出口点 x1 与入口点 x2;若路径在主命中之后又打到半透明物体,退回普通 BSDF(例如带 SSS 的 BSDF 来近似一部分效果)。论文给的理由很直白:提升性能,并禁止 GPU 上的代码执行发散。②只建模同一物体内部的散射,跨物体的次表面输运不在模型里。第 13 章会把这两条作为边界条件逐条列清。
4一条能借别人样本的通用管道:GRIS
要在 SSS 上做时空重用,先得有一个能容纳"来自不同域的样本"的框架。论文用的是 GRIS(广义重采样重要性采样)。它针对的积分是
做法是:给定 M 个来自可能不同的定义域 Ω1…ΩM 的样本 X1…XM,每个样本只有一个可计算的无偏贡献权重 WXi(它无偏估计 1/pi(Xi),而 pi 本身可能不可解);目标函数 p̂ ≈ f 可求值但没有实用的采样算法。GRIS 按重采样权重随机挑一个样本、把它搬运到目标域 Y = Ts(Xs) ∈ Ω;M → ∞ 时 Y 的分布趋近 p̂ 的归一化形式。单样本 GRIS 估计量是
这里有三个约束,后面每一处改动都扣在其中一条上,需要单独列出来:
约束一:搬运要算 Jacobian。shift 映射 Ti 把样本从 Ωi 搬到 Ω,密度随之改变,无偏贡献权重也随之变为 WYi = WXi|T′i(Xi)|。这是全篇最容易写错的地方:少一个 Jacobian 因子,结果会被系统性地偏掉,而且画面看起来往往"还挺正常"。
约束二:支援集必须覆盖。单个 Ti(Xi) 一般盖不住 p̂,所以需要重采样 MIS 权重,即广义 balance heuristic:
它直接算需要 O(M²) 次操作;论文提到可以用成对 MIS(pairwise MIS)在 O(M) 内算出"偏移样本与规范样本之间"的广义 balance heuristic。这是把理论搬进实时循环的必要简化。而保底措施是放一个恒等 shift 的规范样本 X1 ∈ Ω,保证并集覆盖 p̂。
约束三:要记账置信权重。把 GRIS 变成流式算法靠加权蓄水池采样(WRS):只存当前选中的样本 Y、权重和 wsum、以及编码有效样本数的置信权重 c。当多个蓄水池串起来时,重采样 MIS 权重要带上 c:
// GRIS 一趟重采样(论文 Algorithm 2 的语义)
for i in 1..M:
Y_i = T_i(X_i) // 把样本搬到目标域
w_i = m_i(Y_i) * p_hat(Y_i) * W_X_i * |dT_i/dX_i| // 含 Jacobian
r.update(Y_i, w_i, c_i) // WRS:按 w_i/w_sum 概率替换
if r.Y != NULL:
r.W_Y = r.w_sum / p_hat(r.Y) // 算回无偏贡献权重
r.c = min(r.c, c_cap) // 置信权重必须封顶
ReSTIR 把这个骨架放进每帧每像素的循环,四步固定动作是:①候选生成(当帧产生 M 条候选路径,用 GRIS 挑一条初始样本);②时间重用(用运动矢量找到上一帧的对应像素,合并它的蓄水池);③空间重用(随机选若干邻居像素,合并它们的蓄水池);④着色(用选中的样本着色,Î = f(Y)WY)。
两个细节决定了这套东西能不能落地。一是候选生成阶段用恒等 shift(样本同源,Jacobian 为 1),而时空重用跨了像素与帧,必须给出真正的 shift 与 Jacobian。二是置信权重必须封顶:否则时间重用会让 c → ∞,新样本几乎无法影响已被选中的样本,画面会出现相关性伪影(样本在时域上"粘住"不动)。论文把它写成一条实现要求,而不是可选优化;因为省掉它之后画面不会立刻崩,只会在运动时露馅。
5既然列举都做了,就别只挑一个
第一处改动很小,但很有代表性。第 3 章留下的伏笔是:BSSRDF IS 的一次圆盘投影常常命中多个交点。常规做法随机挑一个,引入 1/Ni 的概率质量因子,于是无偏贡献权重变成 WXi = (1/p(Xi)) · (1/Ni),一趟跑完蓄水池的有效样本数仍然只是 M:
论文的观察是:为了确定 Ni,所有交点本来就必须被列出来:既然列举的代价已经付了,只留一个就没有道理。式 (9) 后半段那个 (1/Ni)·Σ 其实是一个"单样本估计":用随机挑一个交点的方式去估计"全部交点的加权和"。既然如此,把它替换成真正的求和即可:
收益是有效样本数从 M 提升到 ΣNi ≥ M,而且是"白拿":不需要预先知道 Ni,因为交点本来就以流式逐个生成、逐个 update 进蓄水池。代价只是把这些交点也存进候选结构。
但这里有一个极易踩的坑:候选生成结束后的置信权重仍然是 c = M,不是 ΣNi。原因是两者口径不同:c 记的是"处理过多少个候选阶段样本",而不是"合并了多少个交点";若按 ΣNi 去设 c,式 (8) 的加权就会失衡,等效于虚报样本数。有效样本数提升了,但记账口径不能跟着改。这是"数学上更优"与"实现上正确"之间的典型分界。
另外,候选样本结构里必须多存几样东西供后面的 shift 使用:x2、x3、投影轴索引、平均自由程通道索引、半径与角度的随机数、交点索引,以及一个缓存量 J(BSSRDF IS 的概率密度 pSSS,x1(x2) 的一部分)。缓存 J 是为了避免每帧重算 shift 的 Jacobian。这类"把数学上正确变成实时可用"的决定,往往比数学本身更影响成败。
6两套搬运路径,各自要付过渡费
时空重用要求把基准路径搬运到偏移路径。论文的记号是 x̄ = [x0, x1, x2, x3],本稿聚焦直接光照情形:x0 是相机顶点、x1 是主命中(出口点)、x2 是入口点、x3 在光源上。两种 shift 的差别只在"从哪个顶点重新接上"。
6.1重连 shift:穿过物体接上
重连把偏移路径直接接回基准路径的第一个自由顶点:
T([x0,x1,x2,x3]) = [y0,y1,x2,x3]
也就是新像素的出射点 y1 与基准的入口点 x2 穿过半透明物体直接相连。它的价值在于能重用一条长的散射路径:把光从被照亮的区域带进阴影区域,而这类路径恰恰是最难采到的。
两个性质需要单独记住。一是 Jacobian 恒为 1,因为 BSSRDF IS 在面积测度下进行。二是它不需要做可见性测试就能保持无偏:物体内部的可见性完全由扩散剖面决定,射线在物体内部"看不见"遮挡关系。这与表面反射形成鲜明对比:表面反射的重连必须测试 y1 ↔ x2 之间的遮挡,否则会引入偏差。所以重连 shift 在 SSS 上"更便宜也更安全"—— 这是半透明材质给出的一个额外好处。
6.2延迟重连 shift:晚一个顶点再接
把重连推迟一个顶点:
T([x0,x1,x2,x3]) = [y0,y1,y2,x3]
它先用随机重放(random replay)以与基准路径相同的随机数在物体上采出一个 y2:结果通常是 x2 的一个"类似但偏移"的版本:然后再重连到物体之后的第一个顶点。因为分成了两步,Jacobian 是两段之积:
若光源在面积测度下采样,则简化为前两个密度之比。注意分子 pSSS,x1(x2) 就是第 5 章里被缓存的 J:两章在这里扣上了。延迟重连更适合重建短的散射路径,与重连 shift 擅长的"长路径搬运"正好互补。这也预告了第 7 章的问题:既然各有主场,什么时候用哪个?
论文还处理了一个双射性问题,细节很小但会导致错误结果:随机重放必须"重现同一件事",所以样本要额外存一个交点索引 j 作为标识;偏移路径必须选中"用相同随机数找到的第 j 个交点"。如果偏移端找到的交点数少于 j,这次 shift 直接判失败(而不是随便挑一个)。论文指出这与 ReSTIR PT 用 lobe 索引扩展路径空间的做法同源。此外,为了下一次延迟重连,缓存的 Jacobian 部分要更新为 pSSS,y1(x2),保持"缓存总是当前基准路径的量"。
代价也要说清:相比简单的重连,延迟重连需要多追一条投影射线(BSSRDF IS 期间的投影),并且如果目标函数 p̂ 包含 x2 ↔ x3 的可见性,还要再额外测一次 y2 ↔ x3 是否被遮挡。这就是"更贴合短路径"要付的账。
6.3Jacobian 的逐项来历
式 (11) 那四项不是拼凑出来的,每一项都在回答同一个问题:换了一个基准顶点之后,密度为什么变了。逐项拆开看:
| 因子 | 它补偿的是什么 | 在什么条件下消失 |
|---|---|---|
| pSSS,x1(x2) / pSSS,y1(y2) | 基准点变了:随机重放用的是同一套随机数,但基准从 x1 换成了 y1,所以"同一套随机数生成出这个几何结构"的概率密度不同了 | 不会消失。这是延迟重连的核心项 |
| |cosθy2 / cosθx2| | 光源处夹角变了:θ 是"从 x2 指向 x3 的方向"与 x3 处法线的夹角。光源在立体角测度下采样时,采样密度随 cosθ 变化,所以换点后方向一变就要补偿 | 光源在面积测度下采样时 |
| ‖x3−x2‖² / ‖x3−y2‖² | 到光源的距离变了:立体角与面积测度之间的换算里含距离平方,距离一变,同样的光源面积元张开的立体角就变了 | 同上(面积测度下) |
由此可以看出论文那句"取决于光源在立体角还是面积测度下采样"的含义:前两项与后两项属于两类换算:第一项是路径空间内部的密度变化,后两项是"点光源方向"与"面光源面积"之间的测度换算。所以在面积测度下,后两项整体消失,式 (11) 退化为只剩一个密度比。
这也解释了两个实现细节为什么必要。一是把 pSSS,x1(x2) 缓存成 J:它是分子,只依赖基准路径,每帧重算纯属浪费;缓存后每帧只需要算分母那一项。二是缓存要在下一次延迟重连时更新为 pSSS,y1(x2);因为"基准"已经换成了新的偏移路径,缓存必须始终代表当前基准的量,否则下一轮的 Jacobian 用的就是旧值。
一个可以带走的判断法:写这类 shift 时,把 Jacobian 的每一项问一遍"它补偿的是哪种变化"。答不上来的项,要么冗余、要么写错了;而写错的表现通常而写错的表现通常不会让画面崩掉:偏差被均匀地摊进整幅图里。
7什么时候用哪套搬运:一条距离判据
论文的核心观察是两种 shift 的适用区恰好互补:
| shift | 主场 | 原因 |
|---|---|---|
| 重连 | 照明区与阴影区的过渡带 | 那里 SSS 效果最显著,入口与出口距离大,长散射路径的价值最高 |
| 延迟重连 | 被光源直接照亮的表面 | 那里 SSS 只带来"变柔和"的效果,入口与出口距离较小,需要的是重建短路径 |
先看前人的做法。ReSTIR PT 的混合 shift 把重连推迟到偏移路径顶点 yk 与基准路径顶点 xk+1 都是漫反射为止,用粗糙度判据决定这个 k;并且为了确定性与双射性,偏移端的顶点也必须满足同一判据。
论文沿用这个结构,但把判据换掉:确定性地决定这次用 x2 还是 x3 重连,也就是用重连还是延迟重连。判据由两个阈值构成:
两个条件的动机不同,需要分别说。距离条件对应第一种主场:入口与出口相距远,说明光在物体内部走了很长的路,这类样本就是重连擅长搬运的。朝向条件更巧妙:即使距离很近,如果 x1 与 x2 的法线朝向差别很大(n 的点积小),说明其中一个点可能处在阴影里而另一个被照亮。这就是 SSS 效果可见的位置,也是应当用重连的位置。换句话说,朝向条件是在没有直接算可见性的情况下,用法线差异去推断照明差异,是一步便宜的代理判断。
但这条判据有一个结构性缺陷,而且论文自己指了出来:它是局部的:只看当前像素附近的信息,因此必然在阴影边界一类的位置选错(那里就是判据最难判断、而 SSS 效果又最明显的地方)。论文对此的回应不是把判据做得更复杂,而是取消"必须选一个"这个前提。这就是第 8、9 章的内容。
hybrid、sequential、denoised、reference;右列另有一张可视化,画的是"目标函数比规范样本更高的偏移样本占比"在多帧上的平均,越亮表示比例越高。②读法:先读原图注给的结论:sequential 在阴影与几何边缘处采样更均匀,而那就是 hybrid 判据次优的地方;再读右列可视化,它是过程性证据:它是过程性证据:直接展示“shift 是否真的找到了更好的样本”,而不停留在最终画面。。这一步把"结果更好"与"机制在起作用"区分开了。
来源:ReSTIR Subsurface Scattering for Real-Time Path Tracing, Fig. 5, p.9 · © 2024 作者(ACM 标准版权声明,非 CC)· 原样引用,未修改
8第二次搬运不能白拿:概率要翻回来
顺序 shift 的想法很朴素:第一个 pass 全部用重连,第二个 pass 把前一个 pass 的结果当输入、全部用延迟重连。这样两类区域都拿到了"最合适的那种 shift",而且不需要任何确定性判据:判定从"预先选择"变成"事后竞争"。
但论文明确指出,这个做法需要对 shift 做非平凡的改动,原因是两种 shift 工作在不同的空间:
| 空间 | 记号 | 用于 |
|---|---|---|
| 路径空间(path space) | P | 重连 shift(直接操作路径顶点) |
| 主样本空间(primary sample space) | U | 延迟重连里的随机重放(需要随机数) |
一条候选路径同时拥有两种坐标:x̄ ∈ P 与 ū ∈ U(因为采样器本身就是把随机数 ū 映射到 x̄ 的函数)。问题出在重用之后:重采样把 x̄ 改成了 ȳ,而后面要在延迟重连里以 ȳ 为基准做随机重放,就必须反解出与 ȳ 匹配的随机数 v̄。论文指出,不加改动时这个反解并不总是可行,因为离散的采样决策导致 P 与 U 维数不匹配:两者之间不存在双射。在本文的具体情形里,这个障碍恰好出现在采样混合分布的时候:BSSRDF IS 里选择投影轴与平均自由程通道,就是离散决策。
前人(Metropolis 光传输方向的工作)给过解法:概率反演(probabilistic inversion):给 P 补上额外维度 Γ = [0, 1]m,使 P × Γ 与 U 之间存在双射;直观上,γ̄ ∈ Γ 决定"从 x̄ 映射到众多可能 ū 中的哪一个"。关键论证是:γ̄ 的取值不影响测量积分,所以可以在反演前随机地采它。ReSTIR 领域此前也用过概率反演,但用途是为主样本空间里的 Metropolis-Hastings 变异取得随机数(另一篇工作),且是放在单独一个 pass 里。论文的贡献是把概率反演直接嵌进 ReSTIR 的 shift 里。
这里有两个技术判断需要记下来:
- 维持 γ̄ 的均匀分布,因此改 γ̄ 不需要修改无偏贡献权重(论文在附录 A 给出论证)。于是不必存 γ̄ 的具体取值,可以懒采样(用到时才采)—— 这一条把额外维度的存储开销消掉了。
- 为了保持 shift 的确定性,γ̄ 在应用 shift 之前、对基准路径采一次均匀随机值即可。而反演能否成功取决于采样概率是否为零:若反解遇到零采样概率,这次 shift 判失败(与第 6 章的交点索引失败是同一类处理)。同一 pass 内重连的对称性是有保证的(Tj→i(Ti→j(x̄)) = x̄),因为 x̄ 本来就不是零概率采出来的;但数值误差仍可能导致失败。
这一章的核心结论:顺序 shift 看似只是"把两个 pass 串起来",实际上它要求把路径空间扩展到 P × Γ 才能做域之间的往返映射。不做这一步,顺序 shift 无法成立。它它属于正确性前提,不属于性能优化。。这也解释了为什么论文要把 §4.2(一般理论)与 §4.3(落到 SSS)分开写。
9把翻概率落到实处:SSS 里的随机数配对
把上一章的一般理论落到 SSS,关键是把 γ 与具体量对应起来。BSSRDF IS 就是混合分布采样的例子:多个「投影轴索引 × 平均自由程通道」的组合都可能产生同一个样本。γ ∈ Γ 决定的是轴与通道,论文把这样一组组合称为一个 technique(技法)。
于是在重连 shift 里:把偏移路径顶点 ȳ1 与基准路径顶点 x̄2 接上之后,需要取得匹配的随机数、缓存进蓄水池,供随后的随机重放使用。做法是按"生成本样本的似然"抽一个 γ ∈ [0, 1] 来选定 technique;技法一旦固定,半径与角度就能被反解出来,从而得到 uradius 与 uangle。这里有一个让实现变简单的性质:γ̄ 到 technique 的映射与几何、材质无关,所以不需要反解 γ̄ 或 technique 本身:直接把 technique 存进蓄水池、构造偏移路径时直接用即可。
论文的 Algorithm 4 给出了完整的概率反 BSSRDF IS 流程:输入 x1、x2 与随机数 γ,输出轴、通道与两个随机数。它的三个要点是:①按 paxis(a)·pchannel(c)·pSSS,x1,a,c(x2) 归一化后的概率选技法(也就是"哪些技法可能生成这个样本",按似然加权);②把 x2 − x1 投影到圆盘上得到 lx、ly,取 r = √(lx² + ly²);③用式 (4) 的 CDF 反解半径随机数,即 uradius = 1 − 0.25e−r/d − 0.75e−r/(3d),以及 φ = atan2(ly/r, lx/r)、uangle = φ/(2π)。
注意第 ③ 步用的就是第 2 章式 (4) 那个 CDF:采样与反解共用一个公式,所以这里没有引入新的近似。整个链路可以概括成一句话:把"采样"倒过来算,就得到了"随机数"。
还有一处工程细节:随机重放需要交点索引,而重连之后这个索引可能改变,因此必须从 ȳ1 到 x̄2 重新追一条射线来确定新索引。这个操作很贵,所以要尽量少做:理论上只需在一次重连 shift 的重采样 pass 结束后、为 GRIS 最终选中的那个样本算一次(因为重采样 MIS 权重不需要这个信息,而且只要反演不失败,交点总能找到)。但实践上有个坑:从 ȳ1 到 x̄2 的射线会引入轻微数值误差,导致找不到与 x̄2 对应的交点。论文的处理是接受这个失败率并把失败当作 shift 失败,而不是放宽匹配条件:放宽会破坏双射性,进而引入偏差。
收益与代价:相对 hybrid,sequential 用多一趟重采样换来更均匀的采样(第 1 章表里 +5.2 ms 的差距)。更需要注意的是论文的措辞。它把 sequential 的收益点定位在"阴影与几何边缘",也就是 hybrid 判据结构性失效的位置。这说明 sequential 不是"更好的判据",而是把判据这个环节整个拿掉。
10改写成跑得起来:参数、优化与集成
论文在第 5 节把前面的理论落成了可复现的工程配置。这一节的内容对"能不能真的跑起来"往往比公式更关键,因为它把抽象的判据与权衡变成了具体数字。
10.1参数与 pass 结构
| 项 | 取值 | 含义 |
|---|---|---|
| 候选生成样本数 M | 1 | 每像素每帧只产生一条候选路径:依赖时空重用把有效样本数堆起来 |
| 空间重用邻居数 | 4 | hybrid 的单趟空间重用 |
| sequential 的 pass 结构 | 时间 + 2×空间 | 时间 pass 用重连;随后两个连续空间 pass:第一个(2 邻居)用重连,第二个(2 邻居)用延迟重连 |
| 空间重用的 MIS 权重 | 防御式 pairwise MIS | 流式计算,避免一次载入全部邻居蓄水池 |
| 时间重用的 MIS 权重 | 式 (7) 广义 balance heuristic | 因为只合并上一帧与当前帧两个蓄水池 |
| 置信权重封顶 | 上一帧 ≤ 20× 当前帧 | 论文主要依赖时间重用,故取较宽的倍数 |
| 混合判据阈值 | κdistance = 2dmax | 两倍的最大尺度化平均自由程,dmax = max(d.r, max(d.g, d.b)) |
| 朝向阈值 | κorientation = 0.5 | 即法线夹角约 60° |
两个阈值的设计需要多看一眼。κdistance 与材质挂钩:它取三通道平均自由程的最大值再乘 2,意味着"远"的判据随材质自适应:透光深的材质,入口与出口天然离得远,阈值也跟着放大;如果写成一个固定的世界空间距离,换一套单位或换一种材质就会失效。κorientation = 0.5 对应 60°,是一个几何意义上的"朝向差到足以说明两个点的照明状况可能不同"的角度量级。
论文还主动给了一条使用警告:置信权重封顶取 20 倍虽然能保证多帧累积时无偏,但在相机与场景静止、或做离线渲染时应把倍数调小,否则会出现长期相关性。这句话把"实时"与"离线"的取舍边界说得很清楚:同一个参数在两种用途下的最优值不同。
10.2为什么内存受限,以及四处优化
论文明确指出这套实现目前是内存受限而非算力受限:每帧都要读写蓄水池,而空间重用又是对邻居像素的随机访问。这个诊断决定了优化的方向:优化的方向是减少显存往返,而不是减少算术。。四处优化分别针对这条主线:
- 蓄水池内的样本压缩:样本在写入显存前先压缩,做法类比 G-buffer 压缩。蓄水池是每像素一份、每帧读写的数据,压缩直接减少带宽。
- pairwise MIS 的流式版本:避免一次性载入所有邻居蓄水池,同时减少寄存器溢出(spilling)。
- 邻居循环展开:常规指令级优化。
- 候选生成时只采一个光源、并在所有交点上复用它:这一条与第 5 章那个"不浪费交点"的改动配合得很巧:交点变多了,但如果每个交点都去采一次光源,内存访问会随之暴涨;复用一个光源把这个代价按住。
论文还提到可以继续借用 ReSTIR DI 的做法(每帧只使用光源的一个子集),说明这套优化链条还有空间。需要记下的是顺序:先诊断瓶颈(内存),再让数据结构(压缩)与算法(流式 MIS、光源复用)都服务于这条瓶颈,而不是零散地做微优化。
10.3与 ReSTIR GI / PT 的集成
论文只讲了直接光照的情形,但它交代了往上扩展的路径,并给出了一条明确的集成约束:
扩展路径:按 ReSTIR PT 的做法,可以追完整路径,只在蓄水池里存一个重连顶点 + 随机数种子 + 入射辐亮度;若要用顺序 shift,则需要存多个顶点及各自的随机数。论文还提出一个合理的近似;因为光穿过物体后不保留尖锐细节,可以在采样到的入口点查询某种辐亮度缓存,从而加速候选生成与重采样。这条推理的依据就是 SSS 本身的性质(散射后的照明是低频的),属于"利用问题特性换性能"的做法。
集成约束:把 ReSTIR SSS 与表面反射方案(ReSTIR GI / ReSTIR PT)当成两个并列的 pass 会带来显著的性能与显存开销。论文给的合并办法是:让"试图把次表面样本重用到另一个物体上"的 shift 直接失败;并且因为大多数物体的材质是分层的(含半透明层),SSS lobe 与表面反射 lobe 之间的 shift 被禁止。这需要像 ReSTIR PT 一样把 lobe 索引存下来。
把这一段与第 5、6 章连起来看,会发现论文反复使用同一种手法:用"让 shift 失败"来替代"加判断条件"。交点索引对不上 → 失败;反演遇到零采样概率 → 失败;跨物体重用 → 失败。这是把正确性边界交给 shift 的返回值来管,而不是在一堆 if 里铺开:对 GPU 实现尤其重要,因为它避免了分支发散。
10.4评测口径(后面所有数字的前提)
论文把评测条件写得很明确,这些条件划定了后面所有数字的适用范围:
| 项 | 设定 |
|---|---|
| 硬件 | NVIDIA RTX 3070 |
| 误差统计范围 | 只在半透明物体上计算,参考为无偏收敛结果 |
| 渲染时间包含 | ReSTIR SSS 的候选生成 / 空间重用 / 时间重用 / 最终着色,或标准路径追踪 |
| 渲染时间不含 | G-buffer 开销与非半透明物体的渲染开销 |
| 时间历史的记录 | 相机沿预设短轨迹移动 16 帧,每帧执行一次候选生成与时空重用 |
| 去噪评估 | 另用 OptiX 去噪器评估方法对去噪结果的影响 |
| 代码 | Vulkan 实现,已开源(论文给出仓库地址) |
其中最容易被忽略的是"不含 G-buffer 与非半透明物体"这一条:它意味着论文里的毫秒数不能直接当作完整帧时间去与别的方案比较。第 3 章 teaser 里那组 23–29 ms 同样是这个口径。它们是"处理半透明物体这部分"的耗时。读这类论文的数字,先把口径对齐,再比大小。
10.5复现清单
把前九章的推导压成一张"如果要自己实现一遍,需要准备什么"的清单。每一行都能在前文找到出处,也可以作为读原文时的对照表。
| 模块 | 必须有的东西 | 出处 |
|---|---|---|
| 候选采样器 | 圆盘采样(按扩散剖面采半径 + 均匀采角度);三轴投影(法线/切线/副切线);三通道选择;三轴 × 三通道的 MIS 权重 | §3 |
| 候选样本结构 | x2、x3、投影轴索引、通道索引、半径与角度随机数、交点索引 j、缓存的 J | §5、§6.2 |
| 蓄水池 | 选中样本 Y、权重和 wsum、置信权重 c;样本压缩后再写显存 | §4、§10.2 |
| 候选生成 | 把全部交点逐个 update 进蓄水池(不要只挑一个);c 仍记 M | §5 |
| 两种 shift | 重连(Jacobian 为 1、无需可见性测试);延迟重连(随机重放 + 重连、Jacobian 用式 (11));两者都要显式处理失败 | §6 |
| 判据(hybrid) | 距离阈值 κdistance = 2dmax;朝向阈值 κorientation = 0.5(60°) | §7、§10.1 |
| 概率反演(sequential) | 按似然抽 γ 选 technique;由 x2−x1 投影得 r;用 CDF 反解 uradius、uangle;γ 保持均匀 | §8、§9 |
| MIS 权重 | 时间重用用广义 balance heuristic(式 7);空间重用用防御式成对 MIS 的流式版本 | §4、§10.1 |
| 控制参数 | M = 1;空间邻居 4;sequential = 时间 + 2×空间(2 + 2 邻居);置信权重封顶 20× | §10.1 |
| 集成 | 跨物体重用 → 让 shift 失败;SSS lobe 与表面反射 lobe 之间禁止 shift,需存 lobe 索引 | §10.3 |
这张清单里最容易被漏掉的三项,也恰好是前文反复划线的地方:交点索引 j(不存它,随机重放就无法重现同一个样本,双射破坏)、缓存的 J(不缓存,每帧重算 Jacobian,实时性没了)、置信权重封顶(不封顶,画面不会立刻崩,运动时才发现相关性伪影)。三者都不是数学上的新东西,但少了任何一项,这套方法要么偏、要么慢、要么在动态场景里失效。
论文的 Vulkan 实现已开源(正文给出仓库地址),所以上面这张表可以作为读源码时的地图:按行去找对应的数据结构与 pass,比从文件树里逐层翻要快得多。
11四组场景,一关一关验给你看
结果图分四组场景,排列本身就是一条论证链:主场(Fig. 6)→ 换场景验证(Fig. 7)→ 反例(Fig. 8)→ 给出有效区间的判据(Fig. 9)。
为什么"单个大面积光源 + 高散射物体"是这套方法的主场:大面积光源经过半透明物体后形成的软阴影与颜色渗透,就是屏幕空间后处理最容易露馅的地方(它拿不到背面与屏幕外的信息),也就是路径追踪能算对、但噪声最大的地方。方法的收益恰好落在基线的痛点区间上。这是这篇论文能成立的根本原因,也是评估任何"重采样类"方法时该问的第一个问题:你重用的样本,是不是恰好是基线最难采到的那种?
结果里并不全是好消息。当物体只能被单一光源照亮、且平均自由程较短时,SSS 在画面的大部分区域本来就不明显。这组实验把方法放到了它最不该被期待的位置上。读这张图要找的不是"仍然更好",而是好多少,以及这个差距是否配得上它在另外两组场景里换来的收益。
把同一个场景按平均自由程成倍放大重跑,就得到下面这条趋势。它比单张结果图更有说服力。如果方法真的作用在长散射路径上,那么随着平均自由程增大,它的相对优势就应当单调扩大。这张图就是用来验证这个因果预测的,而不是用来"再展示一次更好"。
| 场景组 | 材质 | 光源 | 原文结论 | 读法 |
|---|---|---|---|---|
| Fig. 6 | 高散射 | 单个大面积 | 时空重用显著降噪、降去噪伪影 | 主场:收益最大 |
| Fig. 7 | 高散射 | 多个小光源 | 同样受益 | 普适性验证 |
| Fig. 8 | 小平均自由程 | 单主导光源 | 受益有限 | 反例:触发条件明确 |
| Fig. 9 | d 尺度扫描 | — | d 越大越有效 | 给出有效区间的判据 |
把这一节与前文的推导合起来看,可以给出一条选型判据:如果一个场景里的半透明物体光学厚度大(多次散射主导)、且主要照明来自大面积光源,那么这套方法能拿到最大收益;反之(极薄材质、小平均自由程、单一主导光源)应优先考虑别的方案。论文没有给出定量的阈值线(d 到多小算"小"、光源多小算"小"),这是本文留下的一处空白:对工程落地来说,恰好是最需要的那一步。
11.1为什么两种 shift 各自失效(因果链)
论文对结果的解释比数字更有价值,因为它把"谁更好"变成了"为什么"。三条因果链:
重连 shift:阴影区受益、照亮区受害。它显著降低阴影区(含散射光)的噪声,因为能重用从照亮区通往阴影区的长散射路径。但它同时在照亮区产生强相关性伪影,原因很具体:它主要重用较长的路径,而这些路径携带的颜色只是扩散剖面决定的主导散射色:于是整个区域被染成同一种色调。这与其说是噪声多一点,不如说成了结构性偏色。
延迟重连 shift:反过来。它在照亮区优于重连,但在阴影区找不到足够多的长散射路径,结果是去噪后出现团块与不连续。论文指出这类伪影"与 SSS 本应带来的整体柔化效果相冲突",所以视觉上格外刺眼;因为它违背了材质应有的视觉直觉。
混合与顺序 shift:把两个区域同时采好。作为对照,标准路径追踪很少能采到从照亮区到阴影区的长次表面输运路径,所以也会出现类似的去噪伪影。这解释了为什么改进不只体现在噪声上,还体现在去噪质量上。
11.2反例的机制:为什么小平均自由程受益小
第 10 章列了四组场景,其中 Fig. 8 是反例。论文给出了它的机制,而这条机制恰好是"收益落在基线痛点"那条判据的反面证明:只有单个光源、平均自由程又短时,SSS 在多数区域本来就不明显,而更关键的是:此时 BSSRDF IS 只在相对小的球内找点,这本身就大幅降低了方差。换句话说,基线的痛点不痛了,方法自然没什么可改善的。
这个机制反过来给了选型判据一个更准的表述:不是"有 SSS 就该用这套方法",而是"SSS 的贡献范围足够大(透光深、影响区域广)时才有收益"。Fig. 9 的尺度扫描印证了同一件事:随着平均自由程增大,方法才在有明显 SSS 的区域超过标准路径追踪。
11.3相关性这笔账,以及一处自曝的偏差
论文在结果一节里主动交代了两件对自己不利的事,这在大厂与实验室的论文里都不常见,需要单独记下来。
一是相关性无法根除。时空重用的本质就会引入像素间相关性,表现为色调的整体偏移;混合与顺序 shift 把它相对(延迟)重连压低了,但仍可见。论文给出的缓解办法有两个:应用去噪器会重建参考的色调;或者降低时间重采样的影响;而这一步是把相关性换成噪声。也就是说,相关性与噪声在这套框架里是一对可调的取舍,不存在"两个都归零"的选项。
二是顺序 shift 的实现带轻微偏差。第 9 章讲过:为了省掉重复追射线的开销,交点索引在重采样 pass 之后才延迟计算;当确实找不到交点时,论文把索引置为"未知",让后续的随机重放随便选一个交点。这带来轻微且不易察觉的偏差。论文同时给出两条关键信息:不做这个性能优化时,顺序 shift 本身是无偏的;而在时空重用下,所有 shift 最终都会收敛到参考结果。
这两条放在一起看,能读出一个务实的判断次序:先用无偏性换清楚的理论地位,再用一处可控的偏差换实时性能,并把偏差的范围与代价同时写明。对要复用这套方法的工程来说,"偏差从哪来、能不能关掉"比"偏差有多大"更重要;因为前者决定它能不能进产品。
11.4原文标注数值的复核(以及为什么不宜过度解读)
结果图里每幅面板都标了 RMSE 与毫秒数。把它们从文本层提取出来看,能算出几个不依赖面板归属判断的结论:下面这一段只做这类计算。
先把图 10-1(原文 Fig. 6)里自洽成组的那三对摘出来。它们的耗时单调上升、误差单调下降,且组内恰好对应三档采样预算,因此可以安全地认定这是标准路径追踪基线的三档:
| 基线档位 | RMSE | 耗时 | 该档的边际降噪 / 毫秒 |
|---|---|---|---|
| 低 | 1.0820 | 0.4349 ms | — |
| 中 | 0.4422 | 2.2717 ms | 0.348 / ms |
| 高 | 0.3123 | 4.6673 ms | 0.054 / ms |
自己算一遍就能看出那条"噪声墙":从低档到中档,每毫秒换来 0.348 的误差下降;从中档到高档,每毫秒只换来 0.054:边际效率掉到约 1/6.4。而这一档的代价是耗时增加到 10.7 倍(0.4349 → 4.6673 ms)。换句话说:继续加采样这条路在同一条曲线已经接近饱和,这就是必须转向"重用已有样本"的量化理由。这一算把第 1 章那句"路径追踪会增加噪声"从定性说法变成了可核对的数字。
另外两组数值(四条 shift 的标注值,以及四条各自的降噪后值)在文本层里也是成组出现的,且降噪后的一组整体显著低于未降噪的一组。这与论文"评估方法对去噪的影响"这一实验设计一致。但本稿不断言哪条数值属于哪一种 shift:面板归属必须对着原图逐格核对,而我从文本层拿到的只是标签序列,强行配对就变成了编造。这条纪律比多写一列数字重要。
最后把口径再钉一次:上表的毫秒数不含 G-buffer 与非半透明物体(第 10.4 节),RMSE 也只在半透明物体上统计。所以这两个数都不能被当成"完整帧时间"或"整幅画面的误差"引用到别处:跨论文比数之前,先把这两句限定词对齐。
12它借了什么、改了什么、又补了什么:跟同类方案的关系
把这篇放进 ReSTIR 的谱系里看,它做了什么、借了什么、又改了什么,会更清楚。下面这张表只依据本论文正文与相关工作一节的叙述(不替其它论文补内容)。
| 方案 | 解决什么 | shift 与判据 | 双射怎么保证 |
|---|---|---|---|
| ReSTIR DI Bitterli 等 2020 | 直接光照的时空重用 | 不需要复杂 shift(样本同源);提出每帧只用光源的一个子集 | 不涉及跨域 |
| ReSTIR GI / PT Ouyang 等 2021 / Lin 等 2022 | 把重用扩展到完整路径 | hybrid shift:用粗糙度判据决定把重连推迟到哪个顶点;且偏移端顶点必须满足同一判据以保证确定性与双射 | 用 lobe 索引扩展路径空间 |
| GRIS Lin 等 2022 | 给"来自不同域的样本"提供理论框架 | 不涉及具体 shift;给出重采样 MIS 权重与置信权重 | 要求所有 shift 的并集覆盖目标函数 |
| 概率反演 Bitterli 2017 / Otsu 2017 / Pantaleoni 2017;Sawhney 等 2024 | 在路径空间与主样本空间之间取得双射 | — | 这就是它的用途;Sawhney 等把它用于 ReSTIR 里做 MCMC 变异 |
| 本文 · ReSTIR SSS | 把重用用于次表面散射路径(BSSRDF IS 生成的候选) | SSS 专用判据(距离 + 朝向);并进一步提出顺序 shift 取消确定性选择 | 借用 lobe 索引的思路(此处是交点索引);并把概率反演直接嵌进 shift,而不再只用于单独一个 pass |
由此可以看清本文的真正差异点只有三条:①候选生成改用 BSSRDF IS 并顺手解决了"多交点被浪费"的问题;②把 hybrid shift 的判据从粗糙度换成 SSS 专用的距离 + 朝向;③提出顺序 shift,把"选择哪一种 shift"从采样前挪到采样后。其余部分(GRIS 框架、Jacobian 记账、置信权重封顶、lobe 索引式的双射处理)都是借用与适配:论文自己也如实这么写,这在读文献时是很重要的一条线索:判断一篇工作的位置,看它借了什么、改了哪一处,比看它宣称"提出了什么"更准。
12.1三条可迁移的读法
读法一:把新问题对着三条约束逐条核。第 4 章那三条约束(Jacobian 可算 / 支援集覆盖 / 置信权重记账)不只是这篇论文的背景知识。它们是一张检查表。遇到"把某个重采样方法搬到新问题"的任务,先把这三条拿出来问:新问题里的 shift 有 Jacobian 吗?能缓存吗?支援集盖得住目标函数吗?有效样本数与置信权重的口径一致吗?本文的三处改动全部落在这三条上,这一点本身就说明了检查表的有效性。
读法二:判断收益是否成立,先问"基线的痛点在哪"。本文主场(大面积光源 + 高散射物体)收益最大,反例(小平均自由程 + 单一主导光源)收益很小,机制在第 11.2 节:前者的长散射路径是基线的痛点,后者根本不需要长路径(BSSRDF IS 只在小球内找点就已经降了方差)。所以评估任何重用类方法,第一个问题应该是:它重用的样本,是不是基线最难采到的那种?如果基线本来就不难采,再精巧的重用也拿不到收益。
读法三:局部判据必有失效区,替代方案是让竞争取代判断。本文的 hybrid 判据是局部的,因此必然在阴影边界选错;论文的解法论文的解法是把它取消掉、改成多趟 pass 各自用不同 shift、由重采样按权重隐式挑出胜者,而不是“做一个更聪明的判据”。者。这个思路的代价很明确:必须补齐数学前提(第 8 章的双射问题)。迁移到别的场景时,需要先问一句:这里的"选择"能不能改成"竞争"?如果能,代价是要补哪一块数学?
最后补一条读数字的习惯:先把评测口径对齐,再比大小。本文的毫秒数不含 G-buffer 与非半透明物体(第 10.4 节),所以它不能直接与"完整帧时间"比较;误差只在半透明物体上统计,所以它也不能代表整幅画面的误差。这两句限定词决定了数字能不能被引用到别处。
13这篇没吹的部分:八条边界
八条边界条件。前七条来自论文自身的限制与反向结论,第八条来自它的许可条款:对要复用它的工程同样重要:
① SSS 只发生在主命中。出口点 x1 与入口点 x2 被限制在第一段路径上;之后若再打到半透明物体,退回带 SSS 的 BSDF。论文给的理由是性能与避免 GPU 上的代码执行发散。代价是多次散射的间接 SSS 没有被这套重用覆盖:收益是"实时",成本是"不完整"。
② 只在同一物体内部散射。跨物体的次表面输运不在模型里。叠放的半透明物体(一叠纸、两层皮肤)会有可见偏差。
③ 小平均自由程 + 单主导光源时受益有限。论文自己给出的反例(Fig. 8、Fig. 9)。工程含义是:不要把它当成"SSS 的通用加速",它有一个由材质光学厚度决定的适用带。
④ 置信权重必须封顶。不封顶则时间重用让 c → ∞,新样本几乎不起作用,出现相关性伪影。论文把它写成实现要求而非可选优化;因为省掉它之后画面不会立刻崩,只在运动时露馅。
⑤ 扩散近似与经验剖面的固有边界。式 (2) 的乘积分解把方向与空间解耦,式 (3) 的 Burley 归一化扩散是为同时贴合单次与多次散射而设计的经验剖面。它们对光学厚(多次散射主导)的材质成立,对极薄或低散射材质不成立。这也解释了论文为什么把范围限定在"noticeably translucent"的物体上。
⑥ 双射性与交点索引带来的脆弱性。偏移端交点个数少于索引 j 时 shift 判失败;重连后交点索引需要重新追射线计算,而数值误差会导致找不到对应交点。论文选择让 shift 失败而不是放宽匹配;因为放宽会破坏双射性、引入偏差。这意味着实现里必须显式处理"shift 失败"这条分支,而不是假定它总能成功。
⑦ 顺序 shift 需要概率反演,且额外维度的分布要保持均匀。γ̄ 保持均匀是"改 γ̄ 不需要修改 UCW"的前提(附录 A);一旦实现里让 γ̄ 的分布偏移,无偏性论证就不再成立。这是移植时最容易忽略的一条;因为它藏在一个"随机数怎么取"的细节里。
⑧ 许可边界。这篇论文不是 CC 许可:PDF 首页是 ACM 标准版权声明("permission to make digital or hard copies … for personal or classroom use"),ACM DL 页面标 Open access 但正文没有 CC 行。按 ACM 政策,把它的图放到服务器上需要逐件许可(非 CC 篇 31.25 美元/图)。本稿按非商业前提先行使用,残留风险已记入长期约束。
- 把「次表面散射难在何处」定位清楚:问题不在模型本身,而在多了一重空间积分带来的维度上升,以及屏幕空间拿不到世界空间信息。
- 三处改动全部围绕 GRIS 的三条约束各打一处:候选生成的权重(§5)、Jacobian 的可算与可缓存(§6)、单 shift 的支援集不足(§7)。这是一个可迁移的拆解套路:遇到"把重采样方法搬到新问题"的任务,先去对照这三条约束。
- 顺序 shift 的实质是把"选择"从采样前挪到采样后,改用竞争来隐式挑选:代价是必须补齐路径空间与主样本空间之间的双射(§8)。这种"不做选择、让结果说话"的改写,可以迁移到其他需要组合多种映射的方案上。
- 给出了方法的有效区间(平均自由程尺度)与失效条件(小 d + 单主导光源),而不只是成功案例。同时留下了一处空白:没有给出定量的适用阈值线。
- 写作上的可学之处:判据用消融对照图(Fig. 4 的最右两幅)证明,机制用过程性可视化(Fig. 5 右列的偏移样本改进比例)证明,而不是只贴最终画面。
| 中文 | 原文术语 | 本文中的含义 |
|---|---|---|
| 次表面散射 | Subsurface Scattering (SSS) | 光进入半透明物体内部多次散射后从另一处出射 |
| 双向表面散射反射分布函数 | BSSRDF | 描述入射点/方向到出射点/方向之间的输运 |
| 扩散剖面 | Diffusion Profile | 按入口与出口距离给出透光比例的径向函数 |
| 平均自由程 | Mean Free Path | 光子在介质中两次散射之间的平均行进距离,波长相关 |
| 尺度化平均自由程 | Scaled Mean Free Path d | d = l/s,决定有效区间(本文的关键变量) |
| BSSRDF 重要性采样 | BSSRDF IS | 在切平面圆盘采样、再投影回表面以得到入口点 |
| 蓄水池 | Reservoir | 每像素保存的被选样本、权重和与置信权重 |
| 加权蓄水池采样 | Weighted Reservoir Sampling (WRS) | 流式地从样本序列里按权重挑一个 |
| 无偏贡献权重 | Unbiased Contribution Weight (UCW) | 无偏估计 1/p(X),即便 p 不可解 |
| 目标函数 | Target Function p̂ | 可求值但难以直接采样的理想分布 |
| 重采样重要性采样 | RIS / GRIS | RIS 为同域;GRIS 推广到跨域样本 |
| 移映射 / 搬运 | Shift Mapping T | 把样本从一个像素/帧的定义域搬到另一个 |
| 重连 | Reconnection Shift | 直接接回基准路径的第一个自由顶点(穿过物体) |
| 延迟重连 | Delayed Reconnection Shift | 先随机重放生成一个顶点,再晚一步重连 |
| 随机重放 | Random Replay | 用与基准路径相同的随机数重新生成顶点 |
| 置信权重 | Confidence Weight c | 编码有效样本数;必须封顶 |
| 重采样 MIS 权重 | Resampling MIS Weight | 组合多个蓄水池时的加权(广义 balance heuristic) |
| 成对 MIS | Pairwise MIS | 把 O(M²) 的权重计算降到 O(M);防御式版本可流式算 |
| 路径空间 / 主样本空间 | Path Space (P) / Primary Sample Space (U) | 前者按顶点表示路径,后者按随机数表示 |
| 概率反演 | Probabilistic Inversion | 给 P 补维度 Γ 使 P × Γ 与 U 双射 |
| 技法 | Technique | 一组「投影轴 × 通道」的组合(本文对 γ 的落点命名) |
| lobe 索引 | Lobe Index | 记录样本由哪个 lobe 生成,用于保证双射(借自 ReSTIR PT) |
| 交点索引 | Intersection Index | 本文的对应物:记录用了第几个交点 |
| 相关性伪影 | Correlation Artifact | 时空重用带来的像素间关联,表现为色调偏移 |
- 标题
- ReSTIR Subsurface Scattering for Real-Time Path Tracing
- 作者
- Mirco Werner、Vincent Schüßler、Carsten Dachsbacher(Karlsruhe Institute of Technology, Germany)
- 发表
- Proceedings of the ACM on Computer Graphics and Interactive Techniques, Vol. 7, No. 3, Article 36(2024 年 7 月),19 页
- DOI
- 10.1145/3675372 | ACM DL 页面
- 授权
- 非 CC:ACM 标准版权声明;DL 标 Open access 但无 CC 许可行。图上服务器需逐件许可(非 CC 篇 31.25 美元/图)
- 源码 / 补充材料
- 论文附带 28.25 MB 补充材料 PDF;shift 的更一般推导与 Jacobian 推导在补充材料中,γ̄ 均匀性对 UCW 的影响在附录 A