DirectX 10

DirectX 10

在DirectX 10的圖形流水線體系中,最大的結構性變化就是在幾何處理階段增加了幾何渲染單元(Geometry Shader)。幾何渲染單元被附加在頂點渲染單元之後,但它並不像頂點渲染單元那樣輸出一個個頂點,而是以圖元作為處理對象。

幾何渲染單元


圖元在層次上比頂點高一級,它由一個或多個頂點構成。由單個頂點組成的圖元被稱為“點”,由兩個頂點組成的圖元被稱為“線”,由三個頂點組成的圖元被稱為“三角形”。幾何渲染單元支持點、線、三角形、帶鄰接點的線、帶鄰接點的三角形等多種圖元類型,它一次最多可處理六個頂點。藉助豐富的圖元類型支持,幾何渲染單元可以讓GPU提供更精細的模型細節。
幾何渲染單元賦予GPU自行創造新幾何物體、為場景添加內容的神奇能力。靈活的處理能力使GPU更加通用化,以往很多必須倚靠CPU才能完成的工作,現在完全可交由GPU處理。如此一來,CPU就有更多時間處理人工智慧、定址等工作。更令人驚喜的是,幾何渲染單元還讓物理運算的加入變得更簡單,DirectX 10可創建具備物理特性的盒子、模擬剛性物體,物理運算有望在它的帶領下逐漸走向普及。可以預見,藉助幾何渲染單元這一武器,顯卡性能將產生質的飛躍,我們也將體驗到速度更流暢、畫面更精美、情節更細緻的遊戲。

改進驅動功效


我們知道,每一個遊戲角色、武器和景物在3D程序中都是一個Object(對象),而每一幀遊戲畫面就可能出現數百個Object。在顯卡工作時,每一個Object都要從應用程序傳輸到API介面,然後通過顯卡驅動程序到達顯卡。在現有的DirectX體系中,任何一個Object進行操作或者渲染,都會導致系統資源的額外消耗,遊戲的Object越多,所耗費的傳遞時間就越長,造成的額外消耗也就越多。據統計,現有的DirectX 9圖形晶元在工作時,只有60%的性能用於運算3D程序,其餘40%的運算能力被白白浪費了!
為了改變這一現狀,DirectX 10在渲染程序中採用了動態索引功能,Object被驅動程序自動載入,數據可以分類並連續輸入,這樣一來,單次傳輸的數據量就增加了,從而大大降低了額外耗費的時間。通過引入新的API及驅動程序,DirectX 10將圖形晶元的執行效能提升至80%。在不增加顯卡硬體成本的前提下,顯卡性能得到了大幅提升。

引擎支持技術


為了提升多塊顯卡協作的工作效率,微軟在DirectX 10中提出了“Parallel Engine Support(并行引擎支持)”的概念,它可以預先把兩個GPU需要的數據分別傳輸到兩塊對應的GPU當中,幀渲染將完全由驅動控制和調配,兩塊顯卡的工作強度可以獲得很好的平衡。而在目前主從卡的運作模式中,主卡要對從卡框架、渲染數量進行判定,而引入并行引擎支持技術后,主從卡的概念將消失,兩塊甚至多塊顯卡的協作威力將充分體現。

統一渲染架構


DirectX 10最大的革新就是統一渲染架構(Unified Shader Architecture)。目前各類圖形硬體和API均採用分離渲染架構,即頂點渲染和像素渲染各自獨立進行,前者的任務是構建出含三維坐標信息的多邊形頂點,後者則是將這些頂點從三維轉換為二維,這樣便可以通過視覺欺騙在屏幕上顯示出“三維”的場景。與此對應,GPU中也有專門的頂點渲染單元和像素渲染單元來分別執行這兩項工作(由於工作量不同,這兩種渲染單元的數量不相等,頂點渲染單元通常只有像素渲染單元的1/3~1/2)。在過去幾年中,這種分離式設計對計算機圖形領域的發展做出了一定的貢獻。
不過,微軟認為這種分離渲染架構不夠靈活,不同的GPU,其像素渲染單元和頂點渲染單元的比例不一樣,軟體開發人員在編寫代碼時必須考慮這個比例,這就大大限制了開發人員自由發揮的空間。另外,不同的圖形遊戲或軟體對像素渲染和頂點渲染的需求不一樣,導致GPU的運算資源得不到充分利用。為此,微軟在DirectX 10中提出了統一渲染架構的思想:在相同物理類型的渲染單元上執行不同類型的渲染程序。換句話說,只用一種渲染單元,讓它既能完成頂點渲染,也能完成像素渲染,甚至還能實現幾何渲染。這樣一來,渲染單元可以得到最大程度的利用,減少了資源閑置的情形。目前,Xbox 360的顯示晶元Xenos就採用了統一渲染架構,該晶元一共有48個渲染單元,它們可全部用於頂點渲染或像素渲染,沒有固定分配比例。此外,ATI也打算在新一代的R600晶元中採用統一渲染架構。
當然,統一渲染架構也並非完美無瑕。相對頂點渲染來說,像素渲染將面臨大規模使用紋理所帶來的材質延遲,這是統一渲染架構急待解決的問題。不過有一點可以肯定,在微軟的大力推動下,統一渲染架構是大勢所趨。

適應系統


除統一渲染架構外,DirectX 10的另一大特色就是與Windows Vista緊密結合,Vista系統將調用GPU資源來渲染Aero Glass 3D界面,這樣圖形API就與操作系統核心高度整合在一起。舉個例子,當我們點擊應用程序時,CPU將立刻收到驅動程序的指令,而軟體界面渲染指令則通過DirectX 10直接傳送給GPU,這樣,Vista就能與CPU和GPU同時溝通,讓3D界面渲染工作變得更高效。
相比之下,在DirectX 9環境中,Vista(軟體)界面的渲染工作就要“遲鈍”一些了:用戶點擊運行某個軟體,Vista將相應的指令發送給CPU,要求CPU進行後續處理;CPU接到運行指令的同時向GPU發出請求,要求GPU在屏幕上渲染出界面。GPU(支持DirectX 9)識別Vista界面渲染指令后完成相應的工作(注意:DirectX 8顯卡無法完成渲染工作,必須讓CPU通過軟體模擬來實現,此時系統速度非常緩慢)。換句話說,在“DirectX 9顯卡+Vista”的平台中,CPU還是核心,GPU必須在CPU的控制下工作,而Vista系統也必須通過CPU來調用GPU的資源。
DirectX9還有一個不足之處,那就是它只能進行單任務渲染,即無法同時完成兩個場景的渲染工作(如無法在運行遊戲的同時為軟體渲染3D界面),應用範圍受到極大的限制。而DirectX 10則允許GPU同時渲染多個不相關的3D場景,工作效率大為提高。因此,儘管DirectX 9顯卡大都能驅動Vista華麗的Aero Glass視覺模式,但很多方面受到了限制,只有DirectX 10顯卡才是Vista的理想“伴侶”。
可惜,微軟決定DirectX10不會“下嫁”WindowsXP,想體驗DX10特效只能依賴Vista。

渲染單元模式


Shader Model 4.0
從DirectX 8開始,Shader Model(渲染單元模式)在DirectX體系中的地位就日趨重要,其版本和渲染單元的規格也成為了決定顯卡性能高低的關鍵因素。隨著DirectX 10時代的到來,Shader Model也升級到了4.0版本。與眼下如日中天的Shader Model 3.0(以下簡稱SM 3.0)相比,Shader Model 4.0(以下簡稱SM 4.0)有哪些可喜的變化?
首先,SM4.0中的指令長度被提升到大於64K(即64×1024)的水平,這是SM 3.0規格(渲染指令長度允許大於512)的128倍。顯然,SM 4.0在為渲染齣電影級別的遊戲畫面做準備。由於渲染指令長度大幅提升,SM 4.0中相應的寄存器規格也有所增強,如Constant寄存器採用16×4096陣列、tmp寄存器則有4096個、input寄存器採用16/32規格等,上述指標都比以前的DirectX有明顯的改進。其次,SM 4.0在紋理數量方面也有提高。DirectX 10允許程序員在渲染物體時使用128個紋理,而DirectX 9隻提供4/16規格,更多的紋理意味著物體表面精度更接近真實,遊戲開發者擁有更廣泛的選擇。
從上述情況不難看出,DirectX 10在性能方面的提升是巨大的,它將進一步解放CPU的資源。當然,我們也必須看到,DirectX 10對硬體(尤其是顯卡)的要求也更為苛刻,GPU在設計上也將更加複雜。

新版功能


正如以前的DX版本一樣,DX10.1也是DX10的超集,因此它將支持DirectX 10的所有功能,同時它將支持更多的功能,提供更高的性能。
改善的shader資源存取功能
DX10.1的一個主要提高是改善的shader資源存取功能,在多樣本AA時,在讀取樣本時有更好的控制能力。除此之外,DX10.1還將可以創建定製的下行採樣濾波器。
DX10.1還將有更新的浮點混合功能,對於渲染目標更有針對性,對於渲染目標混合將有新的格式,渲染目標可以實現獨立的各自混合。陰影功能一直是遊戲的重要特效,Direct3D 10.1 的陰影濾波功能也將有所提高,從而可望進一步提高畫質。
支持多核系統有更高的性能
在性能方面,DirectX 10.1將支持多核系統有更高的性能。而在渲染,反射和散射時,Direct3D 10.1將減少對API的調用次數,從而將獲得不錯的性能提升。
其他方面
其他方面,DX10.1的提高也不少,包括32bit浮點濾波,可以提高渲染精確度,改善HDR渲染的畫質。完全的抗鋸齒應用程序控制也將是DX10.1的亮點,應用程序將可以控制多重採樣和超級採樣的使用,並選擇在特定場景出現的採樣模板。DX10.1將至少需要單像素四採樣。
DX10.1還將引入更新的驅動模型,WDDM 2.1。與DX10的WDDM2.0相比,2.1有一些顯著的提高。
首先是更多的內容轉換功能,WDDM2.0支持處理一個命令或三角形後進行內容轉換,而WDDM2.1則可以讓內容轉換即時進行。由於GPU同時要并行處理多個線程,因此內容轉換的即時性不僅可以保證轉換質量,還可以提升GPU效率,減少等待時間。另外,由於WDDM 2.1支持基於過程的虛擬內存分配,處理GPU和驅動頁面錯誤的方式也更為成熟。