从光线追踪到路径追踪:高维采样的探索之旅
From Ray to Path Tracing: Navigating through Dimensions
演讲背景与动机
- 演讲者 Emmanuel Turcon ,来自 Unity Technologies 的纯渲染团队(2019年加入),专注于 实时交互式光线/路径追踪
- 此前在离线渲染领域有十余年经验,曾任职于 Bakery 动画工作室 、 DNA 以及 工业光魔(ILM)
- 演讲核心主题:高维采样(High-Dimensional Sampling) 在路径追踪与光线追踪中的应用,侧重 实时与交互式渲染 的思维方式
离线渲染向实时渲染的经验迁移
路径追踪在影视行业的演进
- 十多年前,路径追踪被认为 完全不实际 ;如今已在动画和视觉特效行业 无处不在
- 过渡是渐进式的:越来越多的 光线追踪效果 被混合到传统的 REYES / Scanline 架构 中:
- 环境光遮蔽(Ambient Occlusion)
- 反射与折射(Reflections & Refractions)
- 软阴影(Soft Shadows)
- 单次弹射间接漫反射光照(One-bounce Indirect Diffuse)
- 推荐阅读:Christensen & Jarosz 的详细综述,以及 Matt Pharr 关于产品级渲染的介绍
离线渲染的四大经验类别
Matt Pharr 在之前的课程中归纳了从离线渲染世界应带到实时领域的四大类概念:
- 蒙特卡洛积分(Monte Carlo Integration) :方差与误差、 重要性采样(Importance Sampling) 、 多重重要性采样(Multiple Importance Sampling, MIS)
- 域变换(Domain Warping) :拟随机序列(Quasi-Random Sequences) 及其关键的 低差异性(Low Discrepancy) 和 分层性(Stratification) 特性
- 自适应采样(Adaptive Sampling) :如何最佳地调整每像素追踪的光线数量
- 消除萤火虫噪点(Firefly Elimination) :通过 强度钳制(Intensity Clamping) 和 路径正则化(Path Regularization) 处理高亮度像素
更多细节可在 《Ray Tracing Gems》 对应章节中找到。
Unity HDRP 路径追踪器实现概览
基本架构
- 作为 Unity 高清渲染管线(HDRP) 的一部分实现,源码开放在 GitHub
- 核心定义:渐进式单向路径追踪器(Progressive Unidirectional Path Tracer)
- 运行速度:实时到交互帧率 ,每帧每像素 1 个采样(1 SPP)
- 硬件要求:PC + DXR 兼容 GPU
定位与用途
- 不面向游戏运行时 ,而是用于:
- 生成高质量美术图像或 电影级画面(Cinematics)
- 作为实现其他算法(如光线追踪效果)时的 视觉参考(Visual Reference)
- 控制界面极度精简,追求简洁
- 支持 离屏录制 ,额外提供 运动模糊(Motion Blur) 支持
渐进累积机制
- 在编辑器或游戏内,当场景 未被修改 时, 渐进累积(Progressive Accumulation) 自动启动
- 随着时间推移图像逐渐收敛至高质量结果
从 2D 到高维采样的过渡挑战
为什么高维采样重要
- 早期在游戏引擎和产品级渲染中出现的光线追踪效果本质上是 2D 问题 (如环境光遮蔽——在半球上积分)
- 关于 2D 采样 的资料非常丰富,大多数人已经学习并实现过
- 然而,当从 2D 过渡到更高维度 时:
- 文档变得稀少且非常学术化
- 高维采样极难可视化 ,理解起来充满挑战
- 但它对渲染质量有 重大影响 ,不可忽视
演讲目标
- 以 直觉化的方式 ,帮助听众避免演讲者自身曾遇到的陷阱
- 从 2D 出发,逐维度递增 ,最终到达路径追踪器中通常涉及的 数十个维度
蒙特卡洛积分快速回顾
基本原理
- 目标:估计一个未知函数 (在此场景中为 间接漫反射光照 )
- 方法:在随机点 处取 的值,然后 求平均
重要性采样加速收敛
- 将采样点按照 概率密度函数(PDF) 分布,理想情况下 正比于 或 的已知部分
- 对于漫反射 BRDF,使用 余弦加权重要性采样(Cosine-Weighted Importance Sampling) 效果极佳
拟随机低差异序列
- 相较于完全随机点,使用 拟随机低差异集合/序列(Quasi-Random Low Discrepancy Sets/Sequences) 可进一步加速收敛
- 其属性已针对蒙特卡洛积分进行优化
-序列的优越特性
- 一种特别优秀的序列,称为 -序列 (也写作 (0,2)-sequence )
- 关键优势:
- 作为序列(Sequence)而非集合(Set) :无需预知采样数量,适合 自适应渲染 和 渐进式渲染
- 任何数量的前缀(prefix)都具有良好且一致的属性
- 提供出色的 分层性(Stratification)
- 在 4 的幂次 采样数时,保证在所有 初等区间(Elementary Intervals) 中恰好有一个样本:
- 例如 16 个样本:、(双向)、 的划分中,每格恰好一个样本
- 这种特性非常适应各种形状的积分域
- 被选为本演讲中 2D 拟随机序列的首选
间接漫反射计算实例
问题设定
- 场景:经典的 Cornell Box(康奈尔盒)
- 离线与实时的典型设定高度相似:
- 每像素计算一次 (REYES 中的微多边形顶点,或光栅化中的 fragment)
- 可用信息:位置(Position) 、 法线(Normal) 、 材质属性(Material Properties) ,特别是 反照率(Albedo)
计算流程
- 从像素对应的位置发射光线
- 在交点处通过蒙特卡洛积分 采集光照值(Illumination Values)
- 交点处的光照值获取方式:
- 缓存/纹理读取 :如 Tabellion & Lamorlette 的开创性论文中的方法
- 快速近似计算
具体数值示例
- 假设可以负担 256 条 BRDF 光线
- 每条光线在交点处通过快速计算或纹理读取获得光照值
- 结果:高质量、无噪声 ,但 略有偏差(Slightly Biased)
关键术语速查
| 术语 | 含义 |
|---|---|
| Progressive Path Tracer | 每帧累积采样,随时间收敛的路径追踪器 |
| Unidirectional | 仅从相机侧发射光线(区别于双向路径追踪) |
| Low Discrepancy | 采样点均匀分布的度量,差异越低分布越均匀 |
| Stratification | 将采样域划分为子区域并确保每个子区域有样本 |
| (0,2)-Sequence | 一类具有最优分层特性的拟随机序列 |
| Elementary Interval | 分层性保证中的最小划分单元 |
| Importance Sampling | 依据被积函数形状分布采样点以减小方差 |
| Fireflies | 渲染中由极端高亮度样本引起的零星亮点噪声 |
4D 积分与关联伪影(Correlation Artifacts)
从 2D 到 4D:引入面积光采样
问题设置
- 之前的场景中,BRDF 采样是 2D 积分 ,直接光照通过快速近似或预计算获得
- 现在改为 实时采样面积光源(Area Light) ,即在光源所张的 立体角(Solid Angle) 内均匀分布光线
- 面积光采样本身也是一个 2D 积分 ,加上 BRDF 采样的 2D,总共形成 4D 积分问题
暴力方案与其代价
- 若要在每个 聚集点(Gather Point) 达到与之前同等的收敛质量,需要 256 个采样 ,使用同一个 Owen-Scrambled Sobol (O2) 序列
- 结果看起来很好,但存在 光线爆炸问题(Ray Explosion) :每个像素的 BRDF 采样点各自再发射 256 条光线,计算量完全不可接受
折中方案:分裂策略(Splitting)
- 更现实的做法:从初始位置发射 64 条 BRDF 光线 ,每个交点处只用 4 个采样 评估直接光照
- 总计 条光线,预算更合理
- 每个位置 重复使用完全相同的序列 (即 4 个采样始终是序列中的前 4 个点)
- 结果:噪声增加但可接受,没有明显问题
白噪声的来源疑问
- 理论上每个像素使用相同的拟随机序列,应出现 结构化的关联伪影 而非白噪声
- 实际演示中看到白噪声,是因为 像素间施加了某种随机化 (后续会详细讨论)
- 这是 第一次遭遇关联伪影(Correlation Artifacts) 的场景
薄玻璃片场景:暴露采样策略的致命缺陷
测试场景设计
- 大面积光源照射倾斜的漫反射地面
- 相机正前方放置一块 薄玻璃片(Thin Glass Sheet) :
- 折射率(IOR)= 1 ,完全透射
- 这是窗户场景的"调试版本"——一种极其常见的配置
两种采样路径对比
| 区域 | 采样方式 | 预期效果 |
|---|---|---|
| 地面直接可见 | 直接用 256 个光源采样 | 高质量参考 |
| 透过玻璃片可见 | 64 个 BSDF 采样 + 每个交点 4 个光源采样 | 应与直接可见等效 |
- 玻璃片的 BSDF 是一个 尖锐的透射 GGX 斜率(Sharp Transmissive GGX Lobe) ,而非 Lambertian 反射
- 所有透射光线 完全一致(实际上相同) ,因此所有光线到达地面的 同一位置
灾难性结果
- 透过玻璃片的区域 噪声远高于 直接可见的地面——尽管总光线数相同(都是 256)!
原因分析
- 在之前的 Cornell Box 场景中,Lambertian BRDF 采样 产生了 高度多样化的位置和法线 ,作为光源采样的起始点
- 这种不相干性 掩盖了 采样策略的缺陷
- 而在薄玻璃场景中,所有光线起始于 同一点 ,每次 重用相同的 4 个采样
- 有效采样数从 256 退化为 仅 4 个 ——巨大的浪费!
核心思维转变:从嵌套 2D 到统一 4D
旧思维的问题
- 之前将计算视为 两个独立的嵌套 2D 积分 :
- 先做 BRDF 采样(2D)
- 在每个交点独立做光源采样(2D),期望每个中间结果充分收敛
- 最后汇总
- 这种 "先收敛再汇总" 的方式在高维场景下完全失效
新思维:统一考虑全部 4 维
- 必须同时考虑所有四个维度 ,改善整个 4D 域的覆盖率
- 前 2 个维度(BRDF 采样)已经覆盖良好
- 后 2 个维度(光源采样)严重不足——因为反复重用同样的前 4 个点
解决方案:连续使用序列中的后续点
- 不再每次从序列起点重新取 4 个点,而是 持续向后取
- 对于分裂因子为 4 的情况,第 组光源采样使用序列中索引为 的样本
效果分析
| 场景类型 | 改进效果 |
|---|---|
| 各交点位置差异大(如 Cornell Box) | 效果至少一样好(不会更差),因为序列本身的性质保证 |
| 各交点位置相似或相同(如薄玻璃) | 显著改善 ,获得最佳结果 |
- 薄玻璃片区域与直接可见区域 完全无法区分 ,结果非常干净
进一步简化:去除分裂因子
取消 4 倍分裂
- 采样预算显得有些过剩,可以简化:去掉 4 倍分裂因子
- 每条 BRDF 光线只对应 1 个光源采样 ,索引直接就是
- 地面直接可见的部分也只用 64 个光源采样 (而非 256)
- 结果:几乎看不出差别
第二次关联伪影:维度间的相关性
新测试场景
- 将薄玻璃片改为 粗糙玻璃(Rough Glass)
- 给地面添加 纹理 以更好地观察粗糙度效果
- 粗糙玻璃的 BSDF 光线不再完全一致,但仍具有一定相干性
灾难再现
- 出现严重的 结构化伪影 ——这是 第二次 遭遇关联伪影
- 第一次是 像素间 重复使用相同 QMC 序列导致的
- 这次是 4D 序列内部维度之间 的关联性导致的
关联伪影的根源:Padding 与 2D 投影分析
可视化方法
- 采用 Jaroslav Křivánek / Yara Schettel 等人在 正交阵列(Orthogonal Array) 论文中的可视化约定
- 将 4D 点集投影到所有可能的 2D 切片(2D Slices) 上观察
各 2D 投影分析
| 2D 投影 | 维度组合 | 质量 | 原因 |
|---|---|---|---|
| (0,1) 和 (2,3) | BRDF 的 2D / 光源的 2D | 良好 | 这是我们刻意设计使用的切片 |
| (0,3) 和 (1,2) | 对角切片 | 相同 | 也是一样的 |
| (0,2) 和 (1,3) | 交叉切片 | 极差 | 等价于 (0,0) 和 (1,1) 的投影 |
问题本质
- 我们用 完全相同的 2D 点 重复了两次来构建 4D 序列
- 这导致了 恐怖的维度间关联
- 具体影响的一个例子(甚至不是最糟的):
- 如果某个样本在切片 (0,1) 的 左半部分 ,它在切片 (2,3) 中也 必然在左半部分
- 映射到渲染算法:如果 BRDF 采样满足某个条件,则 只会采样面积光的左半边 ,否则只采样右半边
- 这就是严重关联伪影的 直接原因
- 正确行为应该是:无论 BRDF 采样结果如何,都应采样整个光源
关键术语:填充(Padding)
- 将多个低维序列拼接成高维序列的做法称为 填充(Padding)
- Padding 时,除了检查对应原始序列的 2D 切片质量外,必须关注其他投影的质量
- 理想目标:
- 各投影具有 良好的分层性(Stratification) ——最佳情况
- 若无法做到分层,至少保证各维度之间 完全独立(Full Independence)
- 为此需要 重新引入随机性
核心要点总结
- 从嵌套独立积分转向统一高维积分 是路径追踪采样的关键思维跃迁
- 连续使用序列后续点 而非重复使用起始点,是简单但至关重要的实践
- Padding 构建高维序列 时,必须检查 所有 2D 投影 的质量,而非仅关注原始序列对应的切片
- 关联伪影(Correlation Artifacts) 是高维采样中反复出现的核心问题,可能出现在:
- 像素间(重复使用相同序列)
- 维度间(Padding 导致的维度耦合)
- 解决之道在于保证跨维度的 分层性或独立性 ,这需要引入适当的 随机化机制
扰乱技术(Scrambling Techniques)
目标回顾
- 需要对 维度 2 和维度 3 进行扰动,以打破之前发现的 对角线关联(Diagonal Correlation) 问题
- Kollig & Keller(2002) 提出了三种扰乱技术
三种经典扰乱方法
Cranley-Patterson 旋转(Cranley-Patterson Rotation)
- 原理:对序列点施加一个 随机环面平移(Random Toroidal Shift) ,即每个维度加上一个随机偏移值后取模 1
- 缺点:
- 无法真正解决关联问题
- 会 破坏分层性(Stratification) ——因为平移后的点不再与 2 的幂次分层边界 对齐
- 结论:不适合当前需求
XOR 扰乱(XOR Scrambling)
- 原理极其简洁:
- 对每个维度,将定义域 递归地二分
- 在每一层级,随机决定是否翻转(flip) 两个子区域
- 同一层级的 所有子域执行相同的翻转决策
- 递归直至比特精度极限
- 优点:
- 完美保持分层性(Stratification Intact) ——因为翻转操作不会破坏 2 的幂次对齐
- 缺点:
- 不能真正打破原始序列中的对齐模式(Aligned Patterns) ,这些模式仍可能导致轻微伪影
- 重要注记: 之前所有渲染演示中,像素间的随机化正是用的 XOR 扰乱——它在 像素间去关联 方面确实有效
Owen 扰乱(Owen Scrambling)
- 与 XOR 扰乱共享基本框架:递归二分 + 随机翻转
- 关键区别: 每一层级中,每个子域的翻转决策彼此独立 ,不再像 XOR 那样全层统一
- 这些独立的递归决策构成所谓的 置换树(Permutation Tree)
Owen 扰乱的性质
| 特性 | 表现 |
|---|---|
| 保持分层性 | ✅ 完整保留 |
| 打破对齐结构 | ✅ 显著减弱原始序列的规则模式 |
| 收敛性 | ✅ 已被证明优于未扰乱序列 |
| 计算复杂度 | ❌ 更高,不适合在线实时计算 |
| 质量一致性 | ❌ 不同置换树的扰乱质量差异较大 ,建议尝试多个并比较 |
XOR 扰乱在 4D 问题上的效果
渲染测试
- 对之前暴露关联问题的场景施加 XOR 扰乱后:
- 不再像之前那样 惨不忍睹 ,但 仍然不好
- 存在许多 与噪声明显不同的伪影 ——无论增加多少采样数都 无法消除
2D 投影分析
- 相邻维度对(0-1, 2-3) 的投影:看起来不错(这在意料之中)
- 交叉维度对(奇偶配对) 的投影:几乎和扰乱前一样糟糕
- 根本原因: XOR 扰乱在每个维度的 第一个比特 层面,效果等价于简单的全局翻转
- 如果某个样本在 Slice 0-1 的左半区域,经过扰乱后在 Slice 2-3 中它 要么始终在左半、要么始终在右半 ——取决于扰乱值的第一位
- 域覆盖略有改善,因此伪影不那么刺眼,但 本质问题未解决
Owen 扰乱同样无效
- Owen 扰乱的 第一个比特决策 与 XOR 扰乱 效果完全相同
- 因此在这一层面上也无法解决关联问题
索引混洗与替代方案(Index Shuffling and Alternative Solutions)
索引随机混洗(Random Index Shuffling)
Kollig & Keller 的提议
- 既然扰乱无法彻底解决关联,那就 随机打乱每个 2D 序列的索引顺序 ,使各维度对之间 完全独立
- 效果: 关联伪影 彻底消失
- 代价: 严重损害序列性质——所有 对角线切片(Diagonal Slices)退化为纯随机 ,分层性大幅丧失
渲染对比
- 未混洗版本:伪影明显
- 随机混洗版本:伪影完全消除,但质量因失去分层性而受到影响
PBRT 书中的分层混洗方案
基本思路
- 不做完全随机混洗,而是 仅在特定的 2 的幂次对齐分层中混洗 ,然后递归处理子分层
- 例如对 32 个样本:先混洗 8 组(每组 4 个索引) 之间的顺序,再混洗每组内部的 4 个索引
- 这是一种 折中方案 :尽量保留对角线切片的分层性
实际经验
- 演讲者曾尝试一种 弱变体 :仅在 XOR 扰乱的 Sobol 序列上进行 2×2 索引翻转 ,以最大限度保持分层性
- 当时遇到的伪影确实消失了
- 但 几周后在另一个场景中又出现了类似问题 ——说明这种最小程度的随机化 不够鲁棒
一种未验证的推广思路
- 对索引施加 Owen 扰乱(O1 Scrambling) 来进行混洗
- 理论上应该有效,但 Owen 扰乱 计算成本高 ,实际可行性存疑
总结:混洗方法的困境
没有任何混洗方法能完全令人满意 ——每种方法都有优点,但也伴随 显著的缺陷 。
Pixar RenderMan 团队的替代方案
方案一:Correlated Multi-Jittered(CMJ)
- 能生成大小为 的点集
- 解决了 padding 关联 ,支持 渐进采样(Progressive Sampling)
- 使用 基于哈希的置换 ,灵感来自密码学
- 缺点: 对 前缀(Prefixes) 的性质保证不足
方案二:CMJ 的改进版
- 全面优于方案一
- 但 padding 基于 贪心优化(Greedy Optimization) ,在 极高维度 下计算开销变大
- 如果可以接受 预计算并存储序列 ,这是一个 优秀的候选方案
这两篇论文 强烈推荐阅读 ,其中还包含对多种方法的 系统综述和对比 。
高维拟蒙特卡洛序列(High-Dimensional QMC Sequences)
为什么需要原生高维序列
- 前面所有的 padding + scrambling + shuffling 方案都是在 拼凑低维序列 来应对高维问题
- 如果有一种序列 本身就原生支持任意维度 ,就无需这些复杂操作
Sobol 序列:从 2D 到任意维度的推广
基本原理
- Sobol 序列 是之前使用的 Sobol (0,2) 序列的推广
- 各维度由 方向矩阵(Direction Matrices) 生成
- 方向矩阵的选择直接决定序列质量
关键工作:Kensler 与 Grünschloß 的贡献
- Leonard Grünschloß 实现了 Joe & Kuo 论文中的数学理论
- 为计算机图形学构建了 高质量的多维 Sobol 序列
- 前 10 个维度的连续 2D 切片投影质量极好
- 任意维度配对 的结果也令人满意——之前困扰我们的关联问题 不复存在
高维退化现象
- 序列质量随维度升高会 逐渐下降
- 示例:某些高维切片在 64 个样本时投影性质 明显不佳
实践建议
将最低维度分配给被积函数中最重要的部分 ,以获得最佳收敛速度。
Owen 扰乱的额外增益
- 对所有维度施加 Owen 扰乱 可以进一步改善收敛性
- 投影中可观察到 对角线对齐模式基本消失
- 但计算不快 ——适合 预计算并存储
Unity HDRP 中的实际实现
存储方案
- 聚焦于 实时光线追踪效果 ,需要的采样数较少
- 最终方案:预计算并存储一个 小型纹理
- 256 个采样点
- 256 个维度
- 这就是实际部署中使用的采样数据
屏幕空间误差分布的进一步优化
回顾
- 之前已通过 XOR 扰乱 (每个像素使用不同随机值)将积分误差在屏幕空间分布为 白噪声
- 但可以 更进一步 ——预告将在后续内容中揭示如何将误差分布从白噪声优化为更有利于感知的模式(如 蓝噪声分布 )
方法对比总览
| 方法 | 保持分层性 | 消除关联 | 计算成本 | 适用性 |
|---|---|---|---|---|
| Cranley-Patterson 旋转 | ❌ 破坏 | ❌ 无效 | 低 | 不推荐 |
| XOR 扰乱 | ✅ 完整 | ❌ 第一位无效 | 极低 | 像素间随机化可用 |
| Owen 扰乱 | ✅ 完整 | ❌ 第一位同 XOR | 高 | 预计算场景 |
| 随机索引混洗 | ❌ 对角线退化 | ✅ 彻底 | 低 | 紧急修复 |
| 分层索引混洗(PBRT) | 部分保留 | 部分 | 中 | 折中方案 |
| CMJ 及改进版 | ✅ 良好 | ✅ 解决 | 中-高 | 预计算场景,强烈推荐 |
| 原生高维 Sobol | ✅ 原生支持 | ✅ 不存在 | 低(查表) | 最终推荐方案 |
蓝噪声分布(Blue Noise Distribution)
核心思想
- 将采样误差从随机的 白噪声 模式重新分布为 蓝噪声(Blue Noise) 模式——一种对人眼 更加友好、视觉上更舒适 的误差分布
- 该思想最早由 Georgiev & Fajardo 在 4 年前提出
- 去年由 Unity Labs Grenoble 的同事参与合著的论文进一步改进
实际开销与效果
- 计算成本 几乎不比之前的随机扰乱高 ,代价极低
- 在 64 SPP 且仅含间接光照的场景下,差异非常微妙(因为图像已经较好收敛,且间接光不是该技术的最佳展示场景)
- 在 16 SPP 的直接光照半影区域(Penumbra Region) 中效果 显著可见 ——蓝噪声分布让半影过渡区域的噪声模式更加均匀、自然
路径追踪中的维度分配(Dimension Allocation)
从 4D 间接光照到完整路径追踪器
逐步扩展算法
- 起点: 之前的基本 4D 间接光照计算
- 延伸路径长度 ,并让路径 从相机出发 (而非从光栅化片段出发)
- 增加 像素采样(Pixel Sampling) ,获得更好的 抗锯齿(Anti-Aliasing) → 总维度增至 6D
- 在每一深度层加入 多重重要性采样(MIS) :同时进行材质采样和光源采样,而非二选一
- 由此计算 完整光照 (不再仅限间接光照)
样本索引的确定
- 由于路径上 没有分裂(No Split) ,样本索引就是 相机光线的索引 ,极其简单
- 关键优化: 同一深度的光源采样和材质采样 可以且应该复用相同的样本索引 ,因为它们是 独立的积分计算 ,仅通过 MIS 加权求和组合
维度的确定:与光线深度直接对应
每一深度(depth)需要的维度数:
| 用途 | 维度数 |
|---|---|
| BRDF/BSDF 采样方向 | 2D |
| 相机层:景深(Depth of Field) | 额外 2D |
| 随机选择哪个 BSDF 叶片(PBR 材质通常包含多个 BSDF) | 1D |
| 随机选择哪个光源 | 1D |
| 俄罗斯轮盘赌(Russian Roulette) | 1D |
| 每深度合计 | 约 4D(加上相机层的额外维度) |
Unity HDRP 路径追踪器的实际维度统计
| 组成部分 | 维度数 |
|---|---|
| 相机层(像素 + 景深) | ~4D |
| 路径深度(最大 10 层,每层约 4D) | ~40D |
| 随机游走次表面散射(Random Walk SSS) | 64D |
| 总计 | ~108D |
- 之前提到预计算存储了 256 个维度 ,看起来确实不算奢侈!
最终成果
至此,将原本的简单间接漫反射计算,转化为一个 完整的单向路径追踪器(Full Unidirectional Path Tracer) ,具备 渐进式(Progressive) 和 自适应(Adaptive) 能力,完全依赖于所选 QMC 序列的优良特性。
运动模糊的处理(Handling Motion Blur)
离线 vs 实时的差异
- 离线渲染器: 可以直接为"时间"分配一个序列维度,像其他维度一样采样
- 实时引擎: 在时间维度上来回穿梭 非常不方便 ——引擎状态依赖于当前时间
Unity 的解决方案:离屏录制模式
前提条件
- 使用路径追踪器配合 离屏录制器(Offscreen Recorder) 渲染视频时:
- 精确知道每帧需要多少个采样 (与 Live 渐进模式不同)
- 可以以任意速度播放动画
具体做法
- 每个子帧(Subframe)对应路径追踪器的 一个采样
- 在每个子帧以 适当的时间偏移量 推进动画
- 使得最终合成帧在目标视频帧率下呈现 正确的动画速度
时间维度的采样特性
- 线性采样时间 不会产生关联问题
- 这与 Halton/Hammersley 集合 类似——其第一维就是 (线性递增)
- 时间维度与序列的其他所有维度 天然配合良好 ,无需额外处理关联或分层
总结与要点(Conclusion and Takeaways)
核心思维方式
处理高维问题时,将所有维度作为一个整体来考虑 ,远比将其拆分为递归的低维积分要简单得多。
- 对于路径追踪,这意味着:
- 考虑 路径空间中的全局积分
- 将 从起点到终点的完整路径 视为采样单元
推荐序列
| 序列 | 特点 |
|---|---|
| Owen-Scrambled Sobol (O2) —— HDRP 的选择,由 Brent Burley 提出 | 高维分层性优秀,适合渐进/自适应算法 |
| PMJ(Progressive Multi-Jittered) —— 由 Christensen 等人提出 | 具有非常相似的特性,蓝噪声误差扩散技术可轻松适配 |
两者共同优势
- 非常适合 渐进式(Progressive) 和 自适应(Adaptive) 算法
- 在实时渲染可能施加的 低采样预算 下表现优异
预计算序列的价值
- 预计算是理所当然的选择(No-brainer) :
- 允许通过 重量级优化计算 获得最佳序列性质
- 存储占用极小—— HDRP 中仅 64KB
未来展望
更好的序列?
- 近年来关于 非填充(Non-padded)高维序列 的研究较少
- 一个值得关注的例外:Jarosz 等人 去年发表的 正交阵列(Orthogonal Array) 论文
- 生成的点集在 所有维度对之间 都具有优异的分层性
- 目前尚待验证能否扩展为 序列(Sequence) 形式
实时路径追踪的未来
- Unity 当前路径追踪器定位于 交互式 Look Dev 和高质量图像/视频制作
- 尚未面向 60 FPS 的典型游戏场景
- 演讲者认同 Chris Wyman 在 HPG 主题演讲中的观点:
未来的实时光传输算法 不可能是离线算法的简单移植 ,但无论最终形态如何,深入理解高维蒙特卡洛积分 将始终有用。