暑期大餐——DOOM3特别篇
硬件周刊
技术篇
从1992的《狼穴3D》开始,id就致力于模拟真实世界的游戏开发。1993年推出DOOM,这是一款大卖特卖的3D游戏。1996年,Quake的推出让游戏真正进入了3D加速的世界,而John Carmack的作品也开始引领游戏领域3D技术与硬件的发展。第二年QuakeⅡ问世,以其引擎为基础的CS系列至今仍在热销。2000年,id发布Quake Ⅲ Arena,场景中到处都是当时令人叹为观止的“曲面”,它使得多边形在游戏中的应用达到一个高潮。四年后的8月3日,不断跳票的DOOM3终于问世,id游戏最高的预定量、彻夜排队的玩家、疯狂的BT下载、各大游戏论坛满屏的DOOM3主题,无不预示着一个DOOM3时代的来临。这次id与John Carmack给我们带来的是光与影的世界。我们的游戏软硬优化全攻略也顺应潮流给大家奉献上这一期的DOOM3特别篇,只不过由于DOOM3超高的硬件要求,我们评述将不仅仅局限于中端硬件的优化,而是一个全景式的扫描。
幕后英雄──Shadow Volume(阴影锥)
DOOM3中即时的光影效果是主旋律,它不仅实现了静态光源下的即时光影,最重要的是:它第一次实现了动态光源下的即时光影在游戏中大规模的使用。在DOOM3中,注意一下,就能看到怪物发出的火球掠过通道时,墙上的光线随之前移,人物的影子也随火球移动不断地变换位置;主角那个帮助大家克服“黑暗恐惧症”的手电筒更是一个典型的动态光源。有了动态光源、即时阴影的帮助,人们第一次在游戏中如此接近自己在真实世界的视觉体验。即时阴影的实现方法有很多种,现在比较流行的主要是 Shadow Mapping(阴影映射)和 Shadow Volume。
Shadow Mapping的实现方法比较简单,首先以光源为视点,对整个场景进行渲染,得到一幅所有物体相对于光源的位置图(depth map),然后再从正常的视点(就是人眼的位置),渲染整个场景,对每个像素计算它和光源的距离,然后将这个值和位置图中相应的值比较,以确定这个像素点是否处在阴影当中。然后根据比较的结果,进行不同的光照计算,这样就可以得到阴影的效果了。这种方法可以发挥GPU可编程流水线的能力,被现在不少的3D游戏使用。
但Shadow Mapping 先天不足,在处理动态光源/物体时消耗系统资源过大,并不适合像 DOOM3 这种大量运用动态光源,并且要时刻对运动中的物体投射阴影的游戏。所以另一种即时阴影的实现方法Shadow Volume 是现阶段DOOM3惟一的选择。一个物体之所以会处在阴影当中,是由于在它和光源之间存在着障碍物,而障碍物产生的阴影范围从几何角度来看像一个锥形,所以我们称其为Shadow Volume。Shadow Volume其实也是一个多边形物体,也需要耗费系统资源来生成。起初它的生成完全由CPU来负责,但随着GPU的诞生,使用GPU来生成Shadow Volume也成为一种可能。有了阴影锥后,游戏会对所有的物体进行即时检测,来判断是否有物体处在阴影锥内,是否需要即时投射阴影。
阴影锥示意图
关于物体是否在阴影锥内,目前有两种计算方法。第一种是Z-pass 算法,就是从视点向物体引一条射线,当这条射线进入阴影锥的时候,模板值加1(无论OpenGL还是Direct3D,而当这条射线离开阴影锥的时候,模板值减1,在3D硬件中进行这些“+1”、“-1”的操作都需要使用Stencil Buffer模板缓冲区)。
如果模板值为零,则表示实现进入和离开阴影锥的次数相等,自然就表示物体不在阴影锥内了。但是这种Z-pass 算法有一个致命的缺陷,当人物进入到阴影锥内,就是视点进入到阴影内,Z-pass 算法就会因为少了一次模板值加一的机会而失效。这就引出了Z-Fail 算法。第二种Z-Fail 算法通过测试视点所处的位置而对模板的值进行补偿运算,解决了这个问题,但它对资源的消耗要比Z-pass 算法大一些。正是如此复杂的Shadow Volume算法,才描绘出那些逼真的动态阴影,但随之而来的就是极大的资源消耗。尤其是Shadow Volume 算法对GPU 填充率要求十分高,虽然现在的显卡动辄就有几十GB的像素填充率能力,但是遇到复杂的场景,渲染流水线也难免不堪重负。此外,模板缓冲频繁地操作也会占据一部分显存带宽。所以Shadow Volume是DOOM3中最耗费资源的特效,但它同时也是DOOM3最重要的支撑技术之一,可以说没有Shadow Volume就没有DOOM3。
当然在DOOM3中并不是所有的场景都使用了动态光影,预先做好的Lightmap光照贴图仍然是存在的,这也是为了降低资源占用。DOOM3的光影也不是无懈可击,它的即时阴影效果仍然显得比较生硬,过渡很少,不过配合其全封闭金属构造室内环境,以及大量的高光反射和硬阴影配合反倒表现出真实的场景。只是在担心今后采用DOOM3引擎的其他游戏如何处理室外场景的阴影。
辅助要素──凹凸贴图、多边形、物理引擎和音效
除了即时光影,海量的凹凸贴图使用绝对是DOOM3的另一大图形技术上的亮点。凹凸贴图技术就是在标准表面纹理上再映射一层纹理,纹理的内容相同但位置相错。错位深度由深度信息和光源位置决定,再根据表现对象的不同,将下层纹理进一步处理为上层纹理的阴影或底面。这样就逼真地模拟出了真实物体表面的凸凹褶皱效果,再配合光线,光反射和镜像效果在曲面上营造出更逼真、更加接近真实环境的场景。它从2001年被提出开始,宣传是轰轰烈烈的,但在实际游戏中运用得很少,往往都是噱头的意味大于实际使用。而DOOM3不然,它可以说是把凹凸贴图应用于每个场景、每个角落,所有的人物、机器、墙面都有凹凸贴图的存在。可以说从DOOM3开始,凹凸贴图真正从技术卖点走向了大规模应用。
这种金属门和墙面在游戏中到处可见,凹凸贴图也是DOOM3的一大特色
关闭凹凸贴图之后的截图,门上所有的凹槽、栅格斗消失了,右边的墙壁干脆变成了平板一块
看看这个家伙,脑袋的棱角很明显
在多边形应用上DOOM3的诟病比较多。的确游戏中一个个人物的脑袋是由几个棱角构成的都清晰可见,最常用的手电筒也是棱角丛生。其实我们考虑一下就知道,在技术上这并不是问题,因为在QuakeⅢ中就已经使用大量的多边形来构成曲面了。所以只能说John Carmack并不重视多边形的使用,或者是为了降低系统的负担,反正增加多边形对DOOM3是件很容易的事。
DOOM3的贴图风格和近期的FarCry以及即将发行的Half Life2不同。从泄漏版来看,Half Life2为了尽量提高纹理和贴图的逼真程度,采用了极高的精度,将污渍、不同的材质的表现都直接制作进贴图中。它的贴图更像一个尽善尽美,以假乱真的图画。而DOOM3呢,更追求技术上的突破,除了同样要求贴图精细外,它的很多贴图除了正常的图层之外,还有混合层和反射层,通过多次渲染并结合凹凸贴图着力表现在光照下的金属质感和凹凸感。如果从图画的角度看,DOOM3似乎不如Half Life2,但在质感表现上DOOM3是更胜一筹。
DOOM3的物理引擎也相当不错,人物采用了骨骼动画系统可以将多个动画混合在一起,角色的运动更自然。面部也使用了骨骼模拟,能模拟出更多丰富的表情,和他们对话时你甚至会发现他们的口型和发音是完全吻合的。在场景互动方面,DOOM3有一个专门的测试场景,很多砖块从地板上垒起,如果将下面的砖块打掉,上面所有的就会轰然塌下。实际游戏中也有很多金属架、箱子是可以移动和轰击的。
对DOOM3大家讨论得最多的是它的画面,但这次它的音效系统也做得出人意料的精彩。不知道有多少读者的电脑有5.1音效系统,如果把它充分利用起来,绝对给你一个不一般的DOOM3。在普通的2.1系统下声音虽然震撼,但并没有太强的立体感。如果换上了5.1系统,我们会被DOOM3世界的声场所震撼。在与游戏人物的交谈中,我们听到声音在周围传播。在邪恶生物从各个方向会聚的时候,各种声音从各个方向呼啸而过。在具有环绕声的环境下操作变得容易多了,照着发出响动的地方开枪就是。DOOM3的音频定位极为准确。而在4.1系统中除了PDA,无线电通信这些从中央声道出来的声音产生了一点错位,其他的定位仍然是准确的。DOOM3,在没有打开环绕声的情况下是一个不完整的游戏!
小提示:由于DOOM3在制作过程中音效工作室的变动,致使正式版中的一些枪械射击声音效果反而不如泄漏版了,这里给出音效文件替换办法:将泄漏版的sound.rar解压出来,再把Doom 3\base\pak003.pk4用WinRAR也解压出来,然后用前者的sound文件夹覆盖后者的sound文件夹,最后把替换好的sound文件夹压成标准的zip文件pak003.zip,改名为pak003.pk4即可。网上也有一些网友制作的现成的压缩包可供下载。
DOOM和DOOM2在3D效果上没有什么大的差别,都是运用2D的缩放和旋转功能来制造3D假相
Quake开始建造纯3D的虚拟世界
这是使用了3D显卡的QuakeⅡ截图
实战篇
硬件需求──对照一下,你的电脑能玩DOOM3吗
在DOOM3发售之前,关于它的系统要求就传得沸沸扬扬,而John Carmack也在四年的开发过程中不断地更改配置要求,直到8月3号我们在DOOM3的说明书上看到了如下的要求,操作系统要求Windows 2000/XP并且安装DirectX 9.0b,处理器要求Pentium 4 1.5 GHz or Athlon XP 1500+以及更高的CPU,内存要求384MB,显卡要求最好支持DirectX 9.0b以及有64MB或以上的显存,包括从ATi 的Radeon 8500到Radeon X800,所有的 NVIDIA GeForce 3/Ti系列、GeForce 4 MX系列、GeForce 4 Ti系列、GeForce FX系列、GeForce 6800系列。从这个要求上来看DOOM3的适应性是很强的,理论上24帧/秒以上的速度就可以玩游戏。但究竟在实际游戏中各种配置可以达到一个什么样的速度呢?下面我给出系列显卡在DOOM3中的成绩。首先上场的是低端平台。
低端测试平台
CPU:AMD AlthonXP 2500+
主板:升技N7 NF2Ultra400
内存:KingMaxDDR400 256MB×2
硬盘:希捷7200.7 120GB
操作系统:WinXP +SP1
驱动程序:nForce Drivers 4.24版、DirectX9.0b、NVIDIA ForceWare 61.77官方正式版ATi 催化剂4.9 Beta版
低端显卡在低画质下的测试成绩
这是800×600分辨率下,使用低画质的低端卡测试成绩。除了Radeon9200标版、GeForce4MX440-8×成绩较低外,其余显卡成绩基本都保持在20帧/秒左右,进一步优化后让其达到30帧/秒的水平还是有可能的。Radeon8500的成绩作废是因为使用催化剂4.9测试版时,出现了一部分贴图错误。相信正式版推出后会解决这个问题(注:这是因为催化剂4.9是测试版,对平台和显卡的兼容性没有完善,R8500在其他平台上不一定会出现类似问题 )。
在给出高端卡测试成绩之前,我们先要谈一下DOOM3的各向异性过滤的问题。因为我们在测试中发现,在使用High(高)画质和Medium(中等)画质对比时有一个重要区别,就是似乎存在类似于各向异性过滤开关后出现的画面变化。为了验证这种情况,我们来做一些测试,看看在驱动中选择关闭各向异性过滤,和驱动默认让“应用程序控制”各向异性过滤这两种情况的成绩是否有什么变化。
各向异性过滤对DOOM3的影响
测试结果证明,在驱动中选择关闭各向异性过滤后,Ultra画质和High画质下的测试成绩都获得了比较大的提升,而Medium画质和Low画质下则没一点变化。并且在High画质下,在驱动中关闭各向异性过滤和没关闭的画质区别明显。
现在我们可以说:DOOM 3在Ultra画质和High画质中自动打开了一定级别的各向异性过滤,而Medium画质和Low画质则没有自动开启各向异性过滤!所以在Ultra画质和High画质下,用户可以在驱动中关闭各向异性过滤来提高一些性能,不过因为只有NVIDIA的驱动里才有关闭各向异性过滤的功能,使用ATi显卡的用户就没办法了。所以对于NVIDIA高端卡测试,我们也将驱动中的各向异性过滤设置为了“应用程序控制”。
中高端测试平台和软件环境:
CPU:Intel P4 3.0C GHz(800MHz FSB)
主板:Intel D875PBZ
内存:利屏 DDR400 512MB ×2
硬盘:希捷7200.7 120GB
操作系统:WinXP + SP1
驱动程序:Intel_inf_6.0.1.1008、Direct 9.0C、NVIDIA ForceWare 61.77官方正式版ATi催化剂4.9 Beta
高端卡在Ultra画质下的测试成绩
这是都打开应用程序控制的各向异性过滤后的测试成绩。由于样品原因,我们在这里使用了ATi的拥有16条渲染流水线的顶级显卡X800XT PE,而NVIDIA我们只使用了拥有12条渲染流水线的GeForce 6800标准版,这不是一个重量级的竞争,请大家注意。
优化篇
驱动选择──玩好DOOM3的第一步
要想玩好DOOM3,驱动的选择是十分重要的。由于DOOM3的影响力巨大,NVIDIA和ATi都在其发售后公布了新的驱动。我们的测试结果表明NVIDIA的61.77版驱动比56.72版驱动有着极为巨大的性能提升,幅度高达百分之几十。就在我们截稿前夕,DELL泄露出的ForceWare 65.62驱动进一步提高了DOOM3的性能。而ATi呢,也在DOOM3发售之后立即公布了催化剂4.9的测试版,稍稍提高了显卡在DOOM3中的性能。不过ATi已经宣称自己将完全重写OpenGL驱动,相信那时它们的成绩会到一个新的高度。而且著名的ATi改版驱动DNA-drivers也推出了自己的基于催化剂4.8的 2.8.4.8版驱动,在说明文件中指明了这个驱动为DOOM3做了优化,有兴趣的玩家可以试一试。
图形设置──玩好DOOM3的关键
按照惯例,我们仍将向大家介绍DOOM3的图形设置选项。大家可以看看DOOM3和以前我们讲述的游戏图形设置有什么相同和不同的地方。
DOOM3的设置界面
id的作品有一个传统,就是可供调节的选项特别多,而这些都是可以用其目录下的Doomconfig.cfg配置文件来控制的(包括图形设置)。这次由于篇幅的限制,我们不再对配置文件做出解释,而将主要精力放在DOOM3内置图形设置上。通过合理调节这些设置,是可以让游戏速度有一定的提高。
在“Video Settings”中最主要就是图形质量控制,它共分为Ultra、High、Medium和Low四个级别,但这四个级别的变动并不影响“Advanced Options”设置的各项参数设定。
Ultra画质截图,因为它没有打开“自阴影渲染”所以并不是DOOM3最高画质,它的默认分辨率是1024×768
按照id的说法,Ultra画质在使用纹理、漫射光源、镜面效果,以及正常图层时都采用了非压缩格式的全分辨率纹理,纹理数据的需求高达500MB,虽然在当前主流和高端的显卡上可以运行这种配置,但是并不能把500MB的纹理内容压缩成256MB,这将会消耗大量的显存带宽。id的建议是使用一块512MB显存的显卡。不过在实际测试中顶级的256MB显卡也是可以使用这种模式的。
High画质,它为漫射光源与镜面使用了DXT1,3,5方式的纹理压缩,但是在正常图层上没有采用压缩,看起来还是非常接近Ultra品质,只是压缩仍然会引发一些损失。对于玩家来说这种画质已经很适合在游戏中使用了,这个级别适合256MB显存的显卡。
Medium画质,漫射光源与镜面效果以及正常的图层都使用了压缩,看起来仍旧不错,但在一些角落或边缘会因为压缩正常图层引发一些纹理扭曲与失真,这种画质适合使用128MB显存的显卡采用。GeForce FX5900和Radeon9800级别的显卡可以使用这个级别的设置,但要记住不要将分辨率设得高于800×600,否则会出现画面停顿的现象。
Low画质截图,枪身模糊一片,怪物的身上的鳞片也模糊在一起了。枪口光晕也小了很多。它的默认分辨率是640×480
Low画质,与Medium画质的纹理处理方法基本相同,只是它把纹理的大小由512×512改成了64×64,看起来粗慥了很多,它适合64MB的显卡采用。
我们前文已经说过四级画面质量设定的改变并不影响“Advanced Options”高级设置的各项参数,而修改“Advanced Options”也同样可以提升游戏速度,现在我们就来看一看,“Advanced Options”共分6项。
第一项“High Quality Special Effects”高级特效,它控制游戏中诸如水雾,视线扭曲等一些高级特效,因为这些特效使用的地方比较少,所以它对整体速度影响不大。
关闭“High Quality Special Effects”的截图,透过水蒸气,看到地板栅格没有任何变化
“Enable Shadows”,是否打开阴影,实时渲染的阴影是DOOM3最大的特点之一,但也耗费了大量的显卡资源。关掉阴影后多数显卡的游戏速度都可以得到一个飙升,是否舍弃DOOM3的最大画面特点来换取速度,这就要看玩家的选择了。
打开“Enable Shadows”,阴影存在于工程师的脚下,DOOM3中的阴影大多是这种泾渭分明的硬阴影
关闭“Enable Shadows”,阴影消失,工程师的脚下已经没有了阴影,看上去脚和地面连接处很不自然,像悬空的一样。
“Enable Specular”这个选项是控制游戏中的镜面反射效果的。因为这个特效也是普遍应用在游戏中的,所以关闭之后会有一些性能提升。“Enable Bump Maps”,是否允许凹凸贴图,我们前面已经说过id在DOOM3中普及了凹凸贴图的应用,如果没有它,画面质量会下降很多。所以并不推荐大家关闭它。
“Vertical SYNC”是垂直同步控制选项,因为DOOM3已经做了60帧/秒的限速,所以开不开这项已经对速度不会造成影响了。“Antialiasing”,控制全屏抗锯齿,现在能在DOOM3中打开抗锯齿的显卡寥寥无几,大部分用户可以无视这个选项了。
后记
在了解DOOM3的技术、画面、优化之后,回过头来我们看到John Carmack又一次站在了3D游戏技术的最高峰,起到了指引游戏技术发展和影响显卡技术前进的作用。而对玩家来说,喜不喜欢DOOM3这种阴暗的游戏风格并不重要,重要的是我们今后可以玩到以DOOM3为引擎的各种优秀游戏,就像Quake引擎派生出来的HL、CS、《重返德军总部》、《使命召唤》……一样,真的希望这一天快点到来!

















