Tessellation细分曲面技术(DX11)

时间:2021-08-19 14:13:50
Tessellation细分曲面技术是AMD(ATI)常年研发多代的技术,经过多年发展最终被采纳成为DX11的一项关键技术,因此历来都是宣传重点。和光线追踪不同,现在的 光栅化图形渲染技术的核心是绘制大量三角形来组成3D模型,而Tessellation技术就是利用GPU 硬件加速,将现有3D模型的三角形拆分得更细小、更细致,也就是大大增加三角形数量,使得渲染对象的表面和边缘更平滑、更精细。

1简介

该技术需要消耗大量硬件资源,因此开发人员不会在场景中的每个地方都使用它,一般只考虑玩家视角近景和轮廓边缘。

兼容

顺便说,只有全面兼容DX11的 显卡才能完全利用细分曲面加速,而DX10/ DX10.1不行。
目前ATI与NVIDIA都有可支持DX11的显卡。其优势在于可以用很少的 系统资源让3D模型的细节方面更加生动丰富,以极为高效的处理能力为用户提供更舒适的使用体验。

ATI原创的技术

Tessellation一词相信大家并不陌生,早在DX9C时代, 微软XBOX360游戏主机中由ATI设计的Xeno 显示芯片就支持;从DX10时代到DX10.1时代,ATI HD2000/3000/4000系列显卡全都整合了一个叫做Tessellator的模块,虽然当时没有任何游戏能够支持该技术,但ATI通过几个演示Demo展现了Tessellation技术的魅力。
事实上,在更早的DX8时代,ATI就已经和 微软联手开发了TruForm(N-Patch)技术,也就是Tessellation的前身,并被纳入DX8.1的范畴。但由于该技术有一些不可控制的BUG,因此被DX9和DX10无情的抛弃了。
Tessellation之所以未成气候,就是因为此前的技术还不够完善,另外GPU处理能力不足也是一大因素,因此ATI即便有 微软的鼎力相助,也未能将该技术发扬光大。到了DX10时代,ATI虽然在全线GPU当中整合了Tessellator模块,无奈孤掌难鸣,并没有得到游戏开发商的支持。
直到DX11时代,GPU自身的性能有了长足的进步,硬件上真正具备了细分曲面的实力,再加上 微软重新改写API渲染流程,专为Tessellation开辟了新的着色器,这才让Tessellation技术得以重见天日。
Tessellation细分曲面技术(DX11)

Tessellation技术实现的原理

Tessellation这个英文单词直译为“镶嵌”,也就是在顶点与顶点之间自动嵌入新的顶点。Tessellation经常被意译为“细分曲面”,因为在自动插入大量新的顶点之后,模型的曲面会被分得非常细腻,看上去更加平滑致密。它是一种能够在 图形芯片内部自动创造顶点,使模型细化,从而获得更好画面效果的技术。Tessellation能自动创造出数百倍与原始模型的顶点,这些不是虚拟的顶点,而是实实在在的顶点,效果是等同于建模的时候直接设计出来的。
Tessellation技术是完全可编程的,它提供了多种插值顶点位置的方法来创造各种曲面:
1. N-Patch曲面,就是和当年TruForm技术一样,根据基础三角形顶点的法线决定曲面;
2. 贝塞尔曲面,根据 贝塞尔曲线的公式计算顶点的位置;
3. B-Spline、NURBs、NUBs 曲线(这三种曲线均为CAD领域常用曲线,在Maya中均有相应工具可以生成)
4. 通过 递归算法接近Catmull-Clark极限曲面。
Tessellation技术最初主要被用以“细分曲面”,随着该技术被纳入DX11范畴,得到大范围推广之后,插值顶点的算法也越来越多,因此用途也越来越广,产生了很多非常有创意的应用。
Tessellation技术还经常与Displacement Maps( 贴图置换)技术搭配使用,从而将平面纹理贴图改造成为具有立体感的几何图形,大大增强3D模型或场景的真实性。
除了大幅提升模型细节和画质外,Tessellation最吸引程序员的地方就是:他们无需手动设计上百万个三角形的复杂模型,只需简单勾绘一个轮廓,剩下的就可以交给Tessellation技术自动镶嵌,大大提高开发效率;而且简单的模型在GPU处理时也能大幅节约显存开销,同时大幅提升渲染速度!

2发展

Tessellation的改进

ATI的HD2000以上级别显卡其实都具备Tessellation的功能,但它们却无法与DX11中的Tessellation技术相兼容。这是因为 微软并没有原封未动的将R600的Tessellation技术抄到DX11之中,而是对其进行了优化,使之能与渲染流程完美的结合在一起,可以更高效率的细分出更多的多边形和曲面。
与DX9C/DX10时代孤零零的Tessellator模块不同,在DX11当中, 微软加入了两种全新着色器来全力配合Tessellator的工作,分别位于镶嵌器的前后。
其中Hull Shader(外壳着色器)用来控制自动生成顶点的数量和算法,也就是Tessellator的细分级别,然后交给Tesselator进行镶嵌处理,最后由Domain Shader(域着色器)按照程序要求生成所需曲面,并自动进行法线平移、 置换贴图,产生新的模型。
与DX9/10中的Tessellation技术相比,DX11新增的两种着色器都受 统一渲染架构支配,因此处理能力非常富裕,DX11版Tessellation不仅效率更高、而且细分级别更丰富。但是,更高的细分等级对Tessellator模块本身的处理能力提出了苛刻要求,这需要芯片厂商在设计之初就考虑周全,在本文架构解析部分,笔者会详细分析ATI和NVIDIA两者的设计思路。

Tessellation的前景

Tessellation技术所实现的功能并没有局限在“细分曲面”的范围内,随着DX11逐渐走向普及,开发商和程序员基于新的API开发游戏时,更多有创意的应用将会呈现在大家面前。
 

真DX11架构 GTX480/GTX470深度技术解析

 
真DX11架构 Tessellation技术深度解析