| | | | | | | [文章信息] | | | 作者: | 王浩 | | 时间: | 2004-03-25 | | 出处: | Gzeasy | | 责任编辑: | 寒冬 | |
| [文章导读] | | | shadow volume这个术语几乎是随着DOOM3的发布而成为FPS玩家和图形学爱好者谈论的对象的。 | |
| |
|
| | | |
|
|
|
|
|
前言:真实的游戏效果
shadow volume这个术语几乎是随着DOOM3的发布而成为FPS玩家和图形学爱好者谈论的对象的。虽然这个游戏还没有上市,但是凭借John Carmack的传奇经历以及DOOM3发布的一些让人惊讶的预览图片,我们仍然有理由认为它将会是2004年最热门的FPS游戏之一。
id software向来都不吝惜为了达到最好的图像效果而使用最先进的渲染技术,这曾经使得玩家为了玩它开发的游戏而不得不掏光口袋里面的钱来升级电脑,不知道这次我们可以幸免吗?
自DX9发布以来,大家的注意力似乎都被shader吸引住了,BBS里面谈论的话题也总是离不开shader based rendering,前一段时间关于GPU内部精度的讨论大有遮天蔽日之感,但其实和闪闪发光的金属小球以及波光鳞鳞的水面比较,几个简简单单的影子常常能带给场景更多的真实感。也许这就是为什么DOOM3能够在多如牛毛的FPS游戏中脱颖而出的原因之一。
 阴影的实现方法有很多种,现在比较流行的主要是shadow mapping和shadow volume。前者实现起来相对简单,可以发挥现在 GPU 可编程流水线的能力,但是由于先天不足,shadow mapping在处理动态光源/物体的时候开销过大,经常作为一种静态场景中的廉价替代物。而Shadow volume的强项恰恰是shadow mapping的短处,像DOOM3这种大量运用动态光源,并且要对时刻都在运动中的物体投射阴影,shadow volume是现阶段唯一的选择。
Shadow mapping的原理:
一个物体之所以会处在阴影当中,是由于在它和光源之间存在着遮蔽物,或者说遮蔽物离光源的距离比物体要近,这就是shadow mapping算法的基本原理。
Pass1:以光源为视点,或者说在光源坐标系下面对整个场景进行渲染,目的是要得到一副所有物体相对于光源的depth map(也就是我们所说的shadow map),也就是这副图像中每个象素的值代表着场景里面离光源最近的fragment的深度值。由于这个pass中我们感兴趣的只是象素的深度值,所以可以把所有的光照计算关掉,打开z-test和z-write的render state。
|
|
|
|
|
|
|
|