浅析DirectX11技术带给图形业界的改变(一) 浅析DirectX11技术带给图形业界的改变【转】

浅析DirectX11技术带给图形业界的改变(一) 浅析DirectX11技术带给图形业界的改变

前言:2009年10月23日,微软高调发布了其最新一代操作系统——Windows7,这款操作系统相对于之前的Vista系统有相当大的进步,特别核心执行效率方面得到显著改善,并且加入了DirectX 11等新技术。微软此次推出全新图形API——DirectX 11目的很明确,就是能够充分利用显卡资源,旨在游戏以及通用计算方面达到更高的执行效率。今天本文就带大家一起分析DirectX 11技术带给图形业界和游戏玩家的双重体验。同时也让更多人了解到自己是否需要一款支持DirectX 11的显卡,具体选择哪些显卡最为合适。

● DirectX对GPU发展带来的影响

DirectX并不是一个单纯的图形API,它是由微软公司开发的用途广泛的API,它包含有Direct Graphics(Direct 3D+Direct Draw)、Direct Input、Direct Play、Direct Sound、Direct Show、Direct Setup、Direct Media Objects等多个组件,它提供了一整套的多媒体接口方案。只是其在3D图形方面的优秀表现,让它的其它几个组件几乎被人们忽略。

Direct Graphics的优秀表现和微软的影响力,令无数硬件厂商生畏并不断遵循其变化来开发新的图形处理器架构。同时ATI和NVIDIA两家厂商之所以至今仍不断跟随DirectX的步伐,是意识到任何游戏相关的硬件厂商要是被微软抛弃,那么其后果是不堪设想的。

大家都在畅想DirectX技术的未来

在过去的数次DirectX更替中,有几次较大的更新,比如我们熟知的从DirectX 7到DirectX 8到DirectX 9到再DirectX 10,也是因为这样的理由使得芯片变得更大。在向DirectX 8的转移使得可编程的硬件进入管线成为了双重构造。对于DirectX 9的顶点处理与像素处理,则被真正的可编程处理器调换。而在向DirectX 10的转移为了实现更灵活的可编程性,需要GPU架构进行根本的改革。

所以哪个世代的改变以及生产什么样的GPU都关乎根本性的改革,而这种改革基本上都是围绕DirectX这个最重要的图形API来进行的。特别是DirectX 10时代架构的改革,从根本上改变了GPU的本质。从DirectX 8向DirectX 9通过API的改革牵动了GPU架构的改革,而架构巨大变化的转折点则是DirectX 10。

DirectX 10时代 着色器单元走向统一

在DirectX 10时代,我们非常有幸看到了Pixel Shader(顶点着色器)、Vertex Shader(像素着色器)和Geometry Shader(几何着色器),三种具体的硬件逻辑被整合为一个全功能的着色器Shader。但是我们也发现,GPU在性能提升的同时,芯片规模发生了更快速的放大,这不得不让人担心未来GPU的功耗和发热等等问题。

事实上芯片变大有两个主要原因。一个是因为性能的增加。要提高运算性能就会需要更多的资源,这会增加晶体管的数量。另一个就是为了发展可编程化。需要让单一的可编程处理器包括个别进行处理的固定功能硬件,这必然也会增加晶体管数量。可是这样会让性能出现大幅度下滑,因此为了保持同样的性能也需要大幅度增加运算资源。结果就是对于GPU的情况需要从固定硬用向可编程硬件转换,晶体管数和核心尺寸也因此而增加。

直到今天我们看到的DirectX 11出现,这个问题得到了一个平衡的解决方案。DirectX 10带来了众多绚丽无比的新特效,但“滥用”各种特效最终导致GPU不堪重负。在DirectX 10经历了种种波折,瓶颈尽显时,微软也开始将重心集中在如何提升算法和效率上面,而不是一味的加入新特效或提高模型复杂度。因此我们看到的DirectX 11,已经将技术重心放在如何用最小的硬件开销在先进图形技术的辅助下实现最佳的渲染效果。

● DirectX 11带来的全新特性

DirectX 11作为一套全新的图形API,提供给图形开发者和用户极大的想象空间,同时降低了开发难度,节省硬件资源,特别是后两个特点,是DirectX 11区别与以往的DirectX最为显著的特点。

2009年NVISION大会上,微软就透漏了DirectX 11的大量细节,此时DirectX 11已经完全成熟并获得硬件厂商支持,就等和Win7操作系统一同上市了。同时借助SIGGRAPH以及GameFest 2008大会上放出的幻灯片,我们可以进行一些深入的研究。此外,DX11特性的提前放出,对于目前DX10以及DX10.1硬件用户而言也很有帮助,因为AMD和NVIDIA可以照此提前开发适当的驱动支持。

2008年度NVISION资料截图

回顾历次DirectX的更替过程,几乎都对GPU架构产生了颠覆性的影响,它们大部分要求GPU改变现有的着色器Shader单元结构,或者为着色器Shader单元追加资源,这些改进都是为了让GPU的指令数提升,寄存器数量增加,纹理规模提升,材质Texture精度提升。这样的改进难免带来晶体管数量的增长,也就说说GPU内部的每个着色器Shader单元变得更加庞大。

DirectX 11发布后,人们发现微软并没有在Shader Model方面做出重要提升,虽然版本升至Shader Model 5.0,但是更重要的是它实际上可以被看作是DirectX 10和DirectX 10.1的功能补全,你也可以认为它是DirectX 10和DirectX 10.1的超集,如果换个角度大胆设想,我们今天看到的DirectX 11才是微软想要的DirectX 10完美形态。

DirectX 11针对不同方面带来了全新的特性,目前通过现有资料分析,它主要有以下几个方面的提升:

DirectX 11带来的全新特性

● 着色器版本提升到Shader Model 5.0,采用面向对象的概念,并且完全可以支持双精度数据。     ● Tessellation曲面细分技术获得微软正式支持,逐渐走向成熟;     ● Multithreading多线程处理,让图形处理面对多线程编程环境不再尴尬;     ● 提出微软自己的Compute Shader通用计算概念,把GPU通用计算推向新的巅峰;     ● 新的Texture Compression纹理压缩方案,在画质损失极小的环境下带来了硬件资源的节约。

在今天的分析中,我们将重点放在Tessellation曲面细分技术方面,因为这是DirectX 11最为突出的特色之一,也是给图形运算产生深远影响的一项技术,DirectX 11的其他特点我们也会提及。

● Tessellation技术简析

Tessellation又可译作拆嵌式细分曲面技术。其实这是ATI早在其第一代DirectX 10图形核心R600,即HD2900XT上就引入的一个特殊的计算模块。从HD2000系列开始,直到最新的HD5000系列,整整4代显卡全部支持这一技术。即使目前也仍然没有游戏能够支持这一技术,ATI也依然没有放弃在这项技术上的努力——从名字上也可以看出ATI在这项技术上的心血:Tessell-ATI-on。

Tessellation主要是靠GPU内部的一个模块Programmable Tessellator(可编程拆嵌器)来实现的。能够根据3D模型中已经有的顶点,根据不同的需求,按照不同的规则,进行插值,将一个多边形拆分成为多个多边形。而这个过程都是可以由编程来控制的,这样就很好的解决了效率和效果的矛盾。TessellATIon能自动创造出数百倍与原始模型的顶点,这些不是虚拟的顶点,而是实实在在的顶点,效果是等同于建模的时候直接设计出来的。

Tessellation工作流程三部曲

很明显,DirectX 11中的Tessellation让雪山的凹凸感更为明显,远胜于DirectX 10里所采用的视差映射贴图技术。虽然后者在较远距离观看的时候也能提供一定的视觉欺骗性,但和 Tessellation技术塑造出来的真实感觉还相差太远。我们使用的分析图来自AMD在R600发布时放出的一段Demo,这段Demo区别于以往的设计方式,它没有突出主角而淡化背景,因为在没有Tessellation技术之前,大量顶点的生成和随之而来的计算将给GPU的几何处理部分带来巨大压力,无法流畅运行,而Tessellation技术改变了这一模式。

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

    ● Tessellation技术历史回顾

Tessellation技术最早可以追溯到DX8时代,当时ATI就已经和微软联手开发了TruForm(N-Patch)技术,也就是Tessellation的前身,并被纳入DX8.1的范畴。

2001年,ATI公布了TruForm的技术细节,相关媒体也对这一技术进行了报道。简单地说TruForm技术就是将在芯片内部将游戏中的三角形转换成曲面然后再转换成一个新的三角形,这个三角形可以在场景中显示。

当三角形信息通过图形芯片时,TruForm技术开始工作,它通过创建N-Patch来形成N-Patch网格。

N-Patch网格是一个曲面,通过线性三角形信息来定义。N-Patches在三角形每个边放两个控制点,这样就产生了六个新的顶点。这些控制点都在一个单独的平面上,可以位于原三角形之下或者之上。使用储存在原三角形的顶点向量的信息,可以决定控制点的位置。

N-Patch技术示意图

当然,这并不是一个简单的工作,而这正是TruForm技术的用处所在。当时人们认为它是ATI下一代显卡Radeon2的独门武器。在当时GPU运算能力极为有限的情况下,N-Patch技术可以大幅提升3D模型的细节和显示效果。

但是它却出现了一些非常遗憾的失误,导致这项技术最终被用户放弃。因为N-Patch技术技术比较适合于海豚、赛车等表面为曲面的模型上,而如果这个技术应用在坦克等不需要做曲面化的模型上的时候,效果就会变得相当的滑稽。

Tessellation技术带来的3D流水线变化

N-Patch/TruForm技术就这样被市场边缘化,但是ATI还是没有放弃对它的开发和研究。终于在2005年出现了转机,在微软与ATI的合作结晶——专为XBOX360设计的图形芯片Xenos当中,经过改进的N-Patch/TruForm技术重出江湖,这次ATI将它直接命名为我们熟悉的TessellATIon,直译为“拆嵌”意译为“细分曲面”,同时表示ATI在这项技术中不可磨灭的贡献。

    ● Tessellation技术拆解分析

Tessellation这个英文单词直译为“镶嵌”,也就是在顶点与顶点之间自动嵌入新的顶点。Tessellation经常被意译为“细分曲面”,因为在自动插入大量新的顶点之后,模型的曲面会被分得非常细腻,看上去更加平滑致密。它是一种能够在图形芯片内部自动创造顶点,使模型细化,从而获得更好画面效果的技术。Tessellation能自动创造出数百倍与原始模型的顶点,这些不是虚拟的顶点,而是实实在在的顶点,效果是等同于建模的时候直接设计出来的。

图形业界对于曲面细分的探索不断深入

在此之前,人们对低代价多边形操作法已经探索了近10年,从最开始的对三角形的fan操纵,到后来的龟裂和冲撞检查,这些方法可以实现曲面细分效果,但是对资源的消耗量太大不可控制。这次微软在DirectX 11中加入硬件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处理时也能大幅节约显存开销,同时大幅提升渲染速度。

    ● DirectX 11引入可编程曲面细分管线

在DirectX10时代的细分曲面里,最有新用途的就是Geometry Shader和Stream Out,前者可以输入一些数据,然后产生一些三角形,后者可以断绝Pixel Shader,做完Geometry Shader就直接输出回Input Assembler,这就意味着可以做GPU递归和迭代。

而DirectX 11相比DirectX 10,Shader Model的变化并不算大,只是增加了5个全新的指令集。但是对于游戏开发者而言,Shader Model 5.0函数和子程序代码的开发都比上一代更加简单方便。增加的五个新指令集目的也是为了让编程者可以进行更灵活的数据访问和操作。

在Shader Model 5.0中,Shader进行了类型的统一,除了4.0版本中就已经有的Vertex Shader、Pixel Shader、Geometry Shader外,还增加了Hull Shader、Compute Shader、Domain Shader三种新的Shade,它们的出现都是为了完善曲面细分管线。

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模块本身的处理能力提出了苛刻要求,这需要芯片厂商在设计之初就考虑周全。    ● Tessellation与Displacement Mapping综合应用

Displacement Mapping(贴图置换)与Tessellation(曲面细分)的结合使用具有许多优势。虽然两者在原理方面本来是没有任何。

贴图置换是一种通过VS和alpha混合操作来达成复杂表面的操作;基本上贴图置换不会增加新的多边形,即便增加也仅作操作点用。曲面细分则不一样,它通过在已知多边形内设立新的顶点,达成fan操作来完成增加多边形的目的。这两种技术一个的重点是alpha和顶点移动,另一个的重点则是直接增加多边形数量。这是两种完全不同的复杂表面细节实现手段。

Tessellation和Displacement Mapping结合应用

简单来讲,Displacement Mapping的目的就是借助Tessellation改变多变形的外观,而不仅仅只是圆滑棱角。

正如你所看到的那样,Displacement mapping能够透过Tessellation和Displacement Mapping让一张平面的网面真正实现具有不同形状的外观(上面的例子是绵绵起伏的山丘),只要使用Displacement Mapping映像到网面的顶点上,就能够让网面善的顶点提升/升降到不同的相对高度,同样的网面可以形成不同的形状。

Tessellation和Displacement Mapping结合应用

和以往主要在光栅化阶段进行的Bump mapping不同的是,Displacement Mapping是生成的是由更多多边形构成的真实外观,而Bump mapping则是一种欺骗性手段、一种性能妥协方案而已,不能产生真正不同的外形,采用Displacement Mapping来实现丰富的表面细节实在有太多的好处了。

最终,利用Displacement Mapping(贴图置换)与Tessellation(曲面细分)相结合的方式所渲染出来的模型与艺术家所用工具中的原生模型很相似,从而让艺术家不必创建不同几何细节级别的模型,无需重复地进行这种一般性劳动。

    ● 全新的多线程渲染技术

虽然超线程概念已经在CPU领域发展了数十年,但大多数程序员还是直到近年来多核心CPU流行之后才开始关心程序的平行化,在此之前大部分通用代码都是简单的单线程,在这些代码里寻找并挖掘多线程化带来的性能提升是非常困难的。

为了改变这一现状,DirectX 11特性还包括很重要一点:支持多线程(multi-threading)。没错,无论是DirectX 10还是DirectX 11,所有的色彩信息最终都将被光栅化并显示在电脑显示屏上(无论是通过线性的方式还是同步的),但是DirectX 11新增了对多线程技术的支持。

从DirectX 10到DirectX 11的多线程变化

得益于此,应用程序可以同步创造有用资源或者管理状态,并从所有专用线程中发送提取命令,这样做无疑效率更高。DX11的这种多线程技术可能并不能加速绘图的子系统(特别是当我们的GPU资源受限时),但是这样却可以提升线程启动游戏的效率,并且可以利用台式CPU核心数量不断提高所带来的潜力。

多线程渲染示意图1

在DirectX 11中,微软通过将目前单一执行的Direct 3D设备被分为三个独立的接口:设备(Device)、立即执行范畴(immediate Context)和延迟执行范畴(Deferred Context)。

多线程渲染示意图2

这三者都被分发到各自独立的线程,而且设备和Deferred context还可以分配多个线程,负责将等待执行的任务发送给immediate Context或渲染线程。这样的设计可以将图形生成所需的资源做预先的存取。同时,CPU还可以利用显卡的多线程处理加快DirectX的处理,减少CPU的响应时间而使游戏不再受到CPU的瓶颈限制。

时间: 2024-10-13 04:06:20

浅析DirectX11技术带给图形业界的改变(一) 浅析DirectX11技术带给图形业界的改变【转】的相关文章

任正非:所有公司都是管理第一,技术第二(没有一流管理,领先的技术就会退化;有一流管理,即使技术二流也会进步)

这是早年华为总裁任正非与参加培训的新员工的交流纪要,任正非幽默.风趣.坦诚,也略带一丝无奈,其中的很多观点仍然具有思考和借鉴意义. 1.你们下去碰到的领导并不是你想像的那么好,他们有时将鼻涕抹在袖口上,有时不穿袜子,不像一位你想像的领导.……你碰到一个不好的领导,却受到了别人受不到的锤炼,你会学会如何协调周边关系,学到了很多经验. 2.华为公司没有老板,老板也是天天干活.打工,他上班的时间比别人长,从来没有吵过加班工资.(这里有弦外之音……) 3.华为闹意见的多数是应届生,社招生多数人没有问题,

2017全球 C++ 及系统软件技术大会:一场大师智慧+实践干货的技术盛宴!

从1985年由Bjarne Stroustrup在贝尔实验室发明以来 ,C++作为一门系统级语言,早已超越一门编程语言的影响.由其构建的庞大的系统级软件,已经成为当今世界IT与互联网应用的关键支撑.秉承"全球专家.连接智慧"的理念,我们特邀众多C++和系统软件领域的海内外技术领袖与一线工程实战专家,于2017年11月17日-18日在北京举办"全球C++及系统软件技术大会".大会通过主题演讲.互动研讨.案例分享.高端培训等形式,深度探讨围绕C++及系统软件整个技术栈的

互联网技术发展之路(2)- 业务如何驱动技术发展

互联网技术发展之路(2)- 业务如何驱动技术发展 在<互联网技术发展之路(1) - 技术发展的驱动力>一文中,我们详细阐述了对于服务类的业务来说,业务发展是技术发展的驱动力.那接下来我们就看看业务究竟是如何驱动技术发展的. 互联网业务千差万别,但由于他们具有"规模决定一切"的相同点,其发展路径也基本上是一致的.互联网业务发展一般分为几个时期:初创期.快速发展期.竞争期.成熟期. 不同时期的差别主要体现在两个方面:复杂性.用户规模. 复杂性 业务的发展第一个主要方向就是&qu

搞技术的怎么了?就不能既学到技术又可以玩吗?

在很多人的眼中,搞技术就是一副严肃死板的样子.其实并不是这样,因为搞技术是高强度的脑力劳动,容不得一丝马虎,注意力高度集中所以会面无表情.而在夏天的时候,显得尤为突出,因为天气太热.不过即使是在很热的夏天,金信润天都会有一些让人难忘的事情. 就从2016年开始讲起,那是一个难忘的夏天. 我们举办了老学员经验交流会. 分享的三位,晏威.王雯雯.曾飞到现在都成为了管理层. 晏威讲了他从13年年中开始工作,到现在的这一路的工作过程,从最开始的网管到现在年薪20万,带领团队,每一步都是慢慢来的,一步一个

华丽技术炫目而酷傲剑情缘3.6折扣平台带你铁骨柔情

国家级仙剑游戏<傲剑情缘>华丽的技艺,炫目而酷,变身为暴君之神:飞刀.飞禽走兽,伴你勇进三界:争霸皇城,排名竞争,激战:大量时尚工艺品,创造专属形象,实现华丽转型:婚姻制度,T.让你找到真爱,建立一个神奇的纽带!自由交易.下线挂机.宗门火把.魔战等丰富多彩的玩法,开创了仙女剑客的新时代.乾隆走出万丈深渊,英雄们惊呆了,神仙夫妇相伴,铁骨柔情,一起创造出你的传奇仙女剑客吧! 当看到这个文字,小编跃跃欲试了,但是又看到网络上传出傲剑情缘3.6折的消息,我不仅慎重了一下,找了一些资深的玩家,看看这个

猴子数据带您解析2019最新微信域名防封技术

有没有这样的情况,有时候运行的好好的网站,因为不小心上传了不符合微信规定的网页,或者被同行恶意举报,而出现被屏蔽,内容无法查看的字样,放弃??不甘心!!于是进入了域名防封的流程,百度上有许多微信域名防封检测的网页,甚至还有一些打着包票说百分之百的防封,在这里,我要提醒大家,没有谁能那样保证,没有百分百一说,好吧,我们进入正题,猴子数据带您具体来解析下微信域名防封技术. 1.检测微信域名并将域名切换.首先你要有一个微信域名检测接口,配置好你的接口请求程序,准备2套域名A和B.我们分享出去的域名是A

Unity3D技术之从 Cinema 4D 中导入对象浅析

欢迎来到unity学习.unity培训.unity企业培训教育专区,这里有很多U3D资源.U3D培训视频.U3D教程.U3D常见问题.U3D项目源码,我们致力于打造业内unity3d培训.学习第一品牌. 从 Cinema 4D 中导入对象 Unity 可直接导入 Cinema 4D 文件.开始时只需将 .c4d 文件放到工程的资源 ( Assets) 文件夹下. 切换回 Unity 时,场景自动导入并显示在工程视图 (Project view) 中. 要在 Unity 中查看模型,只需将其从工程

一文带你了解2018年最流行的前端技术

2018年即将过半,前端开发这个行业又进一个台阶了.找来一个现代前端技术图谱看看,真是吓尿了--宝宝心里苦啊! 点图片看大图 仔细想想,这要是全学会了还得了,也太不切实际了.还是来看看现在流行的是有哪些东西,跟着潮流走总不会错的. 每一个开发者都有着自己的知识和习惯,根据自己的知识和习惯,很容易地理所当然使用哪些工具.通过分析了解行业内开发者对开发工具的使用,这些结果有助于深入了解前端工具的当前趋势.无论你是刚刚开始学习网络开发,还是一位有经验的开发人员,这些分析数据对你的学习或工作都能带来不少

资深程序员带你玩转深度学习中的正则化技术(附Python代码)!

目录 1. 什么是正则化? 2. 正则化如何减少过拟合? 3. 深度学习中的各种正则化技术: L2和L1正则化 Dropout 数据增强(Data augmentation) 提前停止(Early stopping) 4. 案例:在MNIST数据集上使用Keras的案例研究 1. 什么是正则化? 在深入该主题之前,先来看看这几幅图: 之前见过这幅图吗?从左到右看,我们的模型从训练集的噪音数据中学习了过多的细节,最终导致模型在未知数据上的性能不好. 换句话说,从左向右,模型的复杂度在增加以至于训练