淺析DirectX11技術(shù)帶給圖形業(yè)界的改變
前言:2009年10月23日,微軟高調(diào)發(fā)布了其最新一代操作系統(tǒng)——Windows7,這款操作系統(tǒng)相對(duì)于之前的Vista系統(tǒng)有相當(dāng)大的進(jìn)步,特別核心執(zhí)行效率方面得到顯著改善,并且加入了DirectX 11等新技術(shù)。微軟此次推出全新圖形API——DirectX 11目的很明確,就是能夠充分利用顯卡資源,旨在游戲以及通用計(jì)算方面達(dá)到更高的執(zhí)行效率。今天本文就帶大家一起分析DirectX 11技術(shù)帶給圖形業(yè)界和游戲玩家的雙重體驗(yàn)。同時(shí)也讓更多人了解到自己是否需要一款支持DirectX 11的顯卡,具體選擇哪些顯卡最為合適。
● DirectX對(duì)GPU發(fā)展帶來(lái)的影響
DirectX并不是一個(gè)單純的圖形API,它是由微軟公司開發(fā)的用途廣泛的API,它包含有Direct Graphics(Direct 3D+Direct Draw)、Direct Input、Direct Play、Direct Sound、Direct Show、Direct Setup、Direct Media Objects等多個(gè)組件,它提供了一整套的多媒體接口方案。只是其在3D圖形方面的優(yōu)秀表現(xiàn),讓它的其它幾個(gè)組件幾乎被人們忽略。
Direct Graphics的優(yōu)秀表現(xiàn)和微軟的影響力,令無(wú)數(shù)硬件廠商生畏并不斷遵循其變化來(lái)開發(fā)新的圖形處理器架構(gòu)。同時(shí)ATI和NVIDIA兩家廠商之所以至今仍不斷跟隨DirectX的步伐,是意識(shí)到任何游戲相關(guān)的硬件廠商要是被微軟拋棄,那么其后果是不堪設(shè)想的。

大家都在暢想DirectX技術(shù)的未來(lái)
在過(guò)去的數(shù)次DirectX更替中,有幾次較大的更新,比如我們熟知的從DirectX 7到DirectX 8到DirectX 9到再DirectX 10,也是因?yàn)檫@樣的理由使得芯片變得更大。在向DirectX 8的轉(zhuǎn)移使得可編程的硬件進(jìn)入管線成為了雙重構(gòu)造。對(duì)于DirectX 9的頂點(diǎn)處理與像素處理,則被真正的可編程處理器調(diào)換。而在向DirectX 10的轉(zhuǎn)移為了實(shí)現(xiàn)更靈活的可編程性,需要GPU架構(gòu)進(jìn)行根本的改革。
所以哪個(gè)世代的改變以及生產(chǎn)什么樣的GPU都關(guān)乎根本性的改革,而這種改革基本上都是圍繞DirectX這個(gè)最重要的圖形API來(lái)進(jìn)行的。特別是DirectX 10時(shí)代架構(gòu)的改革,從根本上改變了GPU的本質(zhì)。從DirectX 8向DirectX 9通過(guò)API的改革牽動(dòng)了GPU架構(gòu)的改革,而架構(gòu)巨大變化的轉(zhuǎn)折點(diǎn)則是DirectX 10。

DirectX 10時(shí)代 著色器單元走向統(tǒng)一
在DirectX 10時(shí)代,我們非常有幸看到了Pixel Shader(頂點(diǎn)著色器)、Vertex Shader(像素著色器)和Geometry Shader(幾何著色器),三種具體的硬件邏輯被整合為一個(gè)全功能的著色器Shader。但是我們也發(fā)現(xiàn),GPU在性能提升的同時(shí),芯片規(guī)模發(fā)生了更快速的放大,這不得不讓人擔(dān)心未來(lái)GPU的功耗和發(fā)熱等等問(wèn)題。
事實(shí)上芯片變大有兩個(gè)主要原因。一個(gè)是因?yàn)樾阅艿脑黾印R岣哌\(yùn)算性能就會(huì)需要更多的資源,這會(huì)增加晶體管的數(shù)量。另一個(gè)就是為了發(fā)展可編程化。需要讓單一的可編程處理器包括個(gè)別進(jìn)行處理的固定功能硬件,這必然也會(huì)增加晶體管數(shù)量。可是這樣會(huì)讓性能出現(xiàn)大幅度下滑,因此為了保持同樣的性能也需要大幅度增加運(yùn)算資源。結(jié)果就是對(duì)于GPU的情況需要從固定硬用向可編程硬件轉(zhuǎn)換,晶體管數(shù)和核心尺寸也因此而增加。
直到今天我們看到的DirectX 11出現(xiàn),這個(gè)問(wèn)題得到了一個(gè)平衡的解決方案。DirectX 10帶來(lái)了眾多絢麗無(wú)比的新特效,但“濫用”各種特效最終導(dǎo)致GPU不堪重負(fù)。在DirectX 10經(jīng)歷了種種波折,瓶頸盡顯時(shí),微軟也開始將重心集中在如何提升算法和效率上面,而不是一味的加入新特效或提高模型復(fù)雜度。因此我們看到的DirectX 11,已經(jīng)將技術(shù)重心放在如何用最小的硬件開銷在先進(jìn)圖形技術(shù)的輔助下實(shí)現(xiàn)最佳的渲染效果。
● DirectX 11帶來(lái)的全新特性
DirectX 11作為一套全新的圖形API,提供給圖形開發(fā)者和用戶極大的想象空間,同時(shí)降低了開發(fā)難度,節(jié)省硬件資源,特別是后兩個(gè)特點(diǎn),是DirectX 11區(qū)別與以往的DirectX最為顯著的特點(diǎn)。
2009年NVISION大會(huì)上,微軟就透漏了DirectX 11的大量細(xì)節(jié),此時(shí)DirectX 11已經(jīng)完全成熟并獲得硬件廠商支持,就等和Win7操作系統(tǒng)一同上市了。同時(shí)借助SIGGRAPH以及GameFest 2008大會(huì)上放出的幻燈片,我們可以進(jìn)行一些深入的研究。此外,DX11特性的提前放出,對(duì)于目前DX10以及DX10.1硬件用戶而言也很有幫助,因?yàn)锳MD和NVIDIA可以照此提前開發(fā)適當(dāng)?shù)尿?qū)動(dòng)支持。

2008年度NVISION資料截圖
回顧歷次DirectX的更替過(guò)程,幾乎都對(duì)GPU架構(gòu)產(chǎn)生了顛覆性的影響,它們大部分要求GPU改變現(xiàn)有的著色器Shader單元結(jié)構(gòu),或者為著色器Shader單元追加資源,這些改進(jìn)都是為了讓GPU的指令數(shù)提升,寄存器數(shù)量增加,紋理規(guī)模提升,材質(zhì)Texture精度提升。這樣的改進(jìn)難免帶來(lái)晶體管數(shù)量的增長(zhǎng),也就說(shuō)說(shuō)GPU內(nèi)部的每個(gè)著色器Shader單元變得更加龐大。
DirectX 11發(fā)布后,人們發(fā)現(xiàn)微軟并沒(méi)有在Shader Model方面做出重要提升,雖然版本升至Shader Model 5.0,但是更重要的是它實(shí)際上可以被看作是DirectX 10和DirectX 10.1的功能補(bǔ)全,你也可以認(rèn)為它是DirectX 10和DirectX 10.1的超集,如果換個(gè)角度大膽設(shè)想,我們今天看到的DirectX 11才是微軟想要的DirectX 10完美形態(tài)。
DirectX 11針對(duì)不同方面帶來(lái)了全新的特性,目前通過(guò)現(xiàn)有資料分析,它主要有以下幾個(gè)方面的提升:

DirectX 11帶來(lái)的全新特性
● 著色器版本提升到Shader Model 5.0,采用面向?qū)ο蟮母拍?,并且完全可以支持雙精度數(shù)據(jù)。
● Tessellation曲面細(xì)分技術(shù)獲得微軟正式支持,逐漸走向成熟;
● Multithreading多線程處理,讓圖形處理面對(duì)多線程編程環(huán)境不再尷尬;
● 提出微軟自己的Compute Shader通用計(jì)算概念,把GPU通用計(jì)算推向新的巔峰;
● 新的Texture Compression紋理壓縮方案,在畫質(zhì)損失極小的環(huán)境下帶來(lái)了硬件資源的節(jié)約。
在今天的分析中,我們將重點(diǎn)放在Tessellation曲面細(xì)分技術(shù)方面,因?yàn)檫@是DirectX 11最為突出的特色之一,也是給圖形運(yùn)算產(chǎn)生深遠(yuǎn)影響的一項(xiàng)技術(shù),DirectX 11的其他特點(diǎn)我們也會(huì)提及。
● Tessellation技術(shù)簡(jiǎn)析
Tessellation又可譯作拆嵌式細(xì)分曲面技術(shù)。其實(shí)這是ATI早在其第一代DirectX 10圖形核心R600,即HD2900XT上就引入的一個(gè)特殊的計(jì)算模塊。從HD2000系列開始,直到最新的HD5000系列,整整4代顯卡全部支持這一技術(shù)。即使目前也仍然沒(méi)有游戲能夠支持這一技術(shù),ATI也依然沒(méi)有放棄在這項(xiàng)技術(shù)上的努力——從名字上也可以看出ATI在這項(xiàng)技術(shù)上的心血:Tessell-ATI-on。
Tessellation主要是靠GPU內(nèi)部的一個(gè)模塊Programmable Tessellator(可編程拆嵌器)來(lái)實(shí)現(xiàn)的。能夠根據(jù)3D模型中已經(jīng)有的頂點(diǎn),根據(jù)不同的需求,按照不同的規(guī)則,進(jìn)行插值,將一個(gè)多邊形拆分成為多個(gè)多邊形。而這個(gè)過(guò)程都是可以由編程來(lái)控制的,這樣就很好的解決了效率和效果的矛盾。TessellATIon能自動(dòng)創(chuàng)造出數(shù)百倍與原始模型的頂點(diǎn),這些不是虛擬的頂點(diǎn),而是實(shí)實(shí)在在的頂點(diǎn),效果是等同于建模的時(shí)候直接設(shè)計(jì)出來(lái)的。

Tessellation工作流程三部曲
很明顯,DirectX 11中的Tessellation讓雪山的凹凸感更為明顯,遠(yuǎn)勝于DirectX 10里所采用的視差映射貼圖技術(shù)。雖然后者在較遠(yuǎn)距離觀看的時(shí)候也能提供一定的視覺(jué)欺騙性,但和 Tessellation技術(shù)塑造出來(lái)的真實(shí)感覺(jué)還相差太遠(yuǎn)。我們使用的分析圖來(lái)自AMD在R600發(fā)布時(shí)放出的一段Demo,這段Demo區(qū)別于以往的設(shè)計(jì)方式,它沒(méi)有突出主角而淡化背景,因?yàn)樵跊](méi)有Tessellation技術(shù)之前,大量頂點(diǎn)的生成和隨之而來(lái)的計(jì)算將給GPU的幾何處理部分帶來(lái)巨大壓力,無(wú)法流暢運(yùn)行,而Tessellation技術(shù)改變了這一模式。
除了大幅提升模型細(xì)節(jié)和畫質(zhì)外,Tessellation最吸引程序員的地方就是:他們無(wú)需手動(dòng)設(shè)計(jì)上百萬(wàn)個(gè)三角形的復(fù)雜模型,只需簡(jiǎn)單勾繪一個(gè)輪廓,剩下的就可以交給Tessellation技術(shù)自動(dòng)拆嵌,大大提高了開發(fā)效率;而且簡(jiǎn)單的模型在GPU處理時(shí)也能大幅節(jié)約顯存開銷,令渲染速度大幅提升。
● Tessellation技術(shù)歷史回顧
Tessellation技術(shù)最早可以追溯到DX8時(shí)代,當(dāng)時(shí)ATI就已經(jīng)和微軟聯(lián)手開發(fā)了TruForm(N-Patch)技術(shù),也就是Tessellation的前身,并被納入DX8.1的范疇。
2001年,ATI公布了TruForm的技術(shù)細(xì)節(jié),相關(guān)媒體也對(duì)這一技術(shù)進(jìn)行了報(bào)道。簡(jiǎn)單地說(shuō)TruForm技術(shù)就是將在芯片內(nèi)部將游戲中的三角形轉(zhuǎn)換成曲面然后再轉(zhuǎn)換成一個(gè)新的三角形,這個(gè)三角形可以在場(chǎng)景中顯示。
當(dāng)三角形信息通過(guò)圖形芯片時(shí),TruForm技術(shù)開始工作,它通過(guò)創(chuàng)建N-Patch來(lái)形成N-Patch網(wǎng)格。
N-Patch網(wǎng)格是一個(gè)曲面,通過(guò)線性三角形信息來(lái)定義。N-Patches在三角形每個(gè)邊放兩個(gè)控制點(diǎn),這樣就產(chǎn)生了六個(gè)新的頂點(diǎn)。這些控制點(diǎn)都在一個(gè)單獨(dú)的平面上,可以位于原三角形之下或者之上。使用儲(chǔ)存在原三角形的頂點(diǎn)向量的信息,可以決定控制點(diǎn)的位置。

N-Patch技術(shù)示意圖
當(dāng)然,這并不是一個(gè)簡(jiǎn)單的工作,而這正是TruForm技術(shù)的用處所在。當(dāng)時(shí)人們認(rèn)為它是ATI下一代顯卡Radeon2的獨(dú)門武器。在當(dāng)時(shí)GPU運(yùn)算能力極為有限的情況下,N-Patch技術(shù)可以大幅提升3D模型的細(xì)節(jié)和顯示效果。
但是它卻出現(xiàn)了一些非常遺憾的失誤,導(dǎo)致這項(xiàng)技術(shù)最終被用戶放棄。因?yàn)镹-Patch技術(shù)技術(shù)比較適合于海豚、賽車等表面為曲面的模型上,而如果這個(gè)技術(shù)應(yīng)用在坦克等不需要做曲面化的模型上的時(shí)候,效果就會(huì)變得相當(dāng)?shù)幕?/p>

Tessellation技術(shù)帶來(lái)的3D流水線變化
N-Patch/TruForm技術(shù)就這樣被市場(chǎng)邊緣化,但是ATI還是沒(méi)有放棄對(duì)它的開發(fā)和研究。終于在2005年出現(xiàn)了轉(zhuǎn)機(jī),在微軟與ATI的合作結(jié)晶——專為XBOX360設(shè)計(jì)的圖形芯片Xenos當(dāng)中,經(jīng)過(guò)改進(jìn)的N-Patch/TruForm技術(shù)重出江湖,這次ATI將它直接命名為我們熟悉的TessellATIon,直譯為“拆嵌”意譯為“細(xì)分曲面”,同時(shí)表示ATI在這項(xiàng)技術(shù)中不可磨滅的貢獻(xiàn)。
● Tessellation技術(shù)拆解分析
Tessellation這個(gè)英文單詞直譯為“鑲嵌”,也就是在頂點(diǎn)與頂點(diǎn)之間自動(dòng)嵌入新的頂點(diǎn)。Tessellation經(jīng)常被意譯為“細(xì)分曲面”,因?yàn)樵谧詣?dòng)插入大量新的頂點(diǎn)之后,模型的曲面會(huì)被分得非常細(xì)膩,看上去更加平滑致密。它是一種能夠在圖形芯片內(nèi)部自動(dòng)創(chuàng)造頂點(diǎn),使模型細(xì)化,從而獲得更好畫面效果的技術(shù)。Tessellation能自動(dòng)創(chuàng)造出數(shù)百倍與原始模型的頂點(diǎn),這些不是虛擬的頂點(diǎn),而是實(shí)實(shí)在在的頂點(diǎn),效果是等同于建模的時(shí)候直接設(shè)計(jì)出來(lái)的。

圖形業(yè)界對(duì)于曲面細(xì)分的探索不斷深入
在此之前,人們對(duì)低代價(jià)多邊形操作法已經(jīng)探索了近10年,從最開始的對(duì)三角形的fan操縱,到后來(lái)的龜裂和沖撞檢查,這些方法可以實(shí)現(xiàn)曲面細(xì)分效果,但是對(duì)資源的消耗量太大不可控制。這次微軟在DirectX 11中加入硬件Tessellation單元,我們可以視作曲面細(xì)分技術(shù)歷經(jīng)長(zhǎng)時(shí)間的磨練后修成正果。雖然它不太符合通用處理單元的設(shè)計(jì)方向,但是如果計(jì)算晶體管的投入與性能回報(bào),獨(dú)立的硬件Tessellation單元是目前最好的選擇。
Tessellation技術(shù)是完全可編程的,它提供了多種插值頂點(diǎn)位置的方法來(lái)創(chuàng)造各種曲面:
1. N-Patch曲面,就是和當(dāng)年TruForm技術(shù)一樣,根據(jù)基礎(chǔ)三角形頂點(diǎn)的法線決定曲面;
2. 貝塞爾曲面,根據(jù)貝塞爾曲線的公式計(jì)算頂點(diǎn)的位置;
3. B-Spline、NURBs、NUBs曲線(這三種曲線均為CAD領(lǐng)域常用曲線,在Maya中均有相應(yīng)工具可以生成)
4. 通過(guò)遞歸算法接近Catmull-Clark極限曲面。

不同方式的曲面細(xì)分效果實(shí)例
Tessellation技術(shù)最初主要被用以“細(xì)分曲面”,隨著該技術(shù)被納入DX11范疇,得到大范圍推廣之后,插值頂點(diǎn)的算法也越來(lái)越多,因此用途也越來(lái)越廣,產(chǎn)生了很多非常有創(chuàng)意的應(yīng)用。
Tessellation技術(shù)還經(jīng)常與Displacement Maps(貼圖置換)技術(shù)搭配使用,從而將平面紋理貼圖改造成為具有立體感的幾何圖形,大大增強(qiáng)3D模型或場(chǎng)景的真實(shí)性。
除了大幅提升模型細(xì)節(jié)和畫質(zhì)外,Tessellation最吸引程序員的地方就是:他們無(wú)需手動(dòng)設(shè)計(jì)上百萬(wàn)個(gè)三角形的復(fù)雜模型,只需簡(jiǎn)單勾繪一個(gè)輪廓,剩下的就可以交給Tessellation技術(shù)自動(dòng)鑲嵌,大大提高開發(fā)效率;而且簡(jiǎn)單的模型在GPU處理時(shí)也能大幅節(jié)約顯存開銷,同時(shí)大幅提升渲染速度。
● DirectX 11引入可編程曲面細(xì)分管線
在DirectX10時(shí)代的細(xì)分曲面里,最有新用途的就是Geometry Shader和Stream Out,前者可以輸入一些數(shù)據(jù),然后產(chǎn)生一些三角形,后者可以斷絕Pixel Shader,做完Geometry Shader就直接輸出回Input Assembler,這就意味著可以做GPU遞歸和迭代。
而DirectX 11相比DirectX 10,Shader Model的變化并不算大,只是增加了5個(gè)全新的指令集。但是對(duì)于游戲開發(fā)者而言,Shader Model 5.0函數(shù)和子程序代碼的開發(fā)都比上一代更加簡(jiǎn)單方便。增加的五個(gè)新指令集目的也是為了讓編程者可以進(jìn)行更靈活的數(shù)據(jù)訪問(wèn)和操作。
在Shader Model 5.0中,Shader進(jìn)行了類型的統(tǒng)一,除了4.0版本中就已經(jīng)有的Vertex Shader、Pixel Shader、Geometry Shader外,還增加了Hull Shader、Compute Shader、Domain Shader三種新的Shade,它們的出現(xiàn)都是為了完善曲面細(xì)分管線。

ATI的HD2000以上級(jí)別顯卡其實(shí)都具備Tessellation的功能,但它們卻無(wú)法與DX11中的Tessellation技術(shù)相兼容。這是因?yàn)槲④洸](méi)有原封未動(dòng)的將R600的Tessellation技術(shù)抄到DX11之中,而是對(duì)其進(jìn)行了優(yōu)化,使之能與渲染流程完美的結(jié)合在一起,可以更高效率的細(xì)分出更多的多邊形和曲面。

與DX9C/DX10時(shí)代孤零零的Tessellator模塊不同,在DX11當(dāng)中,微軟加入了兩種全新著色器來(lái)全力配合Tessellator的工作,分別位于鑲嵌器的前后。

其中Hull Shader(外殼著色器)用來(lái)控制自動(dòng)生成頂點(diǎn)的數(shù)量和算法,也就是Tessellator的細(xì)分級(jí)別,然后交給Tesselator進(jìn)行鑲嵌處理,最后由Domain Shader(域著色器)按照程序要求生成所需曲面,并自動(dòng)進(jìn)行法線平移、置換貼圖,產(chǎn)生新的模型。

與DX9/10中的Tessellation技術(shù)相比,DX11新增的兩種著色器都受統(tǒng)一渲染架構(gòu)支配,因此處理能力非常富裕,DX11版Tessellation不僅效率更高、而且細(xì)分級(jí)別更豐富。但是,更高的細(xì)分等級(jí)對(duì)Tessellator模塊本身的處理能力提出了苛刻要求,這需要芯片廠商在設(shè)計(jì)之初就考慮周全。
● Tessellation與Displacement Mapping綜合應(yīng)用
Displacement Mapping(貼圖置換)與Tessellation(曲面細(xì)分)的結(jié)合使用具有許多優(yōu)勢(shì)。雖然兩者在原理方面本來(lái)是沒(méi)有任何。
貼圖置換是一種通過(guò)VS和alpha混合操作來(lái)達(dá)成復(fù)雜表面的操作;基本上貼圖置換不會(huì)增加新的多邊形,即便增加也僅作操作點(diǎn)用。曲面細(xì)分則不一樣,它通過(guò)在已知多邊形內(nèi)設(shè)立新的頂點(diǎn),達(dá)成fan操作來(lái)完成增加多邊形的目的。這兩種技術(shù)一個(gè)的重點(diǎn)是alpha和頂點(diǎn)移動(dòng),另一個(gè)的重點(diǎn)則是直接增加多邊形數(shù)量。這是兩種完全不同的復(fù)雜表面細(xì)節(jié)實(shí)現(xiàn)手段。

Tessellation和Displacement Mapping結(jié)合應(yīng)用
簡(jiǎn)單來(lái)講,Displacement Mapping的目的就是借助Tessellation改變多變形的外觀,而不僅僅只是圓滑棱角。
正如你所看到的那樣,Displacement mapping能夠透過(guò)Tessellation和Displacement Mapping讓一張平面的網(wǎng)面真正實(shí)現(xiàn)具有不同形狀的外觀(上面的例子是綿綿起伏的山丘),只要使用Displacement Mapping映像到網(wǎng)面的頂點(diǎn)上,就能夠讓網(wǎng)面善的頂點(diǎn)提升/升降到不同的相對(duì)高度,同樣的網(wǎng)面可以形成不同的形狀。

Tessellation和Displacement Mapping結(jié)合應(yīng)用
和以往主要在光柵化階段進(jìn)行的Bump mapping不同的是,Displacement Mapping是生成的是由更多多邊形構(gòu)成的真實(shí)外觀,而Bump mapping則是一種欺騙性手段、一種性能妥協(xié)方案而已,不能產(chǎn)生真正不同的外形,采用Displacement Mapping來(lái)實(shí)現(xiàn)豐富的表面細(xì)節(jié)實(shí)在有太多的好處了。
最終,利用Displacement Mapping(貼圖置換)與Tessellation(曲面細(xì)分)相結(jié)合的方式所渲染出來(lái)的模型與藝術(shù)家所用工具中的原生模型很相似,從而讓藝術(shù)家不必創(chuàng)建不同幾何細(xì)節(jié)級(jí)別的模型,無(wú)需重復(fù)地進(jìn)行這種一般性勞動(dòng)。
● 全新的多線程渲染技術(shù)
雖然超線程概念已經(jīng)在CPU領(lǐng)域發(fā)展了數(shù)十年,但大多數(shù)程序員還是直到近年來(lái)多核心CPU流行之后才開始關(guān)心程序的平行化,在此之前大部分通用代碼都是簡(jiǎn)單的單線程,在這些代碼里尋找并挖掘多線程化帶來(lái)的性能提升是非常困難的。
為了改變這一現(xiàn)狀,DirectX 11特性還包括很重要一點(diǎn):支持多線程(multi-threading)。沒(méi)錯(cuò),無(wú)論是DirectX 10還是DirectX 11,所有的色彩信息最終都將被光柵化并顯示在電腦顯示屏上(無(wú)論是通過(guò)線性的方式還是同步的),但是DirectX 11新增了對(duì)多線程技術(shù)的支持。

從DirectX 10到DirectX 11的多線程變化
得益于此,應(yīng)用程序可以同步創(chuàng)造有用資源或者管理狀態(tài),并從所有專用線程中發(fā)送提取命令,這樣做無(wú)疑效率更高。DX11的這種多線程技術(shù)可能并不能加速繪圖的子系統(tǒng)(特別是當(dāng)我們的GPU資源受限時(shí)),但是這樣卻可以提升線程啟動(dòng)游戲的效率,并且可以利用臺(tái)式CPU核心數(shù)量不斷提高所帶來(lái)的潛力。

多線程渲染示意圖1
在DirectX 11中,微軟通過(guò)將目前單一執(zhí)行的Direct 3D設(shè)備被分為三個(gè)獨(dú)立的接口:設(shè)備(Device)、立即執(zhí)行范疇(immediate Context)和延遲執(zhí)行范疇(Deferred Context)。

多線程渲染示意圖2
這三者都被分發(fā)到各自獨(dú)立的線程,而且設(shè)備和Deferred context還可以分配多個(gè)線程,負(fù)責(zé)將等待執(zhí)行的任務(wù)發(fā)送給immediate Context或渲染線程。這樣的設(shè)計(jì)可以將圖形生成所需的資源做預(yù)先的存取。同時(shí),CPU還可以利用顯卡的多線程處理加快DirectX的處理,減少CPU的響應(yīng)時(shí)間而使游戲不再受到CPU的瓶頸限制。