(论文)[2023-SIG-Course] A Gentle Introduction to ReSTIR: Path Reuse in Real-time (3)
ReSTIR
- 主页
- update:March 4, 2024
06-ReSTIR Path Tracing
- 路径空间积分形式
- 从 DI 扩展出来
- 路径:
bounce
RIS with a path tracer
- NEE 开启之后,会形成 path tree
- RIS:选取一整条路径
- RIS:选取一整条路径
- 只考虑 NEE 的 RIS
- RIS 过程:重新采样一条光路
( 表示整条光路) ,互斥,形成的光路长度不一样,属于不同的路径子空间- 例如
,光路长度为 3
- 例如
、 :这些在 PT 框架下都有容易获取
- RIS 过程:重新采样一条光路
- 如果考虑所有的光路作为 RIS 的候选,则需要考虑一条路径可能同时被
NEE、BSDF(常规 PT)采样得到
- 那么
此时 - 例如下图中,
的 mis 将会 <1 是 BSDF sample
- 那么
Reuse path samples
- 最简单的方式:identity shift(area measure)
- 重连
- 重新计算 BSDF 贡献、几何项、可见性项(发射 shadow ray)
- biased 版本:加速、减少内存开销
- 认为
近似等于 :少数情况下效果不错
- 认为
- specular 的复用问题很大
Good shift mapping
- good:假定每一个像素都有一个比较好的重要性采样
,理想的形式应该是 shift mapping 之后生成的样本和 类似- 下式:对于
像素的一个好的 shift mapping
- 下式:对于
- identity shift(area measure):如果
是 diffuse 的话,这是容易满足的- 但是如果
、 距离相差太远,几何项差太多,那么结果也不好
- 但是如果
- 如果
存在 specular,这样效果就很差- 如下图,黑色高贡献,但是蓝色几乎贡献为 0
Common shift mappings
- 借鉴 gradient domain rendering
- 假设相邻像素变化小
- 那么相邻相像素
的 归一化因子类似 - 假设
- 于是 good shift mapping 条件如下
- 那么相邻相像素
- 和 gradient domain rendering 用的条件一样,可以参考它所用的 shift mapping
- Half-vector shift
- 对于 specular,拷贝对应点(
)的 tangent-space half-vector,直到 和 能够连接 - 双射要求
都是 diffuse(roughness 大于给定值) - 出发点:尽可能保留相近的 throughput
- 当处理 bounce 数变多(多次连不上),产生大的 divergence,效果不太好
- 合适的材质,效果不错
- 对于 specular,拷贝对应点(
- 目的:preserve the path contribution
Efficient shift mapping for RTR
- hybrid shift
- random replay
- additional distance condition
- 只根据采样 lobe 的 roughness 进行顶点分类
- 优点
- 存储小:一个重连接的顶点、随机数种子
- glossy/refraction 材质效果好
- 目的:为了保持贡献相近
Ensuring Invertibility
两个条件
- Distance Condition(为什么不是比例)
- 第 2 个是为了保证可逆
- Roughness Condition(足够粗糙,这样对重连接友好)
:表示采样到的 lobe- 如果存在多个 lobe,则
- 如果存在多个 lobe,则
:roughness(specular diffuse: )
流程
- 在 base path 形成的过程中(PT),满足如下两个条件的最小
对应的节点 被保存为 reconnection vertex
- shift 的时候,使用 random replay(相同的随机数种子生成路径)生成
offset path,直到
和 相连- 为了可逆,同时需要满足
,直接复制- 如果
上不存在 这个 lobe,那么 shift 失败
- 如果
- 为了可逆,同时需要满足
- 不存在更小的
满足上述条件(指 base&offset path),否则违反可逆- 疑惑:所以上面的
是整体生成的还是只通过 base path 就能生成?- 只能是 base path 生成
- 感觉像是 base path 生成之后,之后只能在
处重连接
- 疑惑:所以上面的
Path Samples with Lobe/Technique Tags
- 为了满足 path space 到 primary sample spaces (for the random number sequence) 的双射,需要将路径扩展到带 lobe 的
表示 采样到的 lobe 类型 is the total number of lobes in the scene
- 如果光源被 NEE 采样得到,
标识这个信息 - 如此便能通过random replay 完全复现这条路径
- 要求使用的随机数除了路径生成,不用于其他
- 重写:长度
的路径- 上面的
:NEE、BSDF 的 MIS, 标识 NEE 还是 BSDF 采样
Primary Sample Spaces
ReSTIR PT uses primary sample space(PSS) parameterization for the paths.
PSS 好处
- 路径积分可以直接通过
表示,不用分开记录 (浮点误差小) - shift mapping 过程中,random replay 的顶点 Jacobian = identity,方便计算
- 路径积分可以直接通过
PSS 形式的路径积分
:随机数序列 :超立方体, 表示 的长度 :映射到采样到的路径 和 是双射
Jacobian 计算
- 重连接的计算(其他的话是 identity)
: 到 的单位向量- 根据面积采样和立体角采样建立联系
- 会影响
- 如果
是光源,则只影响 ,红色部分为 1
- 如果
:采样 lobe 和方向的联合分布,立体角度量- 如果是光源,那么将面积度量转化为立体角度量,lobe 采样
- 如果是光源,那么将面积度量转化为立体角度量,lobe 采样
:
- 根据重连接定义:
,但是采样概率不同(出射方向不同)
ReSTIR PT 细节
- 数据结构如上
- path sample 的内容
- 重连接顶点
- 随机数生成器(RNG),序列生成
- 辅助信息
- 假定重连接顶点
不是光源(只是为了表示方便,处理类似) - 重采样流程
- RNG
生成子序列 ,throughput 为 - 通过三角形 ID(
)、重心坐标 ,计算- 动态场景需要其他处理,需要使用到
- 动态场景需要其他处理,需要使用到
:入射方向, :入射辐射度估计- 贡献计算如下
:考虑到 可能是光源的 MIS 系数(不是光源,则为 1)
- RNG
Volume rendering
- 体渲染的积分域:
- 表面 + 体
- 针孔摄像机,没有相机响应函数
- 递归形式
- 所有点的自发光到
的贡献(长度为 )- 疑问:这里似乎没有考虑直线外的光源?
:最近的不透明点到像素的距离 , 根据像素位置决定 :"in-scattered" path contribution
- 体介质
- 表面:常规的含义
- transmission item
- 计算代价高,在某些
分段常数情况下,计算快
- 计算代价高,在某些
:Volumetric ReSTIR 使用一个简单的- ray marching 近似
- 使用低分辨率的 volumes 计算(最小化内存开销)
- A piece-wise constant, low resolution volume
- ray marching 近似
- Volumetric ReSTIR
依赖于 ,复用的时候复制 去生成 shifted- 两个复用:vertex、direction
- shifted path:
- shifted path:
- vertex reuse 效果好,但是由于几何上的奇异性, direction reuse 效果不佳(opted for the slower direction reuse by default)
- 可以参考 hybrid shift(random replay、distance threshold 等)