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

目录

  1. 技术
  2. 原理
  3. 发展

技术

编辑

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这个英文单词直译为“镶嵌”,也就是在顶点与顶点之间自动嵌入新的顶点。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处理时也能大幅节约显存开销,同时大幅提升渲染速度!

发展

编辑

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开发游戏时,更多有创意的应用将会呈现在大家面前。

Tessellation的更多相关文章

  1. [转]Direct3D 11 Tessellation Tutorial

    The new hardware tessellation feature available on Direct3D 11 video cards has great potential, but ...

  2. 沃罗诺伊图(Voronoi Diagram,也称作Dirichlet tessellation,狄利克雷镶嵌)

    沃罗诺伊图(Voronoi Diagram,也称作Dirichlet tessellation,狄利克雷镶嵌)是由俄国数学家格奥尔吉·沃罗诺伊建立的空间分割算法.灵感来源于笛卡尔用凸域分割空间的思想. ...

  3. A trip through the Graphics Pipeline 2011_12 Tessellation

    Welcome back! This time, we’ll look into what is perhaps the “poster boy” feature introduced with th ...

  4. OpenGL 4.0的Tessellation Shader(细分曲面着色器)

    细分曲面着色器(Tessellation Shader)处于顶点着色器阶段的下一个阶段,我们可以看以下链接的OpenGL渲染流水线的图:https://www.opengl.org/wiki/Rend ...

  5. tessellation 曲面细分 on Android

    Mac OS X 10.8 (OpenGL 3.2), MacOSX 10.9 (OpenGL 3.2 to 4.1) Windows with NVIDIA since 2006 (GeForce ...

  6. OpenGL - Tessellation Shader 【转】

    http://blog.sina.com.cn/s/blog_8c7d49f20102v4qm.html Patch is just an ordered list of vertices (在tes ...

  7. Tessellation (曲面细分) Displacement Mapping (贴图置换)

    DirectX 11 Tessellation (曲面细分)-什么是 Tessellation (曲面细分) ? 它为什么可以起到如此关键的数据? 随着近期人们对 DirectX 11 的议论纷纷,你 ...

  8. Directx11教程(64) tessellation学习(6)-PN Triangles

    原文:Directx11教程(64) tessellation学习(6)-PN Triangles       前面我们用tessellation细分三角形或者四边形,产生的细分点都是在三角形或四边形 ...

  9. Directx11教程(63) tessellation学习(5)

    原文:Directx11教程(63) tessellation学习(5)        TS中生成细分后顶点的u,v,{w}坐标,我们根据控制点和u,w,{w}坐标生成新的顶点位置,在前面四边形的细分 ...

随机推荐

  1. Linux把查询结果写入到文本

    在Linux命令模式下,可以将查询结果写入文件.大概有两种方式,增量写入和覆盖写入. 增量写入: #iostat -m >> /tmp/iostat.txt 覆盖写入: #iostat - ...

  2. php 实现简单加入购物车

    今天在练习购物车以及提交订单,写的有点头晕,顺便也整理一下,这个购物车相对来说比较简单,用于短暂存储,并没有存储到数据库, 购物车对于爱网购的人来说简直是熟悉的不能再熟悉了,在写购物车之前,我们首先要 ...

  3. Hadoop实战-Flume之Hdfs Sink(十)

    a1.sources = r1 a1.sinks = k1 a1.channels = c1 # Describe/configure the source a1.sources.r1.type = ...

  4. Kotlin基本语法笔记3之定义类、继承及创建实例

    定义类 class MyObject private constructor(name: String, age: Int) { private var name: String private va ...

  5. 对于pod导入第三方库文件终端语言记录

    //换成 pod install --verbose --no-repo-update //生成Podfile文件 touch Podfile 加上--verbose --no-repo-update ...

  6. Mac查看端口

    lsof -i tcp:port eg: lsof -i tcp:8899

  7. Block和inline元素对比

    所有的HTML元素都属于block和inline之一.block元素的特点是:总是在新行上开始:高度,行高以及顶和底边距都可控制:宽度缺省是它的容器的100%,除非设定一个宽度<div>, ...

  8. Android系统DHCP问题【转】

    本文转载自:http://blog.csdn.net/tankai19880619/article/details/42972551 一.现象 12小时压测wifi连接后,发现网络连接中断:相关log ...

  9. Android高手应该精通哪些内容

    很多Android开发者已经度过了初级.中级,如何成为一个Android高手呢? Android123就各个级别的程序员应该掌握哪些内容作为下面分类. 一.初级 1. 拥有娴熟的Java基础,理解设计 ...

  10. webstorm代码提示按键改为alt+/

    webstorm代码提示默认按键为ctrl+空格 但是windows输入法中英文输入法的默认按键也是ctrl+空格 这就导致webstorm按键冲突,无法使用代码快捷提示按键 解决方法: 按ctrl+ ...