更新时间:2023-04-30 09:14
曲面细分,英文称Tessellation,如果直译的话应该译作“镶嵌化处理技术”。由ATI开发,微软采纳后将其加入DirectX 11,成为DirectX 11的组成部分之一。由于这种技术广泛的应用在曲面的几何处理上,因此国内翻译时通常译作“曲面细分”。但实际上,这种技术不是只能用在曲面的细分处理上。
计算机不能直接生成曲线,当然更不能直接生成曲面。我们在计算机屏幕上看到的曲线、曲面实际上是由无数个多边形构成的。当然多边形越多,那么曲面就会展现的更为真实。在之前,这项工作都是由CPU完成的,但是CPU是通用处理器,几何运算性能有限,不能无限制的增加多边形数量。这也是我们在一些游戏中看到人的脸“棱角分明”的缘故。
Tessellation技术,便是一种化繁为简的手段,简单的理解,便是在一个简单的多边形模型中,利用专门的硬件,专门的算法镶嵌入若干多边形,以达到在不耗费CPU资源的情况下,真实的展现曲面的目的。
不过值得注意的是,与媒体宣传的不同,曲面细分技术并不是DirectX 11的全部,而只是DirectX 11的组成部分之一,更谈不上最重要的组成部分。
Tessellation技术,或者说曲面细分技术,是由ATI在2001年开发的,一直以来都是AMD-ATI的专属技术。最早应用在微软XBOX 360游戏机上,在PC上没有广泛采用。从ATI R600(Radeon HD2000系列)核心以来,曲面细分单元一直集成在AMD-ATI的GPU内部,不过并没有引起广泛关注,直到微软将其采纳,加入DirectX11 。这也是AMD将HD6000系列显卡中的曲面细分单元称为“第八代曲面细分技术”的原因。
事实上,在更早的DirectX 8时代,ATI就已经和微软联手开发了TruForm(N-Patch)技术,也就是Tessellation的雏形,并被纳入DirectX8.1。但由于该技术有一些不可控制的BUG,因此被DirectX9和DirectX10无情的抛弃了。
Tessellation之所以未成气候,就是因为此前的技术还不够完善,另外GPU处理能力不足也是一大因素,因此ATI即便有微软的鼎力相助,也未能将该技术发扬光大。到了DX10时代,ATI虽然在全线GPU当中整合了Tessellator模块,无奈孤掌难鸣,并没有得到游戏开发商的支持。
直到DirectX11时代,GPU自身的性能有了长足的进步,硬件上真正具备了细分曲面的实力,再加上微软重新改写API渲染流程,专为Tessellation开辟了新的着色器,这才让Tessellation技术得以重见天日。
曲面细分,或者更准确的说“镶嵌化处理技术”,就是在顶点与顶点之间自动嵌入新的顶点。在自动插入大量新的顶点之后,模型的曲面会被分得非常细腻,看上去更加平滑致密。它是一种能够在图形芯片内部自动创造顶点,使模型细化,从而获得更好画面效果的技术。 曲面细分能自动创造出数百倍与原始模型的顶点,这些不是虚拟的顶点,而是实实在在的顶点,效果是等同于建模的时候直接设计出来的。
曲面细分技术是完全可编程的,它提供了多种插值顶点位置的方法来创造各种曲面:
1. N-Patch曲面,就是和当年TruForm技术一样,根据基础三角形顶点的法线决定曲面;
3. B-Spline、NURBs、NUBs曲线(这三种曲线均为CAD领域常用曲线,在Maya中均有相应工具可以生成)
4. 通过递归算法接近Catmull-Clark极限曲面。Tessellation技术最初主要被用以“细分曲面”,随着该技术被纳入DirectX11范畴,得到大范围推广之后,插值顶点的算法也越来越多,因此用途也越来越广,产生了很多非常有创意的应用。 例如nVIDIA的一个Demo演示了利用Tessellation技术生产的“头发”,这些头发都是真实存在的,当然并不是为每一根头发建立一个模型,而是利用Tessellation技术在有限的头发模型中,镶嵌入更多的头发模型。
除了大幅提升模型细节和画质外,Tessellation最吸引程序员的地方就是:他们无需手动设计上百万个三角形的复杂模型,只需简单勾绘一个轮廓,剩下的就可以交给Tessellation技术自动镶嵌,大大提高开发效率;而且简单的模型在GPU处理时也能大幅节约显存开销,同时大幅提升渲染速度。
NVIDIA细分
作为GPU领域的领军者,nVIDIA认为曲面细分技术所代表的GPU几何性能是新一代显卡最重要的功能,也是DirectX 11最重要的组成部分。GPU的发展从Geforce FX5800时代发展到Geforce GTX285,五代时间内像素处理能力增长了1500%,而几何性能只增长了300%。因此nVIDIA认为几何性能已经成为制约GPU性能的瓶颈,在新一代Fermi架构(费米架构,包括GT400,GT500系列显卡)中,要专门加强几何处理能力,曲面细分作为几何处理的典范便首先得到了加强。
在Fermi架构中,nVIDIA通过PolyMorph Engine,将Tessellation任务分配给CUDA单元(CUDA单元也就是通常说的“流处理器”,nVIDIA称其为CUDA单元)处理。Fermi第一代旗舰显卡GTX480拥有15个PolyMorph Engine,也就等效于拥有15个具有Tessellation技术处理能力的单元。
nVIDIA这样做的优点在于,可以在高曲面细分负载下获得优秀的曲面细分能力,也就是在纯Tessellation计算中GPU的几何性能相当出色。在单纯的Tessellation计算中,nVIDIA以16倍于AMD的Tessellation处理单元的数量,得到了6倍于AMD的Tessellation处理能力。不过缺点在于,这种设计占用了CUDA单元的计算能力,前文说过,曲面细分并不是DirectX 11的全部。在实际游戏中,并不是单纯的Tessellation计算。CUDA单元还要处理其他游戏相关的3D渲染数据,如果游戏中3D渲染数据处理需求不大,这种设计就不成问题,不过一旦3D渲染数据处理需求很大,比如高分辨率,高全屏抗锯齿,丰富的光影效果等,那么这种设计的缺陷就会暴露出来。
这就是在3DMARK 11中,GTX460成绩不如HD5830的原因之一,3DMARK软件图形、光照、抗锯齿计算压力很大,GPU还要分出CUDA单元去处理曲面细分计算,因此整体计算能力便捉襟见肘。再比如在《地铁2033》中,即使GTX580也不能打开全部效果在1080P下全程流畅运行, 且表现不及HD5970 。这与nVIDIA的曲面细分实现方法也是有关的。
AMD细分
作为Tessellation技术的开发者,AMD(ATI) 对曲面细分的态度有所不同。AMD认为,在当前的DirectX 11游戏中,将一个物体的细分后最小的像素在16个是比较合适的,过分的加大曲面细分负载所带来的变化,是人的肉眼无法分辨的。因此AMD坚持对模型做适度的Tessellation处理才是理智的,过分的加大Tessellation计算负载,只是在白白浪费计算资源,因为人的肉眼无法分辨。
在Evergreen架构(即HD5000系列)中,AMD秉承了自R600以来的做法,集成了一个专用的Tessellation处理单元。在之后的Northern Islands架构的Barts核心中(即HD6800系列),AMD又对Tessellation处理单元做了优化,通过增强的线程分配模块设计,Barts核心在低Tessellation计算负载下拥有1.5倍于5800系列的处理能力。当然高负载下仍然不理想。之后的采用Cayman核心的HD6900系列显卡,则将专用的Tessellation处理单元增加到2个。
AMD这种设计的优点在于,专用的Tessellation单元并不占用流处理器资源,不影响3D渲染数据的计算。在实际游戏中,画面分辨率越高,抗锯齿级别越高,3D渲染处理需求越大,这种设计的优势就越明显。
其缺点是,在3D渲染数据处理需求不大时,遇到高负载Tessellation计算,便力不从心。
2011年12月22日,AMD发布了新一代测采用SI GCN架构的AMD Radeon HD7970显卡。得益于GCN架构,其曲面细分计算能力也得到了飞跃式的发展。HD7970显卡的曲面细分单元概念被几何引擎流水线所代替,仍为专用的2个,但是采用了最新的硬件Tessellation迭代单元,提高了顶点的复用度、片外缓存设计有所增强、采用了更大参数的高速缓存,因此HD7970的Tessellation和几何缓存都有显著的增强,能在所有拆分倍率下达到4 倍于HD6970 。与竞争对手相比,HD7970较之于GTX580,以八分之一的几何引擎数量获得了1.6倍的性能。特别是这种设计仍不会占用显卡的3D数据计算资源。
支持曲面细分技术的硬件
曲面细分技术要求显卡支持DirectX 11,也就是AMD HD5000、HD6000、基于全新GCN架构的HD7000,HD8000以及GCN1.1/1.2架构的R7 200/R9 200系列显卡和nVIDIA的GT400、GT500、基于Kepler架构的GT600,GT700(GT800系列显卡是笔记本上的),基于全新Maxwell构架的GT900系列显卡(GT800系列显卡是笔记本上的)。
值得注意的是,微软在将曲面细分纳入DirectX11时,做了优化修改。因此虽然AMD HD2000、HD3000、HD4000系列显卡也集成了曲面细分单元,但是并不兼容DirectX 11内的曲面细分技术,在DirectX 11游戏中无法打开Tessellation效果。
支持曲面细分的操作系统
需要操作系统为Windows 7,Windows 8或者升级了DirectX 11的Windows Vista。Windows XP不在支持之列。