● Compute Shader與Texture Compression
GPU是圖形處理器,以往的GPU通用計(jì)算需要程序員先將資料偽裝成GPU可識別的圖像,再將GPU輸出的圖像轉(zhuǎn)換為想要的結(jié)果,而通過DX11中的Compute Shader通用計(jì)算,任意類型的數(shù)據(jù)(即使是非圖形數(shù)據(jù))都可以直接進(jìn)行計(jì)算,而且不受圖形渲染流程的束縛,可以隨時(shí)寫入寫出,GPU通用計(jì)算的效能提高了很多。
由于GPU的浮點(diǎn)運(yùn)算能力非常強(qiáng)大,支持GPU進(jìn)行通用計(jì)算的技術(shù)發(fā)展勢頭很快,NVIDIA和AMD分別有CUDA和Stream技術(shù),以前兩家是各自為戰(zhàn),如今微軟也看到了GPU通用計(jì)算的曙光,在DX11中加入了Compute Shader這一技術(shù),意在統(tǒng)一當(dāng)前的通用計(jì)算技術(shù)。你可以認(rèn)為Compute Shader標(biāo)準(zhǔn)就是微軟提出的OPEN CL。
Compute Shader技術(shù)是微軟DirectX 11 API新加入的特性,在Compute Shader的幫助下,程序員可直接將GPU作為并行處理器加以利用,GPU將不僅具有3D渲染能力,也具有其他的運(yùn)算能力,也就是我們說的GPGPU的概念和物理加速運(yùn)算。多線程處理技術(shù)使游戲更好地利用系統(tǒng)的多個(gè)核心。

Compute Shader圖形流水線
Compute Shader主要特性包括線程間數(shù)據(jù)通信、一整套隨機(jī)訪問和流式I/O操作基本單元等,能加快和簡化圖像和后期處理效果等已有技術(shù),也為DX11級硬件的新技術(shù)做好了準(zhǔn)備,對于游戲和應(yīng)用程序開發(fā)有著很重大的意義。
在DirectX 11以及CS的幫助下,游戲開發(fā)者便可以越過復(fù)雜的數(shù)據(jù)結(jié)構(gòu),并在這些數(shù)據(jù)結(jié)構(gòu)中運(yùn)行更多的通用算法。與其他完整的可編程的DX10和DX11管線階段一樣,CS將會共享一套物質(zhì)資源(也就是著色處理器)。
在硬件支持Compute Shader之后,相應(yīng)的硬件必須要比當(dāng)代硬件更加靈活,因?yàn)樵谶\(yùn)行CS代碼的時(shí)候,硬件必須支持隨機(jī)讀寫、不規(guī)則列陣(而不是簡單的流體或者固定大小的2D列陣)、多重輸出、可根據(jù)程序員的需要直接調(diào)用個(gè)別或多個(gè)線程、32k大小的共享寄存空間和線程組管理系統(tǒng)、粒數(shù)據(jù)指令集、同步建構(gòu)以及可執(zhí)行無序IO運(yùn)算的能力。
Compute Shader可發(fā)揮的地方很多,游戲中可以使用GPU進(jìn)行光線追蹤、A-Buffer采樣抗鋸齒、物理特效、人工智能AI等游戲特效運(yùn)算。在游戲之外,程序員也可以利用CS架構(gòu)進(jìn)行圖像處理、后期處理(Post Process)等。
Texture Compression(紋理壓縮)是一種和虛擬紋理類似的紋理管理方法,在很多情況下具有6倍以上壓縮比例的紋理壓縮都可以極其有效地減小紋理本身的大小,從而避免紋理傳輸和管理方面的瓶頸,并且可以獲得更加精細(xì)的畫面,由此看來其效率比虛擬紋理要高。
DirectX 11加入了兩種新的壓縮算法——BC6和BC7。其中,BC6是專門針對HDR圖像設(shè)計(jì)的壓縮算法,壓縮比為6:1;而BC7是專門為LDR(低動(dòng)態(tài)范圍)圖像設(shè)計(jì)的壓縮算法,壓縮比為3:1。

上圖則是BC7針對LDR紋理的壓縮與傳統(tǒng)的BC3紋理壓縮對比。可以看出傳統(tǒng)的BC3紋理壓縮損失了大量的紋理細(xì)節(jié),壓縮之后的效果也很不好。而采用BC7算法壓縮后的紋理,丟失的細(xì)節(jié)很少,效果也非常好,這就是改進(jìn)紋理壓縮的魅力。

上圖展示的是圖像通過BC6壓縮模式進(jìn)行壓縮的前后效果對比圖。其中左邊的圖像為原始圖像,中間的是在壓縮過程中損失的一些細(xì)節(jié),而右邊的就是壓縮后的圖像。可以看出,從畫質(zhì)上來看幾乎沒有損失(肉眼看不出),但是卻可以大幅度降低顯存的占用。
● 著色器模型變化歷程與總結(jié)
在圖形渲染中,GPU中的可編程計(jì)算單元被稱為著色器(Shader),著色器的性能由DirectX中規(guī)定的Shader Model來區(qū)分。GPU中最主要的可編程單元式頂點(diǎn)著色器和像素著色器。
為了實(shí)現(xiàn)更細(xì)膩逼真的畫質(zhì),GPU的體系架構(gòu)從最早的固定單元流水線到可編程流水線,到DirectX 8初步具備可編程性,再到DirectX 10時(shí)代的以通用的可編程計(jì)算單元為主、圖形固定單元為輔的形式,最新的DirectX 11更是明確提出通用計(jì)算API Direct Compute概念,鼓勵(lì)開發(fā)人員和用戶更好地將GPU作為并行處理器使用。在這一過程中,著色器的可編程性也隨著架構(gòu)的發(fā)展不斷提高,下表給出的是每代模型的大概特點(diǎn)。
表:Shader Model版本演化與特點(diǎn)
Shader Model
|
GPU代表
|
顯卡時(shí)代
|
特點(diǎn)
|
|
1999年第一代NV Geforce256
|
DirectX 7
1999~2001
|
GPU可以處理頂點(diǎn)的矩陣變換和進(jìn)行光照計(jì)算(T&L),操作固定,功能單一,不具備可編程性
|
SM 1.0
|
2001年第二代NV Geforce3
|
DirectX 8
|
將圖形硬件流水線作為流處理器來解釋,頂點(diǎn)部分出現(xiàn)可編程性,像素部分可編程性有限(訪問紋理的方式和格式受限,不支持浮點(diǎn))
|
SM 2.0
|
2003 年
ATI R300
和第三代NV Geforce FX
|
DirectX 9.0b
|
頂點(diǎn)和像素可編程性更通用化,像素部分支持FP16/24/32浮點(diǎn),可包含上千條指令,處理紋理更加靈活:可用索引進(jìn)行查找,也不再限制[0,1]范圍,從而可用作任意數(shù)組(這一點(diǎn)對通用計(jì)算很重要)
|
SM 3.0
|
2004年
第四代NV Geforce 6
和 ATI X1000
|
DirectX 9.0c
|
頂點(diǎn)程序可以訪問紋理VTF,支持動(dòng)態(tài)分支操作,像素程序開始支持分支操作(包括循環(huán)、if/else等),支持函數(shù)調(diào)用,64位浮點(diǎn)紋理濾波和融合,多個(gè)繪制目標(biāo)
|
SM 4.0
|
2007年
第五代NV G80和ATI R600
|
DirectX 10
2007~2009
|
統(tǒng)一渲染架構(gòu),支持IEEE754浮點(diǎn)標(biāo)準(zhǔn),引入Geometry Shader(可批量進(jìn)行幾何處理),指令數(shù)從1K提升至64K,寄存器從32個(gè)增加到4096個(gè),紋理規(guī)模從16+4個(gè)提升到128個(gè),材質(zhì)Texture格式變?yōu)橛布С值?/span>RGBE格式,最高紋理分辨率從2048*2048提升至8192*8192
|
SM 5.0
|
2009年
ATI RV870
和2010年NV GF100
|
DirectX 11
2009~
|
明確提出通用計(jì)算API Direct Compute概念和Open CL分庭抗衡,以更小的性能衰減支持IEEE754的64位雙精度浮點(diǎn)標(biāo)準(zhǔn),硬件Tessellation單元,更好地利用多線程資源加速多個(gè)GPU
|
傳統(tǒng)的分離架構(gòu)中,兩種著色器的比例往往是固定的。在GPU核心設(shè)計(jì)完成時(shí),各種著色器的數(shù)量便確定下來,比如著名的“黃金比例”——頂點(diǎn)著色器與像素著色器的數(shù)量比例為1:3。但不同的游戲?qū)旤c(diǎn)資源和像素資源的計(jì)算能力要求是不同的。如果場景中有大量的小三角形,則頂點(diǎn)著色器必須滿負(fù)荷工作,而像素著色器則會被閑置;如果場景中有少量的大三角形,又會發(fā)生相反的情況。因此,固定比例的設(shè)計(jì)無法完全發(fā)揮GPU中所有計(jì)算單元的性能。
頂點(diǎn)著色單元(Vertex Shader,VS)和像素著色單元(Pixel Shader,PS)兩種著色器的架構(gòu)既有相同之處,又有一些不同。兩者處理的都是四元組數(shù)據(jù)(頂點(diǎn)著色器處理用于表示坐標(biāo)的w、x、y、z,但像素著色器處理用于表示顏色的a、r、g、b),頂點(diǎn)渲染需要比較高的計(jì)算精度;而像素渲染則可以使用較低的精度,從而可以增加在單位面積上的計(jì)算單元數(shù)量。在Shader Model 4.0之前,兩種著色器的精度都在不斷提高,但同期頂點(diǎn)著色器的精度要高于像素著色器。
Shader Model 4.0統(tǒng)一了兩種著色器,所以頂頂點(diǎn)和像素著色器的規(guī)格要求完全相同,都支持32位浮點(diǎn)數(shù)。這是GPU發(fā)展的一個(gè)分水嶺;過去只能處理頂點(diǎn)和只能處理像素的專門處理單元被統(tǒng)一之后,更加適應(yīng)通用計(jì)算的需求。
DirectX 11提出的Shader Model 5.0版本繼續(xù)強(qiáng)化了通用計(jì)算的地位,微軟提出的全新API——Direct Compute將把GPU通用計(jì)算推向新的巔峰。同時(shí)Shader Model 5.0是完全針對流處理器而設(shè)定的,所有類型的著色器,如:像素、頂點(diǎn)、幾何、計(jì)算、Hull和Domaim(位于Tessellator前后)都將從新指令集中獲益。

GPU執(zhí)行FFT性能將在未來迅速提升
如圖,快速傅里葉變換(Fast Fourier Transform,F(xiàn)FT)有廣泛的應(yīng)用,如數(shù)字信號處理、計(jì)算大整數(shù)乘法、求解偏微分方程等等。SIGGRAPH2008峰會認(rèn)為未來隨著Compute Shader和新硬件、新算法的加入,GPU執(zhí)行FFT操作的性能將得到快速提升。
如果使用DirectX 11中的Computer Shader技術(shù),API將能借助GPU充裕的浮點(diǎn)計(jì)算能力進(jìn)行加速計(jì)算,則能輕易完成大量的FFT(傅里葉變換)。在圖形渲染中,這項(xiàng)技術(shù)的運(yùn)用極大地提高了波浪生成速度,而且畫面質(zhì)量也更好。
以往受限于浮點(diǎn)運(yùn)算性能,目前CPU進(jìn)行FFT變換只能局限在非常小的區(qū)域內(nèi),比如64x64,高端CPU最多能達(dá)到128x128,而GTX 280則能實(shí)現(xiàn)每幀512x512的傅里葉變換,所用時(shí)間不過2ms,效能非常高。
DirectX11最為強(qiáng)調(diào)的圖形特性就是Tessellation(曲面細(xì)分)。Tessellation技術(shù)利用GPU硬件加速,將現(xiàn)有3D模型的三角形拆分得更細(xì)小、更細(xì)致,也就是大大增加三角形數(shù)量,使得渲染對象的表面和邊緣更平滑、更精細(xì)。
● Tesslation測試-Stone Giant
《Stone Giant》是一個(gè)針對DirectX 11 Tessellation效能十分依賴的Demo,本次筆者將用其作為檢驗(yàn)產(chǎn)品Tessellation性能的工具。
以下對比圖左側(cè)為Geforce GTX480,右側(cè)為Radeon HD 5870。
● NO Tessellation + NO Wireframe

● NO Tessellation + Wireframe

● Tessellation + NO Wireframe

● Tessellation + Wireframe



● Direct X11 SDK Test:Sub D11
Direct X11 SDK Test:Sub D11是集成在微軟的DirectX SDK開發(fā)包中的測試組件之一,它主要測試GPU的Tessellation性能。這個(gè)測試一共包含31個(gè)層級,從第一級的輕度曲面細(xì)分到31級重度曲目細(xì)分,對顯卡的幾何處理能力考驗(yàn)不斷升級。
我們?yōu)榱藢VIDIA和AMD公平起見,選擇了Factor=1/16/31,這三個(gè)級別的測試曲面數(shù)量很有可能在未來作為圖形開發(fā)者的重要參考標(biāo)準(zhǔn)。




我們能夠看到一個(gè)很明顯的性能變化,在曲面細(xì)分壓力不大的情況下,HD5870有接近于Fermi架構(gòu)GTX480的表現(xiàn),HD5970則能夠超越GTX480。而在曲面細(xì)分壓力變大之后,A卡出現(xiàn)了非常嚴(yán)重的性能下降,畢竟R800架構(gòu)的一個(gè)曲面細(xì)分單元無法對抗NVIDIA在Fermi架構(gòu)中給每個(gè)SM單元分配一個(gè)曲面細(xì)分單元。
● DX11 SDK Test:PN Triangle
PN Triangle和上一個(gè)Sub D11測試有異曲同工之處,它們都著重測試GPU的曲面細(xì)分性能。這個(gè)SDK測試程序是在微軟發(fā)布DirectX 11初期由AMD提供的。

因?yàn)樗瑯右灿星鎸蛹壴O(shè)置,所以我們選取了負(fù)載較輕的5和負(fù)載較重的19進(jìn)行測試。結(jié)果如下:


PN Triangle的測試結(jié)果和Sub D11非常相似,畢竟兩者的測試目的相同。但是我們需要清楚知道的一點(diǎn)是我們所作的都是理論性能測試,而且是有很強(qiáng)側(cè)重性的。
在圖形運(yùn)算中不可能有完全純凈的Tessellation環(huán)境和極大的Tessellation負(fù)載。所以我們不可能看到在DirectX 11游戲中出現(xiàn)A卡因?yàn)殚_啟了DirectX 11支持的Tessellation功能之后性能大幅度下降。
● DX11 SDK Test:Detail Tessellation (1)
Detail Tessellation是集成在DirectX 11 SDK開發(fā)包中的重要基準(zhǔn)測試程序,它提供了Bump Mapping、Parallax Occlusion Mapping和Tessellation三種主渲染模式,同時(shí)使用者可以在這3種模式之上添加其他附加效果,以達(dá)到較為復(fù)雜的Shader效果。

這個(gè)測試中只要涉及置換位移貼圖和傳統(tǒng)的凹凸類貼圖,都會有大量的VS指令,而VS指令天生就是4D指令,因此R800的4D+1D組織SIMD結(jié)構(gòu)流處理器會表現(xiàn)出較強(qiáng)的性能。而NVIDIA顯卡的主要看點(diǎn)則在曲面細(xì)分性能上。越復(fù)雜的Shader效果對著色器性能要求越高。



Detail Tessellation雖然同樣側(cè)重曲面細(xì)分能力,但是它添加了大量其他貼圖效果,像我們熟知的置換位移貼圖和傳統(tǒng)的凹凸類貼圖都會在這項(xiàng)測試中找到。這項(xiàng)測試已經(jīng)逐漸接近真實(shí)使用環(huán)境,同時(shí)大量的VS指令也讓4D+1D組織SIMD結(jié)構(gòu)流處理器找到了爆發(fā)理論值的用武之地。
● DX11 SDK Test:Detail Tessellation (2)
Detail Tessellation是集成在DirectX 11 SDK開發(fā)包中的重要基準(zhǔn)測試程序,它提供了Bump Mapping、Parallax Occlusion Mapping和Tessellation三種主渲染模式,同時(shí)使用者可以在這3種模式之上添加其他附加效果,以達(dá)到較為復(fù)雜的Shader效果。

Adaptive Tessellation技術(shù)一樣會通過調(diào)節(jié)VS來細(xì)化曲面結(jié)構(gòu),跟單純的設(shè)置頂點(diǎn)碎多邊形的Tessellation技術(shù)來說不一樣。我們發(fā)現(xiàn)這方面AMD顯卡表現(xiàn)較為優(yōu)秀,比起單純的Tessellation技術(shù)來說性能衰減要小很多。
而Tessellation Ultra對曲面細(xì)分單元較為缺乏的A卡來說,性能下降非常迅速,畢竟Fermi架構(gòu)的GF100完整版擁有16個(gè)曲面細(xì)分單元,而AMD的R800架構(gòu)只是在UTDP指令分配器中裝配了一個(gè)曲面細(xì)分單元以達(dá)到微軟DirectX 11的硬件要求,所以性能較弱理所應(yīng)當(dāng)。



鑒于這項(xiàng)測試對單卡雙芯HD5970顯卡沒有提供良好支持,我們在Detail Tessellation測試中忽略了這款顯卡的成績。我們可以從測試中看到,在Shader效果較為簡單的前幾項(xiàng)測試中,AMD和NVIDAI的最新架構(gòu)顯卡并沒有太大分別,而在越來越復(fù)雜的Shader效果中,全新設(shè)計(jì)的Fermi架構(gòu)顯卡體現(xiàn)出了比較強(qiáng)勁的運(yùn)算能力。
在4月下旬,中關(guān)村在線顯卡頻道已經(jīng)對DirectX 11現(xiàn)有的大部分游戲進(jìn)行了橫向評測,而今天這篇文章的目的,就是讓大家更加深入地了解DirectX 11這套全新的API將如何從圖形圖像的渲染方面改變我們的“視界”。
目前Fermi架構(gòu)的Geforce GTX400系列顯卡剛上市不久,整個(gè)DirectX 11周邊配合程序還沒有完善,用戶方便執(zhí)行的、可用于單項(xiàng)性能測試的也只有屈指可數(shù)的Techdemo和SDK開發(fā)包內(nèi)的程序,而且它們的測試方向幾乎都指向了Tessellation技術(shù)。相信在未來的一段時(shí)間內(nèi),我們可以運(yùn)用更好的軟件來了解DirectX 11顯卡的各項(xiàng)技術(shù)特性。