GPU渲染管線概述

2022-07-30 00:57:30 字數 1441 閱讀 2190

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

GPU渲染管線概述

頂點著色器是流水線的第乙個階段,它的輸入來自於cpu。頂點著色器的處理單位是頂點,也就是說輸入進來的每個頂點都會呼叫一次頂點著色器。頂點著色器需要完成的工作主要有 座標變換和逐頂點光照。當然,除了這兩個主要任務外,頂點著色器還可以輸出後續階段所需的資料。座標變換,顧名思義,就是對頂點的座標進行某種變...

GPU渲染管線

3 光柵化階段 4總結 主要是為了得到三維頂點的法線,紋理等資料資訊 但是不能夠 幾何階段這個座標系轉化如下 這個階段主要做的事情事頂點著色器 模型變換,檢視變換,頂點著色 模型變換 將建模座標系轉化為世界座標系,相當於以物體為中心轉化為以世界為中心的轉化,可以理解為為模型統一乙個座標系 檢視變換 ...

GPU渲染管線與shader

模型座標空間 世界座標空間 觀察座標空間 螢幕座標空間 其中從觀察空間 到 螢幕空間需要經過3步 cvv單位立方體,規範立方體 a用透視變換矩陣把頂點從視錐體中變換到裁剪空間 齊次空間,用齊次座標表示 b在 裁剪空間進行圖元裁剪 這裡就是視域剔除view frustum culling 然後齊次空間...