3DMark05技术解析
硬件周刊
在3DMark2001发布之后,3DMark就已确立了在显卡测试领域的权威地位,成为芯片厂商、显卡制造商、整机制造商以及最终用户衡量显卡性能的标准,甚至有的用户采购显卡只看3DMark的得分。但树大招风,经过3DMark03的驱动优化风波、口水战的纷争,3DMark03受到众多的质疑,公信力逐渐下降。作为开发商FutureMark自然不能看着自家主力产品的衰落,而最新发布的3DMark05就成为FutureMark重振声威的法宝。
1.新引擎的特点
这次的3DMark05号称是完全的DirectX9测试工具,它不仅体现在DirectX8的显卡已经完全无法运行3DMark05,更主要的是FutureMark围绕DirectX9彻底重新构建了整个测试体系。在3DMark2001中是采用名为MAX-FX的引擎来制作整个程序,这个引擎同时也被用来制作游戏──《马克思佩恩》,这也算测试贴近游戏的一种表现吧。
但在3DMark03中,采用现成引擎的方法被FutureMark放弃。随着DirectX的发展,渲染技术也越来越先进,大部分的工作都可以由API以及显示芯片来完成,CPU则主要起调度的作用。FutureMark认定这是未来游戏的发展方向,并由此来构建3DMark03。但问题也随之而来,由于当时的渲染代码仍然主要依靠手工编写,很难保证一套代码完全适应不同厂商的产品。如果针对不同的厂商使用不同的渲染路径的话,又很难保证测试的完全公平性。在两难之下,FutureMark选择了“机械的公平”,即使用同一套渲染代码,也使用同一种渲染精度。而这最终导致了显卡芯片厂商修改渲染代码的优化行为(另外一种说法是作弊)。
而在3DMark05中,FutureMark终于摆脱了这种尴尬的两难境地,它采用了DirectX9的HLSL(高级渲染语言)来解决这个难题。HLSL是近年来才开始流行,它已经成为游戏开发的一种趋势,包括NVIDIA的Cg语言和ATi的RenderMonkey都属于高级渲染语言。OpenGL也有自己的高级渲染语言。使用HLSL后,游戏能够根据所使用的硬件自动选择合适的渲染方法,游戏选择渲染方式是由HLSL来定的,而HLSL的选择和渲染方式由于是DirectX规范的一部分,所以它对芯片厂商来说是公开的。这样就可以最大限度地减少由于渲染代码所引起的纠纷。
使用HLSL的另一个好处是可以为使用DirectX9的像素渲染和顶点渲染技术提供便利。利用HLSL的高级语言特性,可以最大限度保障硬件设备无关性,可以大大减少对寄存器的调用等这种繁琐的开发,再加上良好的代码重用性等特征,使得采用像素渲染和顶点渲染技术简单许多,可以大大提高游戏使用DirectX9渲染技术的比例,也方便了复杂渲染技术的使用。而在3DMark05中所有的测试都使用了像素渲染和顶点渲染技术。
不仅如此,HLSL还可以向用户提供渲染环境的选择。比如在3DMark05中使用GeForce 6800系列显卡就可以选择是使用SM2.0的渲染方式,还是使用SM3.0的渲染方式。这可以使人们对同一硬件架构下的不同渲染模式的性能作出评估。
2. CPU依赖性问题
在对CPU依赖性上,3DMark05也和前一个版本不同。在以前的3DMark2001中,CPU的快慢可以对成绩造成很大影响。而在3DMark03中,为了突出它是一个专业图形测试软件,而极力弱化CPU对成绩的影响,并且作得很成功。但在3DMark05中,FutureMark的看法有了一定变化,他们认为未来的游戏,不仅会对显卡有很高的特性要求,也会对整个系统,包括CPU和内存产生很大的压力。想想近来的高端游戏FarCry之流对CPU和内存的要求也的确令人咋舌(测试证明FarCry在高频CPU及1GB内存下才能达到最高速度)。所以3DMark05又将一部分材质和渲染工作分配到了CPU和内存子系统中,这样它就对整个系统产生了很大压力,而不再局限于图形子系统。
3.阴影的处理
阴影,尤其是动态阴影是游戏模仿现实最有力的武器之一,这一点从DOOM3中就可以得到明证。从3DMark2001开始,FutureMark就已经开始使用动态阴影,不过当时使用的是Projection shadow(贴图阴影),它是从光源方向把物体的影子渲染到一张纹理上,然后通过纹理坐标生成等手段,把纹理图贴到地面进行渲染,这种方法的灵活性比较差,局限也很多。于是在3DMark03中Stencil shadow(模板阴影)开始被使用,它在技术上很先进,和DOOM3中采用的阴影锥技术很类似,但在具体实现上有一定差别,因此NVIDIA曾经宣称FutureMark采用了一种生僻的实现手段,而且这种方法会产生大量的多余多边形渲染,很耗费资源。
在3DMark05中,动态阴影的实现方法又一次被改进,采用了Perspective Shadow Maps(透视阴影贴图)动态阴影渲染。这样场景将直接从光照射的方向来创建阴影效果,场景会测量物体相对于光源的法向量正向深度距离,通过比较后判断物体是否处于阴影内。而且FutureMark优化了Perspective Shadow Maps以减轻系统顶点的负载,并避免由于渲染不可见的多边形阴影而造成对于填充率的严重影响。
4.贴图压缩方式
目前法线贴图也已经在实际游戏中开始使用,在今后的游戏中它会是必备技术。它既可以塑造出逼真的光影凹凸,又能以较少的多边型模仿出海量多边形的效果。所以在3DMark05中法线贴图得到了广泛的使用。法线贴图是需要压缩的,这次3DMark05对色彩贴图使用了DTX1压缩,对Alpha贴图使用了DXT3贴图,而对法线贴图使用了DTX5压缩方式,这些都是DirectX的标准压缩方法。值得大家注意的是这次FutureMark并没有采用ATi的3Dc技术来压缩法线贴图。FutureMark解释是:虽然3Dc是很先进的技术,但由于所有能跑3DMark05的硬件都能支持DXT5,所以DXT5是必须纳入的。如果再增加3Dc 压缩法线贴图的话,不仅仅是增加几行代码的问题,而是所有的法线贴图都要有适合3Dc的格式,并且DOOM3也使用DXT5进行法线贴图的压缩,所以FutureMark也这样做了。
5.设置中的问题
因为我们不是在撰写软件说明,所以3DMark05的运行设置及界面等我们不再讨论。现在我们主要来看看设置中比较有意思的东西。在Benchmark设定中有一组渲染设置选项。“强制全精度”,在默认条件下,部分渲染可以使用半精度来提高速度。而设定全精度后,都将采用最高精度进行运算(单精度显卡不受此影响)。“Disable DST”选项允许关闭3DMark05为其动态阴影渲染所使用的Depth-Stencil Texture(深度模板材质)功能。在游戏场景测试中,3DMark05会使用2048×2048分辨率R32F色深格式的深度映射图(depth map)作动态阴影渲染,这样可以提高测试速度。在默认状态下DST是打开的。但并不是所有的显卡都支持DST的,我们可以选择是否关闭DST。
关于DST的使用,现在已经有了一些争论。有些人认为不应该加入DST功能,因为DST并不是DirectX的标准特性,而且两大显示芯片厂商只有一家支持DST,难免有偏袒的嫌疑。对此FutureMark做出了正面的回应,FutureMark认为虽然DST并不是DirectX的标准特性,但微软也公布了大量的文档来指引如何实现这一技术。另一方面DST非常适合深度映射图使用,也得到了开发者的广泛认可,已经有超过10个以上的大游戏开发商在目前的游戏中采用了DST。比如:FarCry、《分裂细胞》、《古墓丽影:黑暗天使》、《家园2》等。除了这些以外,许多即将发布的游戏和引擎都能执行DST。而且在将来DST也会得到广泛的硬件支持,而不再局限于一个显示芯片厂商的支持。
“Disable post processing”可以关闭“Bloom”特效和景深效果。Bloom是泛光点过曝的效果,能使发光的表面看起来更加明艳照人。景深效果顾名思义是通过硬件生成远处背景模糊的效果。它们都能为画面带来电影级的效果。在技术实现上也主要依靠像素渲染来实现。“Force software vertex shaders(强制软件顶点shader)”选中后会将全部顶点渲染的处理推给CPU,这倒是测试CPU的一个办法。它的出现可能是受到软件处理顶点渲染、硬件处理像素渲染的显卡(如XGI的部分显卡、Intel的部分集成显卡)的启发吧。
6.测试场景分析
下面我们来谈谈游戏的测试场景。第一个场景Return to Proxycon是延续3DMark03情节的FPS游戏模拟。这个测试场景采用了高细节的几何模型;室内多采用极富质感的材质贴图和凹凸材质贴图来制作地面的金属栅格及金属效果;使用Per Pixel Specular来制作像素级的金属镜面反光;阴影则采用了我们前文所说的透视阴影贴图,由一个2048×2048的Depth map生成全局动态阴影。在范围内还有一些起着调节环境作用的环境光源,在走廊上的点光源使用512×512×6的立方体Depth map产生一些投射阴影,其中一些警告灯使用了遮罩光源。在测试场景中有8种光源,其中两个指向光源和两个静态光源,很多使用了Bloom效果。
Firefly Forest,是一个异常美丽的魔法森林,精灵们闪烁着绿色的荧光穿梭在草丛、枯树、叶尖之间。这应该是一个视野不太开阔的小型室外场景的模拟。它首先使用了一个Skybox来对整个环境进行框定,然后采用独立建模生成高耸的树木和低矮的植物,所用这些都是可以单独运动的,并会随着视野的远近自动调节模型精度。实时的大气光散射效果和雾气模拟为这个森林笼上了亦真亦幻的气氛。场景中的主要光源有两个,分别是月光和精灵的荧光,月光由2048×2048的Depth map生成全局动态阴影。荧光是一个动态遮罩点光源,采用了一个512×512×6的立方体Depth map产生投射阴影。此外法线贴图与镜面反射也在地表与石头上得到了应用。
Attacker prepares to fire,主要讲述一艘飞船在飞越怪龙守护的峡谷时的惊险情节。这一次测试模拟的就是室外大型场景的渲染了。峡谷的岩石表面使用了像素渲染和动态光影相结合的效果,岩石材质采用了两层Color map,两层Normal map以及Lambertian diffuse shading,在峡谷的顶端还采用了体积雾化,来营造景深效果。它的水面系统更为复杂,为了得到准确的反射、折射以及两者的阴影效果,渲染了足足6次之多,处理上经过了多次读取法线贴图,反射、折射贴图和像素级的菲涅耳效果。在3DMark05中还加入了一个深度雾化的功能,在远景以及背光处会出现模糊以及黑暗的环境,增加视觉的距离感。在怪龙出水的地方使用了Depth fog模拟水气及模糊效果。而场景的主角──飞船其实是测试中渲染量最重的部分,据FutureMark说,在飞船上使用了几乎所有能在像素渲染2.0中使用的指令。而最终达到的效果也的确直逼电影级CG画面了。
7.计分方法
最后我们来看看3DMark05计分方法,按照FutureMark的设计目标,3DMark05刚推出时DirectX9系统得分应该在1000~5000之间。拥有2GHz的CPU以及第一、二代的DirectX9显卡的入门系统设计得分是1000,使用3GHz以上的CPU和第三代的DirectX9显卡的系统的设计得分是5000上下。从目前的测试结果看,FutureMark基本达到了目的(不过它对人们疯狂的超频爱好和SLI这种变态系统仍估计不足)。3DMark05的得分公式是:3DMark05 score = (Game Test 1 × Game Test 2 × Game Test 3) × 250,从这个公式可以看出3DMark05的计分并没有采用3DMark03以及以前版本的加权计分方式,每个场景的权重是完全一样的,这也和这些场景都采用了DirectX9的渲染技术有很大关系。而且由于使用了小项乘积,即使有一个单项成绩稍不理想,也不会过分影响总分。最后那个开3次方根则保证分数的平均性。
8.小结
总的来说,3DMark05无论从引擎构建、渲染技术、阴影效果、场景设计上来讲都是十分先进的,FutureMark也的确是竭痢3DMark05来表现出未来游戏的发展。但技术上的先进,并不一定等于开发上的成功。3DMark05是否能达到3DMark2001在业界的高度仍然需要时间来检验。起码在目前就有“为什么NVIDIA和ATi的上一代DirectX9显卡成绩差距过于悬殊?”、“为什么SM2.0与SM3.0没有速度差距”等一系列问题需要FutureMark去解释……


