显卡 频道

领先NV一代 ATI全球最强显卡HD5870测试

DX11吹来新春风?从DX10的架构特性说起

  2006年11月,nVIDIA推出惊世骇俗的GeForce 8800 GTX为我们带来了前所未有的DirecX 10 Class GPU。随后ATI推出的Radeon HD 2900XT、Radeon HD 3870以及Radeon HD 4870等等全系列产品,更是将大众对于DirectX 10的渴望和期盼推向极致。大众对于DirectX 10的渴望不仅仅在于它带来的统一渲染,更重要的是,它还为众多的游戏开发者提供了更宽松的编程环境,给玩家带来了更逼真的画面质量。

较之以前,DX10的架构特性

  DirectX之所以在广大的开发者中流行,是得益于它的简单易用和丰富的功能特性。然而,DirectX一直被一个主要的问题所困扰,那就是高CPU负载。

  每次DirectX从应用程序那里接收到一条命令,它就需要先对这条命令进行分析和处理,再向图形硬件发送相对应的硬件命令。由于这个分析和处理的过程是在CPU上完成的,这就意味着每一条3D绘图命令都会带来CPU的负载。这种负载给3D图象带来两个负面影响:限制了画面中可以同时绘制的物体数量;限制了可以在一个场景中使用的独立的特效的数量。这就使得游戏画面中的细节数量受到了很大的限制。而使图像具有真实感的重要因素,偏偏是细节量。


Microsoft DirectX 10 Flight Simulator

  较之之前任何版本的DirectX,DirectX 10的一个主要目标就是降低CPU负载。它主要通过三个途径来达到这个目的:第一,降低绘制消耗。它通过修改API核心,使得绘制物体和切换材质特效时的消耗降低;第二,降低CPU依赖。引入新的机制,降低图形运算操作对CPU的依赖性,使更多的运算在GPU中完成;第三,批量绘制。使大量的物体可以通过调用单条DirectX绘制命令进行批量绘制。下面我们就来仔细的看一下这三种方式:

1.降低绘制消耗

  第一种方式的一个重要例子就是DirectX 10中对三维数据和绘制命令进行验证过程的修改。所谓三维数据和命令的验证,是指在DirectX绘制图形之前,对传给它的图形数据和绘制命令进行格式和数据完整性的检查,以保证它们被送到图形硬件时不会导致硬件出问题;这是很必要的一步操作,但是不幸的是它会带来很大的性能开销。

  从上表我们可以很容易的看出,在DirectX 9中,每次绘制一帧画面之前,都会对即将使用的相关数据进行一次验证。而DirectX 10中,仅当这些数据被创建后验证一次。这很明显是可以大大提高游戏进行中的效率的。

2.降低CPU依赖性

  在降低CPU依赖性方面,DirectX 10 引入的三个重要机制就是:纹理阵列(texture arrays)、绘制预测(predicated draw)和数据流输出(stream out)。

3.批量绘制

  在DirectX 9中,对渲染状态的管理一直是一个十分消耗CPU时间的操作。所谓渲染状态,是指显卡进行一次绘制操作时所需要设置的各种数据和参数。例如,要绘制一个人物角色,就需要先设置他的几何模型数据的数据格式、纹理过滤模式、半透明混合模式等等——每设置一项,都要调用一次DirectX API,占用大量CPU时间,极大的约束了渲染的性能。


DX 9/DX10画质对比

  为了使这些操作能够批量的进行,DirectX 10中引入了两个新的结构——状态对象(state object)和常量缓冲(constant buffers)。


DX 9/DX10画质对比

  在DirectX 10中,可以先把树、草的几个模型设给显卡,然后将所有要画的树木的位置、方向和大小一次性的写入到常量缓冲(Constant Buffer)中,然后告诉DirectX——画!显卡就一下把所有的树木和草都一起绘制出来了!只有这样,像时下流行的Crysis,Far Cry 2等等游戏,才有可能渲染出如此逼真的森林效果。

1
相关文章