澶染引擎(Shador)的作用
在Shader出現(xiàn)之前的渲染中,很多任務(wù)需要CPU來輔助完成,比如生成頂點。渲染引擎的出現(xiàn),可以作為3D處理歷史上的一次變革。渲染引擎是如何獨立工作的呢?來看看下面這個簡單的示意圖吧。
頂點作為一個3D模型的骨架,越細密表現(xiàn)就越接近真實。在頂點處理中,常常采用近似的方法,比如圓是以多邊形來表示的,一般使用五邊形、六邊形等等,當然邊數(shù)越多則越接近標準的圓。頂點渲染引擎的作用就是生成這些多邊形或者三維模型頂點,并將整個物件的框架勾勒出來。頂點渲染引擎極大地解放了CPU的任務(wù),使得原本由CPU做的頂點工作由自己完成,這樣CPU就可以處理其他相關(guān)的任務(wù),比如AI計算等。
頂點處理完成之后,需要經(jīng)過一個Setup的過程。Setup引擎可以將空間的三維坐標轉(zhuǎn)換為屏幕上可以顯示的二維,同時剔除那些被遮擋的部分。接下來就是像素渲染過程:像素渲染確定每一個需要計算的像素的顏色、光照情況,并且根據(jù)設(shè)置決定是否進行HDR等高強度的浮點運算。在這里,還應(yīng)根據(jù)需要對物體表面進行紋理貼圖,使它看起來栩栩如生。紋理貼圖可能進行多次,以更強地表現(xiàn)物體的表面效果。早期的像素渲染引擎對于像素的運算處理和紋理貼圖的處理量基本相當,而近來由于HDR、SoftShadow等技術(shù)的應(yīng)用,加大了像素處理的強度,同時紋理有所減弱。最后再經(jīng)過ROP等處理步驟,就可以得到我們在顯示器上看到的圖像了。總的來說,像素渲染和頂點渲染都解放了CPU,極大地提高了我們計算機系統(tǒng)的運作效率。
為什么需要統(tǒng)一
顯卡從DirectX 8開始,進入頂點渲染引擎(VertexShader)和像素渲染引擎(Pixel Shader)的時代。頂點渲染和像素渲染各司其職,同心協(xié)力地完成了對3D畫面的運算和處理。
但俗話說:分久必合。在分引擎渲染取得極大成功之后,像素和頂點渲染的問題也暴露了出來。傳統(tǒng)的像素頂點分開渲染的模式造成了GPU的資源分配不均衡。最為典型的表現(xiàn)就是:在頂點渲染忙碌的時候(比如大量的草地、樹葉場景),像素渲染引擎卻吃不飽;反之,在遇到如水面、復(fù)雜光線運算等場景的時候頂點渲染引擎往往沒有事情干。
對于一個處理器而言(這里專指圖形處理器),工作狀態(tài)下全部晶體管都處于忙碌才能得到高效率。而統(tǒng)一渲染架構(gòu)之前的分離渲染架構(gòu)GPU已經(jīng)難以適應(yīng)目前技術(shù)的發(fā)展——這一點也可以從頂點渲染引擎和像素渲染引擎的數(shù)量比上來看出:從早期DirectX 8時代的1:1,到DirectX9的1:2,再到如今的1:3。我們的設(shè)計總是偏向于像素引擎,但是仍然滿足不了需要。如果在恰當?shù)臅r候,頂點渲染引擎也可以加入像素渲染的處理,無疑對整4-GPU的效率有極大的提高,同理,在一些草木叢生的頂點復(fù)雜場景,像素渲染引擎可以加入頂點處理,我們也不用眼看著像素處理引擎無事可做了。
在其他方面,由于分離架構(gòu)專門為3D處理而設(shè)計,使得通用性大大下降。我們上文中敘述GPU中資源調(diào)配不平衡,造成了浪費。實際上在整個計算機系統(tǒng)中,GPU往往擁有最強的浮點運算能力。但除非進行3D處理,否則它很難表現(xiàn)出來。并且在一些要求強大浮點運算的場合,由于GPU通用性不夠,我們只能使用大量的CPU來集成運算,效能相當?shù)拖隆2⑶揖退阍?D處理中,如果速度足夠快(比如平均幀數(shù)在100幀以上的時候),多余的運算能力完全可以解放出來處理音頻、AI、物理效果。但是目前的分離架構(gòu)做到這一點非常困難。這也是我們看到很多關(guān)于這方面的設(shè)想但最終無疾而終的原因。
在實際應(yīng)用中,統(tǒng)一渲染架構(gòu)將使用ALU(算術(shù)邏輯引擎,也稱流處理器)來替代我們熟悉的VS和PS。每一個流處理器可以支持任何類型的運算,如頂點、像素、紋理、幾何處理,甚至AI和物理處理。它是系統(tǒng)的多面手,也是系統(tǒng)性能提升的關(guān)鍵。在這種類似于CPU設(shè)計的無差別流處理器上,我們可以有效地提升GPU的處理效率,并且使其通用性大大加強。
統(tǒng)一渲染架構(gòu)有哪些好處?
統(tǒng)一渲染架構(gòu)的出現(xiàn),不僅改變了圖形處理的分離模式,給整個圖形業(yè)界帶來了深遠的影響,并再次釋放了CPU的壓力。在統(tǒng)一渲染架構(gòu)的基礎(chǔ)上,配合優(yōu)秀的API,我們可以繼續(xù)提升畫面的效果,使得3D圖形處理更接近現(xiàn)實情況。
在軟件編制上,統(tǒng)一渲染架構(gòu)降低了程序編制難度。早期的3D編程非常晦澀難懂,并且存在各種各樣莫名其妙的限制。程序員不得不在編制的時候花相當多的時間來權(quán)衡利弊。在SM2.0、3.0出現(xiàn)后,這種情況得到了極大的緩解,并且由于可編程能力的提高,頂點和像素編程在很大程度上出現(xiàn)了通用的可能——但由于分離架構(gòu)限制,我們?nèi)匀恍枰獮樗鼈儐为毦幹啤=y(tǒng)一渲染架構(gòu)打破了這些條條框框,程序員不再需要為每一種處理引擎編寫程序,他只需要編寫一個總的、限制很少、自由度很高的程序,GPU會自動調(diào)配資源進行處理。
在3D程序運行上,如上文所說,使用流處理器替代了VS和PS之后,在各種3D場景計算中可以作出更加靈活的處理。如在頂點密集型運算中,全部流處理器都可以加入頂點運算,然后將數(shù)據(jù)再次進行像素或者紋理操作。引擎閑置等候工作的情況將再不會出現(xiàn)在統(tǒng)一渲染架構(gòu)當中。
在其它方面,由于流處理器的加入,我們可以更加靈活地使用顯卡的強大運算能力,如物理加速、利用顯卡的強大浮點運算能力進行通用處理計算等等。統(tǒng)一渲染架構(gòu)中使用的流處理器除了能大幅度提升顯卡的工作效率以外,還可以帶給顯卡前所未有的自由性,或許GPU很快就可以發(fā)展成為機箱中的另外一個處理中心——不僅僅是3D圖形,音頻、科學(xué)計算、AI、物理效果,它都可以完成。GPGPU的理想或許在統(tǒng)一渲染架構(gòu)下將很快成為現(xiàn)實。
統(tǒng)一渲染架構(gòu)不會遙遠
從NVIDIA GeForce 8800系列上,我們第一次看到了高端統(tǒng)一渲染架構(gòu)GPU帶來的性能飛躍。同樣采用統(tǒng)一渲染架構(gòu)的主流產(chǎn)品——GeForce 8600/GeForce 8500系列讓我們看到了統(tǒng)一渲染架構(gòu)的高效率(GeForce 8600內(nèi)置32個流處理器,GeForce 8500僅僅為16個流處理器,結(jié)構(gòu)上比前一代同檔次的GeForce7900、GeForce7600、GeForce7300精簡了很多,但卻有達到甚至超過前一代產(chǎn)品的性能)。AMD新一代的HD系列產(chǎn)品在性能提升的前提下,更是擁有了強大的硬件解碼能力。統(tǒng)一渲染架構(gòu)將給我們帶來更強大的運算能力以及靈活使用這些處理能力的方法。在統(tǒng)一渲染架構(gòu)成熟后,GPU強大的浮點運算能力將更好的為我們服務(wù),而不是像現(xiàn)在那樣藏在機箱的深處,僅僅進行3D的處理。在大一統(tǒng)時代來臨之時,我們將得到更加豐富多彩的,接近真實的技術(shù)體驗,讓我們拭目以待吧!