支持~
woo shadow mapping耳闻过,介绍一下吧:)
woo shadow mapping是一种采用双层depth map来消除self-shadowing artifacts现象的shadow mapping。
由于pass1中获取depth map是基于light's point of view进行光栅采样的,而pass2中则是基于eye's point of view进行光栅采样的,所以实际在执行shadow mapping的过程中会产生一些错误的self-shadowing现象(特别是在倾斜的表面上)。
一种方法是通过polygon offset来消除这种self-shadowing artifacts现象。
btw:我在shadow_mapping_with_glsl中没有使用polygon offset而是进行了一个恒定的z偏移,实际上这么做并不合适。(这个demo里的问题太多了。:D) simple_shadow_mapping倒是用了polygon offset。
可是偏移多少合适呢?通常这是一个经验值,显得不那么优雅,而且如果两个表面过于接近,偏移过多的话会使得本来处于阴影中的表面能够错误的接受光照。
另一种方法是获得第一个深度表面和第二个深度表面,取中间值作为depth map,这样就不会担心第二个表面错误的接受光照了,这就是woo shadow mapping。
不过woo shadow mapping也存在一些问题,在depth layer有“断层”的地方也很可能错误的接受光照。而且现阶段还没有支持多次depth test的硬件,用shadow mapping模拟需要3pass,效率太低,所以还是polygon offset来的实惠啊。:)
@Pointer
NVIDIA GEMS1上有篇文章说明过如何较为准确的计算offset