软阴影这个词笔者认为翻译有问题,或者说提法有问题。软阴影(Soft shadow),指的是模拟现实中阴影周边虚化的效果,这里的Soft并不是“软硬”的意思,应该是“柔和”之意。在下认为,柔和阴影这种翻译方式更贴切原意。软阴影本身并不是指一种技术,而是指通过采用某种技术达到的效果。达到软阴影效果的方法有不少,常见的动态阴影技术有shadow volumes和 shadow mapping。
阴影体积(Shadow volumes)是一种基于几何形体的技术,需要几何体在一定方向的灯光下的轮廓去产生一个封闭的容积,然后通过光线的投射就可以决定场景的阴影部分。Shadow volumes是像素精确的,不会产生任何的锯齿现象。在很多场合下,Shadow volumes是高效的,但是其局限性十分明显,其中比较致命的就是仅当阴影被填充到一个平面上的时候才能被渲染。这就意味着投影到球型或其他非自然物体上时,这种方法便会失效,其表现为得不到自阴影。
阴影映射(Shadow mapping)也叫做光照映射(Light Mapping)是一种图像空间的技术,没记错的话它出自nVIDIA的GF2时代,它在以光源位置作为视点的情况下渲染整个场景的深度信息,然后再使用这些深度信息去决定场景的哪一部分是处于阴影之中。它有锯齿并且依赖z-缓冲技术。由于可以在不减少帧率的情况下达到真实感光照和阴影效果,编辑器允许在场景中放置任意数目的静态光源,它会为每个面预计算光流量(light flow)和静态阴影,因此现代商业3D游戏中多数都会使用到Shadow mapping。
Crysis中并没有淘汰Shadow volumes,这一点让人很惊讶。
BioShock是采用UE3引擎并且将Shadow mapping运用的相当完美的代表作。