快讯

真DX11架构 Tessellation技术深度解析

2010-07-29 00:06  出处:PConline原创  作者:XP   责任编辑:liujie 

第1页:DX11的灵魂 Tessellation技术深度解析

    2009年10月23日,微软正式发布最新一代操作系统——Windows 7。与之同时公布的还有玩家最为关注的DirectX 11应用程序接口(API)。作为DirectX 11的首款硬件产品,ATI早在Windows 7发布一个月前就已经发布了Radeon HD 5000系列产品。而NVIDIA方面由于在架构方面的大幅调整,在今年的3月27日才正式发布首款DirectX 11显卡——GeForce GTX 480。

    至此,DX11显卡的大战已经箭拔弩张,在一轮接一轮的价格、产品大战前,我们今天将为大家从显卡的基本架构说起,为大家讨论一下ATI以及NVIDIA的两款顶级显卡在DX11特效方面的改进,尤其是DX11的灵魂所在——Tessellation。

1

 

    Tessellation(曲面细分)是微软在DirectX 11当中加入的一项非常重要的技术,这一技术的诞生让游戏画质再次有了质的提升。不过对于Tessellation技术而言,ATI以及NVIDIA的设计思路再次出现了重大分歧,直接导致了DX11显卡在DX11游戏性能方面的大幅差距。那么究竟是哪些原因造成的呢?ATI以及NVIDIA的设计思路又差别在哪里?我们今天将为大家详细解析。

第2页:[第一章]Tessellation意义何在?

◆ DirectX 11的改进

    随着Windows 7操作系统的发布,DirectX 11也随之到来,在DirectX 11当中究竟进行了哪些改进,无论是在我们之前Radeon HD 5870的评测文章还是GeForce GTX 480文章当中都已经为大家介绍过了。本文将这些新特性归纳为下表以便读者了解:

2

 

 

 

    DirectX11大致有五点重要的改进,他们分别是:多线程处理、Shader Model 5.0、DirectComputer11、Tessellation、HDR纹理压缩。其中,除了Tessellation需要在架构方面进行较大改动外,其他方面主要都是通过指令代码等方式来实现。因此,想要辨别显卡在DX11架构方面改进的幅度,则主要归结到了Tessellation方面的改进。在我们了解ATI以及NVIDIA产品在Tessellation方面进行的架构改进前,有必要为大家详细介绍以下Tessellation究竟是一个怎样的技术。

◆ Tessellation技术解析

    Tessellation(曲面细分)是一个晦涩难懂的技术词眼,下面我们将用比较易懂的语言来为读者解释一下。实际上Tessellation就是把一些粗大无序的几何模型图形分成很多更小的图形,从而实现更细致的几何模型表现。下图就是一个很简单的例子:

3

 

    通过上图可以看到Tessellation能够将普通的几何模型重新拆分,将每个平面(实际上是三角形)重新细分为更多的平面,让物体看起来更加细致,更加接近现实当中的效果。Tessellation技术的加入能够大幅降低CPU资源,同时还能够让图像质量得到大幅提升。

    实际上,Tessellation最早由ATI提出,并且ATI在R6xx以及R7xx产品当中已经加入了这一功能,但是限于这个技术的独有性,因此能够为这一技术提供支持的游戏厂商少之又少。而微软将这一技术重新优化,纳入了DX11当中,也为Tessellation技术的普及提供了强劲的支持。

 

第3页:——Tessellation工作流程解析

◆ Tessellation工作流程

    DirectX 11 Tessellation的处理单元我们称之为Tessellator单元,Tessellator单元本身不具备可编程性,因此DirectX11向tesselator单元输入或者从中输出的过程是通过两个传统的管线阶段完成的:Hull Shader (HS,外壳着色器)和Domain Shader (DS,域着色器)。

1

 

    Hull Shader负责接收琐碎的图形数据和资料,而control points将会基于如何配置Tessellator来产生数据。这些琐碎的图形数据和资料会形成一个新的primitive单元(类似于顶点单元和像素单元),这种primitive单元可以将平面的一段分块处理。Control points用来定义想要得到的图形(比如说一个曲面或者其他)的图形参数变量。如果您经常用Photoshop绘图软件的话,不妨把Control points理解为PS的钢笔工具:用平面代替线的贝塞尔曲线功能。Hull Shader采用control points来决定如何安排tessellator处理数据,利用Tessellator生成大批量的、确定数量的点,然后将数据传送给Domain Shader,Domain Shader将这些点转换成3D处理中的顶点,最后GPU生成曲线以及多边形。

2

 

    Tessellator只负责分块处理。Tessellator将Hull Shader基于某种参数而传送给自己的琐碎图形数据和资料分离成点,再将分离出来的一系列点发送给Domain Shader,后者将会完成这些点到图形的过程的处理。那么,编程人员就得为他们的代码编写Hull Shader程序,而不需要考虑TS的变成任务。可以说,Tessellator就是一个固定功能模块,用来处理一些基于一定参数的输入数据。

3

 

    Domain Shader将会接收由Tessellator产生出的点,并依照终点控制(control points)置换贴图将这些点形成一个合适的几何图形。Domain Shader通过运行开发者设计的DS程序来执行这些操作,这些DS程序控制这些新产生的点如何转移或者如何按照终点控制以及纹理渲染取代这些数据。处理完毕这些点之后,Domain Shader将会输出一个个顶点。我们很可能就会看到大量Domain Shader输出并直接进行光栅化,以便几何图形可以分散到屏幕上进行像素处理。

第4页:——Tessellation技术优势体现

◆ Tessellation的优势

    看完前面的技术介绍,可能有朋友会问:Tessellation技术是不是真的很先进、是不是一种进步呢?我们知道,Tessellator本身是一种固定功能模块,而不具备可编程性。Tessellator的输入和输出从一定程度上讲也可以通过Hull Shader以及Domain Shader模块来操作。Geometry Shader(GS,几何着色渲染)是管线中一种可编程性模块,尽管这种管线不仅兼具Tessellation功能,而且还具备其他功能,但是GS却不能在任何一个有用的范围内执行Tessellation操作。在渲染管线中大举向可编程性进军基本上已经成为业界的前进方向,而现在我们却后退了一步,为什么会这样呢?

    固定功能硬件与可编程硬件之间的争论,一直主要是性能对特性以及性能对实用性孰重孰轻的问题。起初,固定功能模块对于硬件性能的高低至关重要。随着时间的推移,人们开始认识到在绘图芯片中植入固定功能模块根本不切实际。比如说,如果开发者不能编出一套能充分挖掘硬件性能的程序的话,在这种硬件中加入再多的晶体管也是徒劳的。这就促使开发者们设法在核心架构上做文章,让这种架构不断扩展运算源,这种运算源可以被共享,而且可以被大量不同的任务采用,但是这并不意味着固定功能硬件就失去了存在的意义。

2

 

现在我们依然面临着一个问题:除非开发者能够尽可能的挖掘硬件的潜力,否则在Tessellator中堆砌晶体管是没有用的。但是让其有意义的理由是:如果开发者可以充分利用硬件的话,ROI(投资回报比)是非常高的:这样可以轻松的从一种固定功能硬件Tessellator中获得巨大的Tessellation性能,这样做要比把必要的资源加入几何渲染单元以便获得同样的可编程Tessellation性能要来得容易。当然了,这并不意味着我们将会看到固定功能模块可以在绘图硬件中再次兴起,因为这一先进的特性如果要继续向前发展的话,这一特性的早期应用就必须以牺牲可编程性为代价。目前,绝大部分任务将会继续以灵活的编程性为最终目的,而且在不久的将来,我们可能看到Tessellator将会加入越来越多特性,直到tessellator具备完全的可编程性。

    以上所有这些关于固定功能Tessellation的技术性评价并不代表我们就对Tessellator的优势漠不关心。现在让我们来了解一下Tessellator的优势。目前,美工需要做的就是为某一物体的不同LOD(Level of Detail,随着物体或近或远的移动,物体的复杂性降低或者增加)制作不同的图像,而每个LOD里通过纹理渲染的几何模拟由像素着色器负责。这样的话,对于美工和编程人员而言就有了额外的工作要做,而且会在性能方面下很多功夫。

3

 

    Tessellation是创造更多纹理细节、阴影以及平滑边缘的几何图形的最佳途径之一。而且,高级几何图形同时也需要真正的、完美的位移贴图。当前,大部分几何图形都是通过纹理渲染和某些诸如凹凸贴图、视差贴图之类的技术模拟实现的。即便是高质量几何图形,我们还是想用大量的普通贴图技术,以便可以利用光学算法,这样使最终画面出现裂缝、爆炸、山脊等效果就变得不那么难了。这是一种快速、有效的方案,而且还可以产生非常细微的图像效果,并解放像素着色器资源以供他用。在Tessellation技术的帮助下,美工便可以创造出一个极为细腻的表面图像,这种细腻的表面图像具有一个动态的LOD;将一个简单的hull shader单元以及一个移位贴图应用到domain shader单元的话,不仅可以减轻相关的工作负担,而且还可以提升画面的质量,促进性能提升。

3

 

    如果开发者们采用Tessellation技术的话,我们可以看到非常逼真的物体效果,而且随着DX11的发布,NVIDIA以及AMD最终将会从Tessellation技术中获益。那么究竟是NVIDIA获益更多还是ATI获益更多,我们接下来看看NVIDIA以及ATI两家产品在Tessellation架构设计方面的差异就会明了。

第5页:[第二章]从架构谈起,A/N设计对比

    虽然微软在DX11当中已经明确了Tessellation的执行流程,但是对于核心架构设计方面,还是需要ATI与NVIDIA方面的自行设计。ATI与NVIDIA在历代产品当中的核心架构设计上都存在不同的设计方向,此次DX11产品同样如此。

◆ ATI——架构简单,推出迅速

    早在2009年9月份就已经亮相的Radeon HD 5870当中,就包含了ATI的首款DX11显示核心——Cypress(RV870,官方正式代号为Cypress)。Cypress核心可以看到两组SIMD阵列呈对称型排列,其中每组阵列当中均有800个流处理单元设计。在单一SIMD引擎当中,ATI采用的排列方式依然是RV770的设计方式。也就是说,每个SIMD阵列当中包含10组SIMD阵列,而每个SIMD阵列当中又包含16个流处理器,每个流处理器包含5个流处理单元,因此总计1600个流处理单元。两者通过相同的高速数据总线与L2 Cache相连,同时也连通到Global Data Share上进行数据共享。

1

 

    从上面的架构图可以看出,Cypress更像是两个RV770核心的合体,而对于DX11技术的升级,主要集中在Graphics Engine当中。这样的设计方式,无疑更加简单,对于ATI的研发周期来说也会大幅缩短,这也是为何ATI的DX11产品会如此之早就能发布的一个重要原因。

◆ NVIDIA——架构复杂,研发较慢

    接下来再来看看NVIDIA方面。NVIDIA为了让Tessellation能够实现更好的效果,在GPU架构方面进行了大幅度的改进。从下面的架构图可以看出,GF100核心主要划分为Host Interface(主接口,负责PCI-E通讯传输,包括读取CPU指令等)、GigaThread Engine(主线程调度引擎)、4组Graphics Processing Clusters(后文简称GPC,图形处理集群,GPU的核心部分)、6组Memory Controller(显存控制器,每组显存控制器位宽为64bit,总位宽384bit)、L2 Cache(二级缓存,容量为768KB)、6组ROP单元(每组包含8个ROP,共48个)。

2

 

在GF100核心架构当中,我们并不会看到ATI的Cypress核心当中独立设计的Graphics Engine,那么GF100的Tessellation单元又在哪里?实际上,每组GPC当中的SM当中,NVIDIA都加入了一组PolyMorph Engine(多形体引擎)。而PolyMorph Engine则正是Tessellation的核心部分,并且,NVIDIA为了保证光栅单元的效能,在每个GPC中均设有一个光栅引擎(也就是四组PolyMorph引擎共用)。那么,实际上NVIDIA的GF100相当于拥有了一共多达16个PolyMorph Engine,虽然无法直接与ATI的Graphics Engine划等号,但是性能方面绝对要更具优势。带来的负面问题就是NVIDIA首款DX11显卡的延期。

 


 

    对于Tessellation方面来说,ATI以及NVIDIA可以说拥有了两种截然相反的态度:前者更追求产品的研发速度,而后者更追求产品的性能表现。那么不同的态度带来了怎样的产品?在我们之前的两篇重量级评测当中已经为大家详细介绍过了,本文当中将会着重二者的Tessellation方面的设计进行详细介绍。

 

第6页:Tessellation技术详解——ATI篇

◆ 酷似双核心CPU设计

    从Cypress的架构图来看,ATI在设计Cypress之初,并没有把Tessellator单元看得过于重要。因此在整个Cypress架构上,ATI遵循的宗旨更像是将两个RV770整合在一颗芯片当中,进一步提升显卡在超高分辨率当中的性能表现。而DX11仅是作为一个功能被加入到Cypress核心当中而已。

    Cypress的流处理器单元从前一代产品的800个激增到1600个,而核心面积却没有大幅度增加,这不得不说是ATI在Cypress芯片上设计得当的地方。

1

 

    如果仅仅从架构图上来分析,我们似乎看到了一款双核处理器的影子,就好象两个RV770核心相对放置一样,这的确是增加性能一个最为快速的方式。但是,这样的设计也注定了Cypress不会在DX11方面有非常明显的改进。我们从下面的Graphics Engine介绍中就能了解到。

◆ Graphics Engine图形引擎

    在ATI的Graphics Engine当中,包含了众多图形处理单元,而Tessellator只是其中的以部分。在Tessellator当中,内置了可编程的Hull Shader以及Domain Shader,这就是ATI提供DX11当中Tessellation技术的重要组成部分。同时,为了保证在高分辨率下得到更好的性能表现,ATI特地设计了两组Rasterizer以及Hierarchical Z单元。

  在Tessellator单元当中,ATI严格按照微软的执行程序进行架构设计,并且整个核心当中,进配备一组这样的单元进行Tessellation计算。因此,如果游戏当中遇到众多需要Tessellation计算的场景,那么这个单元就很有可能成为整个GPU系统的瓶颈。为了证实这一点,我们将会在稍后的性能测试当中为大家实验。

第7页:Tessellation技术详解——NVIDIA篇

    与ATI的设计思路不同,NVIDIA在GF100上花费了大量的精力以及时间进行研发。为了加强Tessellation的性能表现,NVIDIA甚至将第一版的GF100设计产品推翻重来,为的就是设计出一款DX11性能强劲的产品,而并非在DX10产品上进行小改动就发布。

◆ GF100架构总览

    从NVIDIA的首款统一架构的G80开始,到今天的GF100产品,这已经是NVIDIA第三代统一架构产品。与第一代、第二代产品的小幅改进不同的是,第三代GF100统一架构产品为了迎合DX11的特性,在整体设计方面进行了较大幅度的调整,我们可以通过下面的架构图来看出:

2

 

在GF100核心当中,共包括4组GPC部分,每组GPC又包括四个Streaming Multiprocessors(流式多处理器阵列,简称SM阵列),而每个SM阵列当中又包含了32个Core(NVIDIA称之为CUDA Core,CUDA核心)。在每个GPC当中,NVIDIA都增加了一组全新的Rester Engine(光栅引擎)。而在每组SM当中,NVIDIA还增加了同样全新设计的PolyMorph Engine(多形体引擎,执行曲面细分的主要单元)。Rester引擎以及PolyMorph引擎实际上是NVIDIA对GF100核心架构做出的最大变化,这两个部分也是让Tessellation性能得到大幅提升的最主要原因。

◆ PolyMorph引擎

    PolyMorph Engine(多形体引擎)当中包括了五个主要部分,分别为:Vertex Fetch(顶点获取)、Tessellator、Viewport Transform(视口转换)、Attribute Setup(属性设定)以及Stream Output(流输出)。

 

    PolyMorph引擎执行步骤:

  1. 从一个全局顶点缓冲区中获取顶点,随后发送至SM,以进行顶点着色以及外壳着色。将每个顶点从物体空间转变成了世界空间(本页第一幅图片最左边的形态),而且还算出了Tessellation所需的参数(例如Tessellation系数,简单理解就是:将一个三角形重新划分为多少个三角形)。Tessellation系数(或LOD)被发送至Tessellator。
  2. PolyMorph引擎重新在SM当中读取Tessellation系数。Tessellator将修补面(控制点网格所定义的光滑表面)分成三角形并输出许多顶点。修补(u、v)值定义了网格以及形成网格的连接方式。全新的顶点再次发送至SM,域着色器(Domain Shader,简称DS)与几何着色器(Geometry Shader,简称GS)均在这里执行。DS能够根据外壳着色器(Hull Shader,简称HS)与Tessellator的输入来运算每个顶点的最终位置(本页第一幅图片中间的形态)。在本阶段中,通常会附上一个Displacement Mapping(贴图置换)以提升修补面的细节表现。几何着色器能够执行任何后期处理、按需增加或删除顶点以及基元。
  3. PolyMorph引擎会执行视口转换以及视角校正。
  4. 接下来就是属性设置,把后期观察口顶点属性转变成了平面方程,以进行高效的着色器评估。
  5. 将顶点“流出”至存储器,使其能够用于更多处理。

    PolyMorph引擎的执行大致分为这五个阶段,并且每一个步骤完成之后,都会交由SM进行处理,处理完毕,结果将自动进PolyMorph引擎的入下一个流程处理,当五个步骤全部执行完毕,就会交给下面的Raster引擎。由于PolyMorph引擎的大幅增加,更好的避免了Core的空载现象,从而大幅提升显卡的执行效率。

第17页:[第四章]未来发展趋势DX11见分晓

    通过前面的几个Tessellation专项性能测试来看,当Tessellation特效开启的越高,ATI显卡方面的性能下降幅度就会越明显,而NVIDAI方面虽然同样有性能下降,但是下降幅度显然要小很多。

    我们举个例子大家就不难理解这其中的原由了。ATI的以及NVIDIA都好比一个客运公司,在ATI的运输公司当中,拥有一辆Cypress大巴车,能够同时承载100人,但只有一个门供乘客上车;而NVIDIA方面拥有一辆名为GF100的大巴车,承载能力与ATI的Cypress相同,但是拥有16个车门供乘客上车。那么如果同样需要运送1000人,很有可能NVIDIA的GF100大巴车已经运送完毕,但是Cypress大巴车很有可能连第一批乘客都没有有上完,因为Cypress大巴车的上车门仅有一个,乘客上车需要排很久的队伍,影响了ATI客运公司的运送速度。

    显卡当中同样如此,ATI在Cypress当中仅设计了一组Tesselator单元,就会造成显卡运算当中Tessellation性能的滞后,以致整个显卡的运算速度遭到拖累。而NVIDIA方面虽然延长了产品研发周期,但是通过更好的性能表现,避免了这一状况的发生。

1
微软势必会为Tessellation的推广带来很大帮助

    如果以短期目光来看,ATI的这种做法确实拥有较为不错的效果,毕竟目前DX11游戏当中的Tessellation效果应用并不算非常广泛。但是如果从长远的角度来考虑,NVIDIA的产品应该在真正意义的DX11应用中会具有更好的性能表现,它能够满足用户更长一段时间里的应用需求。

    从这里,我们不难看出,ATI在从HD4870到HD5870架构上的改进与NVIDIA从GTX280到GTX480架构上翻天覆地的变化。ATI方面做的仅是在RV770架构方面的优化,并且加入了一些DX11的支持;而NVIDIA方面为了更好的让玩家获得DX11效果,重新为DX11量身打造了GF100的全新架构。两者之间的差异非常明显,显然此次NVIDIA做的更加全面、彻底。

2
Tessellation应用广泛的《巨石人》游戏DEMO

    我们有理由相信,伴随着微软的DX11技术推广,在未来的游戏当中,DX11以及Tessellation将会越来越多的被应用到游戏当中。而届时,一块真正意义上的DX11显卡才能够让玩家获得更流畅的DX11效果。那么真正意义上的的DX11显卡究竟是什么样的?相信我们的文章已经说清楚了,这也是未来显卡发展的必然方向。

IT热词搜索 来源:360新闻