为王位而生 GeForce8800全面解析测试
序:为了能够让大家更加系统的了解到G80的特性以及意义,本文将按照章节结构给大家详细介绍,下面是本文的导航,您可以方便系统的浏览本文。
第二章 统一渲染架构解析
第一节:技术背景之游戏是如何展现在屏幕上的
1 游戏设计过程
2 几何模型的变换和移动
3 坐标转换
4 三角形重建
5 填充材质的处理
6 三角形填充
7 光栅处理
8 帧缓冲和输出
第二节:革命!G80的统一渲染架构
第一小节 传统的显示芯片架构
第二小节 传统架构的劣势和不足
第三小节 革命性的统一渲染架构及其优势
第三章 美好的游戏未来,DirectX10深入解析
第一节 技术背景 API基础知识
第二节 DirectX10架构特性及其优势
1 降低绘制消耗
2 降低处理器依赖性
3 批量绘制
第三节 Shader Model 4.0
1 Geometry shader(几何Shader)
2 统一的Shader架构
3 百倍于DirectX 9的可用资源
4 更多的纹理
5 更多的渲染目标(Render Target)
6 新的HDR颜色格式
第四节 几何Shader以及Stream Out
1 细分的虚拟位移贴图
2 基于边缘(Adjacency)的新算法
3 数据流输出(Stream Output)
第五节 高级渲染语言(HLSL 10)
1 常量寄存器
2 Views
3 整形与位运算指令
4 Switch 语句
第六节 其他改进
1 alpha to coverage
2 shadow map filtering
第七节 游戏效果
第一小节 次世代Instancing技术
第二小节 基于象素级别的位移贴图技术
第四章 G80核心大革命,全新流明引擎解析
第一节 四年四代CineFX引擎回顾
1 要速度更要画质——CineFX 1.0引擎实现电影级渲染
2 渲染能力大幅增强——CineFX 2.0改进版登场
3 将SM3.0/HDR发扬光大——CineFX 3.0引擎带来非常好的光影效果
4 性能大幅改进——CineFX 4.0引擎带来最强GPU图形渲染效率
第二节 G80的心脏——流明引擎五大特性
1 Coverage Sampling Anti-Aliasing (CSAA)
2 Lumenex Texture Filtering Engine(流明纹理过滤引擎)
3 支持128bit HDR,配合CSAA完美实现高倍HDR+AA
4 10bit Display Pipeline,64倍于上代产品的输出颜色数
5 Quantum Effects,GPU物理加速技术
第三节 全屏抗锯齿技术回顾
1 最早的抗锯齿算法——超级采样
2 NVIDIA首次提出MSAA算法,抗锯齿技术真正实用化
3 MSAA算法效能更高,并衍生出新的模式
4 SLI技术让抗锯齿成倍提高
5 MSAA并不完美,透明抗锯齿弥补不足
第四节 游戏画质最高境界——单GPU实现16x CSAA
第五节 最高各项异性过滤算法画质再提升
第六节 完美128Bit浮点精度HDR+AA
第七节 10亿色的魅力——G80提供10bit色显示管线
第六章 GeForce8800核心架构设计解析
第一节 G80的核心架构图
第二节 G80统一渲染/DX10架构的特色
1 G80为什么需要多达64个纹理单元
2 进一步解放CPU,几何着色器的作用
第七章 视频性能巅峰对决
第一节 PureVideo HD介绍/蓝光影碟播放加速测试
第二节 HQV Benchmark:G80 vs X1950XTX
第九章 GeForce 8800GTX/GTS显示卡解析
第一节 怪兽登场!体型超长的8800GTX
1 超高集成度,夸张的供电模块使PCB变长
2 散热器结构改变,风道式设计更合理
3 SLI技术再升级?8800GTX怎么有两个SLI金手指
4 N卡巅峰之作,为什么需要两个6Pin供电接头
第二节 耐人寻味8800GTX显卡设计
1 保守的设计,G80核心依然采用90nm工艺
2 折衷的选择,768MB 384Bit GDDR3显存
3 独立的RAMDAC与TMDS整合芯片
第三节 次高端8800GTS显卡赏析
第十章 性能测试
第一节 测试系统配置和设置
1 测试系统配置
2 测试方法说明
第二节 基准性能测试
1 3DMark03
2 3DMark05
3 3DMark06
第三节 游戏性能测试
1 FarCry 1.3
2 分裂细胞3
3 F.E.A.R
4 使命的召唤
5 Prey(掠食者)
6 帝国时代3 酋长
7 半条命2
8 英雄连
第四节 功率测试
第五节 HDR+AA测试
2006年,对于NVIDIA来说注定是个不平凡的年份。在这一年,NVIDIA累计出货GPU达5亿颗;也是这一年,宿敌ATI被AMD所收购;而在今天,NVIDIA迎来了更重要的日子——首款采用统一渲染架构的DirectX 10显卡:GeForce 8800GTX/GTS正式发布! ·2004年04月20日——Geforce 6800Ultra 回顾近两年的NV高端产品发展历程,几乎半年一次的新产品更替速度不仅让竞争对手疲于应付,每一次性能/功能的提升则更加巩固了NVIDIA在全球图形领域NO.1的王者地位。 ● 独立/整合齐头并进,NVIDIA 06年成就图形霸业 根据Mercury最新公布的06年Q3季度数据显示:台式电脑独立/整合部分占有率分别为NVIDIA 33%、Intel 31%、AMD/ATI 21%。NVIDIA首次超越Intel在台式电脑显示芯片占有率上称霸。 GeForce 6/7系列见证了NV由落后到反超的壮举 其中,NVIDIA在独立显卡比重达已达56%,远超出ATI的42%;DX9独立显卡部分,NVIDIA所占比重更达到63%(ATI 37%);而在高阶显卡部分,NV甚至占有率高达89%!可以说,NVIDIA在以GeForce 6/7系列为代表的DX9显卡上已经建立了绝对的领先优势。 C51G(正式名称 GeForce 6100)无疑是06年中最抢手的整合型主机版 整合显示芯片(IGP)方面,Intel通过低价PC趋势及平台整合仍以50%比重占据着半数市场份额;NVIDIA、VIA、ATI所占比率则分别是20%、19%和7%。虽然差距依然很大,但06年C51/C61的市场表现都是有目共睹。尤其随着微软(Microsoft)Vista、HD DVD及Blue-Ray等下一代技术即将登场,个人电脑对显示技术规格需求将大幅提升,拥有显示技术研发实力的NVIDIA优势更为明显。 ● 行业巨人领跑DirectX 10,GeForce 8800GTX惊世发布 或许有网友疑惑,目前Vista操作系统尚未推出、DX10的游戏更是一个没有。NV选在这个时间推出G80(8800GTX/GTS)有何意义呢? 就NV自身产品线来看,GF7900/7950系列已经卖了大半年,受到核心架构方面的制约,性能再有大幅突破难度较高。因此,在高端导入全新架构的G80是NVIDIA更新产品线同时解决性能瓶颈的良策; 对于竞争对手ATI而言,虽然在05年提供给微软XBOX 360图形芯片Xenon就已采用了DX10的统一渲染架构。但NV抢在对手之前推出DX10显卡,无疑又是对收购后的ATI迎头一击,巩固NV的在DX10时代的地位; DX10游戏将跟随Vista操作系统同步发售 最后需要强调的是,当前Vista RTM版本已经推出,不少玩家都已经抢先体验过Vista操作系统。而《Crysis(孤岛危机)》、《微软模拟飞行2007》等不少DX10游戏都将跟随Vista操作系统在近两月内发售。同时恰逢年底全球市场销售高峰期,正可谓是天时、地利、人和!
·2005年06月22日——GeForce 7800GTX
·2006年03月10日——GeForce 7900GTX
·2006年06月06日——GeForce 7950GX2
·2006年11月09日——GeForce 8800GTX
●第二章 统一渲染架构详细解析
G80在架构上最大的特点就是它采用了统一渲染架构,这种架构的特点就是秉弃了原来用了多年的“管线架构”,可以说是一种革命性的设计。本章将为您介绍一下统一渲染架构的特点。
●第二章 第一节:技术背景之游戏是如何展现在屏幕上的
在为大家介绍G80的统一渲染架构之前,为了让更多的朋友能对统一渲染架构的革命性创新有更深入的了解,我们先给大家介绍一些背景资料,我们来看看传统的显卡的工作原理是什么样的,3D游戏是如何最终展现在屏幕上的。
这里我们说的游戏的展现过程主要是从技术角度进行探讨,真正的游戏的创作还有很多软件工程方便必须的流程需要做,这里我们就不多赘述了。
总的来说,3D游戏从设计到展现在屏幕上,在硬件上是经过下列八个个步骤的:
● 第一步:游戏设计过程。
游戏的设计过程是相当复杂的一件事情,但是实际上游戏的设计仅仅提供了两种东西,游戏逻辑和游戏资源。
游戏逻辑是游戏的精神核心,牵涉到游戏过程的流程,游戏的AI等等多方面,相当于灵魂。而游戏资源则是我们能够最终看到的画面的素材,是相当于肉体。我们今天就从游戏的肉体谈起。
我们谈的是3D游戏,游戏的这些素材(我们可以称之为3D模型)主要以几何模型和几何模型上的贴图为主。3D几何模型通常用3Ds Max等建模软件制作,它就像是一个骨架一样,仅仅记录的是这个几何模型的形状,它究竟是个车轮还是一个美女,从形状上就会有很大的区别,而这些信息就是最终几何模型的数据。
另外一部分就是贴图,贴图部分就相当于几何模型的皮和肉,决定的是我们看到的外观,一个车轮的贴图肯定就是橡胶的黑色,而一个美女的贴图肯定是健康的肉色的。不过这些贴图就像是皮一样,包在模型外面是个美女,而单纯看贴图的话,肯定会觉得很怪。
贴图的部分其实也远远不是仅仅是一个图片包在几何模型上那么简单,有用图片的,我们称之为贴图(map);也有用材质信息的,我们称之为纹理(texture);还有的“皮”记录的是表面的形状的,例如法线贴图(Normal Map,记录每个点的凹凸情况)。这些都是游戏的基本素材,在游戏运行的过程中,我们的电脑会不断的处理这些东西,甚至生成一些新的素材。
无论是几何模型,还是贴图素材,它们的存在形式就是游戏的资源文件,存在游戏的安装光盘上,在游戏运行的时候,电脑读取了这些数据传入到显卡,再进行下一步的处理。
●第二步,几何模型的变换和移动。
在第二步中,计算机处理的内容是几何模型,不包括贴图和其他素材,因为只有骨架确定了位置和形状,往上面贴图才是有意义的。
我们所说的“骨架”,也就是几何模型,在电脑里存储的信息就是确定这个几何模型的顶点的数据。因为我们知道,两个点能够确定一条线,三个点能够确定一个面,也就是一个三角形,而多个三角形可以组成一个多边形,多个多边形就确定了一个几何模型。
不同的几何模型的复杂程度也大不相同,可能一个很简单的汽油桶的顶点只有十几个,而一个很复杂的怪兽的模型的顶点就有上千个甚至上万个顶点,顶点越多,模型越复杂也就消耗系统资源越多,游戏运行也就越慢。不过游戏开发人员通常也不会设计的太复杂,否则他们的游戏将由于运行太慢而导致卖不出去。
无论这些几何模型是简单的,还是复杂的,它们在游戏里都要进行移动和变换的,我们现在说的这个步骤就是负责处理这些变换的。
几何模型的变化可能会有多种情况,比如位移(例如一个箱子被推动),转动(例如车轮的转动),或者是破碎(例如木板被打碎),形变(例如人体模型的跑动姿势)。
在电脑中,这些变化在原来都是由CPU来完成的,不过在GeForce 256出现之后发生了革命性的变化,CPU不再负责变换的全部工作,而是只负责如何变换的游戏逻辑部分的处理,而每个顶点的变换,就交给了显卡来完成。这就是我们常常提到的Vertex Shader(顶点渲染单元)。
可以说NVIDIA在七年前创造的GeForce 256是一项革命性的产品,显卡从原来仅仅对象素填充做加速,变为了对顶点运算到最终输出的所有操作都进行加速,节约了处理器的资源。
后来,显示芯片的顶点渲染单元从一个发展到最后的8个,性能提高了很多,不过,这次GeForce 8800发布,带来的又是一场全新的革命,统一渲染架构下的128个运算单元理论上讲都可以用作顶点的运算。
无论是CPU来运算还是GPU来运算,这个步骤里每个模型的每一时刻的顶点位置都要被重新确定。运算出的结果将被导入下一个步骤进行处理。
●第三步:坐标转换
这个步骤中,每一个时刻的3D几何模型将会由3D状态转变为2D状态,具体的方法就是将3D几何模型的每一个顶点的三维坐标通过投影的方法转换为二维坐标。
这个过程中,做转换用的平面是根据玩家看游戏的方向和视角决定的。这个过程中电脑并不会进行贴图的操作。甚至每个顶点之前也仍然都是独立没有关系的。
在3D技术发展的初期,这个坐标转换的过程会将所有的顶点进行坐标变换并传入下一个步骤进行处理,这样一来,很多最终不会被显示在屏幕上面的模型也会进行运算,就浪费了电脑的性能。所以人们发明了提前进行Z轴判断的技术,这些技术大家通常称之为“early Z”,这些技术的细节并不相同,但是实质是一样的,就是判断每个顶点的前后关系,从而判断究竟哪些顶点会被显示。
举个例子,一个遮挡在墙后面的桌子,人物在屋子外面是看不到的,这样就不用处理。提前Z轴比较再加上后面的处理过程的技术被统称为“隐面消除技术”。
隐面消除技术示意图
隐面消除技术最初并不是NVIDIA和ATI发明的,而是一个已经倒闭的显示芯片厂商,PowerVR最先发布了这种技术,并且授权给了意法半导体,意法半导体在Kyro2中使用了这种技术。后来不过这种技术早已经在现代的显示芯片上投入应用了。
●第四步:三角形重建。
这个过程就是将已经转换为二维坐标的点根据他们之间的关系,构建成为三角形,为下一步的贴图做准备。
构建三角形的这个过程常常称之为Setup,在GeForce 256之前,这个部分是显卡的性能衡量的重要标准的一项,也就是“三角形生成能力”。
●第五步:填充材质的处理。
这个步骤的作用是处理原始的贴图或者材质素材,这个过程也就是我们最经常说的“Pixel Shader 像素渲染单元”做的事情。简单的而言就是根据需要把贴图处理一下,大多数情况是把贴图斜向做透视,说的明白一些就是把图片变变形状。当然,如何变,变哪些,哪些需要做剪切都是需要很多的运算的。
很久时间以来,游戏对3D性能的要求的提高也主要是在这个部分,特别是分辨率提高之后就更加要求性能了。
这个过程中,我们常常提到的材质过滤(Texture Filtering,包括二线型过滤,三线性过滤,各项异形过滤)就是在这里做处理的。特别是各向异形过滤在做高等级处理的时候,消耗资源也相当的大。
材质过滤的等级决定着画质
当然,这个过程远远没有我说的这么简单,根据观察角度变换贴图的形状只是最基本的操作。而实时的阴影,光照,遮挡,甚至根据法线贴图做虚拟的3D贴图技术,都是Pixel Shader处理的内容,所以Pixel Shader一直是显卡中最累的一个部分。到上一代显示芯片,NVIDIA提供了多达24个Pixel Shader单元,不过在G80中,弹性的统一渲染架构让Pixel Shader的单元最大增加到理论上的128个。
●第六步:三角形填充。
这个步骤就是将处理好的没一个象素填充到三角形中,在具体的执行操作的时候其实几乎是和Pixel Shader同步运行的。处理一些象素,就填充一些,然后再运行Pixel Shader处理一些象素。
这个过程在现在看来属于非常简单的过程,虽然处理数据也比较多,但是分辨率是什么,数据量也就固定了,所以不会几何性的增长需求。不过这部分的处理在当年3D加速卡刚刚出现的时候可是显卡性能的另一个最重要的指标。这就是我们常说的“象素填充率”。
在“隐面消除技术”出现之前,这个步骤还要进行根据Z轴信息做Z轴判断,看哪个象素在前面才画出来,哪个象素在后面就不画出来。不过这种低效率的事情早已经被淘汰了。
●第七步:光栅处理(ROP)
这个步骤起的作用是将已经着色的象素进行透明度(Alpha)混合等处理,这个过程就相当于最终决定显示什么图像的最后的操作,所以也非常的重要。在这个部分,显示芯片也需要投入大量的运算,所以显示芯片也使用了多个ROP单元同时运行的设计。
●第八步:帧缓冲和输出
经过ROP处理后的数据就是即将显示到显示器上的画面了,显示卡会将这些数据存入一个帧缓冲后再进行输出,由于帧缓冲的速度非常快,所以我们是感受不到的。
到这里,整个3D游戏的处理过程就算是完成了,接下来就是通过RAMDAC转换为模拟信号,通过D-Sub接口输出到显示器上。或者通过TMDS的运算转换为TMDS信号,通过DVI输出到LCD上。
●第二章 第二节:革命!G80的统一渲染架构
上面我们介绍了3D游戏的整个处理过程,那么在这一节中我们将介绍G80的统一渲染架构。
●第二章 第二节 第一小节:传统的显示芯片架构
我们已经在第一节中介绍了3D游戏的处理的全部过程,那么在为大家介绍NVIDIA的创新性的统一渲染架构之前,我们有必要先了解一下传统的架构是如何运行的。
在传统的架构中,由于是按照3D游戏的处理过程来执行的,所以在架构上会是一种顺序形的结构。
由于这种顺序执行的结构就像是一个管道一样,各种数据就像是管道里的水,不断留向下一级,所以人们也就根据这种特性为这种结构的处理单元起了一个更为形象的名字,这就是“管线”(Pipeline)。
不过在实际的显示芯片中,管线通常有多条,比如做顶点处理的顶点渲染管线,在NVIDIA上一代G70芯片中,一共有8个。而对于象素处理管线,则会达到24条之多。在之前我们购买显卡的时候都会关注这款显卡究竟是几条管线的,这个时候我们通常提到的管线是指象素渲染管线。
● 第二章 第二节 第二小节,传统架构的劣势和不足
我们注意到,在之前的显示芯片设计的时候,显示芯片厂商在设计的时候并不会将顶点管线和象素管线按照相同的数目去做。而是将顶点管线相对放的少一些,多放一些象素渲染管线。
那么显示芯片厂商为什么要这么做呢?答案是:这样的结构和比例是芯片设计厂商根据常见游戏的情况而决定的。
不同的游戏在开发的过程中,设计的游戏复杂度是不同的,有的游戏就非常简单,3D模型也相对简单,这样游戏就可以在更多的玩家的电脑上运行。有的游戏的3D模型和后期特效就非常复杂,这样在保证了游戏的效果的同时就让很多配置不是那么好的玩家无法运行或者运行起来特别慢。
除去游戏复杂度的区别,游戏的开发商和显示芯片厂商还处在一个更加难以解决的怪圈中,这就是,游戏开发商无法在游戏的资源消耗定向上达成一致,所以带给了显示芯片厂商很大的麻烦。
具体来说就是,有的厂商会开发一些3D模型很复杂,顶点数目很多的游戏,这些游戏就需要耗费很大的顶点渲染管线的资源,这类游戏可以把通常场景很复杂,里面的3D模型的细节非常到位。而另一类厂商则会将焦点放在后期的象素级别的特效,这样的好处就是可以给游戏带来更炫的视觉效果。
举例来说,像《帝国时代3》《英雄连》这样的游戏,就属于顶点处理性能要求比较高的,因为这样的即时战略游戏很有可能在一个画面中出现大量的人物,这样顶点的总数目就会很多,相对消耗顶点渲染管线的性能更加多一些。
而《优品飞车》系列游戏就属于典型的象素性能要求比较高的,因为在优品飞车中,连最新的《优品飞车10:卡本峡谷》也都没有支持车辆的损坏,每个车都是一个固定的刚体3D模型,三维顶点数目很少。而如果特效全开的情况下,绚丽的画面效果非常消耗象素渲染管线的性能,即使最好的显卡也不会跑得很爽。
不同的游戏风格造成了显示芯片厂商只能造出更加强大的显示芯片来满足这些不同的游戏,但是如何进行配比,将是一个很挠头的事情,因为这就像一个天平,偏向哪边都会失去另一部分。
在这种情况下,显示芯片厂商只能按照最常见的游戏的情况来设计显示芯片,尽最大能力去满足不同的游戏。
而游戏厂商在设计游戏的时候也不能随心所欲的设计游戏,必须满足显示芯片的性能配比,这样才能在消耗性能最小的情况下达到最好的游戏效果。
这个矛盾一天不得到解决,显示芯片最大的效能就不能有效的得到发挥,这也一直是显示芯片的性能提高的最大瓶颈所在,在这样的架构上,不断的加“管线”,提高频率是显示芯片厂商唯一能作的事情。
总结 传统显示芯片架构的缺点在于:
1 游戏厂商不能设计出更自由的游戏。
2 显示芯片的效率不高。
3 显示芯片的性能提升有限。
在这样的情况下,NVIDIA处心积虑研究了3年的时间,推出了创新的革命性产品,G80显示芯片,其创新的“统一渲染架构”让显示芯片进行了一场革命。
● 第二章 第二节 第三小节:统一渲染架构
传统“管线”形式的显示芯片架构一天一天的显现出不足,在这种架构下,显示芯片要想提高性能,只能去提高频率,或是增加渲染管线的数目。这种治标不治本的解决方法永远不能让整个业界获得一种实实在在的解脱。
NVIDIA这次推出的G80显示芯片使用的统一渲染架构是这样实现的:通过很多功能相同的流处理器(Stream processor)来动态分配给各种操作。这样的设计可以让每个处理单元都参与运算,从而达到提高效率的目的。
通过前面的基础知识的介绍,我们已经知道了在显示芯片处理3D图形数据的时候会需要大量的做运算,这些运算相对而言属于比较简单但是数量很大的运算,基本上都是浮点类型的数据的运算,所以NVIDIA通过在显示核心中集成了多达128个浮点运算处理器的方法使得G80的架构有了革命性的改变。
通过上面的G80的架构图我们可以看到它的架构和之前的显示芯片的架构有了很大的不同,没有了明显的Vertex Shader和PixelShader的结构,取而代之的是8组并行的单元,每个单元中有16个Stream Processor(流处理器)还有8个Texture Unit (纹理单元)。
总结:统一渲染架构的好处:
1 动态分配运算单元,提升利用率。
在这样的统一渲染架构下,每个处理单元都可以进行Vertex Shader的运算和Pixel Shader的运算,这样一来,无论是怎样的游戏,都能够充分利用显卡的资源,再也不会有一些处理单元闲置,一些处理单元累死的情况出现了。
在需要大量顶点运算的游戏中,大部分的Stream Processor将被分配去做顶点的运算,而在需要大量后期象素级别特效的时候,大部分的StreamProcessor将被安排去做Pixel Shader的事情。
2 并行处理,提高效率
除了动态分配方面带来的好处,这样的结构还有利于速度的提升,因为这些处理单元可以并行运行,不像原来的串行的结构那样顺序执行。
● 第三章 DirectX10 游戏的美好未来
● 第三章 第一节 技术背景 directX 的发展和API相关基本常识,DX10新特点概要。
Microsoft发布的DirectX 10代表了自从可编程Shader出现以来在3D API方面的最巨大的进步。通过一番脱胎换骨般的重建,DirectX 10展现出一系列非常醒目的新特性,包括高度优化的运行时,强大的Geometry Shader,纹理数组等等;这些特性将引领PC实时三维图形进入一个全新的世界。
在过去的十年中,DirectX已经稳步成为了Microsoft Windows平台上进行游戏开发的首选API。每一代的DirectX都带来对新的图形硬件特性的支持,因此每次都能帮助游戏开发者们迈出惊人的一步。通过不断的首先推出完全支持新版本DirectX全部特性的图形处理器,NVIDIA已经逐渐成为3D图形硬件业界的先驱者。当DirectX 10出现的时候,他们再次继承了这一传统。
DirectX 10 是自DirectX诞生以来,首次进行的一次彻底的重新设计。为了使得产品成为主要的DirectX硬件平台,NVIDIA为DirectX 10 设计了一套全新的GPU架构——Geforce 8800系列架构。这套新的架构是NVIDIA历时三年的独立研发以及与Microsoft的协作的结晶。基于这套架构的第一代产品,就是世界上第一个完全支持DirectX 10的GPU——Geforce 8800 GTX。
Geforce 8800 GTX GPU拥有很多特性方面的新记录,它已经成为目前世界上最复杂和最强大的GPU。128个工作频率在1.35GHz的处理器阵列,使它在执行效率上几乎找不到任何对手。而16x抗锯齿,128位HDR渲染和新的各项异性过滤引擎,使得可与好莱坞电影媲美的实时三维特效成为可能。
● 第三章 第二节 DX10的架构特性 以及带来的好处。
DirectX之所以在广大的开发者中流行,是得益于它的简单易用和丰富的功能特性。然而,DirectX一直被一个主要的问题所困扰,那就是高CPU负载。
在图形编程API出现之前,三维程序直接向图形硬件发送图形命令来完成绘制工作。虽然这样绘制效率相当高,但是程序中要应对各种不同硬件上的不同命令,这使得开发工作十分困难,且程序中很容易出错。当越来越多不同的图形硬件冒出来的时候,这就成了一件十分不能忍的事。
于是便出现了像DirectX和OpenGL这样的图形API。它们在图形硬件和应用程序之间架起了一个中间层,这样,应用程序可以使用统一的图形编程代码,而对底层各种硬件的适应,则由图形API来完成。这就将游戏程序员们从与大量的图形硬件交换意见的恶梦中解救出来,使他们能够将精力集中在“制作伟大的游戏作品”上面^_^
但是这样就完美了么?不是的。每次DirectX从应用程序那里接收到一条命令,它就需要先对这条命令进行分析和处理,再向图形硬件发送相对应的硬件命令。由于这个分析和处理的过程是在CPU上完成的,这就意味着每一条3D绘图命令都会带来CPU的负载。这种负载给3D图象带来两个负面影响:限制了画面中可以同时绘制的物体数量;限制了可以在一个场景中使用的独立的特效的数量。这就使得游戏画面中的细节数量受到了很大的限制。而使图像具有真实感的重要因素,偏偏是细节量。
DirectX 10的一个主要目标就是最大地降低CPU负载。它主要通过三个途径来达到这个目的:第一,修改API核心,使得绘制物体和切换材质特效时的消耗降低;第二,引入新的机制,降低图形运算操作对CPU的依赖性,使更多的运算在GPU中完成;第三,使大量的物体可以通过调用单条DirectX绘制命令进行批量绘制。下面我们就来仔细的看一下这三种方式:
1.降低绘制消耗
第一种方式的一个重要例子就是DirectX 10中对三维数据和绘制命令进行验证过程的修改。所谓三维数据和命令的验证,是指在DirectX绘制图形之前,对传给它的图形数据和绘制命令进行格式和数据完整性的检查,以保证它们被送到图形硬件时不会导致硬件出问题;这是很必要的一步操作,但是不幸的是它会带来很大的性能开销。
从上表我们可以很容易的看出,在DirectX 9中,每次绘制一帧画面之前,都会对即将使用的相关数据进行一次验证。而DirectX 10中,仅当这些数据被创建后验证一次。这很明显是可以大大提高游戏进行中的效率的。
2.降低CPU依赖性
在降低CPU依赖性方面,DirectX 10 引入的三个重要机制就是:纹理阵列(texture arrays)、绘制断言(predicated draw)和数据流输出(stream out)。不要被这三个晦涩的名词吓倒,实际上它们是三个不难理解的机制。
首先我们来看纹理阵列。传统的DirectX在多张纹理中进行切换的操作是一个很消耗CPU的操作,因为每切换一次,都要调用一次DirectX的API函数。而每绘制一个使用新纹理的物体,就要进行一次这样的切换操作;有时为了实现特殊的材质特效,绘制一个物体时可能就要切换好几次纹理,开销很大。
所以,以前游戏美工们经常索性将大量的小纹理拼合到一张大的纹理中,通过给不同的三维物体分配这张大纹理的不同局部以期减少纹理切换,提高游戏运行效率。然而,想想也知道,这件事做起来会非常麻烦,而且DirectX 9中对纹理的尺寸的限制是4048×4048像素,也就是说,如果要容下更多的小纹理块,可能就得开辟很多张这样的大纹理。
DirectX 10引入的新的纹理阵列机构,将允许在一个由显卡维护的阵列中容纳512张单独的纹理,而且,在shader程序中可以使用一条新的指令来获取这个阵列中的任意一张纹理。而这种shader指令是运行在GPU中的;这样,就把原来要消耗很多CPU时间的纹理切换工作轻松地转给了GPU。由于纹理一般是直接放在显存中的,所以这件事由同显存一起放在显卡上的GPU来完成真是天经地义,大快人心^_^。现在,在应用程序的层面,只要一开始设置好纹理阵列中的纹理,然后每次绘制一个物体时为它指定一个纹理的索引号,并同物体三维数据一起传递到shader中,就可以放心的让GPU来给物体选纹理了。
然后说说绘制断言。在一般的三维场景里,很多物体都是完全被别的物体挡在后面的。这时候如果要显卡绘制这些物体就是白费力气。尽管高级的GPU可以通过硬件算法将场景画面中被挡住的像素(注意是像素)预先剔除,但是仍然会有一些处理消耗。例如,一个完全被挡住的复杂的角色模型,它的身上可能有几千个顶点,需要做复杂的骨骼皮肤动画处理、顶点光照运算等等——然而,GPU是在处理完这些顶点之后,并要把这个角色模型一个像素一个像素地画到画面中时,才开始判断每个像素是否需要画——当所有的像素都被剔除了时,之前做的顶点处理也就全白费了-_- || 于是,游戏开发者们想出了一个方法来解决这个问题,这就是绘制断言。
简言之就是用一个可以代表某个复杂物体的简单物体来判断这个物体是否被全部挡住了——例如用一个可以罩住刚才那个角色的大盒子,当绘制这个盒子时,如果所有的像素都被P掉了,也就说明这个盒子肯定完全看不见,更甭说里边的角色了,也就不用做什么骨骼皮肤运算啦之类的操作了。一个盒子顶多有八个顶点,这学过初中几何的人都知道,相比处理几千个顶点,开销小得多。但是,以前这步中有些部分也是要在CPU中完成的。现在,在DirectX 10中,已经彻彻低低的交由GPU来做了^_^。真是很周到啊。
最后来看看数据流输出。这是一个DirectX 10中的非常重要的特性,它允许GPU上的Vertex shader或Geometry shader向显存中添加数据!您也许觉得这感觉没什么,然而在以往的vertex shader中是比较独特的。以前的DirectX中,vertex shader只能读取显存中已有的顶点数据;而DirectX 10中引入的新的Geometry shader,不但能读取显存中的顶点数据、几何(点、线段、三角形)数据,还可以生成新的几何数据放回显存。鉴于其重要性,这一机制我们将在第四节:几何Shader以及Stream Out中单独介绍。
3.批量绘制
在DirectX 9中,对渲染状态的管理一直是一个十分消耗CPU时间的操作。所谓渲染状态,是指显卡进行一次绘制操作时所需要设置的各种数据和参数。例如,要绘制一个人物角色,就需要先设置他的几何模型数据的数据格式、纹理过滤模式、半透明混合模式等等——每设置一项,都要调用一次DirectX API,占用大量CPU时间,极大的约束了渲染的性能。
为了使这些操作能够批量的进行,DirectX 10中引入了两个新的结构——状态对象(state object)和常量缓冲(constant buffers)。
状态对象就是将以前的零散状态按照功能归结为几个整体,这样,当要设置一系列相关状态时,无需为每一个状态来调用一次DirectX API,只需要调用一次将这些状态统统设置到显卡中去。
而常量缓冲是另一个十分有意义的机制。在绘制模型前的准备工作中,渲染状态的设置只是一小部分。还是拿绘制人物角色来说,能照亮这个人的光源的颜色、位置、类型、范围等等,都要提前设给显卡;为了通过骨骼来带动他的皮肤做出姿势,还要设置骨骼的位置信息等等——总之是很多东西;而这些东西主要都是通过GPU中的常量寄存器(constant registers)来传递给它的。每个常量寄存器可以存储一个4维的浮点型向量(即四个浮点数)。常量寄存器是游戏程序向GPU输入游戏场景中数据的重要途径。在DirectX 9中,这种常量寄存器的数量是十分有限的,这在下文中的对比图表中我们也可以看到;而且每次更新一个寄存器,都需要调用一次DirectX API函数。而DirectX 10中,使用了常量缓冲(constant buffer)这种结构;在每个constant buffer中都可以容纳4096个常量,而且只需调用一次API就可以更新一大批常量。
采用constant buffer绘制的大量克隆物体。
图片来源:Microsoft DirectX 10 SDK
举一个具体些的例子来对比一下:在以前,如果程序中想在场景里画很多的树木和杂草,可以采用一个类似于“克隆”的方法:先做好一棵或几棵树、草的三维模型,然后在画一帧画面时,不停的在不同的位置、方向,用不同的大小为参数,调用DirectX API的绘制函数来画这些模型,就可以画出很多草木来;但是每画一棵,都要设置一大堆参数后调用一次API;这是很耗CPU时间的,所以在以前的游戏中很难有大规模且细节丰富的森林场景。
而在DirectX 10中,我们可以先把树、草的几个模型设给显卡,然后将所有要画的树木的位置、方向和大小一次性的写入到constant buffer中,然后告诉DirectX——画!显卡就一下把所有的树木和草都一起绘制出来了^_^ 这样,像Far cry 2 那样的游戏,才能营造出十分逼真的森林效果。
总结
总之,DirectX 10降生到这个世上,就是为了带走由于CPU负载过大而给游戏图形效果带来的苦难。通过提前数据验证、纹理阵列、绘制断言、数据流输出、状态对象、常量缓冲等机制,帮助游戏的效果和效率上升到一个新的高度。
● 第三章 第三节 Shader Model 4.0
当Shader Model 3.0的光彩尚未退去的时候,在DirectX 10中,又引入了Shader Model 4.0。它包含下面几项革新?/P>
1 加入了一种新的Shader——Geometry shader
通过它可以编程操纵几何图元;为vertex、geometry、pixel shader采用了统一的Sahder架构。Geometry shaders是可编程图形流水线的一大进步。它第一次允许由GPU来动态的生成和销毁几何图元数据。通过和新的数据流输出功能配合使用,许多以前无法实时使用的算法现在都可以在GPU中使用了。在下一节,将仔细讨论Geometry shaders。
2 统一的Shader架构
在DirectX 9中,Pixel shader总是在各个方面落后于vertex shaders,包括常量寄存器个数、可用的指令个数、shader长度等。程序员需要区分对待这两种shader。
而在shader model 4中,这vertex、geometry和pixel shader有着统一的指令集、同样的临时/常量寄存器个数。它们将平等的共享GPU中的所有可用资源。在游戏程序中不用再考虑每种shader自身的限制了。
3 百倍于DirectX 9的可用资源
对于shader中可用的资源,在Shader model 4.0中比原来有了惊人的扩充。就像早期的程序员们绞尽脑汁的省着用可怜的640k内存一样,在使用以前的DirectX开发游戏的过程中,程序员需要小心翼翼的分配珍贵的shader寄存器资源。寄存器的数量,直接影响着shader程序的复杂度。这和在640k内存的机器上,怎么也不可能写出Microsoft Office这样的大规模软件是同一个道理。而在DirectX 10中,将临时寄存器由原来的32个扩充到了4096个,将常量寄存器由原来的256个扩充到了65536个!而这些并不仅仅是DirectX给出的理论值——在Geforce 8800架构中,它们都是实实在在的在显卡上面的!
4 更多的纹理
在Shader Model 4.0中提供了对纹理阵列(Texture arrays)的支持。在前文中已经对纹理阵列有了比较详细的介绍,在这里只着重介绍一下与shader相关的部分。在每个纹理阵列中,最多可以保存512张同样大小的纹理。而且每张贴图的分辨率被扩展到了8192×8192。更大的分辨率意味着纹理中更丰富的细节。在一个shader中能够同时访问的纹理个数被增加到了128个,也就是说在每次执行同一个shader时,可以使用一个纹理阵列的512个纹理中的128个。所以说,在DirectX 10中,纹理的多样性和细节程度将会有大幅的提升。
使用纹理阵列实现细致的纹理
5 更多的渲染目标(Render Target)
所谓渲染目标,就是指GPU可以把画面绘制到的目标,我们可以把它理解为GPU的画布。一般来说,渲染目标被输出到屏幕上,这样我们就能看到画好的画面了;但是有时为了实现一些特效,某些渲染结果并不直接画到屏幕上,而是再返给GPU做进一步的特效处理;而且渲染目标中也不一定是画好的画面的颜色信息。
根据特效的需要,它们可能是每个物体距离屏幕的远近,或者物体表面上每个像素的方向,或者每个物体表面的温度(为了实现《分裂细胞》中那种热能感应器的效果)…总之为了实现特效,可以按需要在其中绘制任何信息。为了提高这种情况下的效率,很多新的显卡都支持在同一遍Shader执行结束后,同时把不同的信息绘制到不同的渲染目标中。在DirectX 9中就已经支持这种机制了,但是它约束最多同时向四个渲染目标绘制。而DirectX 10将这个数量提升了一倍。
6 新的HDR颜色格式
要说这些年来在实时图形界炒得最热的概念,应该是HDR了。它通过采用浮点格式的颜色格式来为纹理、光照等计算提供极大的精度和颜色范围(以前的纹理一般都是采用整数型的颜色格式)。尽管最后显示到屏幕上还是每个颜色通道8位的整数格式,但是以前由于在材质、光照计算中纹理也是用每通道8位的格式来参与计算,所以在显示到画面之前,很多细节就在低精度的运算中丢失了。
而采用每颜色通道16位浮点数的纹理,能够保证在运算过程中几乎没有颜色细节信息的丢失。另外,采用16位浮点格式的颜色通道,可以表现更大的颜色范围。这些就是HDR的优越性。对于玩家来说,当游戏中的画面罩上一层HDR效果后,立刻显得和真正的照片一样,有朦胧的光晕、细致的高光和十分自然的色调。在玩《优品飞车9》时,充满风格的色调让人有一种置身于电影里的感觉。
HDR(高动态范围)渲染。图片来源:Futuremark
然而,采用每个颜色通道16位浮点数的格式,比采用每通道8位的整数格式的纹理要多占据一倍的显存;这给绘制的效率带来了负面的影响。所以在DirectX 10中引入了两个新的HDR格式。第一种是R11G11B10,表示红色和绿色通道用11位浮点数,而蓝色通道采用10位浮点数表示。那么,为什么不都用11位呢?这是为了凑32这个整数。学过计算机的人都知道,当内存中一个数据单元的宽度是32位时,对它的操作效率最高;而且在纹理数据中一般要求每个像素的数据宽度是2的倍数,如2,8,16,32,64等等。又因为人眼对蓝色的敏感度不如对红色和绿色,所以它比其他两个通道少用了一位。
另外一种格式是采用每通道9位尾数、所有通道共享5位指数的形式(众所周知,在计算机中,浮点数是采用尾数附加指数的形式来表示的),加起来还是32位。这些新的格式使得纹理能够与原来占用同样多的显存空间,避免了大的空间和带宽消耗。同时,为了适合需要精确的科学计算的场合,DirectX 10和Geforce 8800 GTX完全支持每通道32位(4个通道加起来128位)精度的浮点数纹理。
总结
上面提到的这些扩充和提高,对于图形程序员来说是一件非常爽的事。他们可以摆脱束缚,创建出包含前所未有的细节度的实时游戏场景;对于玩家来说也是一件非常爽的事,因为他们的眼球有得养了。
● 第三章 第四节 几何Shader以及 Stream Out
直到现在,图形硬件只有在GPU上操作已有数据的能力。顶点着色器(Vertex Shader)和像素着色器(Pixel Shader)都允许程序操作内存中已有的数据。这种开发模型非常成功,因为它在复杂网格蒙皮和对已有像素进行精确计算方面都表现的很出色。但是,这种开发模型不允许在图像处理器上生成新数据。当一些物体在游戏中被动态的创建时(比如新型武器的外形),就需要调用CPU了。可惜现在大多数游戏已经很吃CPU了,游戏进行时动态创建庞大数量新数据的机会就变得微乎其微了。
Shader Model 4.0中引入的几何着色器(Geometry Shader),第一次允许程序在图像处理器中创建新数据。这一革命性的事件使得GPU在系统中的角色由只可处理已有数据的处理器变成了可以以极快速度既可处理又可生成数据的处理器。在以前图形系统上无法实现的复杂算法现如今变成了现实。使用DirectX 10和Geforce 8800 GTX,类似模板阴影(Stencil Shadow)、动态立方体贴图(Dynamic Cube Map)、虚拟位移贴图(Displacement Mapping)等依靠CPU或多通道渲染(Multi-Pass Rendering)的算法效率提升了很多。
DirectX 10流水线加入了几何着色器和数据流输出(Stream Output),使GPU可以在不用CPU干涉的条件下进行反复运算。
几何着色器被放在顶点着色器和光栅化阶段(Rasterizer)中间。所谓光栅化,就是一行一行的扫描每个三角形,把它们一个像素一个像素的绘制到画面上。几何着色器把经过顶点着色器处理过的顶点当作输入,对于每个顶点,几何着色器可以生成1024个顶点作为输出。这种生成大量数据的能力叫做数据扩大(Data Amplification)。同样的,几何着色器也可以通过输出更少的顶点来删除顶点,因此,就叫做数据缩小(Data Minimization)。这两个新特性使GPU在改变数据流方面变得异常强大。
1 细分的虚拟位移贴图(Displacement Mapping with Tessellation)
几何着色器终于让虚拟位移贴图可以在GPU上生成了。虚拟位移贴图是在离线渲染系统中非常流行的一项技术,它可以用一个简单的模型和高度图(Height Map)渲染出非常复杂的模型。高度图是一张用来表示模型上各点高度的灰度图。渲染时,低多边形的模型会被细分成多边形更多的模型,再根据高度图上的信息,把多边形挤出,来表现细节更丰富的模型。
因为在DirectX 9中,GPU无法生成新的数据,低多边形的模型无法被细分,所以只有小部分功能的虚拟位移贴图可以实现出来。现在,使用DirectX 10和Geforce 8800 GTX的强大力量,数以千计的顶点可以凭空创造出来,也就实现了实时渲染中真正的细分的虚拟位移贴图。
2 基于边缘(Adjacency)的新算法
几何着色器可以处理三种图元:顶点、线和三角形。同样的,它也可以输出这三种图元中的任何一种,虽然每个着色器只能输出一种。在处理线和三角形时,几何着色器有取得边缘信息的能力。使用线和三角形边缘上的顶点,可以实现很多强大的算法。比如,边缘信息可以用来计算卡通渲染和真实毛发渲染的模型轮廓。
使用几何着色器的非照片模拟渲染
(Non-Photorealistic Rendering - NPR)
3 数据流输出(Stream Output)
在DirectX 10之前,几何体必须在写入内存之前被光栅化并送入像素着色器(pixel shader)。DirectX 10引入了一个叫做数据流输出(Stream Output)的新特性,它允许数据从顶点着色器或几何着色器中直接被传入帧缓冲内存(Frame Buffer Memory)。这种输出可以被传回渲染流水线重新处理。当几何着色器与数据流输出结合使用时,GPU不仅可以处理新的图形算法,还可以提高一般运算和物理运算的效率。
在生成、删除数据和数据流输出这些技术的支持下,一个完整的粒子系统就可以独立地在GPU上运行了。粒子在几何着色器中生成,在数据扩大的过程中被扩大与派生。新的粒子被数据流输出到内存,再被传回到顶点着色器制作动画。过了一段时间,它们开始逐渐消失,最后在几何着色器中被销毁。
● 第三章 第五节 高级渲染语言(HLSL 10)
DirectX 10 为以前的DirectX 9中的“高级着色语言”(High Level Shading Language )带来了诸多功能强大的新元素。其中包括可以提升常量更新速度的“常量缓冲器”(Constant Buffers),提升渲染流程中操作数据的灵活性的“观念”(view),为更广泛的算法所准备的“整形与位指令”(Integer and Bitwise Instructions),添加了switch语句。
1 常量寄存器(Constant Buffers)
着色程序同普通的程序一样需要使用常量来定义各种参数,例如光源的位置和颜色,摄像机的位置和投影矩阵以及一些材质的参数(例如反光度)。在整个渲染的过程中,这些常量往往需要频繁的更新,而数以百计的常量的使用以及更新无疑会给CPU带来极大的负载。DirectX 10中新加入的常量缓冲器可以根据他们的使用频率将这些常量分配到指定的缓冲器中并协调的对其进行更新。
在一个着色程序中DirectX 10支持最多16个常量缓冲器,每一个缓冲器可以存放4096个常量。与其相比DirectX 9实在是少得可怜,因为它在每个着色程序中同时最多只能支持256个常量。
相比DirectX 9,DirectX 10不仅提供了更多的常量,最主要的是它大幅的提升了常量更新的速度。对那些被分配到同一个缓冲器中的常量,我们只需进行一次操作就可以将它们全部更新完毕,而非单个单个的去更新。
由于不同的常量更新的时间间隔各异,所以跟据使用的频率来对他们进行组织就可以获得更高的效率。举例来说:摄像机的视矩阵只在每一祯之间发生改变,而像贴图信息这样的材质参数却会在图元切换时发生改变。于是这些常量缓冲器被分成了两个部分——那些每祯更新的常量缓冲器专门存放那些需要在两祯间更新的常数并在两祯间一次把他们全部更新,另外的图元切换更新的常量缓冲器也同理。这样就会将更新常量过程中的一些不必要的工作消除,以便让整个着色器脚本比在DirectX 9中运行的更加顺畅。
2 Views
在DirectX 9中,着色器(shader)中的数据的类型是被严格划分开的。例如,顶点着色器用到的顶点缓冲器中的数据不能当作贴图的数据来让像素着色器使用。这样就将特定的资源类型同其相对应的渲染流程中的特定步骤紧密地结合了起来,同时限制了资源资源在整个渲染流程中可以使用的范围。
DirectX 10舍弃了“严格区分的数据类型”这一概念。当一段数据被创建,那么DirectX 10所做的仅仅是将其简单的当作内存中的一段比特域(bit field)来对待。如果要想使用这一段没有定义类型的比特域数据就必须通过使用一个“view”。 使用“view”,相同的一段数据就可以有各种各样的方法来读取。DirectX 10支持对同一段资源在同时使用两个“view”。
通过这种多重“view”的手段,就可以在整个渲染流程的不同部分以不同目的使用同一段数据。例如:我们可以通过像素着色器将一段几何数据渲染到一张纹理上,之后顶点着色器通过一个“view”将这张纹理视为一个顶点缓冲器并将其中的数据作为几何数据渲染。“view”通过在整个渲染流程中的不同步骤重复使用同一段数据为“数据处理”带来了更大的灵活性,帮助开发者实现更多更有创意更精彩的特效。
3 整形与位运算指令 (Integer and Bitwise Instructions)
在新的高级着色器语言中添加了“整形与位指令”。这样把“整形与位运算指令”的操作加入其基础运算函数的好处在于帮助一些算法在GPU上的实现。开发者终于可以直接使用整形而非从浮点中强转来计算出准确的答案。数组的索引号现在可以轻松的计算出来。GPU无整形运算的时代终于被终结了。这将为shader程序的开发带来很大的便利。
4 Switch 语句(Switch Statement)
终于,HLSL 10可以支持switch语句了!!!这将大幅简化那些有着大量判断(分支)的着色器脚本的编码。一种用法就是建立一个“航母级的着色器(shader)程序”——包含了大量的小型着色器程序并且自身体形巨大的着色器程序。在这个“航母级的着色器程序”,我们可以通过设定一个材质ID在switch语句中判断来轻松的在渲染同一个图元时切换不同的特效。也就是说,现在一个军队中的每个士兵身上都可以拥有各自不同的特效了。
● 第三章 第六节 其他改进
● 第三章 第六节 第一小节 alpha to coverage
在游戏中,经常使用带有半透明信息纹理的多边形模型来模拟复杂的物体,例如,草、树叶、铁丝网等。如果使用真正的模型,一颗边缘参差不齐的小草可能就要消耗掉几百个多边形;然而采用透明纹理,可以只用2~3个多边形就解决了。
半透明纹理示意——一片树叶
然而,当使用这种有半透明信息的纹理时候,它的不透明和透明部分的边界线上,常常会出现难看的锯齿。采用半透明混合技术可以解决这个问题,但是它需要把场景中所有这类物体按照由远到近的顺序来绘制,才能保证它们的遮挡关系是正确的——这是十分消耗CPU时间的,所以很不可取。在以前,alpha测试和混合简直就是图形程序员的噩梦。
在DirectX 10中,使用了一种新的技术叫做Alpha to coverage。使用这种技术,在透明和不透明交界处的纹理像素会被进行多极取样(Multi-sample),达到抗锯齿的效果。这就在不引入大的性能开销的情况下华丽的解决了这个问题^_^ 室外场景的游戏将大大受益于这种技术。树叶、铁丝网、草的边缘将会更加柔和、圆滑。
使用Alpha to coverage技术,叶片的边缘更加平滑。
● 第三章 第六节 第二小节 shadow map filtering
阴影图(Shadow map)技术已经逐渐成为了渲染真实感阴影的流行技术。在包括《战争机器》、《分裂细胞:双重特工》、《Ghost Recon》、《刺客信条》等的各大次世代游戏中都能看到它的身影。然而,由于shadow map的尺寸限制,用它实现的阴影边缘往往有明显的锯齿。在DirectX 10中,提供了对shadow map进行过滤的功能的正式支持。经过过滤后,阴影的边缘将会变得更加柔和。
● 第三章 第七节 游戏效果
DirectX 10为游戏开发者提供了很多新的特性,采用这些特性可以用来开发大量的次世代图形效果。然而,由于这是基于强大、灵活的可编程特性基础上的,所以很难简单的指出这些特性都带来了哪些效果。实际上,很多图形效果都是对这些特性进行综合运用的结果。在这一部分,让我们来仔细的看一下几种次世代特效技术,感受一下新的DirectX 10特性在其中起到的作用。
● 第三章 第七节 第一小节 次世代Instancing技术
在上文中,我们已经用这张图来说明DirectX 10的常量缓冲器特性。其实,这里采用的技术有一个学名叫做Instancing,大意就是通过一个或几个模型来复制出它们的很多实例,实现满山遍野的树木、敌兵那样的效果。这种技术在DirectX 9时代就已经出现了,但是有很多的限制,例如模型不能有动画,所有的模型实例必须使用同一张纹理贴图和同一种材质效果,等等。这就给这项技术带来很多遗憾的地方——玩家肯定不喜欢看见游戏里满山遍野的敌人或树木都长成一个模样,或者只有那么几种模样。
在DirectX 10中,通过常量缓冲器、纹理阵列、动态shader执行分支等特性,将Instancing技术从这些局限中解放了出来。模型的实例没必要使用同一张纹理贴图;它们可以通过自己本身的纹理来从纹理阵列中取出各自的纹理;它们甚至可以有不同的特效——程序员可以写一个包含很多特效的“超级”shader,然后为每个模型实例运用这个shader程序的不同执行分支部分,从而给不同的模型赋以不同的材质特效。甚至连为每个模型实例使用骨骼蒙皮动画这种需要大量变换矩阵操作的问题,在16×4096常量寄存器的强大攻势下都可以迎刃而解。
“克隆人”的时代已经结束了^_^ 通过DirectX 10的高级特性,Instancing将允许每个模型实例拥有它的个性:纹理贴图,pixel和vertex shader,以及动作动画。每个实例都将会有它自己的生命。
● 第三章 第七节 第二小节 基于象素级别的位移贴图技术
在介绍这项技术之前,首先请允许我对工作在坐落于北京海淀区知春路的微软亚洲研究院/工程院的工程师们致以崇高的敬意\\ ^ ^ /。因为这项技术的实现方法,是由这些中国的工程师们研究、创造出来的。
实时每像素位移贴图。图象来源:Microsoft DirectX SDK。
位移贴图技术,用过3DS MAX的读者可能不会感到陌生。在3DS MAX中,这种技术有时也被翻译成“置换贴图”,其核心思想就是在制作三维模型时采用比较低的细节,然后给这个模型赋上一张表面高度图;在渲染时,会根据这张高度图来修改模型的表面,使它们隆起或凹陷——这样,就可以十分省力的给模型表面加上真正的凹凸不平的效果。毕竟,在3DS MAX里一个点一个点的修改模型表面来添加凹凸细节,要比直接拿Photoshop绘制一张高度图麻烦的多。
位移贴图要比单纯的normal map技术的凹凸贴图逼真——因为它是真正的将模型的表面进行修改,抬高或降低它们。然而,由于它需要在渲染时将模型表面进行细分,即将原来的一个多边形分成大量的小多边形,这样才能有足够多的顶点来进行移动。这在原来的DirectX中是不能实现的,因为那时没有geometry shader,不能动态生成多边形图元,也就不能实现动态的多边形细分。即使在有了geometry shader以后,将多边形细分也是一个消耗性能很大的操作。
然而,微软亚洲工程院/研究院的工程师们另辟蹊径,创造了一种新的每像素位移贴图技术。它的大致过程是,将简单模型表面的三角形向上拉伸,成为一个三棱台,这样它就具有了一定的体积;而它的高度,就是模型表面根据高度图进行位移后能达到的最大高度。然后在填充三角形的每个像素时,通过将观察者的视线和这个三棱台进行求交,得到一个相对于这个三棱台的交线段。
由于高度图是相对于这个三棱台的,只有同样使用相对于这个三棱台的交线段,才能正确的求出线段和高度图所代表的表面高度的交点。然后再通过这个交点来计算应该把颜色纹理中的哪个点绘制到屏幕上。在这里只是简单介绍了一下这种技术的大体原理,实际的实现算法比这个要复杂,因为需要克服各种各样的问题。
每像素位移贴图原理示意。图片来源:Microsoft DirectX SDK
总结
还有很多新出现的基于DirectX 10和Geforce 8800架构的次世代图形特效技术,在这里就不一一赘述了^_^ 相信随着时间的推移,越来越多的实时图形特效技术将会大放异彩,实时演算的画面效果达到非实时CG动画效果的一天终会到来。
● 第四章 G80核心大革命,全新流明引擎解析
众所周知,NVIDIA以往几代GPU的核心架构都是以CineFX X.0来命名的,而G80采用了焕然一新的“流明引擎”,在介绍新的引擎之前,我们首先来回顾下经典的CineFX引擎发展史,从中也能够更深刻的理解NVIDIA的GPU架构设计思路:
● 第四章 第一节 四年四代CineFX引擎回顾
- 要速度更要画质——CineFX 1.0引擎实现电影级渲染:
NVIDIA从GeForce FX系列开始(进入DX9时代)将其GPU架构命名为“CineFX引擎”,它其实就是顶点渲染单元与像素渲染单元及相关辅助技术的复合体,堪称是GPU芯片的心脏!
NV30(GeForce FX 5800)采用了CineFX 1.0引擎,它能够支持DirectX 9 API当中的Pixel Shader 2.0+和Vertex Shader 2.0+。其最大的亮点就是能提供强大的可编程能力,可实现128位色渲染,允许开发者实现电影级渲染的惊人视觉效果,这也就是Cine命名的由来。但不幸的是,CineFX 1.0的威力并没有被FX5800真正发挥,反而由于渲染运算的负担过重,使其速度表现颇为一般,加之FX5800自身存在功耗过高、散热系统噪音太大、显存位宽不足等缺陷,最终FX5800成为一款失败的产品。
尽管如此,CineFX 1.0引擎仍具有历史性的意义,它首次将注意力从速度转移到渲染精度和视觉效果上,只追求速度的传统做法被彻底终结。CineFX 1.0的这套设计思想在它的后继版本中得到忠实贯彻。
- 渲染能力大幅增强——CineFX 2.0改进版登场:
GeForce FX5800由于产品硬伤太多,很快就退出了市场,NVIDIA拿出代号为NV35的GeForce FX5900接替它的地位,CineFX引擎也同时升级到2.0版。
相比第一代技术,CineFX 2.0重点改进了浮点像素渲染单元(Pixel Shader)的运算能力——NVIDIA甚至宣称,NV35在像素渲染方面可达到NV30两倍的效能。此项改进虽然谈不上革命性,但有效提高了GeForce FX5900的竞争力,NVIDIA成功从困境中脱身而出。
除了改进像素和顶点单元的效率之外,CineFX还引入了两项新的技术:Intellisample HTC技术合理的利用了256Bit显存带宽,大幅提升了5900系列全屏抗锯齿的效能以及各项异性过滤的图像质量,并且增加了更多的高级纹理、色彩以及Z轴无损压缩算法以提升图象质量;另外Ultra Shadow技术让阴影着色的资源消耗更低,借助新的算法大幅提升了成像速度。
- 将SM3.0/HDR发扬光大——CineFX 3.0引擎带来非常好的光影效果:
2004年4月,NVIDIA发布代号为NV40的GeForce 6800 Ultra,这被认为是划时代的产品,它的CineFX 3.0引擎让NVIDIA迅速走出了FX系列的阴影。不同于CineFX 2.0,CineFX 3.0带来了大量的改进,其中最富革命意义的就是可完全支持微软DirectX 9.0中的Shader Model 3.0,它包含大家熟悉的VertexShader 3.0和PixelShader 3.0,且带来了128bit浮点精度HDR技术,大幅提升高动态范围3D场景的画面质量。游戏的渲染精度及视觉效果都被提升到前所未有的高水平。
在《分裂细胞》、《FarCry》、《兄弟连》等新一代游戏中,Shader Model 3.0的诸多特效获得充分展现,而采用CineFX 3.0引擎的GeForce 6800 Ultra在这些应用中也大放异彩。此外,CineFX 3.0还可支持OpenGL 1.5 API及微软的HLSL、OpenGL Shader Language以及NVIDIA自己的CG图形语言,具有相当高的灵活性及扩展性。CineFX引擎加入的SLI双卡互联技术将图形性能提升到了未来才能达到的水平,令发烧玩家惊喜不已!
- 性能大幅改进——CineFX 4.0引擎带来最强GPU图形渲染效率:
CineFX 3.0引擎已经能够完全支持DirectX 9.0C的所有先进技术,时至今日该引擎并不落伍。为了进一步提升性能,GeForce 7800不仅大幅增加了像素渲染管线数和顶点单元,而且在架构方面重点改进了GPU管线的渲染能力,这就是CineFX 4.0引擎。
与CineFX 3.0相比,CineFX 4.0引擎重新设计了顶点着色器,缩短了设置时间和执行几何处理的时间,顶点纹理拾取(VTF:Vertex Texture Fetch)性能有一定的提升,纹理缓存的吞吐能力大幅提升,因此CineFX 4.0引擎能够加速完成位移映射;而在像素渲染部分,CineFX 4.0引擎的每条管线都拥有两个算术处理单元(ALU),而CineFX 3.0只有一个,这样在只增加很少晶体管的情况下,CineFX 4.0引擎的像素着色器的浮点运算能力提高了一倍,其他数学运算能力也大幅提升,吞吐量显著提高!
看起来CineFX 4.0比3.0改进的方面并不多,但却非常实用,新的引擎使得GPU执行效率大幅提高,简单举个例子:12管线的7600GT性能就与16管线的6800U差不多,而同为8管线的7300GT明显强于6600GT(规格频率相近的情况下)。所以采用CineFX 4.0引擎的GeForce 7家族系列在市场上非常强势!与竞争对手的产品或者是自家上代产品相比,G7X核心达到相近的性能所需的晶体管更少、而相约晶体管的产品性能大幅领先,这样7系列显卡的性能/价格比、性能/功耗比都到了前所未有的高度,这就是CineFX 4.0的精髓所在!
但是CineFX 4.0引擎也并非完美,最为众人所熟知的就是没能实现FP16 HDR+AA技术让人倍感遗憾;另外传统管线式的架构已经基本走到了尽头,继续提高管线数并不合理,因此高端产品在性能上略显不足!这些缺憾只能留给全新的流明引擎来完成……
● 第四章第二节 G80的心脏——流明引擎五大特性
NVIDIA在G80这一代由于GPU架构发生了天翻地覆的变化,因此NVIDIA放弃了传统的CineFX命名,将其架构称为Lumenex Engine(流明引擎),现在就来看看全新架构有什么激动人心的特性:
G80是第一颗采用统一渲染架构的GPU,同时也是首款支持DirectX 10、Shader Mode 4.0的GPU,这两个令人激动人心的第一预示着G80的与众不同,我们再也无法用平常的眼光来看待这款具有革命意义的产品!
统一渲染架构完全抛弃了传统的像素和顶点分离式结构,沿用多年的管线式架构的CineFX引擎终于走到了尽头,NVIDIA为G80的图形架构起了一个很响亮的名字——Lumenex Engine流明引擎。除了统一渲染和DX10之外,流明引擎主要带来了五大特性:
1. Coverage Sampling Anti-Aliasing (CSAA),引入多种全新抗锯齿模式:8xAA、16xAA和16xQ AA,单颗GPU就能实现高达16倍抗锯齿;
2. Lumenex Texture Filtering Engine,流明纹理过滤引擎,各项异性过滤图像质量大幅提高;
3. 支持128bit HDR,配合CSAA完美实现高倍HDR+AA;
4. 10bit Display Pipeline,64倍于上代产品的输出颜色数;
5. Quantum Effects,GPU物理加速技术。
下面就对这几项令人神往的技术进行详细分析。其中NVIDIA最新的16x CSAA技术无疑令人惊叹不已,抗锯齿技术经过多年的发展在G80一代得到了质的提升,为此有必要重温历代抗锯齿技术的发展之路。
● 第四章 第三节 全屏抗锯齿技术回顾
无论NVIDIA还是ATI,在提高显示芯片性能的同时,他们都在致力于提升游戏的画面质量,在不改变游戏API以及渲染模式的情况下,最简单同时也是最有效的方法就是采用全屏抗锯齿(Full-Scene Anti-Aliasing,FSAA是一种统称),并不断改进抗锯齿的算法、提高抗锯齿的精度。
- 最早的抗锯齿算法——超级采样:
早期的图形芯片都采用了SuperSampling(超级采样)的算法,代表产品为GeForce 256/GeForce 2/Radeon 7000/7500,其实更老的VOODOO显卡也能够支持这种算法。
超级采样就是将一个像素拆分为几个像素(这就是采样过程,subpixel),然后进行独立的处理并写入缓存。如此一来图形芯片所处理的图像分辨率比实际输出图像分辨率大的多!因此SSAA的画质改善是有目共睹的,但以当时芯片的实力来看最终性能却是惨不忍睹!
- NVIDIA首次提出MSAA算法,抗锯齿技术真正实用化:
为此,在2001年NVIDIA在NV2X GPU中首次加入了Multi-Sample Anti-Aliasing(MSAA,多重采样抗锯齿)技术,与之前的SSAA相比更加智能化,主要是在对像素进行采样之前首先检测像素的位置,看其是否位于模型的边缘,也就是说MSAA仅仅处理对象边缘的像素,这样大大降低了抗锯齿所需要处理的数据的量,同时还能保证抗锯齿质量。从此MSAA也成为了事实上的标准!
- MSAA算法效能更高,并衍生出新的模式:
从GeForce 3 Ti开始NVIDIA对MSAA算法进行了改进,并将其称之为High Resolution Anti Aliasing(高分辨率抗锯齿,HRAA其实是MSAA的一种),这种抗锯齿技术不仅仅使用一个像素上的采样点或者子像素的数据,而是把周围临近像素的采样点也作为计算的依据,这就使像素的最终效果更加精确。
GeForce 3 Ti还提供了Quincunx抗锯齿算法(5点梅花排列法),其实也是一种超采样的方法。Quincunx是利用了周围像素5个子像素来计算,并且这5个采样点的权重是不同的,也就是对于计算结果的影响力是不同的,而它只做两个采样,在对消耗资源相近下效果却直逼4x抗锯齿。
- SLI技术让抗锯齿成倍提高:
SLI AA的技术原理非常容易理解,简言之就是让两颗GPU各自处理4x或者8xS AA,然后依靠SLI技术将画面合成就达到了双倍于单卡的画面品质!当今NV最强的双核心显卡7950GX2能够提供较多种类的抗锯齿模式,其中16xAA其实就是SLI 16xSAA。
两块双核心的7950GX2还能够组建Quad SLI,这样构建的四核心系统将抗锯齿效果提升四倍!最高可以达到SLI 16xAA和SLI 32xSAA,已经接近于准专业级的渲染精度!
- MSAA并不完美,透明抗锯齿弥补不足:
经过多年的发展,NVIDIA在每一代GPU当中都致力于优化MSAA的算法,将抗锯齿所造成的性能损失尽可能降至最低。如今很多游戏玩家将4x MSAA已经作为游戏的默认特效之一,不开AA的话游戏画面很难令人接受。
普通的抗锯齿(左图)与透明自适应抗锯齿(右图)
但是MSAA有一个重要缺陷就是不能处理Alpha材质,因此在一些栅栏、树叶、铁丝网等细长的物体上就不能起作用了。为了解决这种问题,NVIDIA在GeForce 7系列显卡上加入了透明抗锯齿功能,可以专门针对Alpha材质选择性的进行多级或是超级采样,这样就比完全采用SSAA拥有更低的性能损失,画面质量依旧完美!
● 第四章 第四节 游戏画质最高境界——单GPU实现16x CSAA
通过前面的介绍我们可以知道,目前NVIDIA主流显卡提供了四种抗锯齿模式(SLI AA和透明抗锯齿属于特例),其中2xQ基本很少用到,8xS效果很好但是要牺牲很多性能,即便是优异显卡也很不划算,而且有一部分游戏无法支持8xS这种模式。
这就是N卡常见的四种抗锯齿模式
为此NVIDIA在G80这一代显卡上首次加入了对8xMSAA模式的支持,并且单颗GPU最高可以达到16xAA,下面我们就看看它是如何实现的:
可能很多人会问,既然可以实现2x MSAA和4x MSAA,为何不提供更高倍的MSAA模式呢?这主要是出于性能损失的考虑,4xAA需要更高显存容量以及更多ROP单元的支持。其中ROP(Raster Operations Units,光栅操作处理器)负责像素的最终输出处理。
NVIDIA认为上代的GPU并不能够胜任更高倍的MSAA,主要原因是ROP部分负载特别大,效率下降很严重。为此新一代G80所采用的流明引擎将ROP从G71的4组16个增加到了6组24个,而且显存容量达到了768MB,显存位宽为384Bit,容量和带宽都大幅提升!拥有了如此强大的硬件配置之后,G80可以直接支持8x MSAA(是G71的两倍),同时还新加入了多种抗锯齿,最高模式就是流明引擎当中引以为傲的16x CSAA!
Coverage Sampling Anti-Aliasing,直译就是覆盖采样抗锯齿,它同时包含了同时包含Coverage采样和Geomery采样,通过将多种采样模式复合,就能够提供四种全新的抗锯齿模式:8x、8xQ、16x和16xQ,其中8xQ和16xQ能够提供最完美的画质!而且得益于G80核心强大的实力,在不少游戏中即便开启16xAA,其FPS也不会比4xAA低太多:
抗锯齿对游戏画质的改善是非常明显的,但抗锯齿开启之后性能损失也比较大,因此近年来各种优秀算法的抗锯齿技术层出不穷,在努力提升画质的同时最大限度的减少性能损失。除了抗锯齿之外,各项异性过滤也是提升游戏画质的一个重要手段。
三线性过滤和各项异性过滤效果对比
3D游戏中常见的三维物体笼统的讲是分为两部分渲染出来的:建模和贴图。抗锯齿主要就是对模型边缘进行高倍采样,使得物体曲线看起来更加平滑;而纹理贴图在遇到倾斜的物体表面、弯曲的表面或者是远近景过渡时很容易出现模糊甚至失真的情况,各项异性过滤就是为了解决这种问题而诞生的技术。
NVIDIA在最新的G80驱动控制面板中加入了新的各项异性过滤方案,在“Angular LOD Control”提供了“quality和high quality”两种选项,设定为最高质量可以比普通16xAF提供更佳的画质。
通过专业的各项异性过滤测试软件可以看到,上代产品在45度区域的贴图严重失真,而右图的流明引擎则几近完美的完成了渲染结果!
● 第四章 第六节 完美128Bit浮点精度HDR+AA:
在当前众多3D图形新技术中,HDR是人们谈论最多的,也是在人们讨论对比高端显卡时,除了性能与速度之外的另一个敏感话题。采用浮点格式的颜色格式来为纹理、光照等计算提供极大的精度和颜色范围,画面动态范围和明暗对比度获得更加真实的体现。
从NV40开始,NVIDIA首次推出了基于DX9C SM3.0的FP16 HDR技术,将当前显卡的光影渲染效果发挥到了极致!但现在来看HDR技术还不够成熟,原因就在于开启HDR之后无法启用抗锯齿这一项对游戏画质非常重要的特效,这是为什么呢?
NVIDIA GeForce 6/7系列显卡都采用了OpenEXR得FP16(16位浮点)做为HDR运算的缓存格式,对贴图、过滤、混合、存储支持提供高精度动态范围。然而在DirectX 9.0模式下运行FP16时,会占用到原本属于FSAA(全屏抗锯齿)的缓冲区域,使得在开启HDR效果后无法进行FSAA处理。这就导致NVIDIA显卡在大部分游戏无法同时支持FSAA和HDR!
ATI与GeForce 6同届的X800系列不支持SM3.0,自然与HDR无缘;而在推出X1000系列时,ATI考虑到了HDR技术的重要性以及HDR和AA水火不容的无奈,特意在GPU当中集成了特殊的缓冲区域,来实现HDR+AA技术。这种设计思路值得称道,然而由于FP16 HDR已经成为了事实上的标准,X1000想要支持HDR+AA需要游戏和驱动的互相配合,重新指定缓冲区域才能实现,由此导致只有屈指可数的游戏能够支持ATI HDR+AA技术。在绝大多数游戏中HDR和AA依然处于鱼和熊掌无法兼得的局面!
可以这么说,HDR技术是DX9 API的历史遗留问题,为了解决这一局限性,在DX10中引入了两种新的32bit浮点HDR格式,这些新的格式使得纹理能够与原来占用同样多的显存空间,避免了大的缓冲区和带宽消耗,HDR和AA再无任何瓜葛、井水不犯河水!而且G80完全支持每通道32位(4个通道加起来128位)精度的浮点数HDR。
● 第四章 第七节 10亿色的魅力——G80提供10bit色显示管线:
从3DFX VOODOO掀起的3D加速风暴开始,显卡的竞争不外乎是加强3D规格与增加3D运算速度这两项,而2D输出以及视频解码加速,似乎只是一些二线显示厂商才会玩的把戏。但是自从高清视频(HDTV,H.264编码、AC1)以及大屏幕数字电视开始风行之后,视频加速、视频后处理以及色彩显示精度被提上日程!
至于视频加速以及视频后处理,NVIDIA的PureVideo HD技术已经非常成熟,在最新驱动的支持下,NVIDIA高/中端显卡都能够支持1080P H.264硬件加速以及视频后处理,低端显卡也能支持720P H.264以及1080P WMA加速,可以说速度与画质兼备!但是在画面的最终输出方面始终难以提高,这是为什么呢?因为HDTV视频要求每种RGB色彩均达到10bit的灰阶,而目前的显卡仅支持8bit色彩精度,大部分液晶显示器仅为6bit或者8bit灰阶。
相信很多人对这样一句广告词都比较熟悉——“86亿色的美丽”,这是现在优异大屏等离子电视能够显示的色彩精度,86亿色能够作为卖点就是因为以往的显示设备远达不到这种精度!
以往的显示输出和显示设备都采用了量化的标准8bit色彩精度,只能显示28(R)×28(G)×28(B)=1677万种颜色,这就是俗称的24位真彩;而当今主流高端液晶显示器和液晶电视采用了10bit色彩精度(30位真彩),颜色数提高至210(R)×210(G)×210(B)=10.7亿,这几乎是8bit色的64倍之多!如果在10bit色基础上(210=1024灰阶)再增加512个灰阶就相当于10.5bit,那么可显示的颜色数就能增加到36亿,有部分高端液晶面板就是这种规格;以此类推,当色彩精度提高至11bit,颜色数就是211(R)×211(G)×211(B)=86亿,优异等离子电视“86亿色的美丽”由此而来!
尽管很多厂商已经在研发12bit色的显示设备,但这几乎已经失去了意义,一是因为人眼几乎无法分辨,二是对显示输出设备的要求很高,如果输出图像的精度跟不上,显示器更高的色彩并没有质的提升。
近年来液晶面板技术发展迅速,已经有不少厂商推出了10bit色甚至更高色彩精度的显示器,至于大屏幕等离子电视的颜色数更高!由于显示设备发展的需要,NVIDIA在新一代G80流明引擎中提供了10bit色彩精度,NVIDIA将其称之为10-bit Display Pipeline,除此之外,8800GTX/GTS显卡还集成了一颗独立的RAMDAC与TMDS整合芯片,降低了输出干扰进一步增强了2D输出画质!
10bit色已经达到了大部分高端液晶显示器和液晶电视的色彩精度。对光照、色阶以及色彩饱和度方面都非常敏感的人眼来说,画面显示质量无疑更加接近真实!10bit不仅仅能够提高2D输出画质和图像艳丽程度,而且对于光影渲染变换莫测的3D游戏来说,优异HDR+AA的最终显示效果以及未来DX10游戏画面将变得更具魅力!
● 第五章 量子物理技术,面向未来的GPU物理加速
我们可以注意到,NVIDIA在8800GTX显卡上提供了两个SLI接口,但是这两个接口只需要连接一个就足够(NVIDIA官方声明,双卡插两个桥接器没有任何意义),那么多余的一个是做什么用的呢?我们还可以注意到,作为8800GTX SLI系统的建议平台,NVIDIA nForce 680i SLI芯片组提供了三条PCI-E X16插槽,那么第三条PCI-E插槽是做什么用的呢?
虽然NVIDIA目前还没有明确表示,但种种迹象标明NVIDIA将会在今后不远的时间内正式发布GPU物理加速技术,这种完全依靠GPU通用计算能力的物理加速方案可以由一块显卡来完成,也可以是双卡SLI Physics,当然非常好的配置就是三显卡,其中双卡SLI渲染3D,第三块显卡当作物理加速卡使用!
NVIDIA将这种灵活的物理加速方案称之为Quantum Effects(量子物理技术),基于统一渲染架构的G80核心拥有多达128个Stream Processor单元,每一个Stream Processor都拥有比DX9时代更加高效的浮点运算能力,要处理纯浮点运算的各种物理特效可以说是轻而易举!
G80已经在硬件部分准备就绪,但如今物理加速引擎尚未统一,微软DX10 API也没有集成相应的标准,所以在软件方面G80物理加速技术没有到位。根据之前的报道来看,NVIDIA很可能将会与Havok进行合作,依靠其新版Havok FX引擎在游戏中实现纯GPU物理加速,彻底解放苦累不堪的CPU。
想想看完美支持DX10的8800GTX显卡现在还只能用来跑DX9游戏,因为微软Vista系统和DX10游戏都还没发布,因此GPU物理加速遥遥无期也可以理解,因为GPU物理加速引擎以及相关游戏也没有正式发布。现在我们只能说NVIDIA将会在未来某个版本的ForceWare驱动中开放GPU物理加速,至于要等到哪一天,还得指望DX10游戏和物理引擎尽快问世!
● 第六章 G80核心架构设计解析
G80是首颗采用统一渲染架构的GPU,同时也是首款支持DirectX 10、Shader Mode 4.0的GPU,有关统一渲染架构相比传统像素顶点分离式架构的优势在前文中已经作了非常详细的分析,而微软DX10 API和SM4.0也在技术层面进行了大量介绍,现在我们就来仔细看看这颗具有革命意义的G80 GPU!
● 第六章 第一节 G80的核心架构图
从NV40到G70,核心结构的改动非常少,最明显的变化就是管线阵容的扩大,而当G80核心架构图公布后,不由得感慨这确实是图形领域的一次革命,我们必须重新审视:
通过对比可以直观的看到,G80的架构和G71有了很大的不同,熟悉的Vertex Shader(顶点)和Pixel Shader(像素)已经不复存在,取而代之的是8组并行的阵列,每组阵列中有16个Stream Processor(流处理器)和8个Texture Filtering Unit(纹理单元),这样G80总共拥有128个流处理器和64个纹理单元。
G80的统一渲染架构就是基于庞大规模的流处理器(Stream processor)来动态分配给各种操作。这样的设计可以让每个处理单元都参与运算,每个流处理器均能够处理顶点、像素和几何操作,可以将其理解为一个通用的浮点处理器,这些浮点处理器都可以随时有计划的编排分组成不同的工作量,从而达到提高GPU效率的目的。
可以看到,NVIDIA在G80核心中依然坚持了“像素”:纹理=2:1的配置。如果按传统管线式的定义来理解G80的话,那么它的规格达到了G71的2.7倍,而且效率更高!
再来看看G80架构的下半部分,拥有6组ROP(Raster Operation Partitions),比G71多了2组,每组ROP可以处理4个像素(相当于24个ROPs),连接64bit显存控制器,这样G80就总共拥有384bit的显存位宽,能够支持GDDR1、GDDR2、GDDR3和GDDR4显存。
8800GTX拥有全规格的G80核心,包括128个流处理器、64个纹理单元,24个光栅单元和384Bit显存。而8800GTS被屏蔽了两组阵列,这样就少了32个流处理器和8个纹理单元,同时闲置了一组ROP,这样光栅单元减少4个,显存位宽减少64bit,因此8800GTS的配置就是96个流处理器、36个纹理单元、20个光栅单元和320Bit显存。
有了庞大的流处理器,现在面临的问题就是如何将这些单元更加有效的利用起来,合理的分配顶点、像素、几何以及其他操作。完成这个任务的就是架构图中右侧的Thread Processor(线程分配器),其道理类似于DX9C当中的动态流控制,可以根据应用程序的反馈调动Setup引擎动态执行各种浮点渲染操作。
● 第六章 第二节 G80统一渲染/DX10架构的特色
在G80的架构中,超大规模的流处理器并不让人意外,最令人感到好奇的是纹理单元达到了64个,另外几何着色器也是一个新的词汇,下面着重介绍这两部分。
- G80为什么需要多达64个纹理单元:
通过以往的分析我们可以得知,近年来游戏中对像素的运算量逐年提升,而纹理运算量所占比例呈下降趋势,因此NVIDIA坚持使用像素:纹理=2:1的配置,而ATI更是采用了3:1的配置,并且声称当前主流游戏已经达到了5:1甚至更高的比例。
然而在G80核心中我们可以看到NVIDIA继续保持了2:1的比例,并将纹理单元数目提高到了空前的64个,这是为什么呢?
原因就在于G80是支持DX10的GPU,DX9时代的某些结论已经不适用了!DX10 SM4.0中提供了全新纹理阵列(Texture arrays)的支持。在每个纹理阵列中,最多可以保存512张同样大小的纹理。而且每张贴图的分辨率被扩展到了8192×8192的超级分辨率。更大的分辨率意味着纹理中更丰富的细节。在一个shader中能够同时访问的纹理个数被增加到了128个,也就是说在每次执行同一个shader时,可以使用一个纹理阵列的512个纹理中的128个。所以说,在DirectX 10中,纹理的多样性和细节程度将会有大幅的提升。当然这也要求GPU拥有更强的纹理处理能力!
上图就是NVIDIA为GeForce 8所设计的三大演示Demo之一Waterworld,必须在Vista系统DX10模式下才能运行,通过这个Demo主要展示了G80完美的纹理渲染效果。岩石表面采用了多种变幻莫测的高精度纹理贴图,这些贴图还可以被流水润湿,即便是将镜头放大N倍,层次感强烈的贴图也不会出现失真的情况。这个Demo结合了G80强大的纹理渲染能力以及高效的全新各项异性过滤技术!
- 进一步解放CPU,几何着色器的作用:
按之前我们的理解,统一渲染架构就是将像素和顶点渲染综合起来交由同一的运算单元处理,不过在G80的架构图中,我们可以看到其统一渲染架构除了像素和顶点之外还包括了几何着色器(Geometry Shader),这是GPU中首次加入这样的运算单元。
同刚才介绍的纹理阵列类似,几何着色器也是SM4.0中新加入的内容,它第一次允许程序在图像处理器中创建新数据。这一革命性的事件使得GPU在系统中的角色由只可处理已有数据的处理器变成了可以以极快速度既可处理又可生成数据的处理器。在以前图形系统上无法实现的复杂算法现如今变成了现实。如此一来类似模板阴影(Stencil Shadow)、动态立方体贴图(Dynamic Cube Map)、虚拟位移贴图(Displacement Mapping)等依靠CPU或多通道渲染(Multi-Pass Rendering)的算法效率提升了很多。
几何着色器可以根据顶点的信息来批量处理几何图形,对顶点附近的数据进行函数处理,快速创造出新的多边形。通过steam out将这些结果传递给像素或者是缓冲区,将CPU从复杂庞大的几何运算中解放出来。大爆炸、粒子效果、瀑布流水、毛发渲染等复杂又关联的场景都可以用几何着色器很逼真的表现出来。
NVIDIA称,GeForce 6 Demo代表作美人鱼Nalu的头发和阴影受限于CPU的运算能力,因此Demo效能比较差,而GeForce 8 Demo代表作名模Adrianne的头发和阴影渲染则完全通过DX10由GPU独立完成,在大幅提高显示效果的同时效能比较可观!
● 第七章 G80视频性能测试
● 第七章 第一节:PureVideo HD介绍/蓝光影碟播放加速测试
接下来让我们谈谈G80在视频播放方面的性能,关心NVIDIA的朋友们都知道,PureVideo软件是NVIDIA在视频播放方面的“利器”。有了它的支持就可以发挥显示核心中视频处理的性能,在播放主流格式视频的时候不仅可以大幅度降低CPU占用率,而且能明显提升DVD和1080i格式HDTV的画面质量。
随着高清时代的到来,PureVideo也升级到了“PureVideo HD”,如果从字面理解,我们可以把它看成是“PureVideo+高清”,而这确实也比较接近正确答案。PureVideo HD真正的定义就是PureVideo搭配上完整的蓝光(BD)或HD DVD系统,形成一整套HDTV播放解决方案。
如图所示,这是带有内容保护的HDTV播放的全过程。蓝色部分是CPU所承担的工作,其余绿色步骤均是PureVideo HD发挥作用的空间。
我们今天想要为大家展示的,一方面是G80在蓝光影碟(MPEG2 HDTV)播放方面所起到的作用,另一方面则是用HQV来验证一下G80与ATI X1950XTX在视频效果方面的性能高低,我想这是很多关心显卡视频性能的朋友们都盼望已久的。
本次我们使用的索尼蓝光刻录机与《箭鱼行动》蓝光影碟
为了体现出G80的硬件加速效果,我们在播放蓝光影碟时特地选用了一款低端的CPU:赛扬D331,这几乎已经是现在能够买到的最低端产品。对于这样一款根本无法流畅播放蓝光影碟的CPU,G80能够提供多大的帮助?
测试的结果是惊人的,从上面的对比图中我们可以看到,没有显示卡硬件加速时CPU占用率是100%,此时已经发生严重的画面断裂和丢帧,根本无法正常观看;而打开G80的硬件加速功能之后,CPU占用率降低到了80%左右,画面也变得流畅,赛扬D331也享受到了1080p蓝光影碟!
以往测试:奔腾D 830配合PureVideo HD硬件解码HD DVD影碟(H.264编码)
需要说明的是,现在的蓝光影碟所采用的都是MPEG2编码,对于CPU性能的要求并没有达到最高。而随着技术的成熟,蓝光将会和现在的HD DVD影碟一样,采用更高级的H.264和VC-1编码,到时候用户至少要使用一块双核CPU+显示卡硬件加速才能够应付。相关性能测试请参见《迈入高清新时代!PureVideoHD独家解析》。
● 第七章 第二节:HQV Benchmark:G80 vs X1950XTX
接下来我们要进行一次针锋相对的视频播放效果测试:HQV Benchmark,G80 VS X1950XTX!以往泡泡评测室进行过不少HQV的测试,不过NVIDIA/ATI的最高端产品如此近距离交火,还是第一次。有关HQV的介绍与测试,各位读者可以参阅《教你给显卡视频评分 HQV权威测试教程》。
与3D性能类似,芯片性能和显存带宽越高,NVIDIA显示卡的视频性能也就越好,尤其是在做反交错处理等项目时,高性能的显卡可以采样更多的象素以得到更好的画质,这有点类似3D方面AA/AF的倍数与画质的关系。本次HQV测试我们选择了G80对决X1950XTX,应该说是NVIDIA/ATI在标准清晰度视频画质方面的巅峰之战了。
需要说明的是,HQV Benchmark是一项视觉效果测试,其评分是根据画面而定。G80在本次测试之中得到了128分的好成绩,仅仅还差两分就是满分130了;而X1950XTX因为在边缘锐化方面性能不足,因此得到了118分的成绩。另外,ATI有一款视频调节相关工具Wreg这次并没能及时提供给我们,也对测试结果有一定的影响,等我们拿到这款工具之后会更新本次测试的结果。
通过蓝光影碟播放与HQV Benchmark的测试,大家都看到了G80在视频方面的性能——赛扬D331流畅播放MPEG2蓝光影碟、HQV几乎得到满分,应该说G80为我们交了一份非常令人满意的答卷。随着2008年奥运会和HDTV相关设备的普及,高清距离我们越来越近了,显示卡的视频性能正在得到前所未有的关注,相信G80将会在高清时代大有作为。
● 第八章 美女策略 NVIDIA产品形象代言人赏析
伴随着每一代新显卡的发布,NVIDIA都会公布一个或者多个美轮美奂的演示DEMO。这些演示DEMO的设计初衷就是通过完美的3D效果征服每一位观众,让大家对新显卡的性能及技术充满憧憬和期待。而且在这些DEMO当中必定会有一个做为重中之重,对主角进行大力宣传,这就是数年来坚持不变的虚拟形象代言人策略!
下面就来回顾下NVIDIA近代虚拟形象代言人,从中可以领略到每代产品所能达到的非常好的渲染效果:
- GeForce 4 Ti,令人疯狂的狼人:
狼人Demo是GeForce4 Ti发布时引起最大轰动的一个DEMO。狼人模型有10万个多边形,关节动画采用了61块骨骼,而且还有8层皮毛。一根根清晰可见的毛发以及完美的反光效果给人前所未有的空前震撼!
GeForce 4 Ti的nfiniteFX II 引擎第一次证明了利用每个像素进行照明的逼真皮毛可以应用到高度复杂的动画角色中,并且以高帧速运行。皮毛的颜色和密度使用一个覆盖整个形体的单独纹理贴图来控制,这给皮毛提供了截然分明的外观,而不是千篇一律的样式。nfiniteFX II 引擎的高级像素阴影处理器支持三四种纹理,加速了此类渲染。此外,其双顶点阴影处理器每秒钟能够驱动1亿多个顶点——顶点依然是复杂像素和纹理的保证!
- GeForce FX,栩栩如生的蝴蝶仙子:
- GeForce 6,精心打造的美人鱼Nalu:
GeForce FX系列的代言人蝴蝶仙子取得了用户的普遍认可,于是在GeForce 6系列产品NV继续推行虚拟形象代言人的做法,美人鱼Nalu的出现可以说让世人为之震惊!
首先我们不得不佩服NVIDIA的造型设计,完美而性感的身材、飘逸的长发、鱼尾与人身的完美结合、漂亮的鱼鳞设计——这一切都展示出了NVIDIA强大的设计实力以及在Nalu身上投入的心血!
美人鱼Nalu的头发带给人震撼的视觉冲击,它是由一种叫“深度阴影”的技术实时生成的。头发的上部由于光照而发亮,头发的下部则处于黑暗状态;随波荡漾的飘逸长发就要给GPU很大的负担!
除了令人惊叹不已的头发之外,别忘了Nalu是处在深海之中,光照使用了鳞波荡漾变幻莫测的动态HDR光源,Nalu的身体处在不断游动之中,此时长发和皮肤就会被柔和的阴影所包围。NVIDIA使用了DirectX 9.0c SM3.0标准当中非常重要的“渲染至纹理”技术来达成这一看似不可能完成的渲染!
SM3.0、HDR、SoftShadow等等DX9C时代重要技术都在Nalu身上得到了完美体现,美人鱼的形象也深深地刻在了每一位玩家的脑海,成为NVIDIA史上最成功的虚拟代言人!
- GeForce 7,黄皮肤美女Luna:
蝴蝶仙子Dawn和美人鱼Nalu都给NV带来了很好的GeForce品牌宣传效果,让新一代产品的形象能够迅速深入人心,于是在全新的GeForce 7系列产品中NV继续贯彻虚拟美女战术——Luna MM诞生!
这个Luna Demo演示了一件很简单的事情,小Luna一步步走向天梯,在尽头等待她的却是三位外星守护者,Luna被他们的守护神选中成为新的女祭司。经过简单的仪式之后,原本纯情可爱、冷艳的Luna变得更加成熟、妖艳,黑色的头发和白色的衣服变成了NV御用的绿色!
Luna沿用了Nalu当中的Demo设计理念,那就是大量使用光影效果、超级复杂的头发渲染和半透明效果。由于7800和6800都能够支持最新的DirectX 9.0c和SM3.0技术,所以Demo当中并没有让人耳目一新的图形技术出线。NV主要是通过异常复杂的Demo来展示7800强悍的处理能力!Luna的衣服和三位守护着的肉身都使用了半透明处理;Luna的头发进一步展示了NV Demo设计能力和GPU的强大处理能力;另外在变身过程中还使用了位移贴图技术,使得碰撞过程立体感更加强烈!
总的来看,由于DX9 API的限制,NV的Demo已经达到了顶点,画面效果很难有质的提升。现在完美支持DX10的G80来了,它能带来什么样的惊喜呢?
- GeForce 8,从虚拟到真实,真人模特实时渲染:
时代在变、技术不停的发展,但美女策略是桓古不变的,似乎只有渲染出更真实的美女才能打动消费者的心!NVIDIA在GeForce 8上继续采用美女作为Demo的载体,而且这是首次选择了真人美女模特作为对象,在电脑图形虚拟世界中尽可能的还原真实面貌:
● 第九章 GeForce 8800GTX/GTS显卡解析
在了解了诸多超前的技术和架构之后,现在就来看看G80的旗舰版——GeForce 8800GTX显卡实物:
● 第九章 第一节 怪兽登场!体型超长的8800GTX
- 超高集成度,夸张的供电模块使PCB变长:
首先印入眼帘的就是巨大的核心,核心周围整齐环绕着12颗显存,输出部分有一颗高度集成的特殊芯片,这些高集成度的半导体芯片就占据了大部分PCB空间。
为了保证G80核心以及12颗显存在高频率下稳定运作,对显卡供电模块提出了很高的要求,所以8800GTX的供电模块设计非常复杂,如此夸张的供电模块使得8800GTX不得不延长PCB!
- 散热器结构改变,风道式设计更合理:
在8800GTX上NVIDIA启用了全新的散热器,这个巨型散热器为全覆式设计,核心、显存、IO芯片和供电模块的散热面面俱到。
6.81亿晶体管的G80核心,再加上高达1800MHz的768MHz显存,8800GTX的发热量是非常恐怖的,所以这个散热器也是肩负重任。从其结构上可以看到,大口径涡轮风扇提供了充足的风量,而散热片部分为铜底铝鳍片,充分利用有限的空间增加散热面积,辅以两条热管将核心的热量导出到散热片,使热量分布更加均匀,风道式结构可以让涡轮风扇的出风以最低的阻力排出体外,这样能够一定程度上控制噪音,而且散热效率也是最高的!
和7900GTX的散热器相比,涡轮风扇拥有更高的排风效率,而侧吹式结构能将绝大多数热风直接排出机箱外,不但不会增加系统散热负担,而且能够加速机箱空气对流,这种风道式结构是目前风冷散热器的最优设计(高端CPU和GPU风冷散热器都是热管+侧吹风道式结构)。
8800GTX与X1950XTX的散热器结构非常相似,体积也差不多,不过X1950XTX为全铜散热片,8800GTX为铜底铝散热片,铜的密度远大于铝,由于8800GTX的PCB太长,采用纯铜散热器恐力矩太大显卡无法承受。所以8800GTX虽然体积比X1950XTX大,但是重量却要轻很多。
- SLI技术再升级?8800GTX怎么有两个SLI金手指?
8800GTX不但在规格和架构方面给了我们很多惊喜,显卡造型更是让人惊讶不已,除此之外显卡上集成的两个SLI金手指和两个6Pin供电接口也是令人很好奇,为什么8800GTX需要两个金手指呢?
ATI前不久发布的X1950Pro和X1650Pro显卡就集成了两个CrossFire金手指,由于CrossFire需要更高的数据传输带宽,因此必须插两个桥接器才能达到非常好的CrossFire效能。由此我们很容易联想到8800GTX可能是因为显卡性能太强,在组建SLI系统时通过SLI桥传输的数据量比上代显卡更多,所以集成了两个,实际上问题并没有我们想象的这么简单!
根据NVIDIA的官方解释,两块8800GTX显卡组建SLI只需要插一个SLI桥接器就够了,而且是插在任意一组金手指上面,插两个桥接器没有任何意义,因为另一组金手指是留给“未来”升级之用!
至于第二个金手指到底有何用途,NVIDIA暂时没有表态,但我们可以推测,双SLI金手指只有两种可能:一是用来组建Quad SLI;二是添加第三块显卡,实现GPU物理加速;总之一切皆有可能!
- N卡巅峰之作,为什么需要两个6Pin供电接头?
8800GTX的两个6Pin供电接头让笔者想起了6800Ultra(AGP)显卡上的两个4Pin供电接头。6800U发布之时PCI-E尚未普及,当时更没有6Pin这种显卡专用的供电接头,所有高端显卡都和光驱硬盘共享4Pin接口,所以对于功率高达100W的6800U来说1个4Pin需要提供很高的电流,NVIDIA采用并联的方式在显卡上集成了两个4Pin接口,这样可以分担单个接头+12V的电流输入,防止电流过大引起接头烧毁!
随着PCI-E接口标准的普及,电源也开始为显卡提供了专用的接头,就是现在常见的6Pin口,这种接口相当于把两个4Pin口当中的+12V输出组合到一起(抛弃了+5V,因为显卡只用+12V),道理和6800U一致,只不过连接起来更加方便!
到了G80这一代,6.81亿晶体管的核心再次将显卡的功耗攀升到新的高峰,显卡的供电模块变得异常复杂,同时显卡供电接口也再次面临当年6800U上存在的问题——单个6Pin口提供的双路+12V难以满足8800GTX的需要,集成两个接口就是四路+12V可以分担电流,减少线路损耗,最重要的是防止接口烧毁甚至是供电不足引起显卡烧毁的惨剧!
● 第九章 第二节 耐人寻味8800GTX显卡设计
- 保守的设计,G80核心依然采用90nm工艺:
10月到11月间,NVIDIA和ATI竞相发布了多款采用80nm先进工艺的显卡产品,不由得让人感慨新工艺时代已经来临了。80nm工艺的优势已经在7600GT和X1950Pro显卡身上得到了完全体现,更小的核心面积意味着更低的功耗和发热量,量产之后成本可以降低20%,新工艺能够提高GPU频率上限,性能同比提升!更多80nm的优越性大家可以查看80nm的五大优势,既然80nm工艺有这么多优势,为什么NVIDIA还要使用较早的90nm工艺生产呢?
这是因为80nm工艺最近才开始量产,所谓的成熟也只是相对而言,简单具个例子台积电数月前已经宣布其65nm工艺开始投产,但是只能生产一些简单的数码、手机类芯片,对于动辄上亿个晶体管的GPU无能为力!而G80核心拥有恐怖的6.81亿个晶体管,是G71的2.5倍,在80nm制程良品率尚未达到非常好的值之前,NVIDIA为了保证产能和产品质量决不会冒险动用新工艺。成熟的90nm工艺虽然功耗大、发热大,但是良品率要高很多,而且产能充足,可以迅速投产快速占领市场!
其实回顾历史我们就可以发现G80的情形与去年G70惊人的相似:G70核心采用了成熟的110nm工艺,快速投产的7800GTX稳坐了将近半年的王者之位,ATI 90nm的X1800XT才对其造成了威胁,之后NVIDIA发布了更高频率的7800GTX 512MB成功的抵挡ATI攻势,暗中却在密谋90nm新工艺的G71核心——更高的频率、更低的发热、功耗和成本,这才是GeForce 7的真正实力!
竞争激烈的显卡市场永远都是先入为主,GPU采用何种先进工艺反而退居次要,想当年9700(150nm)战胜5800(130nm)、7800(110nm)战胜X1800(90nm)就是很好的例子。G80采用成熟的90nm工艺先发制人快速上市才是最明智的选择。等到明年80nm工艺成熟之后,再推出G81核心,进一步提高频率、降低功耗、发热和成本,NVIDIA在把握业界局势和市场形势方面显然要高明很多!
- 折衷的选择,768MB 384Bit GDDR3显存:
GPU的发展同CPU非常相似,性能越强就需要更高内存/显存带宽的支持,近年来显存频率节节攀升,从GDDR1到GDDR2再到GDDR3,如今采用GDDR4的显卡已经出货(ATI X1950XTX),同时显存控制器也从128Bit升级到了256Bit。所以很多人都认为下一代显卡将会采用512Bit显存控制器,然后搭配1GB以上容量的GDDR4显存。
然而G80的显存规格却令人出乎意料,NVIDIA为8800GTX配备了768MB 384Bit的GDDR3显存,8800GTS的显存更加奇怪640MB 320Bit!为什么NVIDA不使用先进的GDDR4显存,并且采用更改带宽的512Bit显存控制器呢?
其实512Bit显存控制器对于GPU来说不难实现,关键就在于PCB设计变得十分困难,512bit显存控制器就意味着光是信号线就需要在PCB上布出512条等长线路连接各片显存,这样必须采用14层以上的PCB才能良好的降低信号之间的相互干扰,显卡的制造成本成倍增加!
目前规格不凡的显存颗粒为16M×32Bit,组成512Bit的规格需要多达16颗显存,这样就对显卡PCB以及散热造成了沉重的负担,显存方面的成本也居高不下!至于GDDR4显存目前还不够成熟,0.9ns的GDDR4显存频率没有比GDDR3提高太多,反而是延迟变得更大,高延迟就意味着吞吐效率的下降。而且高电压的GDDR4显存在功耗控制方面并不理想,以现在的情形来看GDDR4的处境和当年首批GDDR2非常相似,如果不控制电压、提高存储密度、降低延迟,那么对显卡来说是一种负担!
可以说此次NVIDIA在显存的采用上非常谨慎,显存位宽使用了介于256Bit和512Bit之间的384Bit这种折衷的方案,如此一来需要12颗16M×32Bit规格的显存就能实现768MB 384Bit的方案,12颗显存都可以安置在PCB正面,一体式的散热器就能解决显存散热!而8800GTS的显存就更加灵活了,只要10颗显存就可以组成640MB 320Bit的规格。
8800GTX显卡768MB 384Bit的规格,容量和位宽都比7900GTX增加了50%,在成本与性能之间取得了平衡。而且显存也采用了三星目前最快的1.0ns GDDR3颗粒,理论运行速度可达2000MHz(默认1800MHz),带宽进一步提升,完全能够满足G80核心的需求!实际上G80的显存控制器已经能够支持GDDR4显存,只需对显卡PCB稍作改动即可,或许未来的“G81/8900GTX”显卡会使用GDDR4显存!?
- 独立的RAMDAC与TMDS整合芯片:
在8800GTX显卡的输出部分我们可以看到一个特殊的小芯片,乍看之下还以为是一个小型GPU,其实这是NVIDIA的一颗IO(输入输出)芯片:
由于G80的流处理器部分的工作频率高达1.35GHz,如果此时再将模拟部分的RAMDAC整合在GPU芯片内部,不仅在成本上无法控制,在输出质量上更是强差人意。为此NVIDIA将G80的模拟部分独立出来,做成单独芯片独立安装在显卡上。
独立的RAMDAC由于远离了GPU内部,使得电磁干扰显著降低。与此同时,NVIDIA还在NV10芯片中放入了TMDS和G80的视频输入输出部分。这样一来,G80不仅可以实现双头Dual-Link DVI的输出,还能够保持极高的输出质量。除此以外,NV10芯片还带来了真正10bit每通道的色彩输出能力,这要比ATI R580内部10bit色彩通道的设计明显更具优势!
所以说这颗NV10芯片其实就相当于是以往VIVO芯片的增强版,NV在7900系列中抛弃的VIVO功能被大幅增强,而且在安装ForceWare驱动时将会同步安装一体式的WDM驱动,使用起来非常方便!
● 第九章 第三节 次高端8800GTS显卡赏析
看完了优异的8800GTX,再来欣赏规格配置稍低一些的8800GTS。以往NVIDIA次高端的显卡都采用GT或者GS的命名,此次NVIDIA破例重新启用5年前在GeForce 2代上使用过的GTS称号,看来把它理解为GT和GS的合体更合理一些。
- 8800GTS和8800GTX的规格对比:
在介绍8800GTS显卡之前,首先来看看这两款同为G80核心的显卡到底有哪些差别:
可以看出,核心/显存频率8800GTS要低一些,最重要的部分Stream Processor从128个减至96个(应该是被屏蔽掉了32个),另外ROP(光栅操作处理器)少了4组,显存减少了128MB 64Bit的规格。
下面就来仔细欣赏8800GTS显卡,看看规格的削减如何反应在显卡实物上面。
- 毫不夸张地高端显卡,8800GTS:
与夸张的8800GTX相比,8800GTS的体形比较正常,它与7900GTX、7950GX2和X1950XTX的长宽高是完全相同的。这主要是由于8800GTS功耗下降不少,供电模块的设计没必要像8800GTX那么夸张,因此PCB长度得到了很好的控制。
- GTS与GTX的散热器结构一致:
看上去两款显卡的散热器是相同的,的确其结构完全相同,只不过GTS的散热器要比GTX小一号,整体长度缩减,内部散热片的散热面积随之减少。
8800GTS的频率比8800GTX低不少,显存容量降低,核心运算单元也屏蔽了一些,因此发热降低不少,为了很好的控制体积,自然需要采用小号的散热器。
- 只需摘掉两颗显存,就是640MB 320Bit的规格:
取下散热器,8800GTS最明显的特征就是有两个显存空焊位,这样10颗16M×32Bit的显存就组成了640MB 320Bit的规格,即便如此8800GTS的显存规格也要比7900GTX的512MB 256Bit高不少!
目前的高端显卡都使用了16M×32Bit的GDDR3/4颗粒,要达到更高的显存位宽,就必须使用更多的显存颗粒,8800GTS省掉两颗显存,显然是为了控制成本的需要。除了显存少两颗之外,显存规格也发生了变化:
GTX使用了三星最新的优异1.0ns颗粒,而GTS默认显存频率为1600MHz,1.2ns的显存正好能达到要求。
8800GTX作为旗舰级显卡,其设计思路就是最强的配置、不惜成本达到优异性能;而8800GTS的设计思路就是尽量控制成本,达到非常好的的性能价格比。
- 8800GTS只有一个SLI金手指和一个6Pin供电接口:
另外还可以注意到,8800GTS由于功耗的降低,只需要一个6Pin接口供电就足够了。SLI接口也只保留了一个,看来NVIDIA不打算今后对8800GTS开放Quad SLI技术,至于物理加速技术,8800GTS作为副卡连接在8800GTX的第二个金手指上应该也有可能的,当然这只是小编的猜测。
- 简化的供电模块设计:
8800GTS的频率更低、核心被屏蔽了部分运算单元、而且显存也少了两颗,因此功耗比8800GTX下降不少,这样供电模块就没必要大动干戈采用复杂的高成本设计。
- 输出品质的保证,NV IO芯片保留:
这颗芯片集成了视频输入功能以及配合G80核心实现10bit色的双Dual-Link DVI输出,将2D/3D画质提高的新的水平。8800GTS虽然在核心显存和供电模块等各方面都进行了削减,但这颗特殊的IO芯片得以保留。这就意味着8800GTS的3D性能虽然要比8800GTX弱,但它完整的继承了所有的功能和特效!
NVIDIA这次发布GeForce 8800系列显卡的同时,各大显卡厂商的GeForce 8800显卡产品也在同期发布并且上市。
·翔升
作为大陆唯一的一家AIC显卡厂商,其实力和反应速度丝毫不比其他AIC差,在第一时间送来了他们的GeForce 8800系列全线产品。
- 旌宇
● 第十章 性能测试
G80核心的架构空前强大、8800GTX显卡的配置和规格非常夸张,那么它究竟能够将游戏性能提升到什么样的高度呢,下面就正式进入测试环节!
● 第十章 第一节 测试系统配置和设置
自从ATI被AMD收购之后,NVIDIA和Intel的关系走的越来越近,NVIDIA此次在发布G80显卡的同时,推出了在Intel平台的最新力作nForce 680i SLI芯片组。此次我们的测试平台自然就要选择当前最强的系统:
测试平台 | |
处理器 | Intel Core 2 Extreme QX6700 四核心, 2.66GHz, L2=4MB×2 |
主 板 | EVGA nForce 680i SLI |
显 卡 | 8800GTX 768MB(575/1800MHz) 8800GTS 640MB(500/1200MHz) 7950GX2 1024MB(500/1200MHz) 7900GTX 512MB(650/1600MHz) X1950XTX 512MB(650/2000MHz) |
内 存 | 海盗船DDR2 1152 1GB×2 (运行模式800MHz 4-4-4-8-1T) |
硬 盘 | Seagate 7200.9 120GB |
显示器 | Dell UltraSharp 3007WFP |
驱动程序 | |
nForce Forceware 9.34Beta | |
Forceware 96.94 G80专用版(8000GTX和8800GTS) Forceware 94.71WHQL(7950GX2和7900GTX) 催化剂6.8 R580+专用版(X1950XTX) | |
操作系统 | Windows XP + SP2中文版 |
CPU为Intel最强的四核心处理器Core 2 Extreme QX6700,这CPU相当于是两颗Conroe E6700,拥有运行在2.66GHz的四颗核心,每两颗核心共享4MB L2缓存,总共8M。
主板为美国板卡大厂EVGA采用NVIDIA公版设计的nForce 680i SLI芯片组主板,性能全面超越Intel自家的975x和G965,而且能够支持SLI技术,堪称Intel平台完美之作,配合四核处理器达到当前优异性能!
内存使用了世界知名大厂海盗船最新、最高端的DDR2-1140。
● 测试方法说明:
如今的优异显卡性能越来越强,显卡更新换代速度之快令人目不暇接,然而游戏玩家对显卡的要求也是与日俱增。对于高端用户而言,使用大屏幕显示器在高分辨率玩游戏是常事,而且抗锯齿、各种游戏特效以及HDR技术能开的都统统打开。
作为高端显卡来说在低分辨率下跑出几百帧的FPS基本没有意义,而且很容易受到CPU的制约FPS无法继续提升,导致不同的显卡性能难分高下。因此我们的游戏测试从1600×1200分辨率起跳,1920×1200作为当前高端主力24寸液晶的分辨率被很多玩家使用,所以也是必不可少;而消费级显卡和显示器最高能够达到2560×1600分辨率,对于优异玩家来说30寸液晶显示器绝对是梦幻配置,同时也是8800GTX的较好排档,在这种分辨率下的测试成绩最能代表其真正实力!
所有的游戏自然是所有特效全开最高,能开HDR、SoftShadow、AA的尽量都开启,下面我们就来看看最强显卡之间的较量。
● 测试项目:
除了基准测试3DMark之外,测试游戏保留了四款经典FPS,并且加入了四款最新发布的游戏:
FarCry
FEAR
Call of Duty
细胞分裂:混沌理论
半条命2:第一章
Prey
帝国时代:酋长
英雄连
● 对比显卡:
NVIDIA上代优异显卡7950GX2和ATI最强的X1950XTX都是必不可少的,NVIDIA 7900GTX虽然已经停产,但它代表了单颗G71核心最强性能,因此我们也加入对比。
这样包括8800GTX和8800GTS在内总共5款优异显卡,那么就来见识一下NVIDIA新一代产品能比上代强多少?
●第十章 第二节 基准性能测试
FarCry是一款能够支持ATI X1000显卡HDR+AA特效的游戏,但非正式的1.4补丁仅能在开启HDR的情况下打开2xAA,可以说并不成熟。
现在NVIDIA G80能够完美支持HDR+AA技术,我们尝试在FarCry 1.4中开启HDR+AA,但是效果和之前的GeForce 7没什么两样——画面破碎不堪!看来专为X1000推出的1.4补丁并不能支持G80的HDR+AA技术,我们只能期待不久之后发布新的补丁来解决之一问题,相信这并不需要太多时间!
因此,这里的测试成绩依然分为单独开启HDR和单独开启AA两组,首先来看看AA性能:
最新的半条命2第一章依然使用了Source引擎,但Valve一直都对引擎做改进和优化,Source引擎使用了Int16格式的HDR,因此DX9显卡都可以完美开启HDR+AA特效,但精度范围不如FP16 HDR。
● 第十一章 总结
制作团队:
策划 泡泡网评测室主任 常凤臣
组织 泡泡网显卡频道主编 洪琦
测试 泡泡网显卡频道高级编辑 孙敏杰
视频加速测试 泡泡网软件频道主编 孙维
DirectX技术支持 FrontFree DGTG 刘宏春
顾问 泡泡网 陈明辉
美工 泡泡网 韩宁 王琛
鸣谢:
NVIDIA中国区技术市场经理 邓培智 先生
ASUS 张灿、刑磊
XFX 冯军强、潘莹
翔升 周萍、陈谊
盈通 秦晋、易玲
Inno3D 张胜勇
旌宇 候颂 <