王者归来性能翻番 GeForce6技术解析
编者按:在慢慢阅读本篇21页的文章之前,对于急于了解NVIDIA GeForce 6系列强劲性能到底如何的用户,您可以点击【这里】的跳转链接,抢先看看我们的预测试成绩。然后再回头细细品评全文,谢谢您的阅读。
今天,2004年4月14日,在蛰伏了太久太久之后,NVIDIA终于正式发布了万众期待的GeForce图形芯片的第6代产品,工业代号NV40的GeForce 6800系列图形芯片及其板卡。
北京时间4月14日,NVIDIA在美国正式发布了其最新高端的GeForce 6系列显卡——GeForce 6800标准版和Ultra版。NVIDIA方面表示,GeForce 6系列显卡具备众多新特性,其中包括更高速的整体设计架构、能够适应最新的各类软件标准、具备更高精度的编码/解码片上芯片,以及直接输出HDTV等支持未来应用的最新功能。
由于这款显示芯片非常引人瞩目,从它设计之初,各类相关的传言始终就没有停止过。我们也曾经多次报道过关于这款神秘的显示芯片的新闻,按照时间由近到远的倒叙,我们来简要回顾一下我们曾经的报道。
《NV40性能披露3DMark03成绩轻松突破12000》
《把你看得清清楚楚NV40“意想图”抢先看》
《惊人高功率NVIDIA NV40需要双插头供电》
《NV40 Logo释出正式名称敲定GeForce 6800》
……
和这个众人期待的NV40相关的消息实在太多太多,你可以通过点击【这里】的链接,看到我们“PCPOP-电脑时尚”所报道过的关于它的诸多内容。
GeForce 6800 Ultra要采取双接口取电了
如果说过去诸多日子的期待和盼望已经让DIY玩家们等得难以忍受,那么今天就让我们一起宣泄压抑已久的热情,一起来仔细看看这位归来的王者——NVIDIA GeForce 6800。<
NVIDIA GeForce 6系列图形芯片最引人注目的技术就是最新开发,NVIDIA独有的CineFX 3.0引擎了。
对于CineFX技术,大家可能对这个名字并不是很陌生。这一著名的引擎最初出现在NV30系列发布的时候。GeForce FX5800芯片上采用的就是第一代CineFX引擎。后来,NVIDIA推出FX5900和FX5700系列,伴随着这两者的问世,CineFX 2.0版本引擎也展现在了世人面前。而这次引人瞩目的GeForce 6系列GPU的发布,也同时顺理成章地把CineFX 3.0带到了人们的视线里。
NVIDIA为GeForce 6系列新设计的标志
那么,这个CineFX 3.0引擎究竟有什么特别,值得我们如此关注呢?我们先来看看CineFX 3.0的 技术要点。
首先,CineFX 3.0完全支持微软DirectX 9.0中的Shader Model 3.0,这个最新版本的Model包括大家非常熟悉的VertexShader 3.0以及PixelShader 3.0。这两种渲染技术自DX8时代就是人们所讨论的热点,而到今天也已经是第三代了。现在看来,这两个强力渲染技术还将成为未来游戏主要使用的热点技术,前途不可限量。
其次,CineFX 3.0完全支持最初由SGI提出的OpenGL 1.5版本。虽然现在OpenGL在日常应用中的地位正日益有被DirectX取代的迹象,但不可否认的是,这种传统的开放式图形编程语言仍然有着强大的生命力。它的高效简洁,仍然吸引着包括id Sofrware在内的诸多开发者为之着迷。
CineFX 3.0还支持微软的High-Level Shader Language(HLSL,高级渲染器语言)、OpenGL Shader Language(OpenGL渲染器语言)和NVIDIA自己开发的CG着色环境——能够让游戏编程人员轻易将DirectX和OpenGL结合起来的编程环境。现在,正在有更多的游戏开发者使用CG来协调工作,提高开发效率。<
首先我们先来谈一谈GeForce 6系列支持的DirectX 9.0中的VertexShader 3.0。
对于VertexShader,很多关心图形技术的朋友应该已经比较熟悉了,VertexShader直译过来是顶点着色器的意思。VertexShader的具体过程就是完全处理网格中的每一个顶点,而处理的过程则是由程序员预先通过编写好的程序来控制并实现。这个过程中,每个顶点的颜色、贴图坐标等信息都可以任意修改然后生成。
更形象一点的说明,这就像一个C语言函数,输入参数是一个顶点的位置、法线和颜色等,而输出过程可以由程序员自己控制确定。然后所有这些通过三角形插值计算后传到下一个函数——PixelShader去。至于如何处理输入信息,如何生成输出信息,都可以提前在这段程序中指定。
● 无限长度的顶点处理程序
在CineFX 3.0版本的VertexShader中,对于程序的长度已经没有了限制。这也就意味着程序员可以根据自己的需要任意编写渲染顶点用的程序,不必受原来的限制。
这里要额外说明几个问题。图形编程虽然属于高级语言,但是仍然需要生成类似于汇编语言的代码。在VertexShader 1.0中,对于最终的每个程序的代码长度,DirectX限制是128条。到了VertexShader 2.0中,程序的长度增加到了256条。
笔者之前在没有得到VertexShader信息的时候,曾经估计VertexShader 3.0指令的长度仍然会受到限制,但是将达到2.0版本的两倍,也就是512条。但现在看来我们低估了这些业界的开发精英们。3.0版本的VertexShader的确在这个方面是有质的提高,而且给了大家,特别是图形程序员一个大大的惊喜——长度无限了!
这点其实是非常重要的,因为如果在原来,程序员要利用VertexShader处理复杂的顶点信息,那么他在编程序的时候就需要受到旧版本VertexShader的限制。程序因此不能够写的太长,而需要分别的写成数个程序,然后在具体执行时,一个接一个的运行。这样的情况会造成程序在执行的时候,效率并不是很高,因为各个独立程序之间的切换,以及数据传输都要占掉很多资源。
如果Shader有长度限制,原来可能还需要把一些比较复杂的效果分成几种效果在最终进行组合,然后把模型分别用这些效果向屏幕的后备缓冲中绘制,这个过程会重复很多遍并叠加,这也导致效率降低。
而现在就好了,在新版本的VertexShader中,程序的长度不再受到限制,程序员可以通过写一个独立的程序来完成全部的操作。
这样的好处不言而明,运行一个单独的程序能够省掉中间的跳转的步骤,让程序运行的速度加快。<
任何学过计算机编程的朋友一定都非常熟悉编程中的流程图,“if、else、then”这些都是大家非常熟悉的控制程序流程的关键字。但是在图形编程当中,控制程序的流程却并不是那么方便。
但,这里我们的语气要再转折一次。过去图形编程中的种种不便,在VertexShader 3.0的控制之下变得轻松了太多——它提供了全新的程序流程控制的能力,而现在GeForce 6系列GPU正是提供了对3.0版本的完全支持。
在VertexShader 3.0中,开发人员可以得到额外的分支选择和各类循环的支持。开发者还能轻易的调用子程序,并能从子程序中获取返回值。这些现在看似简单的程序功能,却能大大地让程序执行效率显著提高,特别是在配合了前面我们讲到的“没有长度限制的程序体”以后,就能让编写图形程序更加的自由,让效率更加的提升。
最后,我们简要看一下新的程序流程包含的能力。
首先提供了一些新的指令,例如IFC/BREAKC、IF/BREAK/CALLNZ。这些指令大大丰富了程序开发者所拥有的功能,让过去需要用很多指令才能实现的效果变得轻而易举。
新版本渲染器提供一个统一的返回地址和地址寄存器的8级堆栈。这个堆栈能够帮助实现分支以及子程序的调用,另外还能够作为压栈和弹出地址的寄存器用。这又大大方便了开发人员的工作应用。
最后,VertexShader 3.0还提供了条件代码的选择。让用户掌握更多的流程权力。<
置换贴图(Displacement Mapping)这个名词我们也已经比较熟悉,它早已不是第一次出现在我们的文章中。这种技术在业界通常有两种叫法:CG美工通常称之为置换贴图,而游戏程序员通常称之为位移贴图。
我们知道,在游戏或者其他应用到3D图形技术的地方,建模的时候通常为了节省资源,并不能够将3D模型建得非常细致。一是建模的时候投入的精力会太多,二来更重要的是过多的多边形虽然使效果更细腻,但也会严重影响速度。
但是,享受3D图形的用户却是非常贪婪,因为他们不想面对一些直棱直角的方块来“享受”他们的3D游戏,而希望在电脑屏幕上见到真实生活中的拱顶,见到恐龙的皮肤是粗糙而多毛,他们更希望水面波光粼粼……那么如何形成更为细致的3D效果呢?这就需要使用贴图来实现。
我们这里要额外讨论置换贴图就是基于上述这些应用。那么置换贴图究竟是如何实现凹凸的感觉的呢?
置换贴图的过程就是按照一张灰度图(表示表面凹凸的高度)来给顶点沿着垂直表面的方向一个位移,产生真正的凹凸。这要求模型比较细致。某些情况下,这还需要结合N-Pach曲面等技术,实时把模型细化,然后再用贴图的方法将物体的贴图补上。
我们以一个恐龙的头部来作为例子给大家介绍。
仅仅有模型和贴图的恐龙
首先,我们看恐龙的头部。恐龙头部的3D模型并不是很复杂,整个头部圆滚滚的,简直就不像是恐龙,倒是有些像海豹的头部——特别是皮肤非常光滑。这样的效果自然是不能让消费者满意的,我们就需要找出一种巧妙的方法“骗过”您的眼睛,让您感觉到这就是一头实实在在的恐龙。
现在根据恐龙头部的细节生成一个凹凸细节的数据表,这个表仅仅是一个矩阵类型的数据,所以就要比真正的复杂的3D模型的数据量小的多得多。
接下来,我们把这个数据传给图形芯片。图形芯片内部的引擎将这个数据附加在恐龙头部的表面。根据矩阵中的每个元素置决定每个点的高度,实现3D效果。注意,这是3D模型中的点,而不是最后显示成为2D的像素
使用置换贴图的恐龙
最后,我们再把最初的恐龙头部贴图贴上,就成为一个栩栩如生的恐龙头了。
以往实现这样的效果并不是采用针对顶点实现的,而是通过每个像素来完成——这就是我们熟悉的凹凸贴图技术。
大家可能还记得在Matrox当初推出G400的时候,其中有一项技术就是凹凸贴图。这种技术和刚刚介绍的置换贴图不同,它不改变模型,而是靠按照凹凸参数和光源方向来计算表面的亮度,从而最终模拟出凹凸的效果。<
顶点着色器复用流分频器(Vertex Frequency Stream Divider)听起来很玄乎的名字。我想大家一定看过《指环王》三部曲了吧,其中大量的军队就是利用电脑数码复制来实现的。
真正在做动画的时候,不可能将每个半兽人的模型都完全建立出来,但是我们却在电影中看到了一支栩栩如生的军队。那是因为每个模型虽然一样,但是运动的方式却并不完全相同。这些各自变化着的动作,使人们在看电影的时候宛如真的面对一支庞大部队的千军万马——这可不能塑造成国庆大典上整齐的礼兵队,反而看上去不真实了。
NVIDIA GeForce 6系列GPU支持的VertexShader 3.0中就有一项技术是用来实现上述这种宏大效果的,这就是顶点着色器复用流分频器(Vertex Frequency Stream Divider),这个技术能够实现相同模型的不同动作,让大批量的模型显得是形态各异。
复杂的场景再也不是电影的专利
程序员可以预先设定不同的运动参数,然后分别赋值给任何一个单独的模型。在程序运行的时候就能实现《指环王》中,兽人军队的出征的效果。
在这样的特效支持中,笔者相信采用大量模型的游戏就会随后推出,到时候在实时的3D游戏中享受电影般宏伟的效果再也不是梦想了。<
说完了VertexShader 3.0,就该接着说说和它齐名的另一项技术——PixelShader 3.0。自从微软的DirectX中把Shader Model推到前台,这两个技术就从未分开过。
和VertexShader处理顶点数据不同,PixelShader(像素着色器)处理的是每个像素的数据,也就是最后生成2D图像以后的工作。所以PixelShader是3D图形中最后的步骤。
GeForce 6系列GPU中带来的CineFX 3.0引擎提供了对PixelShader 3.0的支持,将像素着色的精度提高到了32位,而且GeForce 6系列GPU提供了原生的32位像素处理能力。
● 无限长度的像素处理程序
我们前面在介绍VertexShader 3.0的时候就提到了这点。第3代CineFX支持的PixelShader 3.0中同样不再限制像素着色程序的长度。
据现在发布的情况看,原来像素着色器每个程序要求的最大长度为96条指令,而现在程序员们就可以根据自己的需要任意加长程序长度了。
这其中的好处,基本上和前面我们提到的一样。首先是能够实现更复杂的特效,然后更能免除在程序调用上的资源浪费,而且能够用一个程序实现原来多个程序的功能,让效率得到明显增加。
● 动态程序流程控制
在程序长度不再受限制的同时,PixelShader 3.0也同样增强了程序流程控制方面的功能。
新的PixelShader 3.0完全支持子程序、循环和分支的程序流程,提供了循环计数寄存器和条件码的支持,还提供了一个新的back/face寄存器,给与了程序员完整的控制能力。
● 灵活的数据类型支持
CineFX 3.0支持自由的数据类型的使用,也就是程序员可以自由的选择使用16位或者是32位浮点数据来存储操作数据。虽然这两种数据类型的使用并不会对性能造成影响,但是32位浮点模式需要占用更多的存储空间。
支持16位浮点操作数的另外一点原因,就是在电影行业的数码处理中使用的是这一标准,通用的数据类型能够让电影和CG制作人员轻易兼容使用。<
● 多渲染目标(Multiple Render Targets)
GeForce 6系列图形芯片支持的PixelShader 3.0中还支持一种较新的技术,我们要额外放在这一页来简要介绍。这就是多渲染目标(MRT)技术。
这种技术的作用就是将每像素的数据保存到不同的缓冲区当中。这样的好处就是这些缓冲区数据由此可以成为照片级光照效果着色器的参数。
在这种方法的帮助下,光照可以在所有几何图形被渲染以后最后进行应用,不再需要进行多步的渲染。因而这种技术也可以被称为延期着色(Deferred Shading)。存储在这种类型的表面中的数据可以包括位置、法线、颜色以及材质的信息。
我们来看一个MRT技术用于产生一个高动态范围的场景的实例。
在第一个渲染步骤,开发者创造出3个输出缓冲区,这包括:1个颜色的贴图、1个法线的贴图和1个深度的贴图。
在第二个步骤,使用法线和深度贴图结合光照条件计算出光照。然后,场景在带有颜色贴图的情况下被精确地照明。
最后在第三个步骤中,超过0~1范围的超高亮度的光线值被带入场景中,计算包含高亮度像素附近的像素的发光。这个步骤产生出难以置信的发光效果。<
● 额外的视觉效果
CineFX 3.0增强的性能和新技术使得程序员们能够创造出与以往不同的特征和效果,除了前面谈到一些要点外,这些新的增强还包括如下内容。
◎ 次表面散射
皮肤和表面呈现出深度感,光线随着深度产生变化,这就可以表现出非常逼真的半透明效果。
◎ 柔和阴影
这个技术使得阴影不会显得很刺眼。场景中由光线和物体阴影构成的边沿,看上去很柔和,因此更精确地表现出实际的状况。
◎ 环境和地面阴影
阴影可以投射到周围环境表面上,诸如草或者其他植物上,不再会有眼睛可见的异常或者影响性能。32位流水线允许地面阴影精确地随着观察点的移动而移动。
◎ 全局照明(Global Illumination)
预渲染和实时渲染之间一个最主要的区别就是光照。要产生尽可能逼真的图像效果,电影渲染工具通常需要花费以小时计的时间来确定场景中光线在物体之间反射的情况。
由于支持接近无限长度的像素着色器程序,以及浮点格式的滤波以及颜色混合,这些难以置信的复杂效果可以以接近实时地完成,因此给实时的应用程序带来更接近照片级质量的效果。<
当显卡性能发展到一个阶段后,几乎所有的厂家都会开始更多地关注画质。
我们已经了解到GeForce 6系列图形芯片支持的CineFX 3.0引擎的一些技术,如果说这些全都是性能方面的新增长点的话,那么GeForce 6系列图形芯片还提供了更加完美的画质方面的提高。
NVIDIA的GeForce 6系列图形处理单元(GPU)将高品质图像的性能和精度推向更高的层次,让开发人员能够借助GeForce 6图形芯片的强大威力创造出更加真实的画面。
魔幻风格的包装预示着魔幻般的效果
◎ 新一代的NVIDIA的图形芯片采用了创新的超标量架构,可以支持在一个周期内处理更多操作数,避免了在图像质量和速度之间的矛盾,并且大大提升了图形效果的标准。
◎ 在完全支持32位浮点的整个流水线的驱动下,GeForce 6系列GPU提供的完整128位颜色给电影般的图像效果带来了可能性。
◎ 程序员可以工作在更具有存储效率的16位格式,而当场景需要最干净、最高的视觉冲击效果的时候,又能轻易地转换到完整精度。
◎ 新的NVIDIA扩展高动态范围(High-Precision Dynamic-Range,HPDR)技术是GeForce 6系列架构的一部分,它基于Industrial Light & Magic OpenEXR标准,但更进一步提升了静态和动态图像品质。具有了NVIDIA HPDR 技术后,影像中的物体运动会变得更流畅,纹理细节也会更精细。
◎ GeForce 6系列产品还包含了新的旋转栅格(Rotated-Grid)反锯齿系统,它使得显卡有更精确的像素颜色表现,使得多边形边沿更清晰、精确和平滑。<
● 超标量设计
超标量设计,这个技术名词我们其实早就听说过,不过都是在一些关于处理器的信息中看到的,而对于显示芯片,采用超标量设计才是比较新的一种方式。
作为超标量设计,其实就是在一个时钟周期内完成多个操作,从而实现性能的翻倍。为了更好的解释问题,我们先来看看传统的着色器。
没有采用超标量设计
我们看到,在这样的情况下,整个着色单元拥有一个像素着色单元,由于每个单元的处理能力是4个操作,所以每一个时钟周期能够完成4个操作。
采用超标量设计
我们再来看看采用了超标量设计的GeForce 6系列图形芯片的着色器。它拥有了第2组着色器单元,每个周期能完成两倍的像素操作,也就是8个操作。
凭借两组着色器单元,GeForce 6系列图形芯片的体系架构可以支持真正的并行双路处理,也就是在不同的着色器单元上同时执行两条指令。
有些体系架构也会尝试采用非超标量的单着色器架构来实现单周期双指令执行。然而这种体系架构和我们今天介绍的GeForce 6系列图形芯片拥有的架构却完全不同,因为它们在完成着色的方式上的区别是非常大的。
传统的架构(左)对NVIDIA超标量架构(右)
对于单着色器架构,只有两条指令在同一个着色器单元上执行,并且两条指令必须作用于同一像素或者全部字段的分量上。
而在GeForce 6系列图形芯片的体系架构上,我们能在像素分量上实现更多的总算术计算的吞吐量。在每个周期里,双着色器单元能在每个周期执行4条指令,相当于每个像素能进行了8个操作。
● 全32位浮点处理
GeForce架构始终允许游戏开发人员可以为每个画面或者场景选择所需的精度级别。随着GeForce 6系列图形芯片正式支持32位精度,现在开发者的选择更简单了,因为使用全32位浮点精度的时候会造成性能降低的问题已经消除了。
开发人员依然能在优先考虑内存空间利用率的时候使用16位模式,但是他们能够在需要更加精细的画质以及效果的时候采用32位精度。那样就能够做出效果更为出众的图像,而用户也将体验到更丰富、更绚丽的画面,游戏开发人员也能够以此让自己的作品获得更好的评价。<
● NVIDIA HPDR技术
我们在这一部分开篇的时候就提到了NVIDIA的HPDR技术,这一技术的全称是High-Precision Dynamic-Range,说明白就是让颜色更加丰富的一种技术。说到这里可能有些朋友会产生疑问:系统支持的颜色不就是32位么,要那么精确的颜色也显示不出来。
我们知道,在电脑上显示颜色并不能够显示所有的颜色,因为自然界中的颜色是无数的。人们将自然界中的颜色总结以后以红绿蓝三原色的结合来表示,为了表现亮度,又加入了Alpha值作为亮度的表现。
我们电脑上能够显示的颜色目前是红、绿、蓝、Alpha等4个通道,每个通道8bit,也就是每个通道上2^8=256种颜色,存储一种颜色就需要4个8bit的空间,也就是32bit的空间。
然而,在实际的图形处理中这样的精度仍然是不够的,随着图形的运算,其中颜色的部分也将产生变化,那么这就不能保证变化以后仍然是标准的每个通道256个颜色值中的一个了,势必会有非整数的颜色值产生。在存这个数据的时候就不免涉及到取整的操作,经过多次的运算,最终产生积累误差,造成图像色彩细节的丢失。
那么如何解决这个问题呢?NVIDIA的GeForce 6图形芯片就提供了一种解决问题的方案,就是在运算的过程中采用了精确度更高的高精度浮点值来存储颜色。传统的用来存储颜色的32位寄存器因此就不够用了,GeForce 6系列图形芯片会自动采用更大的非标准寄存器来存储颜色数据。只是在最后显示的步骤再转换成标准的颜色数据。
采用这种技术的好处就是能够让图像中的细节始终保持很高的水平,我们来看一张截图:
在这个HDR光照的示例中,白光范围非常亮,而下方大理石板的暗部细节依然保持完好。
我们注意到,这张图中的亮度变化比较大,但是如果注意暗的地方的话,我们可以看到:暗部的大理石的细节保持的非常好,而不想我们之前经常能够见到的有所不同。因为在这样有高亮的光源的环境中,为了形成相应的对比,暗部的细节会在对比下而有所损失。
GeForce 6系列架构提供了NVIDIA HPDR技术,能达成实现强大高动态范围的渲染技术的需求。NVIDIA EXR在着色渲染、混合渲染以及滤波操作的时候都提供了广泛的数据精度,改善包括静态和动态的画面效果。
结合NVIDIA EXR技术,高动态范围渲染就能够高效、漂亮地执行。渲染任务可以分为为3个环节——光传递、光调影射、色彩及伽玛纠正。
接下来我们分别再来看看这3个过程。<
● 光传递
首先我们来看看光传递(Light Transport)。我们先来理解一下这个过程。首先我们知道只有光线照在物体表面,然后反射到眼睛里以后才能看见,然而我们会发现在现实生活中,即使在阴影中的物体我们依然能够看到,这就是因为虽然没有直射的光线照在上面,但是从别的物体上的反射光依然能够照射到它,再反射到我们的眼睛里。
实际场景中的光线反射是相当复杂的:光线不断的被反射,最终让整个场景中都充满了或明或暗的光线。光线在物体间不断的反射也就是光传递的实质。
然而在计算机中需要模拟真实的效果却非常麻烦了,因为实际情况的数据量是无限大的。如果需要计算光线在场景中的不断的反射情况,就势必需要处理大量的光线数据,这其中包括几何位置、贴图映射、光源位置、光的反射率等必不可少的众多繁杂信息。
这些数据的数据类型是没有要求的,这也就意味着采用越高的精度来存储数据,就能够表示越高的动态范围,到最后就能显示出越高的细节,让用户看到丰富真实的细节。
NVIDIA的GeForce 6系列的支持的HPDR技术,遵循了和OpenEXR标准一致的一种名为SM10e5的编码方法来存储光线的数据,这种数据格式包含了1个符号位、10位尾数以及5位指数,用来反映光传递的信息。
这种编码方法表示的数据的表达式是根据要求动态范围的不同而不同的,我们来看看这种SM10e5编码的表达式。
● 色调映射
接下来的过程是光照传递相位的输出数据会被映射为二维影像的颜色值和操作指令。这样的处理被称作色调映射。
● 色彩及伽马纠正
在最后阶段,就是色彩及伽马纠正,把这些色彩数值从一个标准的红、绿蓝“色彩空间”转换为显示器的红、绿、蓝“色彩空间”。
另外,伽马纠正会被后期应用,因此在转换到最终显示设备的处理过程中,需要对色彩强度的对数微分进行计算。
动态高范围技术(HPDR)渲染效果就是对存储高精度色彩信息的一个最好应用。在渲染场景时,计算结果首先以高亮度差、高精度的浮点颜色保存在一个离屏表面(Off Screen Surface)中。然后,通过最终的色调映射过程,将这些颜色转换到在屏幕上显示的颜色范围内。这不仅能够使颜色效果显得更丰富、更柔和,还能实现一些类似于瞳孔在不同强度的环境光条件下自动调节大小以调整亮度的效果。<
● NVIDIA EXR GPU需求
为了实现这种渲染方式,GPU必须具备浮点精度的着色、混合、滤波以及贴图功能。而最重要的是,还必须有能力把这些色彩数据以原有精度(或近似原有精度)存储起来。因为只有这样,浮点数据的对数特性能够被保存起来。如果中间处理的结果仍以每象素256级别存储,那么GPU所具备的一切浮点颜色处理都等于是白费。
● 浮点着色
正如前面提及的,32位着色是GeForce 6系列GPU的原生操作模式,着色操作能够以最高的速度执行,同时保持最高的精度。也就是说在向表面输出颜色值时,GeForce 6系列天生就有极高的浮点精度。
● 浮点混合
混合操作是指把之前渲染的像素和给定位置的新近渲染像素进行结合。根据渲染的效果,这些数值会被混合为一个最终的色彩值。以前的混合都是从每通道256级别的贴图或屏幕缓冲中取出颜色,然后再进行混合。而现在更高的精度意味着像素混合的结果更加精确、品质更高。像运动模糊、柔和阴影以及需要对一个场景的多个动态光照计算进行累积,这些需要颜色混合的特效都能从浮点混合受益。
● 浮点滤波
滤波操作是指利用滤波器对像素操作,让场景中的对象看起来更锐利或者更平滑。在早期没有滤波效果的硬件上,场景中的贴图纹理会出现马赛克的感觉。
滤波主要包括双线性滤波和三线性滤波。当像素处于狭窄观察角度的时候,滤波同样能让画面品质起到锐化的作用(即各向异性滤波)。例如广阔地面的贴图,如果不使用各项异性滤波,在远处很可能出现模糊的现象。
其他的浮点滤波效果还包括了色调映射、光辉等,这些都是做高动态范围渲染所要求具备的功能。如果没有浮点滤波,对于颜色平滑过渡的纹理,很容易出现颜色像阶梯一样分布的结果,使效果大打折扣。此外,NVIDIA GeForce 6系列GPU还支持更高的精度级别和16倍的各向异性滤波。
● 浮点贴图
贴图操作是指对一个给定的多边形贴上一张纹理。原来的纹理像素色深最大是32位,每个颜色通道8位,而现在具备浮点贴图功能后,我们就能实现诸如全方位阴影映射(利用向接受阴影的物体投射阴影贴图实现柔和阴影效果)、景深效果(即影视作品里那种近处清楚、远处模糊或远处清楚、近处模糊的效果)以及光线追踪(如玻璃、金属的折射、反射)等独特的效果。
由于阴影贴图中保存的是物体与光源的距离信息,所以以前要保存这个信息,必须利用PixelShader将距离分发到RGBA等4个颜色通道中去(就好像数字7839,利用RGBA分别保存7、8、3、9,记住,每个通道只能保存0~255),最后恢复时再用7×1000+8×100+3×10+9)。
在每像素计算的情况下,这将带来极大的计算浪费。而现在,仅用一个浮点颜色通道就可以十分精确的记录这个距离信息,无需任何多余的转换!景深效果的道理也是一样。<
● 存储色彩
如前所述,GPU必须有能力把这些色彩数据以原有精度(或近似原有精度)存储起来。因为只有这样,浮点数据的对数特性才能够被保存起来。否则GPU所具备的一切浮点颜色处理都等于是白费。
GeForce 6 GPU通过OpenEXR、sRGB等颜色格式,提供了高精度的、含有指数表示(即将浮点数表示为0.3245×10^24)的颜色存储能力。这种能力将成为HDRI(高色彩范围渲染)技术中的关键一环——色调映射过程能够正确进行的保证。
表格1中我们给出了sRGB、OpenEXR的表达范围差别。OpenEXR为光线传递等计算提供了相当大的表达范围。不过对于任何存储和映射类型而言——例如那些在用于高动态范围渲染阶段的色调映射和色彩纠正——sRGB是更为明智的选择。
| Range | Precision | Storage* | Notes |
RGBE | 76.8 dB | 9-bit log | 189.8 Mb | Radiance- compressed 32-bit float |
32-Bit TIFF | 76.8 dB | 24-bit log | 759.4 Mb | IEEE-754 32-bit floating point |
OpenEXR | 12.0 dB | 11-bit log | 379.7 Mb | ILM-developed 16-bit floating point |
e-sRGB 12 | 4.6 dB | 12-bit poly | 213.6 Mb | Clamped at [–0.53..1.68] |
16-Bit int | 4.8 dB | 16-bit linear | 379.7 Mb | Clamped at [0..1] |
sRGB | 3.5 dB | 8-bit poly | 189.8 Mb | Clamped at [0..1] |
RGBA | 2.4 dB | 8-bit linear | 189.8 Mb | Clamped at [0..1] |
NVIDIA EXR技术解决了高动态范围渲染的难题。它提供了一种等同于专业摄影棚品质的16位浮点渲染格式,用于光线传递阶段的存储、混合、着色、贴图以及滤波操作。此外,NVIDIA EXR技术还允许在色调映射和伽马纠正阶段采用sRGB格式。
“对于电脑图形来说,正确地表现肉眼对真实世界感知的大范围色彩和光照,一直以来都是巨大的挑战。现在NVIDIA公司已经完全支持浮点贴图、浮点混合以及sRGB伽马纠正,在高动态范围渲染中再现精确的色彩和光照变得简单易用了。”NVIDIA的技术经理Herb Marselas如是说。
最让人叫绝的是,NVIDIA EXR技术是完全基于硬件执行的。无需像素着色器程序编码或者解码。对于程序员来说,这无疑是一个福音。此外,该技术已经在微软DirectX 9.0和OpenGL中获得支持,这意味着它日益成为一个公开的标准。<
● 旋转栅格抗锯齿
最新一代的NVIDIA GeForce GPU引入了一种旋转栅格抗锯齿取样算法。与以前的4点取样抗齿相比,基于像素的相同数量的取样样本,这种新的取样方式能以领先于业界的性能,提供显著增强的色彩精确性。
在此之前,每个像素的4个子像素取样点位于一个2×2的正规栅格样板内。透过些微地旋转4个子像素的栅格,这种新的抗锯齿方式就能提供相当于一个4×4菱形栅格的取样信息。以前的4个取样点,由于是呈正方形分布的,所以在每一行、每一列上存在两个重复的取样点。
这种重复性将导致相对来说取样范围的减小。而新的取样方式中,每个行/列上都有一个取样点,但是行数和列数相当于原来的2倍。这样就相对扩大了取样范围。这无疑是一种极为巧妙的技巧。在图片的范例中,请注意GeForce 6的子像素模板如何被旋转为菱形。
旋转栅格方式允许子像素更好地覆盖在水平方向和垂直方向上。在图片中您可以看到GeForce FX架构体系提供了两个垂直值和两个水平值的覆盖面,而GeForce 6的覆盖面提供了4个跨越水平和垂直子像素位置的值。这更多的覆盖面能为多边形边缘提供更高的色彩精确性。<
提起UltraShadow和Shadow Volume(阴影体积),可能大家耳熟但似乎不太明白。可如果我们提到DOOM3就形象多了——没有人不为其中逼近的影视质量的光影效果所折服。
但是目前的显示硬件在运行DOOM3时都显得有些力不从心。没关系,新的NVIDIA GeForce 6系列图形处理器引入了NVIDIA公司的UltraShadowⅡ技术,该技术加速了互动环境中阴影交集侦测的计算。
UltraShadowⅡ让开发人员在下一代游戏中引入更复杂的光照效果和高品质、影片级的真实感。届时这种技术将大大提高像DOOM3这种具有复杂光影效果的游戏的运行效率。
那么什么是UltraShadowⅡ呢?在介绍它之前,我们先来看一下在DOOM3等游戏中生成逼真阴影的原理。简单的说,就是将物体沿着光线的方向扩展成一个棱台,在棱台内的物体就是处于阴影中的物体。这个棱台就称为“阴影锥”或“阴影体积”。而如何判断物体是否在这个阴影锥内,就全靠一个称为“模板缓冲”(Stencil Buffer,也叫“蜡版缓冲”)。
它的原理就像蜡染中的蜡层一样,可以遮罩住屏幕上的任意区域,使得这些区域不被绘制。通过设置物体和阴影锥的深度,经过比较和一些运算,可以将要绘制的在阴影中物体对应于屏幕上的像素,利用蜡版缓冲遮罩住。
这样我们再通过一种称为“多遍绘制”(Multi-Pass Render)的机制,首先绘制阴影部分的物体的颜色,然后用蜡版缓冲将这些部分遮住,再绘制有光照的部分的颜色。对于每个光源都要做一次这样的操作,就可以实现精确阴影的效果。
UltraShadowⅡ可以在生成蜡版式阴影锥时,提供双倍的运算动力,让像素处理速度获得双倍的提升。对于开发人员来说这样的好处是免费、透明且无需额外编写代码的。GeForce 6硬件能透过这种新的较上一代提升4倍的阴影锥生成速度来实现这样的好处。<
此外,NVIDIA UltraShadowⅡ让编程人员透过消除不必要的区域运算,来实现更高速的计算阴影。由于以前模板阴影锥技术中不考虑光源和阴影的影响范围,所以有可能阴影后面,远处不在阴影中的部分也被加入处理过程中。这会带来象素填充的浪费。
结合UltraShadowⅡ技术,编程人员能够通过光源和阴影的范围,定义一个场景中的远近的界线区(通常称之为“深度界线”)。这个界线能够把计算限制在受光源影响的指定远近范围区域内。这样,整体的阴影生成处理就能够显著地获得加速。图片中表示出了我们定义的一个场景子区域,把光照和阴影的计算限制在每个光源作用的有效区域内。
在接下来的插图中,你可以看到使用UltraShadowⅡ技术,充分地降低需要被检查的阴影区域的大小和需要考虑的物体数量。UltraShadowⅡ透过去掉处在阴影中的像素(让硬件忽略不会作用于最终画面的阴影像素),切切实实地实现性能提升。
我们看这个DOOM3中的场景。
这些线是通过UltraShadowⅡ进行阴影和光照计算后,产生物体轮廓的阴影投射线,即阴影锥的棱边。
同样的图像,应用UltraShadowⅡ并将处理范围限制在一个远近界限区之内——生成较少的物体轮廓阴影投射线。
UltraShadowⅡ技术同样能和NVIDIA智能取样3.0版的技术完美配合,确保阴影边缘能获得正确抗锯齿效果,防止斑块或者锯齿观感。
有了GeForce 6系列GPU和UltraShadowⅡ技术,即将问世的下一代游戏例如DOOM3就能获得戏剧性的执行性能提升。同时通过UltraShadowⅡ实现的精确光影效果,也为游戏画面向影视级视觉效果进军作出了巨大贡献。<
现在的显示卡不仅要求有出色的3D图形性能和完美的游戏画质,支持更多应用,提供完善的功能也是非常必需的,而作为这些应用中最重要的就要算是视频解码了。
我们还记得在486/586的时代,一块能够看VCD的解压卡当时已经成为了多媒体电脑的标准配置,然而随着CPU的性能的增强,软解压逐渐占据了上风,硬解压卡逐渐被淘汰。
现在,随着视频压缩技术的不断进步,对解压视频的要求也越来越高,最典型的例子就是微软的WMV9视频压缩,它高达1080线的分辨率让很多强力电脑已经无法畅快播放。显卡内部集成解压功能的要求日益强烈。
GeForce 6800 Ultra号称整合了业界第一枚片载视频处理器(Video Processor,VP),具备了强大的可编程视频处理能力,能够接替大部分的视频编码操作,并且能够提供高品质的视频解码,支持广泛的视频编码格式和高带宽视频内容保护(HDCP)技术。
GeForce 6800 Ultra提供了强大的视频编码、解码支持,能够实现MPEG-2(标准分辨率以及高清晰分辨率)、MPEG-4(DiVX)、WMV9(标准分辨率和高清晰分辨率)的硬件编码和硬件解码。
GeForce 6800 Ultra的VP还提供了自适应消除场交错现象、高品质的缩放、伽马纠正、噪点降低、WMV9/H.264的运动补偿和色块消除的硬件支持,这些特性都能有效地降低CPU的运算负担,并且有效地提升画面品质。
在视频领域,GeForce 6800 Ultra的发展空间相当广阔,视频编辑软件如果搭配了GeForce 6图形芯片就能够实现相当高速的视频处理能力,日前,据称Adobe公司已经决定在其下一代视频处理软件《After Effect》中提供对GeForce 6800 Ultra的支持,大大提高在非编操作以及特效制作上的效率。 <
最后我们来看看GeForce 6800 Ultra显卡的具体规格。
| ATI Radeon 9800XT | NVIDIA GeForce FX5950 Ultra | NVIDIA GeForce 6800 Ultra |
核心名称 | R360 | NV38 | NV40 |
核心技术 [bit] | 256 | 256 | 256 |
制程 [μm] | 0.15 | 0.13 | 0.13 |
晶体管数量 | ~107 Million | 130 Million | 222 Million |
显存位宽 [bit] | 256 GDDR | 256 GDDR | 256 GDDR3 |
显存带宽 [GB/s] | 23.4 | 30.4 | 35.2 |
像素填充率 | 3.04 Gigapixel/s | - Texelrate (Color+Z): 1900 texel/s | 未知 |
最高FSAA 等级 | 6× | 4×/4×MS+2×SS | 4×/4×MS+2×SS |
三角形生成能力 | | | |
AGP总线 | 2×/4×/8× | 2×/4×/8× | 2×/4×/8× |
显存容量 | 256MB | 128/256MB | 128/256/512MB |
GPU 频率 | 412MHz | 475MHz | 400MHz |
显存频率 | 365MHz [730 DDR] | 475MHz [950 DDR] | 550MHz [1100 DDR] |
公板显存 | Hynix BGA specified for 400MHz | | Samsung 600MHz GDDR |
Vertex Shader数量 | 4 | FP Array | 6 Units |
像素着色管线 | 8×1 | 4×2/8×0 | 16×1/32×0 |
Textures per Texture Unit | 8 | 16 | 未知 |
Vertex Shader 版本 | 2 | 2.0 | 3.0 |
Pixel Shader 版本 | 2 | 2.0 | 3.0 |
DirectX 版本 | 9.0 | 9.0 | |
FSAA 方式 | MultiSampling | MultiSampling Mixed Mode | MultiSampling Mixed Mode |
显存优化 | Hyper Z Ⅲ+ | LMA Ⅱ Optimized | LMA Ⅲ Optimized |
Optmizations | SmartShader 2.1 | IntelliSample HCT | IntelliSample 3.0 |
显示输出 | 2 | 2 | 2 |
芯片内Ramdacs | 2×400MHz | 2×400MHz | 2×400MHz |
单颜色通道色深 | 10 | 10 | 10 |
其他 | TV Encoder On-Chip;FullStream | TV Encoder On-Chip;Extended Progammability | Video Processor and TV Encoder On-Chip;Extended Progammability |
发布售价 | $499 [当时价格] | $499 [当时价格] | $499 |
由于目前我们还没有拿到样卡,因此无法为大家拿出一个非常丰富的数据测试。但是我们从得到的资料中已经得知了一些GeForce 6800Ultra的测试数据。
我们针对上述数据,搭建了和NVIDIA测试GeForce 6800Ultra类似的一个平台,按照最相近的设置进行了简单的几项测试。
我们先来看看NVIDIA测试GeForce 6800Ultra的测试平台:
接下来是我们的测试平台。
硬件系统 | |
处 理 器 | Intel Pentium4 3.0GHz [800MHz FSB] |
主 板 | 华硕 P4P800 [865PE芯片组] |
硬 盘 | Seagate Barracuta Ⅴ 60GB |
内 存 | OCZ 256MB DDR400×2 |
显 示 器 | 爱国者 998FD |
电 源 | 鑫谷 400W P4 电源 |
驱动程序 | |
主板驱动 | Intel Chipset Inf |
显卡驱动 | ForceWare 60.72 催化剂 4.4 |
操作系统 | 英文Windows XP + SP1 |
值得注意的是,因为GeForce 6800Ultra的性能已经过于强大,所以在通常的测试过程中即使是目前最高端的CPU也成为了整个系统的瓶颈,所以我们按照NVIDIA的建议,将所有测试的分辨率均设置为1600×1200像素。
测试的成绩让在场的编辑瞠目结舌——GeForce 6800Ultra的性能已经强大到了能够将目前的最高端显卡远远胜出的境地,各项测试成绩要比GeForce FX5950 Ultra以及R9800XT高出100%以上。
罗马不是一天建成的,代号NV40的GeForce 6系列如此抢眼的表现更绝非偶然。早在NV30 完成芯片的物理设计之前,NV40的研发就早已结束了论证阶段,而顺利进入开发的中期。
到了2003年年初,NVIDIA对于NV40的性能已经得到了初步模拟的结果,在去年中期这款令人引颈的产品进入了样卡阶段。
2.22亿晶体管几乎撑爆了0.13μm的极限
历时18个月,前后投入10亿美元研发,GeForce 6终于气度不凡地向我们走来,惊人的16条像素流水线,2.22亿晶体管几乎撑爆了0.13μm的极限。就在这等同于4颗P4C晶体管总量的背后,确实更令人吃惊的成本控制——GeForce 6不会比FX5950U更昂贵太多。拜合作伙伴IBM顶尖的电路冗余技术所赐,GF6的自我纠错能力空前强大,这一切让我们有了面对“指环王”一般的敬畏感。
近期我们还将推出更为详尽的评测以及相关的专题页面,请随时关注本站的后续报道。<