3D动力源泉深入剖析显卡的内部世界.docx

上传人:b****6 文档编号:8175251 上传时间:2023-01-29 格式:DOCX 页数:33 大小:1.46MB
下载 相关 举报
3D动力源泉深入剖析显卡的内部世界.docx_第1页
第1页 / 共33页
3D动力源泉深入剖析显卡的内部世界.docx_第2页
第2页 / 共33页
3D动力源泉深入剖析显卡的内部世界.docx_第3页
第3页 / 共33页
3D动力源泉深入剖析显卡的内部世界.docx_第4页
第4页 / 共33页
3D动力源泉深入剖析显卡的内部世界.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

3D动力源泉深入剖析显卡的内部世界.docx

《3D动力源泉深入剖析显卡的内部世界.docx》由会员分享,可在线阅读,更多相关《3D动力源泉深入剖析显卡的内部世界.docx(33页珍藏版)》请在冰豆网上搜索。

3D动力源泉深入剖析显卡的内部世界.docx

3D动力源泉深入剖析显卡的内部世界

导读:

随着nVIDIA与ATi相继推出新一代图形芯片以及HalfLife2和DOOM3等重量级3D游戏的发布,2005年注定是不平凡的3D热潮年。

然而在感叹惊人的画面效果之时又可曾思考过图形芯片的内部世界?

如果对此还不甚了解的话,那就与我们一起来深入探究吧。

我们将在此全面了解有关的显卡的知识,继而帮助大家选购产品并了解当前的技术现状与未来的发展趋势。

广告:

d_text一、速度的奥秘:

GPU之像素填充率

  如同整个PC架构中CPU是最重要的部分一样,在显卡的架构中,GPU也是其主心骨。

如今的GPU集成比CPU更多数量的晶体管,其复杂程度可想而知。

从历代产品的发展过程来看,每一代GPU都保持想相对稳定的架构,即像素填充率决定基本速度,然后通过各种技术实现3D特效,从而在速度与画质方面取得双重进步。

  像素填充率或许是大家经常听到的技术名词,然而很多读者对此并没有直观的理解。

简而言之,像素填充速率是显卡对像素和文本的渲染能力。

在3D游戏中,每一个场景的构筑都需要显卡极大的工作量,屏幕上每一个景物都是由显卡根据图形透视原理,通过多个三角形的组合形成的,显卡既要保证近大远小的透视效果,还要根据第一视角的位置实现遮挡效果。

3D画面的构成

  像素填充率表示在一定时间内3D解决方案可以渲染的像素数量,也是实现3D画面的基础。

我们都知道一帧包括了一定数据的小点,称为像素,而每一分辨率都需要一定数量的像素。

一般分辨率640×480由307200个像素构成,而较高的分辨率1600×1200则需要1920000个像素。

显卡的GPU必须在帧幅显示之前渲染出帧幅的每一像素。

毫无疑问,这就是决定显卡实际速度表现的关键。

  象素填充率越高,显卡的工作性能越好,特别是在分辨率较高或者运用大量3D特效的时候,因为这时的需要处理的像素和文本更多。

在显卡使用一个GPU时,像素填充率的计算方法为:

GPU主频×渲染管道数量。

例如nVIDIA的GeForce2GTS芯片,其时钟速度为200MHz,并配有4条渲染途径,此时计算方法为4×2亿/秒=8亿像素/秒。

  在长达几年的发展历程中,提高像素填充率成为图形芯片厂商努力的方向。

如今最新款的nVIDIAGeForce6800Ultra(NV40U)将GPU主频提高到400MHz,而且配备了16条像素渲染管道,因此像素填充率直接比当年的GeForce2GTS提高8倍,也因此带来无与伦比的速度优势。

  需要注意的是,计算像素填充率不用考虑GPU核心位宽的因素,这与其它带宽指标的计算方法有所区别。

对于GPU而言,所谓的核心位宽仅仅代表内部位宽,其价值已经在渲染管道数量上得到体现。

从64位发展到512位,事实上每次GPU核心位宽的提升都对于性能提高有着极大的好处,但是其发展步伐还是相对较慢。

小知识:

何谓渲染管道架构

  在查阅一些显卡硬件资料时,我们经常能够看到诸如4×2或者8×1的渲染管道架构表示方法。

其实使用这种表示方法仅仅是因为有些GPU的单个渲染流水线可以内置两个贴图单元,此时等效为渲染管道数量的加倍。

从理论上说,这种等效加倍方式毫无问题,但是实际应用中却并不如此。

双贴图单元的效率往往是很难解决的问题,因此同样是8条渲染管道,8×1架构的性能要优于4×2架构。

此外,最新的NVGPU还可以工作在32×0模式下,此时GPU将进行无色渲染或者Zvalue渲染,这又是一种特殊情况总之希望大家明白,单贴图具有更加真实的性能表现,而且这已经成为一种发展趋势。

二、跨越四个时代:

GPU支持的API版本

  API(ApplicationProgrammingInterface应用程序接口),是程序员和3D图像之间的交互方式,3D设计人员利用API接口编出程序,给图形处理芯片发出命令,执行多种效果运算,构造出理想中的图形效果。

现在流行的显示API是Direct3D和OpenGL,而能否支持这些API已经成为一款GPU性能高低的风向标。

在DirectX普及之前,大多数的游戏都是在DOS下开发的,因为DOS可以直接访问硬件,开发人员几乎无需考虑各种硬件平台对游戏的兼容性。

但是Windows将很多系统的底层访问权限都保护起来,一时间,很多开发人员都难以适应。

微软清醒地意识到,如果不能全面打开Windows下的娱乐市场,那么Windows始终取代不了经典的DOS。

为此,他们提出了HAL(HardwareAbstractionLayer,硬件提取)和HEL(HardwareEmulationLayer,硬件模拟)两项标准。

  硬件提取可以让开发人员在编程时丝毫不用考虑硬件的特性,因为它实现了各种硬件的基本接口,真正做到了硬件平台无关性。

这点是非常重要的,与目前很热门的JAVA语言有异曲同工之妙。

其实在HAL之前,微软也曾提倡过GDI和MCI,但是相对而言HAL无疑更加先进,让人容易接受。

HEL的硬件模拟功能让Windows下的游戏跨上了一个新台阶,因为即使我们没有3D加速卡,也可以用过模拟的方式来实现伪3D,这可比平淡无奇的2D画面要好看多了。

以目前的眼光来看,似乎HAL和DEL都没什么大不了,但是它们确确实实地帮助DirectX站稳脚跟,为以后的蓬勃发展打下坚实的基础。

当然仅仅有这些还是远远不够的,随后的DirectX中,微软更是掌握了硬件厂商的命脉。

历代DirectX之特色

此图片可点击放大

  DirectX整合了Direct3D接口,一举将3DFX苦心经营多年的Glide3D接口灰飞烟灭。

微软在退出OpenGL组织之后,Direct3D也以迅雷不及掩耳之势成为3D接口的绝对主流,甚至OpenGL的前途也因此变得黯淡无光。

对于显示芯片厂商而言,在开发芯片时就得遵循一个DirectX版本。

DirectX经历了多个版本,从最早的DirectX到最新的DirectX9,每一个版本的出现都会导致一大批支持该新版本DirectX的新游戏出现。

但是真正让DirectX开始引人瞩目的版本是6.0,这也是3D游戏真正进入发展高峰的时期。

1、DirectX6.0时代

  3D显卡借助DirectX6.0技术而展开第一轮激烈的竞争,当时主要代表显卡是nVIDIA的RivaTNT系列以及3DFX的Voodoo3系列。

DirectX6.0的特色在于可以渲染出高分辨率下的32位色的3D效果,这也是当时GPU所最为追求的功能。

然而坚持采用16位色彩渲染并且排斥AGP总线技术的Voodoo3系列败下阵来,而nVIDIA一开始就使用先进的AGP总线结构与32位色彩渲染,高规格与新技术奠定新的王朝。

让S3TC技术大放异彩的《虚幻竞技场》

  除了高分辨率渲染,DirectX6.0的另外一大特色便是支持标准纹理压缩算法,微软公司从S3公司(先已经被VIA收购)取得S3TC授权并将其加入DirectX6.0。

对于当时的3D游戏而言,如何提纹理效果是一件很头疼的事情,因为与之相配套的3D显卡在性能上无法满足大量纹理的需求,此时使用压缩技术自然是一条捷径。

通过纹理压缩技术,3D游戏可以使用更大的纹理贴图。

当纹理较小时,物体的表面会显得模糊或呈马赛克状,较大的纹理可以让物体表面表现出更多细节。

纹理压缩也可以让更多的纹理贴图同时使用,使场景更加丰富多彩。

当纹理的容量超出本地帧缓冲区时,压缩省下的空间可以用来增加显示分辨率或用作第三缓冲区。

更高分辨率的显示可以使图像看起来更加平滑和细致,第三缓冲区可以大幅度提高性能,因为渲染引擎可以更早开始处理数据而不必等待下一次显示卡的垂直回扫周期。

如果要直观地理解,大家可以使用《古墓丽影III》这款游戏,对比第一代《古墓丽影》,纹理压缩压缩技术的确使整体画面效果有了很大幅度的提高。

  2、DirectX7.0时代

  DirectX7.0的发布又一次把显卡市场进行重新整合,DirectX7.0最大的特色就是支持T&L,中文名称是“坐标转换和光源”,这也成就了nVIDIAGeForce256与ATiRadeon256的辉煌,令3DFX彻底退出市场竞争。

3D游戏中的任何一个物体都有一个坐标,当此物体运动时,它的坐标发生变化,这指的就是坐标转换。

3D游戏中除了场景与物体还需要灯光,没有灯光就没有3D物体的表现,无论是实时3D游戏还是3D影像渲染,加上灯光的3D渲染是最消耗资源的。

在T&L问世之前,位置转换和灯光都需要CPU来计算,CPU速度越快,游戏表现越流畅。

使用了T&L功能后,这两种效果的计算用显卡的GPU来计算,这样就可以把CPU从繁忙的劳动中解脱出来,让CPU做他该作的事情,比如逻辑运算、数据计算等等。

GPU与CPU功能对比

  换句话说,拥有T&L显示卡,使用DirectX7.0,即使没有高速的CPU,同样能能流畅地跑3D游戏。

T&L成为当时人们关注的焦点,第一款支持T&L功能的显卡是GeForce256,随后发布的GeForce2与Radeon7500基本上可以说是提速版本,除了速度快了很多以外,其他没有技术上的提升。

然而DirectX7.0的发布却成了Voodoo系列显卡的噩耗,正式结束了一个王朝时代。

3、DirectX8.0时代

  DirectX8.0又一次引领了一场显卡革命,它首次引入了“像素渲染”概念,同时具备顶点渲染引擎VertexShader与顶点渲染引擎PixelShader,反映在特效上就是动态光影效果。

通过VertexShader和PixelShader的渲染,可以很容易的营造出真实的水面动态波纹光影效果,从而令3D游戏画面质量得到史无前例的提高。

  然而DirectX8.0的普及之路并不顺畅,这与巨大的成本压力有着很大关系。

nVIDIA的GeForce3Ti系列迟迟未能在主流市场普及,而后续升级到DirectX8.1的GeForce4Ti4200以及Radeon8500系列也在成本上差强人意。

从2001年年初发布DirectX8.0开始,这项技术直到2003年年末才得到普及,甚至至今仍是市场占有率No.1的GeForce4MX系列仍旧不支持DirectX8.0!

  

  完全支持DirectX8.0/8.1的显卡拥有一个完全可编程的GPU,完全支持T&L、VertexShader和PixelShader(像素渲染),以及环境映射贴图、四重纹理贴图和更为成熟的全屏抗锯齿引擎。

DirectX8.0/8.1到底在游戏中能够给我们带来什么,是不是真的有那么大的差异呢?

下面,我们就用几个实际游戏中的截图来给大家说明。

《WillRock》效果对比

此图片可点击放大

  首先是《WillRock》,在这款游戏中,运用的VertexShader1.1和PixelShader1.3并不多,但是我们还是能够看出两代DirectX之间的差别,特别是图中画圈的部分。

《上古卷轴-晨风》效果对比

此图片可点击放大

  在《上古卷轴-晨风》这款游戏中,DirectX7与DirectX8之间的差距更为明显,不仅水面的贴图效果天壤地别,就连画面的整体细腻度也不在一个层次。

目前绝大多数的主流游戏都是基于DirectX8.0/8.1架构开发而成,甚至于一些网络3D游戏也开始采用这一架构建模开发。

通过DirectX8.0/8.1中PixelShader与VertexShader的渲染,可以很容易地营造出真实的水面动态波纹光影效果。

如果你的显卡没有硬件支持DirectX8.0/8.1,自然无法体验如此出色的游戏世界。

  4、DirectX9.0时代

  DirectX9.0是当前最新的版本,其主要特色在于提升了VertexShader和PixelShader的版本,从而展现出更为强大的性能。

DirectX9.0中还包含了NURBS和DisplacementMapping(置换式贴图)这两项关键的技术。

NURBS在3Dmax中是很常见的,但是运用到3D游戏后,我们所看到的画面将更加接近真实。

简单地说,NURBS就是专门做曲面物体的一种造型方法,可以用它做出各种复杂的曲面造型和表现特殊的效果,如人的皮肤,面貌或流线型的跑车等。

而DisplacementMapping技术借助在平面的多边形上加上一些数据,可以帮材质加上深浅高低的轮廓视觉效果。

总体而言,DirectX9.0是对于DirectX8.1版本的补充,出现这一现象是因为3D显卡技术的发展滞后于DirectX接口。

  GeForceFX5950U与Radeon9800XT都能够支持DirectX9.0,我们却能发现奇怪的一幕:

在大多数基于DirectX8.1的游戏中,两者的差距微乎其微,而在执行DirectX9.0游戏时,Radeon9800XT具有明显的优势。

不仅如此,ATi旗下的Radeon9600系列也具有类似的优势,令nVIDIA的GeForce5700/5600系列受到很大的打击。

从官方公布的消息来看,GeForceFX5950U与Radeon9800XT在DirectX9.0执行方面存在一定的差异,这甚至是导致性能差距的重要原因。

尽管两者都是支持PixelShader2.0与VertexShader2.0,但是渲染精度、指令数量、Shader长度等都不相同。

然而这并不是造成性能差异的关键因素。

目前普遍流传着这样的小道消息:

nVIDIA势力的日益壮大以及在接口开发方面的垄断行为令微软非常恼怒,此前甚至传出nVIDIA退出DirectX9.0制定小组。

正所谓无风不起浪,这至少证明nVIDIA与微软的关系大不如前。

众所周知,目前PixelShader与VertexShader都只能在Direct3D接口下应用,退出OpenGL组织的Microsoft一心想彻底淘汰OpenGL接口,而且已经基本实现。

在这种情况下,nVIDIA的境地自然非常不利,很可能在面对新一轮3.0版本PixelShader以及VertexShader竞争时处于下风。

更为蹊跷的是,ATi研发小组还拥有原本负责制定DirectX标准的前微软成员,种种事实表明ATi很可能在DirectX9.0应用中占到一些便宜,这也是令nVIDIA最为尴尬的。

图形芯片技术发展到如今这一阶段已经离不开API的支持,而这个例子更能证明这种观点。

5、准第十代技术:

DirectX9.0c

  从技术角度来看,DirectX9.0c相对于Direct9.0b还是有着很多的变化,不过Microsoft对于版本提升相当谨慎,因此很多用户都将DirectX9.0c称作为准DirectX10。

在DirectX9.0c架构中,最终要的改进便是引入3.0版本的Pixel/VertexShader,并且支持ATi的3Dc纹理压缩技术。

客观来说,在目前的游戏引擎中,PixelShader3.0与PixelShader2.0几乎画质相同,3.0版本只是起到提升性能的目的。

事实上PixelShader3.0对于游戏编程人员的意义更大,它支持无限代码长度的程序处理,提供新的分支指令,能够轻松调用子程序,让编程更为轻松,效率提升显著,这对程序员来讲是一大喜事。

3.0版本PixelShader效果提升对比

此图片可点击放大

  VertexShader3.0加入了if/then/else描述语句,为描影程序加入子程序,同样也突破了65000行的程序数量限制。

支持顶点纹理后,程序员可以随时控制顶点,这些动态顶点操作可是DirectX9.0c最激动人心的变化,它带来了极强的多边形粒子系统和硬件几何变形能力,几乎就可以直接生成游戏中的特效了。

此外,VertexShader3.0提供了一些3D建模的实例程序,程序员只需调用这些原有的程序就能快速生成所需要的3D物体,跳过CPU→GPU的处理过程,显著节省计算时间。

  如果说PixelShader3.0与VertexShader3.0都是用于简化编程操作,那么ATi的3Dc纹理压缩技术则不全然如此。

以前厂商们常用的纹理压缩技术主要有S3TC和DXTC(DXTC其实也属于S3TC,微软将S3TC纳入DirectX标准后进行了重新命名)两种。

但随着可编程PixelShader技术的应用,纹理渲染方式也出现多样化,原有的DXTC压缩算法已经不能进行很好的压缩处理,如以往的压缩方案造成的不连续会使得物体表面出现闪光或跳跃性光照效果。

这时我们需要一种新的压缩技术出现,来提升画质和降低显存带宽的损耗,因此ATi推出了3Dc技术,一种全新的纹理压缩技术。

3Dc技术主要用于解决原有DXTC无法完成的工作,它将多个数据片封存入一个压缩纹理中,对于每一个部分只需要用2个标准矢量来存储。

也正是看到了3Dc技术的先进性,Microsoft将其融入到DirectX9.0c,未来将会得到更为普及的应用。

三、深入浅出:

显卡的工作原理

  从最初简单的显示功能到如今疯狂的3D速度,显卡的面貌可谓沧海变桑田。

无论是速度、画质,还是接口类型、视频功能,显卡在这几十年的革新还是相当迅猛的。

尽管显卡经过多年的演变已经今非昔比,但是其内在的工作原理还是保持不变,这也是PC最大的特色,即历代产品都保持极佳的向下兼容性,力求在发展过程中避免重大的变革。

  1、显卡中的数据传输

  在PC发展的初期,我们对于显卡并没有太高的性能要求,只要做到基本的显示功能即可。

通过ISA或者EISA等总线,显卡可以获取需要显示的相关信息数据。

不过,这些信息数并未经过处理,因此需要使用显卡的芯片进行加工,这一单元发展到后期就成了GPU。

尽管当时显卡处理的数据量并不大,但是缓冲区还是必不可少的,否则连基本的2D显示功能都将无法实现。

  显示芯片处理完的资料会全部传送到显存,然后进入极为关键的RAMDAC单元(DigitalAnalogConverter)。

RAMDAC单元所需要完成的任务便是数模转换,因为显卡芯片处理的是数字信息,而普通CRT显示器接收的都是模拟信息,所以这一步是必不可少的。

RAMDAC的转换速率以MHz表示,它还决定了刷新频率的高低,其工作速度越高,频带越宽,高分辨率时的画面质量越好.该数值决定了在足够的显存下,显卡最高支持的分辨率和刷新率。

如果要在1024×768的分辨率下达到85Hz的分辨率,RAMDAC的速率至少是1024×768×85×1.344(折算系数)/106=90MHz。

虽说如今显卡的RAMDAC都至少达到250MHz,但是这在几年前却是一个可望而不可即的数字。

  事实上,显卡技术发展初期的焦点并非是显示芯片,也不是RAMDAC,而是像夹心饼干一样的显存。

显示芯片与RAMDAC是两个非常忙碌的高速设备,而显存必须随时受它们两个差遣。

每一次当显示屏画面改变,显示芯片就必须更改显存里面的资料,而且这一动作是连续进行的。

同样的,RAMDAC也必须不断地读取显存上的资料,以维持画面的刷新。

分辨率越高,从芯片传到显存的资料也就越多,而RAMDAC从显存读取资料的速度就要更快才行,为此显存必须在容量以及速度方面达到一定的要求。

2、GPU工作结构

  3D游戏画面中的每一个物体,无论是游戏角色、墙、地板或是其它,其实都是由一定数目的三角形构成。

如图就是一个由多个三角形组成的3D图像。

此时的3D图像好比是绘画中的素描图,所有三角形的表面都是一种颜色,这样直接创建出来的3D物体肯定是不真实的。

因此就需要给3D模型的表面赋予各种色彩来让图像看上去更真实,而这是由我们常说的“纹理贴图”来完成的,纹理就像3D模型的皮肤一样。

其实材质和纹理的本质都是一样的,都是3D模型的“皮肤”,二者的区别是材质是为了模拟真实世界物体表面的质感,如物体的颜色、透明度、反光度和自发光以及粗糙程度等;纹理的作用是使物体表面呈现某种纹理和图案。

此图片可点击放大

  对于庞大的GPU架构而言,其核心任务便是现实贴图过程。

如图给大家展示的便是MatroxParhelia-512GPU的内部结构示意图。

笼统来看,我们可以将GPU内部分为七大部分:

用户基本画面显示的2D引擎、DVD解码等视频功能引擎、包含抗锯齿等技术的3D引擎、VertexShader引擎、PixelShader引擎、显存连接通道以及外部总线接口。

  毫无疑问,目前复杂度最高的当数3D引擎、VertexShader引擎和PixelShader引擎,很多新技术都是围绕这三点进行开发。

对于DirectX6.0时代的显卡而言,DVD解码等视频功能引擎才刚刚成形,甚至只能算是最初级的补偿单元。

而即便是DirectX7.0时代的显卡,VertexShader引擎和PixelShader引擎也全部空缺,仅仅在3D引擎上进行加强。

到了DirectX8.0时代,VertexShader引擎和PixelShader引擎开始流行,但是以S3Xabre为代表的部分产品只有PixelShader引擎,而没有真正的VertexShader引擎。

至于最近的DirectX9.0时代显卡,基本上具备完整的七个单元,而且不仅仅是在上述三个部分已经发展完善,少数高端产品同时还引入MPEG4视频编码解码来丰富视频功能引擎,并使用AGP8X/PCIExpress加强外部总线接口,或者拓展显存连接通道。

  目前3D游戏向着速度与画质这两个方向发展,而正如我们前面所说,像素填充率就是速度的基本保证。

至于画质,提高贴图质量自然是根本,因此各种像素渲染器应运而生。

此外,提高贴图质量又会对像素填充率、显存带宽、外部接口等提出进一步的高要求,此时显卡芯片厂商又再次运用各种技术进行优化。

万变不离其宗的是,所有的技术都是为了弥补画质提高而给速度带来的损失。

四、探询根本:

哪些因素决定GPU性能

  了解了3D显卡的工作原理之后,我们自然对哪些因素决定显卡性能产生很大的兴趣。

根据上述对显卡贴图过程的分析,我们不难得出这样的结论:

除了像素填充率,VertexShader和PixelShader引擎、显存技术以及抗锯齿算法都是相当重要的。

  1、像素填充率  

  正如我们先前所说,像素填充率由GPU主频和渲染管道数量所决定,因此历代GPU都在这两方面不遗余力地努力。

如同CPU主频很难提高一样,GPU提高主频的愿望也受到客观因素的限制。

由于目前GPU为了集成VertexShader和PixelShader引擎而采用大量晶体管(往往占总数的一半以上),因此一旦提高主频就会导致发热量急剧增加,而且对于制作工艺也是严峻的考验。

为此,最新的NV40(GeForce6800Ultra)只有400MHz主频,而上一代产品GeForceFX5950Ultra居然达到475MHz,由此可见GPU提升主频的确十分困难。

为NV45代言的Nalu美人鱼以几百万三角形生成

  当主频难以提升之时,扩大渲染管道数量成为唯一的解决方案。

从GeForce时代开始,无论是nVIDIA还是ATi,几乎每一代新产品都要将渲染管道数量翻倍,如今已经发展到16条渲染管道。

在这一大趋势下,像素填充率得到前所未有的从容释放,从而为其它技术消耗大量像素填充率提供了保障。

目前民用市场代表高端产品的GeForceFX5900系列以及Radeon9800系列都具备8条渲染管道,GeForce6800Ultra与X800XT更是达到16条渲染管道,而与之对应的中端产品则进行简化,Radeon9600与GefroceFX5700/5600系列都只有4条渲染管道,这也是造成速度差距较大的重要原因。

  小技巧:

关注封装形式

  如果深入市场的话,我们会发现目前G

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 法学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1