Chapter 7 – Shadows 阴影

7.6 Percentage-Closer Soft Shadow

2005年,Fernando提出了percentage-closer soft shadow(PCSS)。该技术搜索shadow map上临近的区域以找到所有可能的遮挡物。这些遮挡物到采样点的平均距离则用于定义采样区域的宽度:

其中dr表示光源到阴影接收表面的距离,do则是平均的阴影接收表面到遮挡物的距离。也就是说,采样区域的宽度会随着遮挡物到阴影接收物体的距离增加,同时遮挡物靠近光源而增加。

如果没有找到任何遮挡物,那么物体表面的该点就位于光线中,也不必处理该点的阴影。同样,如果该点完全被遮盖,那么我们也不需要处理。其他情况,该区域将被采样并模拟光照效果。为了节省处理的开销,采样区域的宽度将决定采样点的个数。其他的优化技术,例如,对于那些距离较远的soft shadow,我们使用较低的采样率。

这一技术的瓶颈是其需要对shadow map进行大范围的采样以找到遮挡物。使用我们在上一小节学习的随机旋转的泊松分布能够一定程度上隐藏采样率过低所造成的锯齿问题。Jimenez注意到泊松分布的采样方式在动态情况下其效果并不稳定。

Sikachev提出了一种效率更高的PCSS,该技术基于SM 5.0,该技术也被称为contact hardening shadows(CHS)。该技术也解决了原本PCSS的一个问题:半影的尺寸受制于shadow map的分辨率。其原理是为shadow map生成mipmap,之后选择最接近世界空间尺寸的mip level。一个8✖8的区域被采样并计算出平均的遮盖物的深度。当我们找到大致的半影之后,分辨率较高的mipmap将用于较为清晰的阴影。

CHS已经运用于大量的游戏中,而针对该技术的改进仍在继续。例如,Buades提出了separable soft shadow mapping(SSSM),PCSS所处理的采样网格将被分割成各个部分,每个部分可能被重复利用。

层级化的min/max shadow map已经被证明能够加速PCSS算法。虽然shadow map中的深度值不能被平均,但是每个mipmap中的最大值与最小值将非常有用。也就是说,我们可以生成两张mipmap,一张存储每个区域内最大的z-depth,另一张则存储最小的z-depth。基于一个纹理的坐标,深度以及采样的区域,我们可以使用mipmap来决定该点是完全位于光照中或者完全位于阴影中。例如,如果一个纹理的z-depth大于其对应区域的mipmap中最大的深度值,那么该纹理一定完全位于阴影中,也就是说我们不再需要进一步采样。这一算法可以让我们更快并且更有效率地决定一个点的光照属性。

PCF的工作原理是在物体表面某一点的周边进行采样。PCSS的工作原理则是找到附近的遮挡物的平均深度。这些算法并没有直接考虑区域光源的空间属性(其不是一个点),而是基于物体表面的一个区域,因此这些算法都收到shadow map分辨率的影响。PCSS的假设前提就是遮挡物决定了半影的尺寸。假设场景中有两个遮挡物,街上的路灯以及远处的高山,而这两个物体使得物体表面的一个像素点位于阴影中,在这种情况下就会造成显示错误(这两个物体的平均深度不再具有代表性)。理论上,我们希望计算出一个去于光源对于物体表面某一点的可见度。一些研究者提出了基于GPU的backprojection(逆向投影?)。其原理是将每一个接收阴影的坐标点作为一个视野点(viewpoint),而区域光则是该视野平面的一部分,同时将遮挡物投影到该平面。Backprojection能够提供非常好的效果,但是其开销非常大,因此在互动性非常高的游戏应用中,很少使用这一算法。

留下评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据