2.透析显卡的性能与API关系之DirectX篇
说到API,也许很多人不容易理解。在计算机行业中,所有软件的程序接口,包括3D图形程序接口在内,统称为API(Application Program Interface)—应用程序接口。
其实,现实世界中,我们经常接触各种“API”,它是沟通我们和其它设备的桥梁。简单地说,API的出台使得软件开发工作者的工作更加轻松、容易。有了它,各种软件的接口功能就有了可比性。
过去,如果您想让它们发挥最大功效,必须做的一件事,就是记录相关硬件设备的地址。现在,API已成为软、硬件之间一种连接的桥梁,这道工序就可以省略了。
2.透析显卡的性能与API关系之DirectX篇
说到API,也许很多人不容易理解。在计算机行业中,所有软件的程序接口,包括3D图形程序接口在内,统称为API(Application Program Interface)—应用程序接口。
其实,现实世界中,我们经常接触各种“API”,它是沟通我们和其它设备的桥梁。简单地说,API的出台使得软件开发工作者的工作更加轻松、容易。有了它,各种软件的接口功能就有了可比性。
过去,如果您想让它们发挥最大功效,必须做的一件事,就是记录相关硬件设备的地址。现在,API已成为软、硬件之间一种连接的桥梁,这道工序就可以省略了。
开发API的相应功能,首先需要详尽的定义的标准,这些标准在硬件开发、完善阶段已经由生产厂商加以制定,按照提供的标准,软件开发人员可以轻而易举地完成一些复杂程序的调试工作。当他们设计某项功能时,也不再需要知道硬件的特定参数,往往只在程序中添加一条或几条命令就足够了。
所以,在游戏与显卡之间也需要这样的一座桥梁。游戏设计人员在设计时,不可能考虑到全部显卡的特性,他们只需要在一个共同的标准,按照API的规范来设计游戏,而游戏运行时通过API调用显卡的硬件资源。
同理,显卡芯片厂商根据标准来设计自己的硬件产品,以达到在API调用硬件资源时最优化,获得更好的性能。有了这个桥梁,便可实现不同厂家的硬件、软件最大范围兼容。目前PC游戏与显卡之间的桥梁主要有两个—DirecX和OpenGL。
今天这里主要讨论一下DirectX对显卡性能的影响
为游戏而生
说到DirectX,大部分读者都会认为这是一个专门为图形服务的API。实际上,DirectX是用途极为广泛的API,它并不局限于显示领域。目前的DirectX中包含有Direct Graphics(Direct 3D+Direct Draw)、Direct Input、Direct Play、Direct Sound、Direct Show、Direct Setup、Direct Media Objects等多个组件,它提供了一整套的多媒体接口方案。只是由于目前DirectX版本的更新主要在3D图形技术上,因此DirectX才给人一种图形API的感觉。
不过,当初微软发布DirectX的初衷正是为了弥补Windows系统对图形管理的不利。但第一代DirectX并未成功,因为当时的专业图形API—OpenGL支持者众多,而初出茅庐的DirectX 1显得稚嫩许多,因此并未流行起来。
DirectX 1版本是第一个可以直接对硬件信息进行读取的程序。它提供了更为直接的读取图形硬件的性能(比如:显示卡上的块移动功能)以及基本的声音和输入设备功能(函数),使开发的游戏能实现对二维(2D)图象进行加速。这时候的DirectX不包括现在所有的3D功能,但如果您打算制作高级游戏的话,那它就是入门的起步点。
D3D雏形形成
第二代DirectX在2D图形方面做了改进,加入了一些2D动态效果,采用了Direct3D的技术,这种结构使DirectX 2和DirectX 1有了根本不同。在DirectX 2中,3D应用程序接口是采用了“平滑模拟和RGB模拟”两种模拟方式对三维(3D)图象进行加速计算的。DirectX 2.0同时也采用了更加友好的用户设置程序并更正了应用程序接口的许多问题。整个DirectX的设计架构已基本确定,它也是如今的DirectX的雏形。也正是那时,《命令与征服》、《红色警报》等第一批Windows下的游戏开始流行起来。
1997年,正是3D概念进入游戏界的时候,DirectX 3推出了。DirectX 3版本是DirectX 2的简单升级版,它对DirectX 2.0的改动并不多。包括对DirectSound(针对3D声音功能)和DirectPlay(针对游戏/网络)的一些修改和升级。
DirectX 3.0a版本是修正了错误的升级版。在这里,主要的是针对DirectX安装程序的修改。在一些图形加速卡(如加拿大Matrox公司的MGA系列图形卡)的安装程序上,用不通知或合适/有效的选择方式改写用户的显示驱动程序,以便图形卡的加速性能更好。DirectX 3集成了最简单的3D效果,同时也一定程度上促进了3D显卡的举起。
不过那时,最具诱惑力的API不是DirectX,也不是OpenGL,而是Glide。《极品飞车》、《古墓丽影Ⅱ》等游戏在Voodoo卡的衬托下画面效果让人惊叹,因此人们在那时只知道3Dfx、Voodoo和Glide。因此,这一版本的D3D仅是一个雏形。
DirectX技术成熟
微软没有推出DirectX 4版本,直接推出了DirectX 5。DirectX 5版本在D3D上有很大改善,对D3D的内容做了彻底修改,并且使游戏开发商们移植到他们的应用程序接口中更容易、更方便。除此之外,许多应用程序接口的细节部分也得到了改进。加入了雾化效果、Alpha混合等3D特效,使3D游戏中的空间感和真实感得以增强,还加入了S3的纹理压缩技术。
同时,DirectX 5在其它各组件方面也有加强,在声卡、游戏控制器方面均做了改进,支持了更多的设备。因此,DirectX发展到DirectX 5才真正走向了成熟。此时,以《古墓丽影Ⅲ》为代表的游戏也开始加入DirectX阵营,DirectX与Glide形成分庭抗礼之势。当时大部分3D游戏均提供了Glide和D3D两种API的支持。
DirectX 6推出时,Glide由于3Dfx的固步自封已逐渐走向灭亡,而DirectX已被绝大多数厂商认可并成为实际上的主打游戏API。在这一版本的DirectX中,加入了双线性过滤、三线性过滤等优化3D图像质量的技术,游戏中的3D技术逐渐走入成熟阶段。不过,此时OpenGL也被广大玩家所熟知,主要是因为idsoftware发布了经久不衰的Quake Ⅲ,它只能运行于OpenGL模式下。同时,很多基于Quake Ⅱ引擎的游戏也开始流行(如CS),它们在OpenGL模式下的表现要明显好于D3D下的表现。这时,3DMark99等测试软件出台,专门用于测试显卡在D3D下的表现,而OpenGL下的表现自然由Quake Ⅲ来考察。
DirectX霸气初现
DirectX 7的推出伴随着产生了一个GPU的概念,同时在DirectX 7加入了硬件几何转换与光源处理(T&L)技术。虽然OpenGl中已有相关技术,但此前从未在民用级硬件中出现。GPU实际上是一组图形函数的集合,而这些函数由硬件实现,主要用于处理3D游戏中物体移动时的坐标转换及光源处理。此前,这些工作都是由CPU配合特定的软件来做的。
因此,硬件T&L的出现一定程度上将CPU解放出来。这一方面提高了整个系统的工作效率,另一方面则让显卡在一定程度上摆脱了CPU的束缚。换句话说,拥有T&L显示卡,使用DirectX7,即使没有高速的CPU,同样能能流畅的跑3D游戏。T&L成为当时人们关注的焦点。第一个支持T&L功能的显示卡是Nvidia的Geforce 256,它第一次把GPU的概念带入我们的PC。
全面赶超OpenGL
如果说DirectX 7的推出使D3D在技术上赶上了OpenGL,那么DirectX 8的出现则全面赶超OpenGL。在DirectX 8中,人们在DirectX 7中津津乐道的硬件T&L转眼被两个陌生的名词所取代—Vertex Shader和Pixel Shader。同硬件T&L仅仅实现的固定光影转换相比,VS和PS单元的灵活性更大,它使GPU真正成为了可编程的处理器。这意味着程序员可通过它们实现3D场景构建的难度大大降低。
VS和PS在游戏中带来的最大改变就在于水面的效果,相信经历了DirectX 7到DirectX 8显卡换代的用户一定对3DMark 2001SE中的Nature场景记忆犹新—首次在虚拟场景中看到如此真实的水面效果。
如日中天
如果说DirectX 8中的Shader单元还是个简单尝试的话,那么DirectX 9中的Shader则成为了标准配置。除了版本升级到2.0外,DirectX 9中PS单元的渲染精度已达到浮点精度,传统的硬件T&L单元也被取消。全新的VertexShader(顶点着色引擎)编程将比以前复杂得多,新的VertexShader标准增加了流程控制,更多的常量,每个程序的着色指令增加到了1024条。
尽管新的PixelShader(象素着色引擎)还不支持流程控制,但最大指令数增加到了160条。在DirectX9里,顶点着色编程比以前复杂得多,新的VertexShader标准增加了流程控制,更多的常量,每个程序的VertexShader指令增加到了1024条。尽管新的象素着色还不支持流程控制,但最大指令数增加到了160条。
DirectX9真正关键的特性是64位RGBA色彩(每种颜色信道16位)和128位浮点精度(每种颜色信道32位浮点)。颜色精度的巨大增加将带来让人震惊的视觉效果和图像质量。
从上面的介绍我们可以看到DirectX是为游戏而诞生,而且伴随着不同版本的DirectX推出,就会有相应的显卡产品支持。从DirectX1.0到DirectX3.0,微软让它的DirectX开始在游戏领域树立起3D的标杆,尽管当时的3D很粗糙,但是雏形已初步形成,到DirectX7开始,随着OpenGL和Glide势力日渐衰弱,DirectX的霸气初现。
到DirectX8发布后,DirectX已经在3D游戏领域树立起它的的权威地位,引人的Ps和Vs的出现令OpenGL和Glide自叹不如,如今新的DirecetX9.0,更是如日中天,权威地位无人能撼动。特别是现在DirectX已成为评价显卡性能的标准,从显卡支持什么版本的DirectX,一般的PC用户就可以分辨出显卡的性能高低,从而选择出适合于自己的显卡产品。
NVIDIA与ATi在DirectX上的分歧
从DirectX 8开始,硬件厂商便开始处于一种相对滞后的状态。因为首度出现的Shader单元被硬件厂商接受的程度还不高,硬件厂商均处于一种观望态度,因此跟进的厂商并不多。其实,微软提出Shader概念本来也是一种尝试,其间Shader单元也经过了数次修改,而NVIDIA与ATi也正是此时遇到了分歧。
ATi在RADEON 8500及其后续Direct 8产品中均加入了对Shader单元1.4版的支持(1.4版Shader正是ATi和微软合作开发的产物。而正是从这时开始,NVIDIA同微软的合作开始变得不如以前顺利),而GeForce3/4 Ti系列仅支持到1.1/1.3。而游戏厂商纷纷选择了使用较低版本的Shader单元来设计游戏,这也是DirectX 8游戏中鲜有支持1.4版Shader的原因。
也正是这一点造成了3DMark03测试成绩的争议,因为在3DMark两个基于DirectX 8的场景中,均采用了1.4版本的Shader渲染模式,而由于NVIDIA的Ti系列显卡不支持1.4版本渲染模式,因此要经过模式的转换才可运行,这其间必定会降低渲染效率,由此导致最后测试得分的降低。而由于大部分基于DirectX 8的游戏均未采用1.4版本Shader渲染模式,因此在实际游戏中Ti系列显卡的性能并未受到影响。这也是众多玩家指责3DMark03不公正的主要原因之一。
同时在渲染精度上又是引起ATi和NVIDIA争论不休的话题。按照DirectX 9的标准,PS的单色渲染精度最终被定义为24bit,ATi的产品严格按照此标准设计,而NVIDIA的产品则仅提供16bit精度和32bit精度渲染模式。毋庸置疑,在对比测试时,如使用32bit精度会在性能上有所损失,而使用16bit精度,则损失画质。
由于NVIDIA的默认渲染精度为32bit,因此不甘在测试中落后的NVIDIA推出了降低默认渲染的驱动,以提升测试成绩。对于目前这种状况,基本有两种观点,一种认为32bit精度的渲染是未来的发展方向,NVIDAI如此设计带有一定前瞻性;另一种则认为紧跟标准走,才会达到资源的最佳化,使画质和速度达到最佳平衡,过高的精度只会降低渲染效率。
以目前显卡的性能来看,在DirectX 9中的表现并不能做到绝对的游刃有余。而牺牲性能换来的高于标准并不易察觉的画质提升并不必要。其实,如果NVIDIA在DirectX 9制定时更多地参与进去,则完全可选择24bit和32bit共存的模式,而非16bit和32bit。目前的情况只能说明NVIDIA在这次的硬件设计上有一个小小的失误,同标准有一定脱节。
从目前的发展来看,能否来看,能否参与制定最新的DirectX标准将很大程度上决定硬件厂商的产品在最终应用时的性能表现,毕竟新技术的推广需要硬件厂商和软件厂商的共同努力,能参与最新标准的制定,也一定程度上说明了厂商的技术实力。
最新的ATi消息,如果明年微软把标准提高,要求Pixel Shaders 3.0渲染精度达到32位的话,ATi将会在下一代VPU—R420上采用新的内部Pixel Shader渲染精度。即32位精度的渲染精度。
好,从上面这篇文章中,我们介绍了什么是API及DirectX,并且探讨了显卡性能与DirectX的关系,并且提到3D图形接口除了DirectX外,还有OpenGL接口。
分页:[1] [2] [3] [4] [5] [6] [7] [8] [9]