畅游3D特效(五):上帝说:要有光——3D游戏中的光影特效
新手学堂
上帝说,要有光!于是世界有了光明;程序员说,3D虚拟世界也要有光!于是我们的3D游戏不再是毫无生气的灰暗世界,从此有了更真实的光影效果和立体感。3D游戏中各种炫目的、以假乱真的光照效果是如何实现的呢?游戏设计师们是如何巧妙地去表现这些效果呢?你知道游戏里哪些光影特效是“假”的,哪些是动态生成的吗?
3D游戏为什么要有光影?
3D游戏中光影有什么用?先来看看这两张图,左边这张图你看到什么?一个圆圈。而右边这张图你又看到什么?加上寥寥几笔对光影的刻画之后,它变成了一个球。现在不用多解释了吧,有没有光影(不管是完全模拟,还是像画素描那样“作假”,只要能欺骗人眼即可),直接决定了你看到的是2D画面还是3D画面。人眼判断物体的立体感除了依赖双眼的景深外,很大程度上也受到自然界光照与阴影的影响。
因此,在3D游戏中也是如此,如果没有对自然光照和阴影投射的模拟,整个游戏的画面看上去就会死气沉沉,而诸如房屋、树木等景物看上去就像是立在地面上的一张张纸片,完全没有体积感。玩家当然不能接受如此垃圾的画面……特别是在硬件性能高速提升的情况下,游戏里的光影完全可以做到更好,而事实也如此,开发游戏引擎的程序员们创造出了很多很酷炫的光影特效,接下来让我们详细看看。



动态光影是什么?
顾名思义,动态光影就是根据3D游戏中角色的运动而实时生成真实的光影效果,让整个画面看上去更加真实、更酷更炫。
其实,早在1977年,图形设计师们已经提出完成动态光影的算法,但是当时使用的是Shadow Volume(阴影锥)的计算方式(效果非常精细,但阴影边缘比较生硬),非常耗资源。
但是,Quake之父卡尔马克这个疯狂的家伙居然将巨费资源的Shadow Volume技术用到了当年的Doom3(《毁灭战士3》)中,真正的即时光影的确将所有玩家震撼了,但它也成为了当时硬件要求最高的游戏,这也使得该款游戏的“炫耀显卡”的意义远大于其作为游戏本身的意义。
好吧,有没有要求低一点的解决方法?当然有,早在Quake3(《雷神之锤3》)时代,游戏设计师们就用Light Map(光线贴图)的方式来“欺骗”玩家的眼睛了。原理很简单,虽然受限于硬件性能,我们不能用真正的动态光影,但总可以“预先”做一些带阴影的贴图(就像是画素描一样),贴在需要有阴影的模型上面吧!比如房屋或是固定场景就非常适合使用这种几乎完全不增加硬件要求的方式(直到现在,主流3D游戏也会在一些固定场景中使用这样的方式来降低硬件要求)。
Light Map算是一个偷懒的做法,并不能算真正的光影特效,但的确能在不怎么增加硬件要求的情况下让3D场景的光影表现提升不少。当然,我们肯定不能满足这样初级的特效,随着DX版本的提升,Shader(遮罩器)概念的出现,图形设计师们终于可以淘汰性能要求极高的Shadow Volume技术,改用Shadow Map(阴影贴图)技术了,Shadow Map技术可以实现边缘更加柔和的实时投影,同时对硬件性能的要求比Shadow Volume技术要低很多,在DX8以后的主流3D游戏中被广泛采用。
当然,这里的Shadow Map是个比较广泛的概念,其中还包括了Cascaded Shadow Maps(CSM,级联阴影贴图)、Perspective Shadow Maps(PSM,透视阴影贴图)、Variance Shadow Mapping(VSM,方差阴影映射)等等。
在现在主流的3D游戏中开启动态光影也很简单,一般来说在Graphics Option菜单中找到有关Shadow的选项,开启即可。多数3D游戏还提供了阴影的细节等级(从低到高为Low、Medium、HIGH、Ultra等等),这个就看你自己电脑的性能而定了,如果发现开了之后速度下降很多,就把特效关低点吧。






