DirectX的發(fā)展推動了圖形技術的進步,從早期的簡單3D圖形到目前幾近逼真的光影效果和細節(jié)出眾的模型,DirectX在其中扮演了最為重要的角色。每一代DirectX的發(fā)布,都會帶來圖形業(yè)界的革命。在GDC 2014(Game Developer Conference,游戲開發(fā)者大會)上,微軟宣布了全新的DirectX 12,全新一代的DirectX API又將給我們帶來無限驚喜。
DirectX作為目前最主要的圖形API,存在于電腦的方方面面,也是目前3D游戲的根本技術支柱。作為DirectX技術重要模塊的Direct3D,由于快速的發(fā)展和對3D技術推動的重要性,又被人廣泛關注,以至于一度成為了DirectX發(fā)展的代名詞。實際上,在DirectX 11于2009年發(fā)布后沒多久,人們就逐漸開始意識到DirectX 11中的Direct3D 11本身對圖形技術存在大量的約束,已經(jīng)無法滿足目前技術發(fā)展的需求,從而迫切希望有全新的技術來進一步推動技術的前進。在這種情況下,雖然AMD已經(jīng)展示了自家的Mantle API并取得了不錯的效果,但是業(yè)界還需要一個真正的統(tǒng)一標準,這就是本文的主題DirectX 12。
解決效能瓶頸是目標
從PC被發(fā)明,CPU和GPU被區(qū)分開來到現(xiàn)在,這兩者的性能發(fā)生了極為驚人的增長。從目前的角度來看,CPU的單線程性能已經(jīng)很難提高,主頻也達到了一個很高的地步,繼續(xù)發(fā)展的希望不大。但是GPU由于圖形計算的并行特性,效能一直在大幅度攀升。最終結果是,GPU的性能增長幅度已經(jīng)遠遠拋離了CPU。這本身應該是可以理解的,但是考慮到DirectX這樣的API的話,結果就有所不同了。這是因為,目前諸如DirectX這樣的API在為GPU準備數(shù)據(jù)時的工作基本都是單線程的,由于CPU單線程性能增長遇到瓶頸,因此就產(chǎn)生了差距。也正是由于這種差距的產(chǎn)品,大量的時間被浪費在等待上,圖形性能提升難以跟上GPU的增長。
相比之下,諸如游戲主機這樣的專注于底層開發(fā)的產(chǎn)品反而不存在這樣的缺陷。這是因為游戲主機的開發(fā)采用的是底層開發(fā),相比目前的高級API,底層開發(fā)雖然依舊需要一個主線程,依舊可能會產(chǎn)生瓶頸,但底層開發(fā)往往不使用這樣一個被CPU約束很強的API以及不需要為GPU預先準備數(shù)據(jù)。因此底層開發(fā)更容易使用多個CPU并行處理并預防瓶頸現(xiàn)象的出現(xiàn),這也就是很多游戲機為什么使用相對弱的多核心CPU,都能實現(xiàn)比更強大的PC CPU更好的效能輸出的原因。
因此,現(xiàn)在DirectX需要解決的是日益強大的GPU和與之完全不相符的單線程CPU之間的矛盾。解決方法很簡單,那就是在全新的DirectX 12中重新引入底層開發(fā),徹底解決CPU單線程性能無法提升帶來的性能瓶頸約束。
DirectX 12的全新功能
目前DirectX 12還處于開發(fā)階段,因此對其具體的內(nèi)容外界知道得并不多。但是在GDC 2014上,微軟還是公布了很多的技術資料,基本勾畫出了DirectX 12的外觀輪廓。
首先,DirectX 12的目的是大幅度降低CPU在整個CPU-GPU過程中的計算開銷。CPU目前耗費時間最多的部分是為GPU準備命令列表并存儲至緩沖區(qū)。在Direct3D 12上,這個任務將交給開發(fā)人員而不是CPU,也就是說開發(fā)人員將預先準備好這些內(nèi)容,并將這些內(nèi)容分布在不同的CPU核心上完成,這將極大程度提升CPU的效能。在這一點上,目前還不清楚Direct3D 12將怎么做,但是毫無疑問的是Direct3D 12和AMD之前就發(fā)布的Mantle有一定的相似性,畢竟這兩個技術沒有理由在目標如此接近的情況下有巨大的實現(xiàn)方法上的差異。
為了達到上述的目的,微軟推出了一些新的概念,比如Bundle,也稱“命令束”。這是一顆可重復使用的功能、命令的列表。命令束的出現(xiàn)節(jié)約了CPU資源,因為提交一個命令束比提交大量的命令列表更直接、簡單。在具體的執(zhí)行中,可以允許命令束一次提交、多次執(zhí)行,每次執(zhí)行中可以有一些細微的不同。微軟還給出了一個使用案例,其中的character drawn在兩次調(diào)用中使用了不同的紋理,這展示了命令束在使用中的靈活性。
其次,DirectX 12還引入了管線狀態(tài)對象(Pipeline State Objects,簡稱PSOs),在這個新技術的幫助下,技術人員可以真正深入命令緩沖區(qū)的執(zhí)行過程,并且比較各種圖形架構的差異。DirectX 12還將繼續(xù)解決新的功能和舊的硬件之間平衡的問題。PSOs可以繞過目前的管線限制并重新創(chuàng)建新的對象,具體細節(jié)暫時不談,其優(yōu)勢在于可以進一步降低CPU開銷并提高效率,增加CPU的繪制調(diào)用數(shù)量,并且可以為其他任務釋放資源。
除了上述兩點重要的改進外,微軟還為DirectX 12引入了諸如Descriptor Heaps等技術用于解除有關紋理綁定的問題,此外還帶來了新的資源壓縮方式,使得更高精度的紋理貼圖可以縮減體積并應用在程序中。這些積極的改進都將帶來DirectX 12更有效率、更為出色的應用效能。
新一輪效能躍進
在作出了大量改進之后,同樣適用DirectX 12的軟件相比DirectX 11的軟件,在編寫和調(diào)試上的難度可能略微增加,但同時帶來的是大幅度增加的運行效率。可能有心的讀者已經(jīng)注意到,DirectX 12中目前并沒有出現(xiàn)對圖形進行重大改善的革命性全新技術。這一方面是微軟尚未公布新的技術,另一方面則是目前的DirectX 11等受制于性能和效率問題,本身就對圖形技術的應用情況不甚樂觀,因此在DirectX 12改進效率后,目前大量已經(jīng)存在的新技術可以重新加入并得到更廣泛優(yōu)化應用,這相當于從根本上提升了圖形質(zhì)量。
在支持DirectX 12的硬件方面,目前三大GPU廠商的產(chǎn)品都已經(jīng)宣布即將支持DirectX 12,包括NVIDIA、AMD和英特爾。英特爾方面只有Haswell內(nèi)置的高清顯卡可以支持DirectX 12,AMD方面GCN 1.0和GCN 1.1都能夠提供對DirectX 12的支持。NVIDIA旗下包括Fermi、開普勒和Maxwell在內(nèi)的產(chǎn)品都提供對Direct3D 12的支持。
為了更清晰說明DirectX 12在性能方面的優(yōu)勢,微軟搭建了一個測試平臺,使用內(nèi)部開發(fā)版本的DirectX 12和重新編譯的3DMARK 11,用于演示DirectX 12的性能提升情況。在整個測試中,DirectX 12能夠顯著地降低CPU單線程的負載,并且將更多的工作負載分配到不同的CPU核心上去。與此同時,作為系統(tǒng)內(nèi)核的一部分,內(nèi)核模式驅(qū)動和CPU耗用時間都被降低了。最終,DirectX 12在效能上大幅領先,讓我們看到了新一代DirectX API的希望。
2015年與新DX同行
目前微軟只發(fā)布了DirectX 12的部分信息,而新版API上市也需要等到2015年年初左右。在這么長的時間中,微軟可以繼續(xù)對DirectX 12進行調(diào)整并完善它的功能。而對游戲玩家來說,2015年很可能將迎來一次巨大的硬件和軟件升級,電影級的游戲畫質(zhì)說不定已經(jīng)不遠了。