DirectX 11 Tessellation (曲面细分)—什么是 Tessellation (曲面细分) ?

它为什么可以起到如此关键的数据?

随着近期人们对 DirectX 11 的议论纷纷,你可能已经听说了有关 DirectX 11 最大新特性 Tessellation (曲面细分) 的大量介绍。作为一个概念。 Tessellation (曲面细分) 非常直截了当,就是处理一个多边形分成诸多小碎片。

可是为什么这种处理方式可以备受瞩目呢?

它是怎样帮助提升游戏画质的呢?本文中,我们将分析 Tessellation (曲面细分) 之所以可以为 PC 3D 图形带来深刻变革的原因,并阐释一下 NVIDIA® GeForce® GTX 400 系列 GPU 怎样提供突破性的 Tessellation (曲面细分) 性能。

从本质上来讲, Tessellation (曲面细分) 是一种将多边形分解成更加细小的碎片以提升几何逼真度的方法。

比如,假设处理一个正方形并将其沿对角线切开,那么实际上就是将这一正方形“曲面细分”成为两个三角形。就其本身而言, Tessellation (曲面细分) 并不能提升半点逼真度。

比如,在游戏中。一个正方形被渲染成为两个三角形还是两千个三角形都是无关紧要的。

仅仅有在使用新三角形来描写叙述新信息时, Tessellation (曲面细分) 才干提升逼真度。

当一个置换贴图 (左) 应用到平面上时,所生成的表面 (右) 就会表现出置换贴图中所编码的高度信息。

运用新三角形最简单、最流行的方式就是有“ Displacement Mapping (贴图置换) ”之称的技术。置换的贴图就是一个存储高度信息的纹理。当应用到某一表面上时,该贴图让这一表面的顶点可以依据高度信息调高或调低。 比如,使用一块大理石板,图形艺术家可以通过“置换”顶点的方法打造雕刻效果。还有一种流行技术是将置换的贴图应用到地形上,以雕琢出弹坑、峡谷以及山峰。

正如 Tessellation (曲面细分) 一样。 Displacement Mapping (贴图置换) 已经存在非常长一段时间了。可是直到近期,它才真正流行起来。

究其原因,是由于想要让 Displacement Mapping (贴图置换) 有效。表面必须由大量顶点构成才行。以大理石雕刻为例。假设大理石块由八个顶点构成。那么在它们之间便没有可以生成龙形浮雕的相对置换量了。仅仅有在基础网格中具备足够多的顶点用以描绘新形状时才可以生成仔细的浮雕。

从本质上来讲, Displacement Mapping (贴图置换) 须要 Tessellation (曲面细分) 。反之亦然。

随着 DirectX 11 的问世。 Tessellation (曲面细分) 与 Displacement Mapping (贴图置换) 最终实现了珠联璧合。广大开发商已经增加到这一阵营其中。

像《Alien vs. Predator》以及《地铁2033》这种流行游戏均採用了 Tessellation (曲面细分) 来生成外观平滑的模型,而开发商Valve公司与 id Software 已经完毕了一些前景看好的工作,将这些技术应用到其现有的游戏人物身上。

当一个粗糙的模型 (左) 经过 Tessellation (曲面细分) 处理后,就会生成平滑的模型 (中间)。当应用了贴图置换之后 (右)。游戏人物便接近电影般的逼真度了。 © Kenneth Scott、id Software版权全部。2008

由于DirectX 11 Tessellation (曲面细分) 流水线是可编程的。因此可以用它来解决大量图形问题。让我们来看一看四个实例。

完美凹凸贴图

从本质上来讲,Displacement Mapping (贴图置换) 可被用作现有凹凸贴图技术的暂时替代技术。比如法线贴图等当前的技术通过更佳的像素渲染,可以创造出凹凸表面的假象。全部这些技术都仅仅在特定情况下有效,而且在其起效时并非全都那么逼真。以下以凹凸贴图中较为先进的视差遮蔽贴图为例进行说明。

尽管它可以生成重叠的几何假象,可是它仅仅能在平面上以及物体内部起作用 (见上图)。真正的 Displacement Mapping (贴图置换) 不存在这些问题,可以从全部视角生成精确的结果。

更加平滑的人物

无需艺术家手工输入,PN-Triangles 可实现游戏人物的自己主动平滑。几何与光照逼真度均可以得到提升。

细化算法是 Tessellation (曲面细分) 的还有一个自然搭档。细化算法可处理粗糙模型,借助于 Tessellation (曲面细分) 。该算法可创建外观更加平滑的模型。PN-Triangles (也称作N-patches) 就是一个流行的实例。PN-Triangles算法可以将低分辨率模型转化为弯曲表面,该表面然后可以被又一次绘制成由“高精曲面细分”的三角形所组成的网格。在当今游戏中,我们觉得理所当然的大量视觉假象都可以借助此类算法来消除。这些视觉假象包含人物关节处呈现块状图案、汽车轮子呈多边形外观以及面部特征粗糙。比如,《Stalker: Call of Pripyat》中就使用了 PN-Triangles 来生成外表更平滑、更自然的人物。

无缝的精细度

在具有大型、开放式环境的游戏其中。用户可能会注意到,远处的物体常常会时而出现、时而消失无。这是由于游戏引擎正在不同精细度 (LOD) 之间进行切换,以限制几何工作负荷。由于须要为同一模型或环境保存多个版本号的数据。所以直到那个时候,都还没有一种简单的方法可以连续改变精细度。

动态 Tessellation (曲面细分) 通过即时改变精细度。攻克了这一问题。比如。当远处的建筑物首次映入眼帘时,或许仅使用10个三角形来渲染它。随着用户视野的拉近,该建筑物的显著特征開始浮现,很多其它三角形则被用来描绘窗子和屋顶等细节。当你最终到达门口时,单单旧式铜质门把手一项就动用了一千个三角形来进行渲染;Displacement Mapping (贴图置换) 仔细地雕刻出了每一道凹槽。

由于消除了动态 Tessellation (曲面细分) 对象的时隐时现。因此游戏环境如今可以扩展至差点儿无限的几何精细度。

收放自如的艺术品

对开发商来说, Tessellation (曲面细分) 大幅提升了其内容创作流水线的效率。

在描写叙述其使用 Tessellation (曲面细分) 的动机时。Valve 公司的 Jason Mitchell 表示:“我们对可以编辑游戏内容这一点非常感兴趣,由于这样就让我们可以实现缩放了。

也就是说。我们想要仅仅制作一次模型,然后便可以将其提升至电影画质…反之。我们想要可以自然地减少游戏内容的画质,以满足在特定系统上实现实时渲染的须要。

”这种仅创建一次模型便可在各种平台上使用的能力意味着缩短了开发时间。对PC游戏玩家来说,这意味着在其GPU上可以实现最高的图像画质。

GeForce® GTX 400 GPU(图形处理器)怎样处理 Tessellation (曲面细分)

传统的GPU(图形处理器)设计採用单个几何引擎来运行 Tessellation (曲面细分) 任务。这个方案是相似早期的GPU设计,此类设计均使用利用单个像素流水线来运行像素着色。

在认识到像素流水线是怎样从一个单元发展为多个并行单元以及这一进展是怎样在3D逼真度方面大放异彩之后,我们便从一開始就设计了自己的并行 Tessellation (曲面细分) 架构。

GeForce® GTX 400 GPU (图形处理器) 拥有最多15个 Tessellation (曲面细分) 单元,每个单元都具备针对顶点拾取、 Tessellation (曲面细分) 以及坐标变换的专用硬件。

它们利用4个并行光栅引擎来进行运算,这些引擎可将新近曲面细分的三角形转换成精细像素流以便用于着色。这样一来, Tessellation (曲面细分) 的性能便实现了巨大突破。持久性能达每秒16亿三角形以上。与最快的同类产品相比,GeForce® GTX 480 的速度最高可达7.8倍。

这一数据由独立站点Bjorn3D所測得。

结语

经过多年的重复试验, Tessellation (曲面细分) 最终在PC上获得了成功。

《地铁 2033》等优秀游戏已经展现了 Tessellation (曲面细分) 的潜力。最终, Tessellation (曲面细分) 将成为同像素着色一样关键、一样不可缺少的技术。

由于意识到了 Tessellation (曲面细分) 的重要性。NVIDIA® 公司从一開始便打造并行 Tessellation (曲面细分) 架构,推动这一进程。

成果就是 GeForce® GTX 400 系列 GPU (图形处理器)—几何逼真度与 Tessellation (曲面细分) 性能的真正突破。

Tessellation (曲面细分) Displacement Mapping (贴图置换)的更多相关文章

  1. 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 ...

  2. 【ZZ】 移位贴图 Displacement Mapping

    http://blog.csdn.net/huazai434/article/details/5650629 说明:该技术需要VS3.0的支持!!! 一,移位贴图类似于地形渲染.不过由于移位纹理可以做 ...

  3. Unity3d 使用DX11的曲面细分

    Unity3d surface Shaderswith DX11 Tessellation Unity3d surface shader 在DX11上的曲面细分 I write this articl ...

  4. 置换贴图 Displacement Mapping

    视差贴图和法线贴图都是使用特定的手段来达到欺骗视觉的目的,让人以为物体的表面是凹凸起伏的.而置换贴图却是真的将模型的顶点进行偏移,在原本的平面上创造出凹凸的效果.既然是对顶点进行偏移,那么就需要模型有 ...

  5. DirectX11 With Windows SDK--33 曲面细分阶段(Tessellation)

    前言 曲面细分是Direct3D 11带来的其中一项重要的新功能.它引入了两个可编程着色器阶段以及一个固定的镶嵌处理过程.简单来说,曲面细分技术可以将几何体细分为更小的三角形,并以某种方式把这些新生成 ...

  6. 【ZZ】 DShader之位移贴图(Displacement Mapping)

    http://www.myexception.cn/other/1397638.html DShader之位移贴图(Displacement Mapping) www.MyException.Cn   ...

  7. 3DShader之移位贴图(Displacement Mapping)

    我们知道法线贴图是只是改了物体的法线属性,用来计算光照,但是并没有改变物体本身的网格.但是移位贴图就不一样了,它会移动物体的顶点.我用移位贴图做了个海洋,好了,上了图再讲: 注意看海的边缘的顶点,已经 ...

  8. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十四章:曲面细分阶段

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十四章:曲面细分阶段 代码工程地址: https://github. ...

  9. Displacement Mapping

    [Displacement Mapping] Displacement Mapping(移位贴图). Normal maps的另一个应用是displacement mapping,在这个应用中,细节的 ...

随机推荐

  1. Leetcode 459.重复的子字符串

    重复的子字符串 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000. 示例 1: 输入: "abab" 输出: ...

  2. zabbix2.4升级到2.5 --考虑升级到zabbix3.0

    现在zabbix服务器,zabbix服务日志频繁出现MySQL server  has gone away,经搜索,此问题在zabbix2.5之前是zabbix的一个bug,zabbix2.5后已经修 ...

  3. 组合数学之Polya计数 TOJ1116 Let it Bead

    1116: Let it Bead  Time Limit(Common/Java):1000MS/10000MS     Memory Limit:65536KByteTotal Submit: 7 ...

  4. CSSborder制作小三角形

    #cssborder制作小三角形 1.原理是CSS盒模型 一个盒子包括: margin+border+padding+content – 上下左右边框交界处出呈现平滑的斜线. 利用这个特点, 通过设置 ...

  5. Linux环境CentOS6.9安装配置Elasticsearch6.2.2最全详细教程

    Linux环境CentOS6.9安装配置Elasticsearch6.2.2最全详细教程 前言 第一步:下载Elasticsearch6.2.2 第二步:创建应用程序目录 第四步:创建Elastics ...

  6. [luoguP2761] 软件补丁问题(状压最短路)

    传送门 n <= 20 很小 所以可以状态压缩 然后因为可能存在环,所以不能DP 那么就用spfa找最短路 被位运算坑了,不清楚优先级一定要加括号 ——代码 #include <queue ...

  7. C语言标准库 qsort bsearch 源码实现

    C语言是简洁的强大的,当然也有很多坑.C语言也是有点业界良心的,至少它实现了2个最最常用的算法:快速排序和二分查找. 我们知道,对于C语言标准库 qsort和 bsearch: a. 它是“泛型”的, ...

  8. 【HDOJ6217】BBP Formula(公式)

    题意:给定一个无穷项的分式,它的和等于π,问π的十六进制表示的小数点后第n位是多少 1 ≤ n ≤ 100000 思路:From https://blog.csdn.net/meopass/artic ...

  9. 【CF675C】Money Transfers(离散化,贪心)

    http://www.cnblogs.com/chengsheng/p/5535316.html 题目大意:给你n个银行中的存款(负值表示借贷),是成环的,1跟n相接,这n个数的和为0.可以从i向i的 ...

  10. 网易2016 实习研发工程师 [编程题]寻找第K大 and leetcode 215. Kth Largest Element in an Array

    传送门 有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数. 给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在. 测试样例: [1,3,5, ...