Cascaded Shadow Map(CSM)是目前引擎中主流的阴影技术,效率与效果均不错。它与传统的单张Shadow Map的区别主要在于将视锥体进行了层次的分解,每一层单独计算相关的SM,这样在渲染大场景的阴影就可以避免传统的SM的各种缺点。典型的CSM原理基本上如下图所示:
虽然看起来原理简单,但是在实际中想实现一个健壮的CSM并不容易,涉到各种问题,其中一些是这种方法本身就固有的,需要使用多种手段来解决或规避。
1. 计算紧密的投影矩阵
为了提高SM的有效利用率(也即是要在生成的SM中尽量减少无关区域的面积),需要尽量减小生成SM时所使用的投影矩阵,这样就需要计算出在当前Cascade下所对应的Frustum的较为紧密的投影矩阵。这一般是在光源空间下计算出视锥体所对应的AABB包围盒:
不过这样直接使用AABB会带来另外一个问题