1. 程式人生 > >管線流程詳解

管線流程詳解

 

 

 

一、頂點著色器

概述

執行在GPU上,用以處理頂點資料的小程式。

深入瞭解

1.座標處理
頂點著色器將獲得的頂點資料,進行座標變換。此時只進行到透視投影的座標轉換,為何此處沒有視口轉換?因為在沒有幾何著色器的情況下可以直接在此步完成

視口轉換,並確認對映到螢幕座標系的最終座標。但是若編寫了幾何著色器,則視口轉換在幾何著色器之後進行。

2.顏色插值

頂點著色器並非只做座標的處理,同時也會對顏色進行插值。比如,在傳入頂點資料時,附加了顏色屬性,頂點著色器便會根據顏色對頂點進行顏色插值,設定顏色。

但此時的顏色並非完全確定,不會直接渲染在螢幕上。只有在經歷片段著色器後才會對顏色完全確定,因為還有可能包含光照等更復雜的色彩,而這些色彩在頂點著色器

中是無法進行計算的。

 

二、圖元裝配與幾何著色器

概述

此二階段都是在幾何著色器中進行的。可程式設計渲染管線要求必須編寫vs以及fs而幾何著色器(gs)可以不寫。在編寫了gs的情況下,首先進行圖元裝配,

根據點、線或者三角形等圖元型別進行裝配,之後執行幾何著色器中的程式碼。圖元裝配階段的輸出會傳遞給gs。幾何著色器把圖元形式的一系列頂點的集合作為

輸入,它可以通過產生新頂點構造出新的(或是其它的)圖元來生成其他形狀。

深入瞭解

1.若無幾何著色器,在繪製圖形時,需要自己在頂點緩衝中定義,時間消耗較大。而幾何著色器繪製圖形是在GPU超快硬體上動態生成的,這要比使用頂點緩衝自己定義這些形狀更為高效。

2.例如下圖,只需要輸入6個頂點,並指定圖元型別為三角形,在幾何著色器中就能快速生成4個三角形。

3.幾何著色器也可以自己定義新的頂點資料。若無新增資料則幾何著色器有直接進行裁剪,對映到螢幕座標系上。若有新增資料,則繪製完後再進行裁剪。

 

三、光柵化階段

概述

決定哪些畫素被集合圖元覆蓋的過程

深入瞭解

1.如圖,傳入光柵化階段的只是經過變換的頂點,即使得到在螢幕座標系中的頂點座標,那也是浮點值。無法與螢幕畫素的整數值對應起來。所以光柵化階段,

確定了螢幕中的畫素與想要繪製的圖形的對應關係。確定圖形的方法有很多,畫線演算法就有DDA等等。

          

2.光柵化階段得到的圖元包含的所有畫素為片段。

 

、片段著色器

片段著色器進行最終的顏色計算。決定了在螢幕上能看到什麼。

片段著色器是可程式設計管道中的最最核心的部分。其普遍的作用就是計算各種各樣的三角形畫素顏色,從為著色頂點圖形(vertex-colored geometries)計算的頂點屬性顏色,

和為紋理圖形為計算的紋理及相關的UV紋理座標。但是頂點著色器的功能遠非製造這些簡單的效果。實際上,現代3D遊戲中令人驚歎的3D特效都是用片段著色器來生成的。

例如,動態光源效果通常都是由片段著色 器完成。思考一下就會明白,動態光源意味著根據場景中已有的光源計算畫素顏色,這與幾何圖形的位置、材料都有很大的關係,

所以片段著色器是製作動態光源效 果的不二之選。像水體環境對映之類的反射特效也都是由片段著色器完成的。片段著色器能生成世界上幾乎所有的光影特效,以上提及的

只不過是它的冰山一角。最後要提一下的是,片段著色器決定了你在螢幕上能看到什麼,所以,片段著色器才是影響渲染的核心程式碼。

 

五、Alpha測試和混合(Blending)階段

概述

深度測試與透明度測試

深入瞭解

1.通過深度檢測,判定前後關係,消除遮擋畫素。

2.blending:根據目前已經畫好的顏色,與正在計算的顏色的透明度(Alpha), 混合為兩種顏色,作為新的顏色輸出 。通常稱之為 alpha 混合技術。 當在螢幕上繪製某個物體時,

與每個畫素都相關聯的有一個 RGB 顏色值和一個 Z 緩衝器深度值,另外一個稱為 alpha 值,可以根據需要生成並存儲,用來描述給定像 處的物體透明度。如果 alpha 值為 1.0,則

表示物體不透明;如果值為 0,表示 該物體是透明的。

3.說明:這個階段檢測片段的對應的深度(和模板(Stencil))值(後面會講),用它們來判斷這個畫素是其它物體的前面還是後面,決定是否應該丟棄。這個階段也會檢查alpha值

(alpha值定義了一個物體的透明度)並對物體進行混合(Blend)。所以,即使在片段著色器中計算出來了一個畫素輸出的顏色,在渲染多個三角形的時候最後的畫素顏色也

可能完全不同。

 

 

 

以上內容在後續學習中,會不斷進行補充更新。。。