首頁 > 繪畫

科普|GPU渲染管線概述

作者:由 渲大師渲染 發表于 繪畫日期:2022-10-02

設定gpu渲染程式有什麼用

1。頂點著色器

頂點著色器是流水線的第一個階段,它的輸入來自於CPU。頂點著色器的處理單位是頂點,也就是說輸入進來的每個頂點都會呼叫一次頂點著色器。

頂點著色器需要完成的工作主要有:座標變換和逐頂點光照。當然,除了這兩個主要任務外,頂點著色器還可以輸出後續階段所需的資料。

座標變換,顧名思義,就是對頂點的座標進行某種變換。例如我們可以透過改變頂點位置來模擬水面,布料等。

一個最基本的頂點著色器必須完成的一個工作是:把頂點座標從模型空間轉換到齊次剪裁空間。類似下面的程式碼:

o。pos=mul(UNITY_MVP,v。position);

2。裁剪

由於我們的場景可能會很大,而攝像機的視野範圍很有可能不會覆蓋所有的場景物體,一個很自然的想法就是,那些不在攝像機視野範圍內的物體不需要被處理,而裁剪就是為了完成這個目的而被提出來的。

一個圖元和攝像機的關係有3種:

完全在視野內

部分在視野內

完全在視野外

部分在視野內的圖元需要裁剪,例如一條線段的一個頂點在視野內,而另一個頂點在視野外,那麼視野外部的頂點應該使用一個新的頂點來代替,這個新的頂點位於這條線段和視野邊界的交點處。

3。螢幕對映

這一步輸入的座標仍然是三維座標系。螢幕對映的任務是把每個圖元的x和y座標轉換到螢幕座標系下,螢幕座標系是一個二維座標系,它和我們用於顯示畫面的解析度有很大關係。

螢幕對映得到的螢幕座標決定了這個頂點對應螢幕上哪個畫素以及距離這個畫素有多遠。

opengl的螢幕座標原點是左下角,而directx是左上角,如果你發現你得到的影象是倒轉的,那麼很有可能就是這個原因造成的。

4。三角形設定

由這一步就進入了光柵化階段,從上一個階段輸出的資訊是螢幕座標下的頂點位置以及和它們相關的額外資訊,如深度值、法線方向、視角方向等,光柵化有兩個最重要的目標:計算每個圖元覆蓋了哪些畫素,以及為這些畫素計算他們的顏色。光柵化的第一個流水線階段是三角形設定,這個階段會計算光柵化一個三角網格所需的資訊。

具體來說,上一個階段輸出的都是三角網格的頂點,即我們得到的是三角網格每條邊的兩個端點。但如果要得到整個三角網格對畫素的覆蓋情況,我們就必須計算每條邊上的畫素座標。為了能夠計算邊界畫素的座標資訊,我們就需要得到三角形邊界的表示方式。這樣一個計算三角形網格表示資料的過程就叫做三角形設定,它的輸出是為了下一個階段做準備。

5。三角形遍歷

三角形遍歷階段將會檢查每個畫素是否被一個三角形網格所覆蓋。如果被覆蓋的話,就會生成一個片元,而這樣一個找到哪些畫素被三角網格覆蓋的過程就是三角形遍歷,這個階段也被稱為掃描變換。

三角形遍歷階段會根據上一個階段的計算結果來判斷一個三角網格覆蓋了哪些畫素,並使用三角網格3個頂點的頂點資訊對整個覆蓋區域的畫素進行插值。

6。片元著色器

片元著色器是另一個非常重要的可程式設計著色器階段,片元著色器的輸入是上一個階段對頂點資訊插值得到的結果,更具體來說,是根據那些從頂點著色器輸出的資料插值得到的。而它的輸出是一個或多個顏色值。

這一階段可以完成很多重要的渲染技術,其中最重要的技術之一就是紋理取樣。為了在片元著色器中進行紋理取樣,我們通常會在頂點著色器階段輸出每個頂點對應的紋理座標,然和經過光柵化階段對三角網格的3個頂點對應的紋理座標進行插值後,就可以得到其覆蓋的片元的紋理座標了。

7。逐片元操作

逐片元操作是opengl中的說法,在directx中,這一階段被稱為輸出合併階段。

這一階段有幾個主要任務:

決定片源的可見性。涉及很多測試工作,如深度測試,模板測試等。

如果一個片源通過了所有的測試,就需要把這個片源的顏色值和已經儲存在顏色緩衝區中的顏色進行合併

至此,整個GPU渲染管線就結束了。

科普|GPU渲染管線概述