管線流程詳解
一、頂點著色器
概述
執行在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)。所以,即使在片段著色器中計算出來了一個畫素輸出的顏色,在渲染多個三角形的時候最後的畫素顏色也
可能完全不同。
以上內容在後續學習中,會不斷進行補充更新。。。