02 Real-Time Shadows
关键点
- PCF
- PCSS
- VSMM
- MIPMAP
- SAT
- Moment Shadow Mapping
1. Shadow Mapping
- 在shadowmap中,场景被离散化了。在camera中的像素对应的点跟shadow中对应深度可能会有较小偏差,则为阴影。当入射越是平行表面,shadowmap中的像素范围越大,越严重。
为此,设置一个shadowmap深度的冗余的阈值偏置。此外,这个bias可以根据角度调整。但是bias过大会丢失阴影。在工业界中是通过寻找一个好的bias来解决。
在学术界中有一个解决方法。取最小深度与次小深度的中间深度进行比较,不采取bias。但是要求物体有厚度。此外,一个效果方法能拿到的资源很少,如1ms。
- 此外,会有锯齿。
2. The Math behind Shadow Map
近似要求:
- g(x)实际积分范围很小
- g(x)比较光滑/低频
如下等效,即在着色之后再考虑遮蔽。当只有点光源时,积分范围只有一个点,可以等效;L对于较均匀面光源,fr对于diffuse材质,则平滑,也可以等效。
3. Percentage Closer Soft Shadows(PCSS)
3.1 Percentage Closer Filter(PCF)
- 用于抗锯齿
- 不是对有锯齿的阴影也不是对shadowmap做filter。
- 对shadowmap上一个范围内的深度与目标位置做遮挡判断,然后对结果做平均(可加权)。
3.2 Percentage Closer Soft Shadows(PCSS)
- 当filter小,阴影较硬,反之较软。因此可以通过调节filter实现软阴影。
- 在不同的位置,阴影的软硬不同。阴影的接收位置离其投射位置越远,则阴影越软,即与遮挡物的距离blocker distance有关。
- 通过相似三角形,可以得到filter大小。
- dblocker是平均距离,即该点的所有遮挡物(shadowmap的一片区域)的平均深度。查找到一个shadow point的dblocker之后,同PCF。
- 可见,PCF的filter对性能有要求,而PCS计算filter大小又会造成新的性能要求。
3.3 A deeper look at PCF
3.4 Variance Soft Shadow Mapping(VSSM)
对Blocker search与PCF做采样加速,这样会有噪声,所以接着在图像空间降噪。
(1) 加速PCF
- 对于PCF,是想要得到在卷积窗口内部比shadow point更深的点的占比,相当于想要得到shadow point的深度排名。
- 想要得到在一个系列中的排名,之前是对所有对象做对比。但是如果知道系列的分布,那么就可以直接得出结论。进一步的,假设是正态分布,就可以估计排名。因此,需要拿到均值与方差。如果对这个区域的均值与方差快速拿到就可以得到计算结果了。
- 均值:MIPMAP,Simmed Area Tables(SAT)。
- 方差:使用一个shadowmap记录距离x,并同时用另一个shadowmap记录平方。利用均值得到方差。
- 得到分布后就可以得到概率分布函数,相应的就可以得到排名。(没有解析解,但是在c++中有数值解ERF函数)但是计算还是比较复杂。
- 切比雪夫不等式:不再考虑是否是正态分布,对于任意分布都满足该不等式。此处利用该不等式作为约等式来作为近似估计。当然该不等式要求t大于均值,实际上默认满足。
(2) 加速Blocker search
此处假设非遮挡物的深度与shadow point深度一样,这是因为一般是表面,如果未遮挡则很可能是同一表面。
(3) 均值计算
- MIPMAP
不准确。
- SAT for Range Query
预计算一张表SAT,每个值都是以左上角为起点矩形。
- 每次生成shadowmap都要重新计算mipmap与sat。
3.5 Moment Shadow Mapping
- 当分布不能用高斯描述时,描述就会不准确。
当描述不准确时,可能使得阴影更黑或者更白,后者是不可以接受的。
如图所示,出现这种明显的分层分布的情况,就会产生漏光light leaking。
因此,希望能够解决VSMM中分布描述问题。 - Moment Shadow Mapping
4. Distance field soft shadows
- 使用距离场保存每个空间点到任意物体的最近距离,即安全距离
- 从shadow point到光源的方向上,逐步访问距离场可以得到一系列安全角度
- 使用最小安全角度表示shadow point的被遮挡情况,即亮度
- 一般不去计算反三角函数,因为计算量较大,所以直接比较正切值
- 在正切值上乘以系数k,并且做clamp,可以调整阴影的软硬情况;k越大,则被clamp的安全角上限越小,则软阴影范围i越小,阴影越硬。
- 如果不计入距离长生成,那么其速度更快
- 距离场可以首先每个物体单独算,然后取最小值
来源
本文来自博客园,作者:ETHERovo,转载请注明原文链接:https://www.cnblogs.com/etherovo/p/17362609.html