Shadow Map ———— PCF(percentage-closer filtering)
图片稍后补上
1、PCF解决了什么问题
SSM生成的阴影会出现锯齿(shadow map的精度问题),没有AA。PCF实现了对shadowmap的AA
2、PCF如何实现AA
解决锯齿问题的方法有好多,其中最简单的就是在锯齿附近添加黑白之间的灰色,PCF就是实现了这一种方法。
在SSM算法中,物体的实际深度将会与shadowmap的深度进行比较,如果比shadowmap的深度小,则出现阴影。
这里有个问题,就是这种比较结果永远只有两种可能0或者1,这个导致SSM无法进行AA。
PCF利用采样的方法,对shadowmap的特定像素附近的像素进行采样,并取其平均值,这样就可以得到一个0~1的数,也就实现了AA
3、PCF的缺点:
1、无法提前做预处理,一旦做预处理(blur,插值),都会导致shadowmap的特定像素的深度出现误差,由于最后的结果是根据各个像素进行均值,所以这会导致最终阴影也出现误差
2、传统的PCF每一次采样过滤耗费很大(每次都要遍历附近的几个点,虽然用了泊松分布,但还是不可避免),PCSS算法的出现基本解决了该问题(通过动态计算采样范围,使用FindBlocker剔除非阴影点,额….在下面的PCF算法其实也基本实现了这两个)
3、半影不够逼真…PCSS算法也解决了(通过计算准确的半影范围??有待考究)…嘻嘻~
4、PCF的有关你资料:
http://www.eng.utah.edu/~cs5610/handouts/reeves87.pdf
http://http.developer.nvidia.com/GPUGems/gpugems_ch11.html
http://developer.download.nvidia.com/presentations/2008/GDC/GDC08_SoftShadowMapping.pdf
http://developer.download.nvidia.com/SDK/9.5/Samples/samples.html(这里有DEMO,基本没用