NVIDIA将会于2004年4月21日(也就是本文发布的当天)在北京展览馆举行盛大的新的图形处理器的发布会。为了让广大读者对于这一系列新的图形芯片有较为深入的了解,我们特别刊发此文。
NVIDIA绝地反击
从2002年的7月17日开始,原本图形业中性能的座次出现了变化——NVIDIA多年来一直占据的性能王座被ATI的R300核心夺过去了。虽然此后nVIDIA迅速的发布了NV30图形芯片,而且指标和支持的特效等方面都要超过R300,但由于生产工艺和来自流水线管道设计的问题(4x2设计)使得其效率没有办法真正发挥出来。
DirectX 9 | R300 | NV30 | |
Vertex Shaders | 2.0 | 2.0 | 2.0+ |
最大指令数 | 1024 | 1024 | 65536 |
临时寄存器 | 12 | 12 | 16 |
最大循环数 | 4 | 4 | 256 |
Pixel Shaders | 2.0 | 2.0 | 2.0+ |
最大色彩指令数 | 64 | 64 | 1024 |
最大临时存储 | 12 | 12 | 64 |
在支持DirectX9.0的特效上面,NV30其实是远超R300的
于是在2002年的后半年,nVIDIA几乎没有什么强势产品可以对抗ATI的R300,只能靠古老的GeForce 4 Ti系列显示卡维系着中低端市场。时间到了2003年,nVIDIA推出了改进版本的NV35,这款产品比原来的NV30有一定的改进,同时引入了高级的256bit内存总线,不过由于4x2的设计让其在完全支持Directx 9.0设计的应用中依旧不敌ATI的R300。
不过时间推移到了2004年的4月,也就是在NV30发布的一年半时间以后,nVIDIA将会推出新一代的NV40图形核心,这将是nVIDIA用来再次夺回性能宝座的利器,同时也讲是全面反击ATI攻势的产品。
#$[*154585.jpg*#a*#0*#0*#center*]$#
支持SM3.0的CineFX 3.0
NV40可以说是全新的一代产品,增加了众多实用的功能,其中最重要的就是支持DirectX 9.0c规范中的Shader Model 3.0了。DirectX 9.0c中加入的新特性就是Pixel Shader(象素着色)和Vertex Shader(顶点着色)3.0,这个改进也使得DX 9.0c和小打小闹的DX 9.0a/b相比有了本质上的变化。Pixel Shader 3.0规范允许着色程序超过65000行,并支持动态流控制(分支),同时也需要相关硬件提供4个Multiple Render Targets(多重渲染对象,可以一次处理显存中多个着色操作)并提供完全的32位浮点精度、着色抗锯齿以及每个象素10个纹理坐标输入。
#$[*154589.gif*#Displacement Mapping贴图*#0*#0*#center*]$#
Pixel Shader 3.0最大的好处就是让开发人员可以使用更长、更复杂的着色程序,并提高运行效率。流控制更是使得开发人员可以编写更为高效而直接的代码。分支则使得着色程序增加了根据当前状态和输入对应处理的能力。Pixel Shader 3.0中要求的硬件支持多重渲染对象可以让开发人员可以用一个着色单元完成4个不同的着色操作,以树为例,运动的树叶、接近顶部的树枝、斑驳的树皮以及带有泥土的树根就可以一次完成,而不再需要使用多个单元。
#$[*154590.gif*#色彩缓冲(左)以及深度缓冲(右)*#500*#207*#center*]$#
#$[*154591.gif*#无场景信息的正常缓冲(左)以及添加场景信息的正常缓冲区和深度缓冲区(右)*#500*#207*#center*]$#
#$[*154594.gif*#色彩信息和图像信息重叠(左)以及最终生成的效果(右)*#0*#0*#center*]$#
Vertex Shader 3.0则通过“if/then/else”语句增加了流控制功能,并可以在着色程序中使用其他子程序。当然,VS 3.0中的指令行数限制也提高到了65000,并支持顶点纹理,允许更多的顶点动态操作。据称微软在下一代的DirectX中会引入顶点动态生成,那将给我们带来更加生动的体验。
Vertex Shader 3.0最酷的特性就是“Instancing”(实例)功能,基于同一个三维模型的不同物体可以同时进行处理,无需像现在这样将场景中每个模型进行构建并传入GPU中渲染,开发人员可以在一个顶点流中完成一个模型的不同“实例”。这些实例经过顶点着色单元转化和操作后将具有自己的特性。还以树为例,在Vertex Shader 3.0中开发人员就可以用一个模型通过顶点流生成整个树林,CPU以及总线占用将大为降低。
此外在CineFX 3.0中还增加以下的特效:
- Subsurface scattering(表面散布):这种特效可以表现出皮肤表面和深度的差别,真正实现渐变半透明效果。
#$[*154595.gif*#Subsurface scattering示例*#0*#0*#center*]$#
-
Soft shadows(阴影柔化):这种技术可以让阴影看起来不再僵硬,把更真实的阴影展现出来。
#$[*154601.gif*#阴影柔化的效果*#0*#0*#center*]$#
-
Environmental and ground shadows(环境表面阴影):真实的模拟环境变化以及地表变化后阴影的变化,这种技术让程序员可以实现更加逼真的环境阴影效果。
-
Global illumination(全体照明):真正的实现光源的变化,目前我们觉得3D画面最大的差别就是光阴不真实,而这种全新技术的添加,让计算机可以真正的模拟光照的变化,当光源强度,位置变化后,最终的阴影以及效果都会随之产生变化。
UltraShadow II技术
#$[*154602.jpg*#a*#0*#0*#center*]$#
UltraShadow技术最早出现在NV35显示核心中,其允许更快的阴影计算(主要是剔除不不要计算的阴影,从而提升处理速度),而新的UltraShadow II是原先技术的更新,nVIDIA宣称可以提供比原来快4倍的性能。UltraShadow II并不需要游戏支持就可以实现,但如果针对UltraShadow II优化的话,可以效率更高。
#$[*154603.jpg*#DOOM III截图*#0*#0*#center*]$#
#$[*154604.jpg*#以上是没有通过UltraShadow II技术所需要计算的线框数量*#0*#0*#center*]$#
#$[*154605.jpg*#使用UltraShadow II技术以后,可以大打降低显示卡的处理量*#0*#0*#center*]$#
NV40核心
NV40显示核心拥有空前的2.22亿个晶体管,几乎达到了0.13微米工艺的极限,这个容量是Intel Northwood核心Pentium 4处理器的3倍多,即使比新的Pentium 4至尊版处理器也要多出33%。在核心代工问题上,nVIDIA最终选择了IBM,之所以抛弃台积电,主要还是由于之前沸沸扬扬的减流水线问题。IBM拥有目前非常先进的芯片制造工艺,因此选择IBM就等于获得了更好的质量保证。
#$[*154609.jpg*#NV40显示核心采用FBGA封装的核心,40×40mm*#0*#0*#center*]$#
#$[*154618.jpg*#NV40的晶元,水平线上有16颗芯片,垂直线上有18颗左右*#0*#0*#center*]$#
nVidia没有公布NV40核心的大小,不过我们可以算出来:NV40是IBM采用0.13微米制程在300mm晶元上生产的,而采用同样方式的英特尔奔腾4EE核心是250平方毫米,所以通过数学计算,NV40的核心尺寸在270-305平方毫米之间。
由于晶体管数量的激增,NV40核心的功耗是相当高的。目前主流的显卡能耗几乎已经达到了一条电源通路所能提供的极限,所以能耗惊人的NV40也就自然的需要2个通路!因此在搭载NV40显示核心的显卡上具有2个独立的电源接口,接口来自两条独立的通路,并且不能负载其他设备。在NV40推出的时候,nVIDIA提供的推荐配置中就提到了要求测试用的电源功率在480W以上,特别nVIDIA还指出要给NV40提供一条稳定在12V电压通路。但是电源提供的12V通路大部分是给主板准备的,这无疑就减少了显示卡的适用性(nVIDIA推荐的规范是:+5V 40A +12V 24A +3.3V 32A)。在发热量问题上NV40控制的还可以,主要是因为核心频率并不是很高所导致的。
NV40的基本效率
前一代的NV3X让人不满的地方之一就是着色性能偏低,开发人员需要将代码正对NV3X架构进行充分的优化。NV3X的架构中有几个地方影响了着色性能,nVidia做出了一些改进。其中最主要的一个就是原先着色管线的前端有一个纹理单元和一个数学单元,指令的顺序有巨大的差异。为了修正这个问题,nVidia在顶点管线的前端又加入一个数学单元,使得纹理和数学指令不再需要交错处理,也使得NV40的数学性能比NV3X提高了1倍。同时顶点单元还是支持一个纹理指令和一个数学指令执行,性能提高的同时灵活性也没有放弃。
另一处改进则是对寄存器限制的。任何接触过编程的人都会感到在程序执行中缺少足够的寄存器来存储临时数据,而Shader 3.0中,Vertex Shader具有32个临时寄存器(原先为13个),同时要具有256个常量寄存器;而PS尽管内插寄存器和临时寄存器数量没有增加(分别是10个和32个),但是常量寄存器的数量却从32个增加到了224个。寄存器的增加使得开发者可以工作得更有效率,既提高了着色性能,也增加了着色程序的潜力。
#$[*154624.gif*#a*#550*#323*#center*]$#
NV40的顶点着色单元增加到了6个(增加了50%),而象素管线更是达到了16条(原先为4条),nVidia同时将纹理单元的数量从8个增加到了16个,将整个架构变成了16×1,相对于NV3X的4×2而言提升显著,并可以通过16个象素着色单元,在多重纹理中模拟成8×2的架构。象素着色能力对于多重纹理增加了1倍,对于单纹理而言更是达到了4倍。当然,架构的改变提高了理论峰值,但并不意味着实际性能2倍、4倍的提高。
#$[*154625.gif*#a*#0*#0*#center*]$#
即使抛开上面的改变,NV40具有值得称道的地方:所有的象素管线以及顶点着色单元都支持双重操作和协处理。DirectX 9中的协处理功能就是同时在一个象素的不同部分进行2个不同的操作,这也就是说在合适的情况下,象素管线上的2个数学单元可以同时处于工作状态,每个单元同时在一个象素上执行不同的指令,这样就形成了每个时钟周期每个象素管线最高4条指令的执行能力。
NV40的这些改进大大超越了NV3X,这样的设计简洁而精确,可以提供更好的灵活性以及伸缩性。在老游戏中,NV40体现出的是16个纹理单元架构,实际性能不会达到NV3X系列的2倍;不过在新游戏中(DX9)中,通过纹理和象素着色渲染,NV40每个时钟周期的性能可能是NV3X的4-8倍。当然,NV38(GeForceFX 5950Ultra)的核心频率比NV40高出了18.8%,而且性能也不是由着色性能所决定的,过滤、纹理、抗锯齿等都不能忽略。
此外NV40的象素管线末尾采用了ROP(Render Output,渲染输出),这些单元负责处理抗锯齿、Z轴压缩、色彩压缩以及最后的象素描绘。这样的单元一共有16个,每个单元可以在一个时钟周期完成1个色彩+Z轴象素处理,或是2个Z轴/模板操作。所以nVidia将NV40的架构称作16×1或是32×0。
抗锯齿采用的是旋转网格多重取样,支持多重渲染对象,并对应浮点混合。实际上,nVidia这次开始从软件到显存支持16位浮点操作,16位以及32位的浮点数据通过象素着色处理时不必再转成8位整数来输出了。
#$[*154626.jpg*#a*#0*#0*#center*]$#
nVidia在NV4X系列芯片中加入了可编程的视频处理器,这个处理器由寻址单元、标量单元、矢量单元和分支单元组成,其中矢量单元是一个16路的SIMD(一条指令可同时处理16个不同的数据片断)。这个处理器的工作量相当的大,支持包括Gamma校正、MPEG/MPEG2/MPEG4/WMV/DivX解码(编码)、缩放、帧速转换等处理。NV4X芯片可以接管原来由CPU完成的任务,处理视频流、快速编码等操作就将不再占用大量的CPU资源,对于多媒体以及PVR系统而言很有意义。
NV4X的视频处理器的主要特点:
高品质视频
- 动态视频抗交错
- 高品质过滤
- 视频抗马赛克
整合TV编码
- 符合HDTV标准
- 动态传输
- HDTV输出(720p, 1080i,480p, CGMS)
支持PRV系统
- 硬件音频/视频
- 同步
- MPEG 1/2/4 编码/解码
- WMV9编码加速
HDCP支持
全新的驱动
在过去的1年中,对于nVidia在显卡驱动中是否做了特别优化人们进行了有些激烈的争论,这次nVidia希望通过新驱动避免这种情况。在nVidia提供的新驱动中, 默认设定就是采用优化过的各向异性以及三线过滤设定,不过这次他们允许用户将这些特性关闭。三线性过滤优化模式可以关闭,而全新的“High Quality”模式则关闭了自适应各向异性过滤。
不过不幸的是,这次nVidia在各向异性过滤中似乎采用了加权的Weighted Manhattan(曼哈顿加权)算法,而不是之前选用的Euclidean distance(欧几里德距离)算法,对于物体表面的方向更为敏感了:
#$[*154628.jpg*#旧驱动中的各向异性过滤*#0*#0*#center*]$#
#$[*154629.jpg*#60.72版驱动中的各向异性过滤*#0*#0*#center*]$#
#$[*154630.jpg*#ATi的各向异性过滤*#0*#0*#center*]$#
采用了新的各向异性过滤算法,nVidia的显卡在开启特效后的性能损失减少了。这个新算法似乎也就是ATi一直采用的,当角度、纹理和表面围绕Z轴旋转时,ATi和nVidia同样出现了起伏现象。下面的两张图是我们通过D3D AF Tester软件对“三线性过滤优化”选项进行的演示,区别很明显:
#$[*154631.jpg*#开启三线性过滤优化*#0*#0*#center*]$#
#$[*154633.jpg*#关闭三线性过滤优化*#0*#0*#center*]$#
不过“Quality”和“High Quality”两种模式之间的差别就没有那么明显了:
#$[*154635.jpg*#“Quality”模式*#0*#0*#center*]$#
#$[*154637.jpg*#a*#0*#0*#center*]$#
在NV40的多重采样中,NVIDIA第一次启用了rotatedgrid subpixel pattern(旋转栅格抗锯齿)技术。在进行多重采样的时候,纹理的取样点是位于像素的正中位置,如果三角形没有覆盖到像素正中心,以往的处理方式就是把三角形“外推”到像素的中央来取样,这样的方式显然不能使用于所有的场合,容易产生错误的纹理取样导致画面渲染错误。质心取样则能把像素的纹理取样点“推”到覆盖着它的三角形内部,获得正确的纹理单元的色彩值。对于nVidia旋转栅格抗锯齿抗锯齿方式,我们通过《Jedi Knight:Jedi Academy》来看看具体效果:
#$[*154638.jpg*#未开启抗锯齿*#0*#0*#center*]$#
#$[*154641.jpg*#开启4×抗锯齿*#0*#0*#center*]$#
我们很高兴的看到nVidia的抗锯齿画面也开始横平竖直了。基于NV40核心的显示卡
基于NV40显示核心的产品分为两种型号一种是GeForce 6800 Ultra,另外一种则是GeForce 6800。前者的工作频率为400/550Mhz,售价499美元、后者采用12x1的架构(12条像素管道),频率还没有最终公布,售价为299美元。
#$[*154642.jpg*#a*#550*#290*#center*]$#
#$[*154643.jpg*#显示卡采用双DVI输出接口和双电源输入接口*#500*#290*#center*]$#
GeForce 6800 Ultra特性
- Vertex Shaders
- 支持DirectX 9.0的Vertex Shader 3.0
- 置换式贴图
- 顶点频率流分配器
- 支持超过65000行的程序指令
- Pixel Shaders
- 支持DirectX 9.0的Pixel Shader 3.0
- 完全支持象素分支功能
- 支持MRT
- 支持超过65000行的程序指令
- 新一代纹理引擎
- 每个周期最大支持16个纹理
- 支持16/32位浮点格式
- 支持双纹理处理
- 支持sRGB纹理格式(Gamma纹理)
- 支持纹理压缩
- 整个渲染管线完全128位浮点精度,显存/显示最大64位精度
#$[*154644.jpg*#a*#500*#375*#center*]$#
#$[*154645.jpg*#a*#500*#375*#center*]$#
IT168评测室观点:新一轮竞争即将开始
无论怎样,nVIDIA全新一代的旗舰产品终于出现在我们面前了,从基本指标和特效来看,这确实是一款相当有竞争力和优势的产品。无论从哪个方面来看都开创了新一代DirectX 9.0竞争的序幕。同时其众多创新的技术引入也让我们重新对3D效果有了一个认识。不过目前由于核心良品率的问题我们还无法看到众多的基于NV40显示核心的产品,但相信很快nVIDIA就会解决这个问题。
但是我们也不能就此说NV40就是未来一段时间内效率最高的显示卡,ATI新一代显示卡--R420即将于月底发布,相信到时候真正的竞争就会开始,但无论如何这种竞争最终的受益者是我们用户。不过,我们也希望ATI不要推出一个换汤不换药的产品,毕竟从2002年的下半年之后我们还没有看到ATI什么有真正革新意义的显示产品出现。