转贴一片tessellation介绍的文章

Tessellation技术,源于Radeon8500系列的N-Patch,历经多年发展,终于在DirectX11时代被微软纳入规范。文章详细介绍了Tessellation技术的演变历程,从其原理、应用到限制,以及如何通过编程控制模型的细分,以提高模型细节和画质。此外,文章还讨论了Tessellation技术在DirectX11中的最新应用,包括其在《战地:叛逆连队2》等游戏中的表现,以及与其他DirectX11关键特性的结合。

Tessellation(N-Patch)(曲面拆分技术)背景

来自:http://www.cnblogs.com/mavaL/articles/1861778.html

 

DX11最关键的特性有以下五点:

1. Compute Shaders:计算着色器
2. New Instruction Set:新指令集
3. HDR Compression:高动态范围纹理压缩
4. Multi-Threading:多线程
5. Tessellation:拆嵌式细分曲面技术

    其中,Tessellation技术相信很多人都有印象,没错,它就是ATI第一代DX10核心R600(HD2900XT)中的一个特殊模块,从HD2000系列开始、到HD3000再到如今的HD4000系列,ATI的每一款DX10显卡都支持这项技术,虽然还没有任何一款游戏能够支持该技术,但ATI依然孜孜不倦的对它提供支持,因为ATI坚信——是金子总会发光的!

    终于在DX11时代,微软将Tessellation作为一项重要标准纳入规范之中,这项被埋没多年的技术得以重见天日。那么Tessellation究竟是何方神圣,让ATI技术人员如此执着,微软到底是“禁不住软磨硬泡”、“勉为其难”的吸纳之,还是为其先进的特性所倾倒,欣然接纳之?故事还得从七年前的Radeon 8500系列谈起……

● 2002年R200:Tessellation的鼻祖N-Patch及TruForm

    话说2001年7月的时候,微软即将推出DirectX最新的8.1版本,所以就在Meltdown2001会议上把ATI、NVIDIA等一干图形技术公司叫来开会,一起商定DX8.1的一些技术细节。这次会议可以说是图形图像界的“华山论剑”,不光有主办商及核心厂商可以参加,媒体甚至也可以买票入场,票价是650美元,当时著名的八卦网站TheInquirer就参加了这次会议(要不是它我们就不知道这段典故了)。据他们报道,由于技术细节方面的争执比较大,NV和微软的关系搞得有点僵,而且NV拒签当时正在开发的DX9协议。


2001年7月 西雅图 ATI无疑成为了Meltdown2001的主角

    讲这段八卦历史并不是为了讨论谁和微软走的更近,而是因为这次会议上其实就决定了DX8.1标准及部分DX9标准。微软这次在DX8.1的规范中提出了一个叫做“N-Patch”的技术,相比之前的各种虚拟3D和位移贴图技术而言是一种非常精妙的技术。它能够像位移贴图那样自动创造顶点,但是却不需要高度图来做参数,使模型自动的变得极为光滑。

   
原始模型和经过N-Patch处理之后的效果

    N-Patch技术的原理是这样的:GPU在读取了一个模型之后,判断每个三角形三个顶点的法线向量,再根据这三个向量算出插入的顶点的位置。如此一来就能将一个简单的、有棱有角模型通过“差值”的算法实时处理成为复杂的、圆滑的模型,在当时GPU运算能力极为有限的情况下,N-Patch技术可以大幅提升3D模型的细节和显示效果。

    NPatch技术非常适合于将一个模型变得“圆滑”。因此非常适合于一些有很多曲面的模型。因为对于曲面的表现,通常的表现方法只是尽量多的使用内割多边形或者外切多边形来模拟曲面的效果。N-Patch技术的巧妙之处就在于算法简单,只要进行多次递归运算,就能将一个面做成一个高次曲面,N-Patch这个词的本意也就是一个N次曲面。

    次年(2002),在ATI的R200(Radeon 8500)显示芯片中,就率先采用了N-Patch技术,在ATI自己的官方介绍中称之为“TruForm”。

● TruForm技术的BUG:

    TruForm的好处是效率会比位移贴图高,以极低的资源消耗实现极佳的显示效果。不过呢,这个技术比较适合于海豚、赛车等表面为曲面的模型上,而如果这个技术应用在坦克等不需要做曲面化的模型上的时候,效果就会变得相当的滑稽。

英雄萨姆中枪械模型发生变形现象(不该圆滑的表面被圆滑)
 
CS中人物模型变成了“胖子”(人体又圆又胖)

    虽然TRUFORM技术非常具有创意,而且还能给大家带来意象不到的快乐,但是这一技术的应用情况并没有像微软和ATI所期望的那样。正是因为产生了这一滑稽的BUG,TruForm在整个DX9a/b/c时代便销声匿迹了。

● 2005年Xenos:Tessellation登陆XBOX360主机

    由于考虑不周导致技术不成熟的原因,ATI在DX9时代不再整合TruForm功能。但是,微软和ATI都没有放弃这一极具创意的技术,N-Patch/TruForm的设计初衷就是节约GPU资源,通过简单高效的手段让低模3D游戏摇身变为高品质模型。

到了2005年,在微软与ATI的合作结晶——专为XBOX360设计的图形芯片Xenos当中,经过改进的N-Patch/TruForm技术重出江湖,这次它有了一个很响亮的名称——Tessellation,直译为“拆嵌”意译为“细分曲面”。

    此次微软和ATI吸取了教训,Tessellation不再像TruForm那样自作聪明的对所有模型强制进行曲面细分化,而是按照不同游戏中特定模型的需求有针对性的处理。因此以往的BUG不复存在了,但需要游戏本身提供支持才能生效。


应用了Tessellation技术的XBOX360游戏画面

    通过为数不多的支持Tessellation技术的XBOX360游戏来看,细分曲面技术让模型细节变得极为丰富,事实上这些游戏专门挑选了一些动物模型让Tessellation处理——这显然是它的拿手绝活!

    除了大幅提升模型细节和画质外,Tessellation最吸引程序员的地方就是:他们无需手动设计上百万个三角形的复杂模型,只需简单勾绘一个轮廓,剩下的就可以交给Tessellation技术自动拆嵌,大大提高开发效率;而且简单的模型在GPU处理时也能大幅节约显存开销,同时大幅提升渲染速度!

    不过,Tessellation技术依然具有局限性,而且很多游戏开发商都在跨平台开发游戏,对于这项只有XBOX360支持、PS3和PC显卡都不支持的技术不感兴趣,因此支持Tessellation的XBOX360游戏屈指可数。

    Xenos这颗基于R580核心的特殊DX9C GPU,除了首次支持Tessellation和当时先进的HDR+AA技术外,还第一次采用了统一渲染架构,这些技术都被ATI改进并沿用到了DX10时代。

● 2007年R600:Tessellation卧薪尝胆

    现在看来,R600核心是一款非常失败的产品,功耗高、发热大、性能低、AA效能差,但是当R600(320SP)的架构扩充至RV770(800SP)的规模时,就没人敢轻易对这套体系架构评头论足了。事实上R600的失败在于冒险采用80nm工艺、512Bit环形总线、以及Shader AA,而其核心架构的运算能力并不输给竞争对手,因而一直被沿用至RV670、RV770还有未来的RV870身上。

    R600除了完全按照DX10和统一渲染架构设计外,还整合了一个特殊的模块:Programmable Tessellator,可编程拆嵌器。由于这个可有可无的模块占用晶体管并不多,因此AMD之后的全系列DX10 GPU中都集成了可编程拆嵌器。


R600核心架构图

    这个可编程拆嵌器可要比XBOX360高明很多,R600核心能够根据3D模型中已经有的顶点,根据不同的需求,按照不同的规则,进行插值,将一个多边形拆分成为多个多边形。而这个过程都是可以由编程来控制的,这样就很好的解决了效率和效果的矛盾。


Tessellation技术让模型变得更加细腻 

    现在我们就更容易理解Tessellation技术是怎么回事了,它是一种能够在图形芯片内部自动创造顶点,使模型细化,从而获得更好画面效果的技术。Tessellation能自动创造出数百倍与原始模型的顶点,这些不是虚拟的顶点,而是实实在在的顶点,效果是等同于建模的时候直接设计出来的。

    R600的Tessellation技术支持多种决定插值顶点位置的方法来创造各种曲面:
 
1. N-Patch曲面,就是和TRUFORM技术一样,根据基础三角形顶点的法线决定曲面。
2. 贝塞尔曲面,根据贝塞尔曲线的公式计算顶点的位置。
3. B-Spline, NURBs, NUBs 曲线(这三种曲线均为CAD领域常用曲线,在Maya中均有相应工具可以生成)
4. 通过递归算法接近Catmull-Clark极限曲面。

    有了多种无比强大的曲面生成技术,在加上可编程的设计,程序员在开发游戏之初就能根据需要制定相关模型采用何种细分法则,从而避免出现变形和失真的问题。

而且,Tessellation过程被安排在了顶点着色之前,这就意味着Tessellation所创造出来的顶点全都可以参与Vertex Shader的处理和运算。这些顶点所带来的所有细节,将具备所有特效。


基本的顶点模型,最终生成效果很幼稚


经过Tessellation智能拆嵌之后,模型精细了很多


拆嵌后再辅以各种阴影及着色效果,从而以很小的代价达到CG级别画面

    在R600发布时,AMD拿出了一款CG级别实时渲染的Demo,其中被积雪所覆盖的山体就是由Tessellation生成的。以往的演示Demo都是片面注重对主角的修饰,而背景往往只使用简单的纹理贴图,而R600的这个Demo其背景和环境的精细程度甚至超越了主角Ruby。


HD3000/HD4000继续支持Tessellation

    可惜,时至今日,只有ATI的官方Demo使用了自家的Tessellation技术,还没有任何一款PC游戏支持这项被孤立于DX10之外的非主流技术,看来仅靠AMD还是孤掌难鸣的。

● 2009年RV870:Tessellation被正式纳入DX11,修成正果

    在AMD的不懈努力下,虽然PC游戏开发商依旧无动于衷,但这个小小的可编程模块却受到了一些好莱坞CG影片设计公司的青睐,因为CG动画对模型细节的精细程度要求十分苛刻,而Tessellation技术能够以很小的资源开销让模型细节丰富百倍,这种近乎免费的画质提升无疑是非常诱人的。


Tessellation能够同时加强地形和人物皮肤细节

    此后AMD将重心转移至CG领域,并提出了Cinema 2.0的概念,为中小型图形公司提供技术支持,灵活应用Tessellation技术来高效的创作视频短片及广告特效。因此在DX10时代,虽然ATI全线显卡均支持Tessellation技术,但AMD却没有像DX10.1那样做大张旗鼓的宣传。


等到DX11正式接纳Tessellation时,AMD已经是第六代技术了,真不容易

 

    经过多年的发展,Tessellation已今非昔比,这款历经磨难、饱受屈辱、在逆境中茁壮成长的技术现在更加灵活、高效、实用,微软认为时机再次成熟,于是被名正言顺的纳入DX11的范畴。

    消息一出,立马就有回应。《战地:叛逆连队2》第一个跳出来声援,号称全球首款DX11游戏,该游戏使用了新版Frostbite Engine,而ATI R600 Demo使用的正是该引擎:


让人印象深刻的雪山背景,这就是AMD与DICE合作开发的Ruby Demo


《战地:叛逆连队2》宏伟的雪山场景


《战地:叛逆连队2》丰富的地形及环境细节

    据DICE渲染架构师Johan Anderson称,从DX10到DX11的实际导入过程仅仅花费了三个小时,其中在代码里搜索和替换相关部分最耗时间。现在我们就不难理解战地引擎升级支持DX11为何如此神速了,两年前的战地引擎就能支持Tessellation技术,现在只不过是复制粘贴重新找回被闲置的代码而已,那还不是轻车熟路?

战地引擎的使用者不在少数,看来Tessellation技术以及DX11很快就将进入实际应用阶段,卧薪尝胆的Tessellation终于重见天日!

 

    如下的一部分截图来自支持Tessellation的Frostbite Engine技术Demo,不清楚究竟是哪款游戏,又或者是引擎专门开发作为演示的。我们可以从中一窥该引擎的能力,尤其是对于自然环境的3D刻画性能。


不可思议的地形细节
 

没有丝毫遮蔽的宏大场景
 
 

画面能否超越Crysis?

    再来看看《战地:叛逆连队2》官方公布的游戏截图:


完全可破坏的游戏场景


烟雾和爆炸效果也不差

    首款基于Frostbite引擎的游戏是《战地:叛逆连队》,其续作《战地:叛逆连队2》以及《战地1943:太平洋》也都会沿用这一引擎。看来DX11并不神秘,相关引擎早已准备就绪。

当然,Tessellation并不是DX11的全部,前面之所以用大篇幅介绍该技术,是因为这项技术历史悠久、且命运极为坎坷、又与ATI的关系颇为密切。至于其他几项DX11关键技术,之前我们已经撰文进行了详细介绍,感兴趣的朋友请看“图形API再革命!DirectX 11新技术预览”一文,此处仅作简要介绍。

 

    关于DX11 Compute Shader技术,计算着色器将以业界标准接口访问ATI Stream技术,这对于倡导开放式GPU通用计算技术的AMD来说,又是一天大喜讯,DX11搭配OpenCL的并行计算双保险,AMD面对NVIDIA的CUDA技术时,底气将会更足一些。

    DX11 Multi-Threading多线程技术,API底层对多GPU优化支持,减少对驱动和游戏渲染模式的依赖。目前AMD的策略是专注于研发一颗主流价位的GPU,然后通过双核心组成高端显卡,再双卡互联组成四核顶级系统,因此多核系统严重依赖于驱动的优化支持,而DX11的多线程技术显然有助于提升多GPU并联的工作效率,降低驱动开发难度及性能损失。

    此外,Windows 7系统还内置了对GPU视频转码的支持,微软并没有厚此薄彼的偏向任何一边,但这显然对于在GPU通用计算方面处于弱势地位的AMD来说,意义更大一些。

    AMD DX11显卡的核心代号及最终产品型号都未确定,但AMD已经信誓旦旦的承诺将会抢先与对手正式发布DX11显卡,据推测与Windows 7同期发布的可能性更大一些,也就是10月到11月之间。

    而竞争对手NVIDIA方面,对于尚未发布的产品一直都是守口如瓶,对于未来的40nm和DX11新品只字不提,但据小道消息表明,NVIDIA的40nm GPU已经准备就绪(据传是DX10低端显卡),DX11显卡也将会在年内发布,又一场3D争霸赛即将上演,一同期待吧

### Voronoi Tessellation in Computer Science and Computational Geometry #### Definition and Properties Voronoi tessellation, also known as Voronoi diagram or Dirichlet tessellation, partitions a plane into regions based on distance to points in a specific subset of the plane. Each region consists of all points closer to its associated point than any other point in the set. This property makes Voronoi diagrams particularly useful for proximity-based problems. The dual graph of a Voronoi diagram is the Delaunay triangulation, which connects points that are nearest neighbors in such a way that no data points lie inside the circumcircle of any triangle formed by three connected points[^2]. #### Applications in Various Fields In computer graphics, Voronoi patterns can be used to generate textures with natural-looking variations. In geographic information systems (GIS), these structures help analyze spatial distribution and optimize facility location planning. For robotics pathfinding algorithms, they assist robots in avoiding obstacles while navigating through environments efficiently. Additionally, Voronoi diagrams play an important role in image processing tasks like segmentation and feature extraction from images. Moreover, due to their ability to represent complex relationships between entities within datasets effectively, Voronoi diagrams have found applications across diverse domains including biology where researchers use them to study cell growth; wireless sensor networks employ this technique for efficient coverage analysis; big data analytics leverages it for clustering large volumes of multidimensional records quickly without requiring extensive computational resources. #### Implementation Using CGAL Library To implement Voronoi tessellations programmatically using C++ code alongside libraries specialized for handling geometric operations—such as **CGAL**, one could write: ```cpp #include <CGAL/Exact_predicates_inexact_constructions_kernel.h> #include <CGAL/Delaunay_triangulation_2.h> typedef CGAL::Exact_predicates_inexact_constructions_kernel K; typedef CGAL::Delaunay_triangulation_2<K> Triangulation; int main() { std::vector<Point> points = { /* Insert Points Here */ }; Triangulation dt(points.begin(), points.end()); } ``` This snippet initializes a two-dimensional Delaunay triangulation object `dt` populated with inputted coordinates stored inside vector `points`. Once constructed, various queries regarding adjacency relations among sites become feasible via member functions provided by class template `Triangulation`.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值