安徽理工大學(xué)電氣與信息工程學(xué)院 魯孝平
顯卡的工作原理
安徽理工大學(xué)電氣與信息工程學(xué)院 魯孝平
本文介紹了顯卡的工作原理,詳細(xì)闡述其四個(gè)工作步驟幾何處理、光柵化、像素渲染、ROP后端輸出的概念及工作原理。提出顯卡工作過(guò)程中出現(xiàn)的問(wèn)題并給予解決方案。通過(guò)圖像清晰明了地表達(dá)了其工作原理。
顯卡;幾何處理;光柵化;像素渲染;后端
顯卡簡(jiǎn)稱GPU,是組成計(jì)算機(jī)硬件系統(tǒng)的重要一環(huán),主要負(fù)責(zé)計(jì)算機(jī)顯示圖像輸出。它通過(guò)與CPU的精密配合,繪制出一幅幅精美的畫(huà)面?,F(xiàn)代GPU工作任務(wù)主要包括幾何處理,光柵化,像素渲染,ROP輸出這四個(gè)步驟。本文就通過(guò)對(duì)這四個(gè)步驟的詳細(xì)闡述來(lái)展示GPU是如何工作的。
整個(gè)流程的第一步是幾何處理,它的作用是把抽象的數(shù)學(xué)公式轉(zhuǎn)化為電腦屏幕前栩栩如生的形象輪廓。對(duì)于編程者來(lái)說(shuō),任何顯示在電腦屏幕上的圖像信息。都使由諸多復(fù)雜的數(shù)學(xué)公式來(lái)表示的,通過(guò)這些數(shù)學(xué)公式可以將程序員腦海中的復(fù)雜圖像,在一個(gè)三維坐標(biāo)系中展現(xiàn)出來(lái),把物體表面一些重要的關(guān)鍵點(diǎn)在通過(guò)數(shù)學(xué)公式映射在坐標(biāo)系中,并通過(guò)一定的規(guī)則將這些離散的坐標(biāo)點(diǎn)連起來(lái),這樣就形成了一個(gè)在虛擬空間中的物體幾何輪廓,最后在通過(guò)對(duì)相應(yīng)坐標(biāo)點(diǎn)的位置變換,從而實(shí)現(xiàn)物體運(yùn)動(dòng)的表現(xiàn)。[1]
這些處于虛擬空間中的坐標(biāo)點(diǎn)我們稱之為多邊形頂點(diǎn),而GPU的工作就是將代碼中所描述的頂點(diǎn)參數(shù)映射到虛擬空間的坐標(biāo)系中。首先CPU通過(guò)數(shù)學(xué)運(yùn)算將程序中抽象的數(shù)學(xué)運(yùn)算,翻譯成具體的頂點(diǎn)坐標(biāo),之后GPU則將這些頂點(diǎn)坐標(biāo)一一描繪到虛擬空間的坐標(biāo)系中,再根據(jù)預(yù)先設(shè)定的規(guī)則講這些頂點(diǎn)連接起來(lái)從而實(shí)現(xiàn)對(duì)物體外形的重現(xiàn),這個(gè)過(guò)程由GPU中的幾何來(lái)完成。[2]
經(jīng)過(guò)上面的步驟,物體的大致輪廓就已經(jīng)確定下來(lái)了。之后依據(jù)不同程序的要求,對(duì)模型進(jìn)行更加精細(xì)化的處理,如曲面細(xì)分Tesselation,就是利用GPU硬件加速,將現(xiàn)有3D模型的三角形拆分得更細(xì)小、更細(xì)致,也就是大大增加三角形數(shù)量,使得渲染對(duì)象的表面和邊緣更平滑、更精細(xì)。[3]最終物體的外形輪廓被精準(zhǔn)的確定下來(lái),一個(gè)生動(dòng)鮮活的物體形象在虛擬世界中被GPU的幾何單元?jiǎng)?chuàng)造出來(lái)。
但是由于電腦屏幕顯示的均是二維圖像信息,因而接下來(lái)的步驟就是如何將復(fù)雜的三維世界物體模型映射到二維平面中表達(dá)出來(lái),這就是GPU中另一個(gè)單元Rasterizer所要完成的工作。
到這里為止,所有關(guān)于圖像的三維操作都將結(jié)束。Rasterizer光柵化是通過(guò)透視原理將分布散三維空間的立體坐標(biāo)信息映射到二維平面直角坐標(biāo)系中。由于電腦所使用的顯示器是一個(gè)二維平面結(jié)構(gòu),無(wú)法直接展示出三維空間的全部信息,所以需要通過(guò)透視原理將三維空間中的景深信息表達(dá)出來(lái),這也就是我們所說(shuō)的圖像立體感。同時(shí)為了實(shí)現(xiàn)物體信息的像素化,Rasterizer這個(gè)步驟也是必不可少的。Rasterizer通過(guò)一系列的數(shù)學(xué)變換將三維坐標(biāo)轉(zhuǎn)換為平面二維坐標(biāo),這個(gè)過(guò)程中圖像原本的Z軸坐標(biāo)信息將會(huì)被單獨(dú)提取出來(lái)存放入Z-Buffer中,作為景深值。[4]
經(jīng)過(guò)光柵化操作后物體的輪廓信息就已經(jīng)被定格在平面像素中,那么接下來(lái)的工作就是將物體的顏色信息填充到圖像中,這個(gè)部分的工作又稱為材質(zhì)操作,而這一過(guò)程將由GPU中的PixlShader完成,它將賦予圖像鮮活的生命力。[5]
材質(zhì)操作就是GPU給物體填色的過(guò)程,但是由于硬件限制,實(shí)際操作中無(wú)法象現(xiàn)實(shí)生活中那樣直觀地操作,需要借助代碼去完成,而GPU的工作就是講這些代碼轉(zhuǎn)換為人們能夠識(shí)別的顏色信息,繼而填充在圖像上,最終呈現(xiàn)在顯示屏上。
在實(shí)際操作中,對(duì)圖像上色的過(guò)程是有材質(zhì)庫(kù)來(lái)完成的,在3D圖形的設(shè)計(jì)過(guò)程中,已經(jīng)包含了其本身的材質(zhì)信息,這些材質(zhì)信息會(huì)與相應(yīng)的坐標(biāo)關(guān)聯(lián)起來(lái),從而還原出物體本身的色彩及圖案。這些材質(zhì)庫(kù)中的信息會(huì)在光柵化處理后重新還原到物體表面,由于物體由3維坐標(biāo)轉(zhuǎn)化為2為坐標(biāo),因而需要對(duì)材質(zhì)庫(kù)中的信息進(jìn)行篩選,根據(jù)新的形狀范圍進(jìn)行裁剪,再將裁剪后的材質(zhì)填充在對(duì)因區(qū)域中,也就完成了對(duì)物體上色的過(guò)程。[6]-[7]在整個(gè)過(guò)程中GPU的工作就向搬運(yùn)工一樣,通過(guò)材質(zhì)庫(kù)尋找并提取物體的色彩和圖案信息,之后將其填充到物體表面,整個(gè)過(guò)程簡(jiǎn)單高效。
圖2 材質(zhì)操作的過(guò)程
整個(gè)3D圖像生成過(guò)程到這里好像結(jié)束了,然而這樣的圖像展現(xiàn)在屏幕上會(huì)非常的死板。為了解決這樣的問(wèn)題,我們需要將真實(shí)世界的光影信息添加到我們的物體上,將物體的實(shí)時(shí)動(dòng)態(tài)效果展示出來(lái),從而滿足人們?cè)絹?lái)越高的視覺(jué)要求,這項(xiàng)任務(wù)將由Pixel Shader來(lái)完成。
Pixel Shader的主要工作就是還原物體被光線照射之后所呈現(xiàn)出來(lái)的色彩信息,這些色彩信息GPU都將在像素上進(jìn)行操作,所以也就是對(duì)像素的色彩進(jìn)行修改。對(duì)于一個(gè)3D圖像中的物體來(lái)說(shuō),其本身的色彩信息將會(huì)被拆分為紅綠藍(lán)三原色不同的組合來(lái)表達(dá),而在電子計(jì)算機(jī)中,紅綠藍(lán)三原色的不同組合是通過(guò)一個(gè)三維矩陣來(lái)實(shí)現(xiàn)的。所以要想改變像素的顏色信息,就需要對(duì)這個(gè)三維矩陣進(jìn)行修改。
到這里,shader與材質(zhì)操作的關(guān)系已經(jīng)非常明了了。材質(zhì)單元與shader/ALU同時(shí)描繪了物體表面的圖像,當(dāng)兩者分開(kāi)操作時(shí),材質(zhì)操作對(duì)于場(chǎng)景和物體光影的描述無(wú)法達(dá)到較高的自由度,而Pixel Shader對(duì)像素沒(méi)有實(shí)時(shí)創(chuàng)造力只能進(jìn)行修飾,所以若想達(dá)到較好的視覺(jué)效果,材質(zhì)單元與shader/ALU兩者缺一不可。
圖像處理的過(guò)程是利用編程圖像拆分成幾個(gè)基本的部分,再通過(guò)硬件合并和表達(dá)。從最開(kāi)始的幾何處理,到最后的材質(zhì)操作和Pixel Shader操作,處理的過(guò)程嚴(yán)格執(zhí)行操作步驟,最后形成了基本組成部分的“制造”過(guò)程。最后ROP將所有的工作合并在一起,圖像處理就完成了。
ROP的處理過(guò)程如下:拾取好的材質(zhì)和shader處理結(jié)束的像素會(huì)被傳送到z/stencil buffer中。經(jīng)過(guò)光柵化處理之后的模型雖已沒(méi)有真正的Z軸,但存在Z-buffer中的深度信息能夠讓ROP決定哪些像素可被顯示出來(lái),ROP單元會(huì)對(duì)這些像素進(jìn)行檢查,這樣做可避免在前面顯示出被完全遮擋的像素,也能為color output的操作減輕壓力。
特定范圍內(nèi)的深度值,在像素深度檢查操作完成后將被輸送到alpha單元進(jìn)行透明度檢查。ROP會(huì)根據(jù)程序需要通過(guò)Blend單元對(duì)特定的像素進(jìn)行alpha Blending操作。剩下的像素在以上步驟結(jié)束后將被填充進(jìn)2D化模型需要的范圍內(nèi),即Pixel Fillrate過(guò)程。
當(dāng)shader以數(shù)學(xué)形式處理完像素效果后,若沒(méi)有AA操作,圖像渲染工作到這里就已徹底完成了,所有效果的混合填充會(huì)讓畫(huà)面正確的實(shí)現(xiàn)。畫(huà)面會(huì)被送入output buffer等待輸出。若程序要求類似MSAA這樣的AA操作,則ROP中的AA單元還需再多次進(jìn)行多重采樣在將采樣后的像素點(diǎn)進(jìn)行color Blending操作,最后的畫(huà)面將通過(guò)幀緩存輸出到屏幕上。[8]
由此可見(jiàn)ROP單元是整個(gè)GPU工作流程中最為重要的一環(huán),其工作效率的高低將直接影響到整個(gè)流程的效率,負(fù)責(zé)將之前其他單元的工作成果最終轉(zhuǎn)化為一幅幅精美的畫(huà)面。ROP單元的性能將直接影響到整個(gè)GPU的實(shí)際表現(xiàn),作為整條STREAM中的最后一個(gè)環(huán)節(jié),完美的結(jié)束GPU的工作。
到此為止整個(gè)GPU的工作過(guò)程已經(jīng)詳述完成,正是通過(guò)以上這些復(fù)雜而有趣的工作,那些精美的想象中的畫(huà)面才能展現(xiàn)出來(lái),而這也是推動(dòng)GPU發(fā)展的動(dòng)力源泉,在此希望在未來(lái)的世界中,可以伴隨GPU的發(fā)展為大家?guī)?lái)更加真實(shí)的世界。
[1]姜曉麗,王偉,隋毅.GPU工作流程簡(jiǎn)介[J].科技創(chuàng)新導(dǎo)報(bào),2010(24):46-46.
[2]月之繭.演繹視覺(jué)精彩——GPU工作原理簡(jiǎn)析(上)[J].大眾硬件,2004(9):106-108.
[3]張琴,李芳.可編程GPU技術(shù)的應(yīng)用研究[J].泰山學(xué)院學(xué)報(bào),2008,30(6):20-23.
[4]洪偉.顯卡的結(jié)構(gòu)和工作原理[J].電腦界:應(yīng)用文萃,2000(3):13-15.
[5]斯佳麗,laoshu.繽紛色彩競(jìng)妖嬈——顯卡綜述[J].電腦愛(ài)好者,2004(9):75-79.
[6]趙中秋.顯卡維修知識(shí)精解[M].電子工業(yè)出版社,2010.
[7]馬恕.硬件原理篇之二——畫(huà)面是怎樣顯示出來(lái)的?[J].電腦自做,2003(8):127-129.
[8]毛華慶.基于GPU優(yōu)化的三維實(shí)時(shí)渲染技術(shù)的研究[D].武漢大學(xué),2010.
魯孝平(1991—),女,現(xiàn)就讀于安徽理工大學(xué)山南校區(qū)電氣與信息工程學(xué)院。