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