天天看點

Vulkan學習--7.圖形管線概述

圖形管線概述:

圖形管線是一系列将我們送出的頂點和紋理轉換為渲染目标上的像素的操作。

它的簡化過程如下:

input assembler 擷取頂點資料,頂點資料的來源可以是應用程式送出的原始頂點資料,或是根據索引緩沖提取的頂點資料。

vertex shader 對每個頂點進行模型空間到螢幕空間的變換,然後将頂點資料傳遞給圖形管線的下一階段。

tessellation shaders 根據一定的規則對幾何圖形進行細分,進而提高網格品質。通常被用來使類似牆面這類不光滑表面看起來更自然。

geometry shader 可以以圖元 (三角形,線段,點) 為機關處理幾何圖形,它可以剔除圖元,輸出圖元。有點類似于 tessellation shader,但更靈活。但目前已經不推薦應用程式使用它,geometry shader 的性能在除了Intel 內建顯示卡外的大多數顯示卡上表現不佳。

rasterization 階段将圖元離散為片段。片段被用來在幀緩沖上填充像素。位于螢幕外的片段會被丢棄,頂點着色器輸出的頂點屬性會在片段之間進行插值,開啟深度測試後,位于其它片段之後的片段也會被丢棄。

fragment shader 對每一個未被丢棄的片段進行處理,确定片段要寫入的幀緩沖,它可以使用來自 vertex shader 的插值資料,比如紋理坐标和頂點法線。

color blending 階段對寫入幀緩沖同一像素位置的不同片段進行混合操作。片段可以直接覆寫之前寫入的片段,也可以基于之前片段寫入的資訊進行混合操作。

Vulkan學習--7.圖形管線概述

使用綠色辨別的階段也被叫做固定功能階段。固定功能階段允許通過參數對處理過程進行一定程度的配置。

使用橙色辨別的階段是可程式設計階段,允許我們将自己的代碼加載到顯示卡,進行我們想要的操作。這使得我們可以實作許多有趣的效果。我們加載到顯示卡的代碼會被 GPU 并行處理。

在 Vulkan 中,圖形管線幾乎完全不允許進行動态設定,如果我們想使用其它着色器,綁定其它幀緩沖,以及改變混合函數,都需要重新建立管線。這就迫使我們必須提前建立所有我們需要使用的圖形管線,雖然

這樣看起來不太友善,但這給驅動程式帶來了很大的優化空間。圖形管線的部分可程式設計階段不是必需的。比如對于 tessellation 和geometry shader 階段,如果我們隻是畫一個簡單的三角形,完全沒有必要使用它們。如果我們隻是需要生成陰影貼圖的深度值,我們也可以不使用fragment shader。