软阴影与硬阴影的区别如下:上面为硬阴影,下面为软阴影。
Percentage Closer Filtering (PCF)
PCF最初是用来做抗锯齿的,后来发现可运用于软阴影上(PCSS)
从相机出发看向场景中的一点,记录该点的深度,将这点投影到光源照向场景的深度图(shadow map)中(在光源的深度图中寻找这一点的深度)。
在硬阴影中讲到比较该点的深度和光源的深度图中的深度进行比较,若不匹配说明有遮挡(为阴影区域),否则为可见区域。
在这里我们不仅仅找该点的深度,在shadow map上还要找该点周围的点的深度。
- 假设这里取3X3的区域。
- 将区域内的每一个点的深度与该点(中心点/投影的点)的深度进行比较(每次比较后的值为1 or 0 ,1为小于该点的深度(可见),0为大于该点的深度(不可见))。
- 进行比较后将比较后的值平均起来为0.667。
结果:(可到达抗锯齿的目的)
Percentage Closer Soft Shadows (PCSS)
将前面的PCF进行推广,如果filter变得特别大那么阴影就变成了软阴影!但是filter到底要如何变大,那一部分变大,变大到那种程度上才能得到最真实的效果?
比如上图,笔尖的地方接近硬阴影,笔帽的地方接近软阴影。可以观察到规律:阴影距离投射物越近越接近硬阴影,阴影距离投射物越远越接近软阴影。
所以要做软阴影,需要在物体阴影的不同位置上有不同大小的filtering-size,filtering-size与遮挡物与阴影的距离blocker distance有关.
PCSS步骤:
在第一步做blocker search的时候该使用多大的区域呢?
一般有两种解决办法:
1.使用5X5的格子
2.如下图:
示例图