一负蚊、可編程GPU圖像繪制管線
所謂可編程圖形繪制管線袍辞,就是給定虛擬攝像機(jī)贸宏、模型造寝、光源等元素輸出一副電腦屏幕顯示的二維圖像】粤罚《事實(shí)計(jì)算機(jī)圖像學(xué)》的書(shū)中概況圖形繪制管線為三個(gè)主要的階段:應(yīng)用诫龙、幾何、光柵階段
1鲫咽、頂點(diǎn)坐標(biāo)空間的轉(zhuǎn)換
?? 在可編程圖形繪制管線中頂點(diǎn)著色器最重要的任務(wù)就是將圖元頂點(diǎn)的從模型局部坐標(biāo)空間換到屏幕坐標(biāo)空間赐稽。雖然可編程頂點(diǎn)著色器允許頂點(diǎn)變換的方法很多叫榕,但是有些變化過(guò)程還是發(fā)生在之后的固定功能階段。當(dāng)編寫(xiě)頂點(diǎn)著色器程序的時(shí)候姊舵,理解那些過(guò)程 各自發(fā)生在那個(gè)階段是非常重要的晰绎。
視點(diǎn)轉(zhuǎn)換就是將模型的世界坐標(biāo)轉(zhuǎn)換成視點(diǎn)所在的坐標(biāo)系。而通常unity中所說(shuō)的攝像機(jī)視場(chǎng)角就是在坐標(biāo)軸方向上所展開(kāi)的角度括丁。
投影轉(zhuǎn)換和裁剪剔除:投影分為正交投影和透視投影荞下。正交投影即近裁剪和遠(yuǎn)裁剪面一樣大。他們的區(qū)別就是正交投影投出來(lái)的圖像沒(méi)有遠(yuǎn)近之分史飞,而透視投影有尖昏;它們之間的聯(lián)系就是都要進(jìn)行裁剪剔除。實(shí)際上构资,投影轉(zhuǎn)換就是將視點(diǎn)坐標(biāo)系轉(zhuǎn)換成裁剪坐標(biāo)系抽诉,所以處于近、遠(yuǎn)裁剪面的梯行體外的部分都將被裁剪掉吐绵。最后這些轉(zhuǎn)換后的裁剪坐標(biāo)進(jìn)行歸一化設(shè)置迹淌,使得所有的坐標(biāo)值都在-1到1的范圍內(nèi),在這個(gè)階段坐標(biāo)仍然是三維的己单。
圖元裝配:前面經(jīng)過(guò)頂點(diǎn)變換后得到都只是單個(gè)頂點(diǎn)信息唉窃,在圖元裝配階段會(huì)根據(jù)頂點(diǎn)的序列和分類(lèi)信息將頂點(diǎn)裝配成幾何圖元。最后會(huì)產(chǎn)生一序列的三角形纹笼、線段和點(diǎn)纹份。如圖1.4的片段紋理映射和著色,最后到光柵化的階段廷痘。光柵化其實(shí)就是一個(gè)決定那些像素被幾何圖元覆蓋的過(guò)程蔓涧,屏幕在刷新的過(guò)程其實(shí)就是在像素不停地被覆蓋的過(guò)程。光柵化后笋额,一個(gè)圖元擁有的頂點(diǎn)數(shù)目和產(chǎn)生的片段之間沒(méi)有任何關(guān)系蠢笋。例如,一個(gè)由頂點(diǎn)組成的三角形可以占據(jù)整個(gè)屏幕而需要生成上百萬(wàn)個(gè)片段鳞陨。
片段和像素的區(qū)別:在光柵化階段會(huì)把每個(gè)幾何圖元(如三角形)所覆蓋的像素分解成像素大小的片段。而像素代表幀緩沖中某個(gè)指定位置的內(nèi)容瞻惋,如顏色厦滤、深度和其他與這個(gè)位置相關(guān)的值;片段即是經(jīng)過(guò)各種光柵化測(cè)試之后得到的將更新一個(gè)特定像素的潛在狀態(tài)歼狼。
光柵化操作:將屏幕空間的二維頂點(diǎn)轉(zhuǎn)換為屏幕上的像素掏导。這個(gè)階段會(huì)根據(jù)許多測(cè)試來(lái)檢查每個(gè)片段,這些測(cè)試包括剪切羽峰、透明度混合趟咆、模板和深度測(cè)試添瓷。這些測(cè)試過(guò)程會(huì)決定最后像素的位置、顏色值值纱,所以任何一項(xiàng)測(cè)試不通過(guò)這個(gè)片段就會(huì)被推起掉鳞贷。
雙緩沖機(jī)制:為了避免出現(xiàn)閃屏或卡幀的現(xiàn)象,GPU都采用了雙緩沖機(jī)制虐唠,一旦屏幕在后置緩沖器中繪制搀愧,后置緩沖器中的內(nèi)容就會(huì)不斷與顯示在屏幕上的前置緩沖器的內(nèi)容進(jìn)行交換。
Z緩沖器:也稱(chēng)深度緩沖器疆偿,前面提到的深度測(cè)試的過(guò)程也即是z緩沖器的處理過(guò)程咱筛。每個(gè)像素都存儲(chǔ)著一個(gè)Z值,這個(gè)Z值是圖元到虛擬相機(jī)之間的距離杆故。當(dāng)將一個(gè)圖元繪制成像素的時(shí)候迅箩,需要將像素位置處圖元Z值與Z緩沖器里的同一像素的Z值進(jìn)行比較。如果 新得到的Z值遠(yuǎn)遠(yuǎn)小于Z緩沖器中的Z值处铛,說(shuō)明這個(gè)圖元距離相機(jī)更近饲趋,因此也需要使用新得到的像素去更新當(dāng)前圖元的信息。反之罢缸,則圖元信息不變篙贸。注意這里提到的是像素的Z值,不是模型距離攝像機(jī)的距離Z枫疆,像素有可能是前面模型已有可能是后面模型進(jìn)行覆蓋的像素爵川。??? 當(dāng)圖元經(jīng)過(guò)以上這些變化之后,就可以在屏幕上看到圖像息楔。Z緩沖之所以重要寝贡,是因?yàn)閆值決定了物體之間的相互遮擋關(guān)系,如果沒(méi)有足夠的精度值依,則兩個(gè)相距很近的物體就會(huì)出現(xiàn)隨機(jī)遮擋的 現(xiàn)象圃泡。
透明度混合:為了繪制透明物體,通常需要對(duì)物體進(jìn)行排序愿险。首先颇蜡,繪制不透明的物體;然后辆亏,在不透明他物體的后面风秤,對(duì)透明物體按照由后到前的順序進(jìn)行混合處理。實(shí)時(shí)繪制中對(duì)于透明度分混合有一定的局限性扮叨,如缤弦,因?yàn)橥该鞫鹊暮穸葘?dǎo)致管線的逐步弱化和光線在物體內(nèi)的折射效果。如果按照任意序列會(huì)產(chǎn)生嚴(yán)重的失真彻磁,因此對(duì)于排序會(huì)使用Z緩沖碍沐。
模板緩沖:如果一個(gè)像素的模板緩沖中存放了1狸捅,則表示該像素對(duì)應(yīng)的空間處于陰影體中。所有模板緩沖通常都是處理陰影效果的累提。