GAMES202.闫令琪.09.实时全局光照(屏幕空间)(SSR)
- https://www.bilibili.com/video/BV1YK4y1T7yY
屏幕空间全局光照
SSR
- Screen Space Reflection
- Screen Space RayTracing
- 屏幕空间上做光线追踪
- 不需要 3D 信息、三角形加速结构等
- Ritschel et al., Stochastic
Screen-Space Reflections, SIGGRAPH 2015 course
- 作者PPT,原始网站
现实、游戏中的反射
- 反射本质上就是全局光照
- 不评价好坏,工厂地板的反射可能本身就没这么亮
- 技术是不错的
发现
- 绝大多是反射的东西都是在图上有了的东西
- 因此可以直接使用 Screen Space 的东西
- 白色框选部分反射的是红色框选部分
一个例子
- 我们想做的是类似镜面反射的效果
- 我们渲染好了整个场景,现在试图在地面上加入反射
- 对于每一个 fragment
- 我们对其求出反射光线
- 我们让反射光线和场景求交
- SSR 可以做镜面反射,也可以做 glossy 材质的反射
- glossy 材质:采样
- SSR 可以做地面不是平面的场景
- SSR 可以做任意的光线追踪
SSR 思路
- 两个问题
- 反射光在哪里
- 怎么做 shading
计算发射光位置
Linear Raymarch
- 步进
- 从 shading point 出发,沿着场景一步一步前进,利用深度图判断当前点是否和场景相交
- 找到相交的点,就把这个点作为次级光源
- 步长需要给定,怎么定义步长?
- 步长太大,可能找到的点离真实的点很远
- 步长太小,计算量太大
Hierarchical ray trace
- 动态决定步长的大小
- 例如下图中,反射点一开始可以直接走好几格都不会和壳(获得的图片相当于是场景的一个壳)
- 如果我们能够很快的获得可以走多少格都不会和壳相交,这样效率就会大大提高
- 层次结构,对对深度图做一个 mipmap,但是我们对于上一层的
mipmap,对应区域取的是下一层的最小值,而不是平均值
- min-pooling
- 取最小值,可以保证我们如果在上层的 mipmap 中不相交,在下层的 mipmap
中也一定不相交
- 保守估计
- 这样的层次结构就可以允许我们的步进值是好几个格子
- 从层次机构的根部开始判断
- 如果和上层的 mipmap 不相交,则直接跨过这个区域
- 如果相交,则进入下一层的 mipmap
- 有两个子结点,但是我们知道应该进入哪一个子结点
1 | mip = 0; |
- mipmap 存在问题,做不了起点不在 \(2^k\) 上的最小值
- 例如上面的例子,[2, 3] 格子之间的最小值就求不了
SSR 的问题
- 问题源自于屏幕空间
- 我们不知到我们没有看到的场景是什么,我们只了解一层壳
- 下图中手掌心没了
- 下图中地面反射只有一部分窗帘
- 我们可以根据反射光走的距离进行一个衰减,这样子的话我们可以把边缘虚化,效果会好一点
- 虚化后的结果
Shading
- SSR 本质上就是把 path tracing 中光线和场景求交的问题转化成了光线和场景的壳求交的问题
- 所以之前 path tracing 的方法都可以直接使用
\[ L_o(p,\omega_o)= \int_{\Omega^+}L_i(p,\omega_i)f_r(p,\omega_i,\omega_o)\cos\theta_i\,\mathrm{d}\omega_i\\ \]
- diffuse/glossy:蒙特卡洛采样方法
- specular:直接计算即可
- 我们有一个假设:反射物(次级光源)是 diffuse 的
- 和 RSM 一样,不然无法求出 \(L_i(p,\omega_i)\)
- \(L_i(p,\omega_i)=L_o(q,q\to p)\)
- 是否需要距离衰减?
- 不需要
- 还是对 BRDF 的立体角进行采样,而没有转化为光源的面积
- 只有对光源采样才会有平方衰减的问题
- 次级光源和 shading point 的可见性问题?
- 处理得很好,上面的 hierarchical ray tracing 求出的是第一个交点
- 只有对光源采样才会出现可见性问题
SSR 可以模拟的结果
- 以下现象只要你正确对 BRDF 采样计算,就能自然得到结果
- Sharp and blur reflections
- 不同材质的反射结果
- contact hardening
- shading point 与次级光源离得越近,我们看到的反射越清晰
- 同样的反射叶,距离越远,圆锥的面积越大,结果就会模糊一些
- specular elongation
- 雨天坐车看到红绿灯,地面看过去,发现红绿灯被垂直上下拉长了
- 认为地面是各向同性的,法线分布在一个标准的圆上,给定一个观察的方向,BRDF lobe 应该是一个长条的椭圆
- per-pixel roughness and normal
- 我们本身没有对这些条件做出假设,因此是可以的
Improvements
- BRDF important sampling
- glossy 物体
- 因为反射光线是在一个 lobe 内部,没必要对四面八方均匀采样
- 只需要选择一个 PDF,让它和这个 lobe 形状一致
- 复用一些可行的光路,形成新的光路
- 预先模糊
- Prefiltered samples
- Weighed by each BRDF
- 对于 lobe 多次采样,等价于预先模糊再在镜面反射的方向上采样一次
- 问题,屏幕空间上不同的点深度是不一样的
- 怎么做 filter 是个问题
SSR 评价
Pros
- Fast performance for glossy and specular reflections
- Good quality
- No spikes and occlusion issues
Cons
- Not as efficient in the diffuse case
- 需要打出大量光线
- Missing information outside the screen