標籤:style blog http color io os 使用 ar strong
淺析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的瓶頸限制。
淺析DirectX11技術帶給圖形業界的改變(一) 淺析DirectX11技術帶給圖形業界的改變【轉】