四十八:GPU的工作原理
簡而(er)(er)言之,GPU的(de)(de)(de)(de)(de)(de)圖(tu)(tu)形(xing)(xing)(xing)(xing)(處(chu)(chu)理(li)(li))流水線完(wan)成(cheng)(cheng)(cheng)(cheng)(cheng)如(ru)下(xia)的(de)(de)(de)(de)(de)(de)工(gong)作(zuo):(并不一定(ding)是(shi)按照如(ru)下(xia)順(shun)序) 頂(ding)點(dian)(dian)(dian)處(chu)(chu)理(li)(li):這階段GPU讀取描述3D圖(tu)(tu)形(xing)(xing)(xing)(xing)外觀的(de)(de)(de)(de)(de)(de)頂(ding)點(dian)(dian)(dian)數(shu)據(ju)(ju)并根據(ju)(ju)頂(ding)點(dian)(dian)(dian)數(shu)據(ju)(ju)確定(ding)3D圖(tu)(tu)形(xing)(xing)(xing)(xing)的(de)(de)(de)(de)(de)(de)形(xing)(xing)(xing)(xing)狀及位置關(guan)系,建立(li)起3D圖(tu)(tu)形(xing)(xing)(xing)(xing)的(de)(de)(de)(de)(de)(de)骨(gu)架。在支持DX8和DX9規(gui)格的(de)(de)(de)(de)(de)(de)GPU中,這些工(gong)作(zuo)由(you)硬件實(shi)現(xian)的(de)(de)(de)(de)(de)(de)Vertex Shader(定(ding)點(dian)(dian)(dian)著色(se)器)完(wan)成(cheng)(cheng)(cheng)(cheng)(cheng)。 光(guang)柵(zha)化(hua)計算:顯示(shi)器實(shi)際顯示(shi)的(de)(de)(de)(de)(de)(de)圖(tu)(tu)像(xiang)(xiang)(xiang)是(shi)由(you)像(xiang)(xiang)(xiang)素(su)(su)組成(cheng)(cheng)(cheng)(cheng)(cheng)的(de)(de)(de)(de)(de)(de),我們(men)需要將上(shang)(shang)面生(sheng)成(cheng)(cheng)(cheng)(cheng)(cheng)的(de)(de)(de)(de)(de)(de)圖(tu)(tu)形(xing)(xing)(xing)(xing)上(shang)(shang)的(de)(de)(de)(de)(de)(de)點(dian)(dian)(dian)和線通過(guo)一定(ding)的(de)(de)(de)(de)(de)(de)算法(fa)轉(zhuan)換到相應(ying)的(de)(de)(de)(de)(de)(de)像(xiang)(xiang)(xiang)素(su)(su)點(dian)(dian)(dian)。把一個(ge)矢(shi)量圖(tu)(tu)形(xing)(xing)(xing)(xing)轉(zhuan)換為(wei)一系列像(xiang)(xiang)(xiang)素(su)(su)點(dian)(dian)(dian)的(de)(de)(de)(de)(de)(de)過(guo)程(cheng)就(jiu)稱為(wei)光(guang)柵(zha)化(hua)。例如(ru),一條數(shu)學表(biao)示(shi)的(de)(de)(de)(de)(de)(de)斜線段,最終(zhong)被轉(zhuan)化(hua)成(cheng)(cheng)(cheng)(cheng)(cheng)階梯狀的(de)(de)(de)(de)(de)(de)連續像(xiang)(xiang)(xiang)素(su)(su)點(dian)(dian)(dian)。 紋理(li)(li)帖圖(tu)(tu):頂(ding)點(dian)(dian)(dian)單元(yuan)生(sheng)成(cheng)(cheng)(cheng)(cheng)(cheng)的(de)(de)(de)(de)(de)(de)多(duo)(duo)邊(bian)形(xing)(xing)(xing)(xing)只構成(cheng)(cheng)(cheng)(cheng)(cheng)了3D物體的(de)(de)(de)(de)(de)(de)輪廓,而(er)(er)紋理(li)(li)映射(she)(texture mapping)工(gong)作(zuo)完(wan)成(cheng)(cheng)(cheng)(cheng)(cheng)對多(duo)(duo)變形(xing)(xing)(xing)(xing)表(biao)面的(de)(de)(de)(de)(de)(de)帖圖(tu)(tu),通俗的(de)(de)(de)(de)(de)(de)說,就(jiu)是(shi)將多(duo)(duo)邊(bian)形(xing)(xing)(xing)(xing)的(de)(de)(de)(de)(de)(de)表(biao)面貼上(shang)(shang)相應(ying)的(de)(de)(de)(de)(de)(de)圖(tu)(tu)片,從而(er)(er)生(sheng)成(cheng)(cheng)(cheng)(cheng)(cheng)“真實(shi)”的(de)(de)(de)(de)(de)(de)圖(tu)(tu)形(xing)(xing)(xing)(xing)。TMU(Texture mapping unit)即(ji)是(shi)用來(lai)完(wan)成(cheng)(cheng)(cheng)(cheng)(cheng)此項工(gong)作(zuo)。 像(xiang)(xiang)(xiang)素(su)(su)處(chu)(chu)理(li)(li):這階段(在對每(mei)(mei)個(ge)像(xiang)(xiang)(xiang)素(su)(su)進行光(guang)柵(zha)化(hua)處(chu)(chu)理(li)(li)期間(jian))GPU完(wan)成(cheng)(cheng)(cheng)(cheng)(cheng)對像(xiang)(xiang)(xiang)素(su)(su)的(de)(de)(de)(de)(de)(de)計算和處(chu)(chu)理(li)(li),從而(er)(er)確定(ding)每(mei)(mei)個(ge)像(xiang)(xiang)(xiang)素(su)(su)的(de)(de)(de)(de)(de)(de)最終(zhong)屬性(xing)。在支持DX8和DX9規(gui)格的(de)(de)(de)(de)(de)(de)GPU中,這些工(gong)作(zuo)由(you)硬件實(shi)現(xian)的(de)(de)(de)(de)(de)(de)Pixel Shader(像(xiang)(xiang)(xiang)素(su)(su)著色(se)器)完(wan)成(cheng)(cheng)(cheng)(cheng)(cheng)。 最終(zhong)輸(shu)出:由(you)ROP(光(guang)柵(zha)化(hua)引擎)最終(zhong)完(wan)成(cheng)(cheng)(cheng)(cheng)(cheng)像(xiang)(xiang)(xiang)素(su)(su)的(de)(de)(de)(de)(de)(de)輸(shu)出,1幀渲染完(wan)畢后(hou),被送到顯存(cun)幀緩沖(chong)區(qu)。
總(zong)結:GPU的(de)工作通俗的(de)來說就(jiu)是完成(cheng)(cheng)3D圖(tu)形(xing)的(de)生(sheng)成(cheng)(cheng),將圖(tu)形(xing)映射到相(xiang)應的(de)像素點上,對每(mei)個(ge)像素進行計算確定(ding)最終(zhong)顏色(se)并完成(cheng)(cheng)輸出。
四十九:什么是渲染管道?
是指(zhi)在(zai)顯(xian)示(shi)器上為了顯(xian)示(shi)出圖像(xiang)而經(jing)過的一系列必(bi)要操作。 渲染管道中(zhong)的很多步(bu)驟,都要將幾(ji)何物體從一個坐標系中(zhong)變(bian)換到(dao)另一個坐標系中(zhong)去。主要步(bu)驟有:
本地坐標->視(shi)圖坐標->背面裁(cai)剪->光照->裁(cai)剪->投影->視(shi)圖變換->光柵化
五十:如何優化內存?
有(you)很多(duo)種方式,例(li)如
1.壓縮自(zi)帶(dai)類(lei)庫;
2.將暫時不用(yong)的(de)以后還需要使用(yong)的(de)物(wu)體隱藏起來而不是直接Destroy掉;
3.釋放(fang)AssetBundle占(zhan)用的資源;
4.降低(di)模型(xing)的(de)片面數(shu),降低(di)模型(xing)的(de)骨骼數(shu)量,降低(di)貼圖的(de)大小(xiao);
5.使(shi)用光(guang)照貼圖(tu),使(shi)用多層次細節(LOD),使(shi)用著色器(Shader),使(shi)用預設(Prefab)。
6.代碼(ma)中少產生臨時(shi)變量(liang)
五十一:動態加載資源的方式?
1.Resources.Load();
2.AssetBundle