Shader理論《三》GPU流水線之光柵化階段

2021-09-30 01:42:09 字數 1870 閱讀 7497

接上;1.三角形設定

螢幕對映是幾何階段的最後乙個環節,會把相關的資料數值傳送給光柵化的第乙個階段:三角形設定。從上乙個階段輸出的資訊是螢幕座標系下的頂點的位置以及和他們相關的額外資訊如:深度值,法線方向,視角方向等。光柵化階段有兩個最重要的目標:計算每個圖元覆蓋了哪些畫素,以及為這些畫素計算他們的顏色。

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

2.三角形遍歷

三角形遍歷階段會檢查每個xia畫素是否被乙個三角網格所覆蓋。如果被覆蓋的話,就會生成乙個片元。而這樣乙個找到哪些被畫素被三角網格覆蓋的過程就是三角形遍歷,也叫做掃瞄變化。三角形遍歷階段會根據上乙個階段的計算結果來判斷乙個三角網格覆蓋了哪些畫素,並使用三角網格3個頂點的頂點資訊對整個覆蓋區域的畫素進行插值。如下圖三角形遍歷階段展示

這一步的輸出就是得到乙個片元序列。需要注意的是乙個pian片元序列並不是真正意義上的畫素。而是包含了很多狀態集合,這些狀態用於計算每個畫素的最終顏色。這些狀態包括但不限於它的螢幕座標,深度資訊,以及他從幾何階段輸出的頂點資訊,如法線,紋理座標de等。

3.片元著色器

片元著色器在directx中也被稱作畫素著色器,但是pian片元著色器更合適,因為此時的pian片元並不是乙個真正意義上的畫素。前面的光柵化階段實際上並不會影響螢幕上每個畫素的顏色值,而是會產生一系列的資料資訊,用來表述乙個三角形網格是怎樣覆蓋每個畫素的。而每個片元就負責儲存這樣一系列資料。真正會對畫素產生影響的階段是下乙個流水線階段——逐片元操作。片元著色器的輸入是上乙個階段對頂點資訊差值得到的結果,更具體地說是根據那些從頂點著色器中輸出的資料差值得到的。而它輸出的是乙個或多個顏色值如下圖:

雖然片元做色器可以完成很多重要效果,但他的侷限性在於,它僅可以影響單個片元。也就是說當執行片元著色器時,它不可以將自己的任何結果直接傳送給相鄰片元,有一種情況例外就是片元著色器可以訪問到導數資訊(gradient,or  derivative)

4.逐片元操作

這個階段負責執行很多重要操作,例如修改顏色,深度緩衝,進行混合,他是不可程式設計的但是有很高的的可配置性。逐片元操作是opengl中的說法,在directx中這一階段被稱作輸出合併階段。這一階段由幾個主要任務。

(1)決定每個片元的可見性。這涉及很多測試工作,深度測試,模板測試等。

(2)如果乙個片元著色器通過了所有測試,就需要把這個片元的顏色值和已經儲存在顏色緩衝區的顏色進行混合或者說合併

需要說明的是逐片元操作階段是高度可配置性的,即我們可以設定每一步操作細節,這乙個階段首先需要解決每個片元的可見性,這需要進行一系列測試,如果他沒有通過其中的某一項測試,那之前為了產生這個片元所做的多有工作都是白費的,這個片元會被捨棄的。

Shader學習筆記(三) GPU流水線

當gpu從cpu那裡的到渲染命令後,經過一系列流水線操作,最終把圖元渲染到螢幕上。幾何階段和光柵化階段,開發者沒有絕對的控制權,是由gpu實現的通過流水線化,大大加快了渲染的速度。gpu向開發者提供了很多控制權。上圖中的每個階段gpu都提供了不同的可配置性和可程式設計性。幾何階段 頂點著色器 是完全...

shader基礎學習筆記(渲染流水線)

總體上可以分為三個階段 a 應用階段 b 幾何階段 c 光柵化階段 一 應用階段 起點是cpu,分為 a 從cpu中提取資料到視訊記憶體中 硬碟 記憶體 視訊記憶體 視訊記憶體就是顯示卡的記憶體,通常ram加在到視訊記憶體中後就釋放了,但是有時為了計算網格碰撞檢測等操作,就不釋放掉。資料報括 場景的...

流水線排程

n個作業要在由2臺機器m1和m2組成的流水線上完成加工。每個作業加工的順序都是先在m1上加工,然後在m2上加工。m1和m2加工作業i所需的時間分別為a i 和b i 你可以安排每個作業的執行順序,使得從第乙個作業在機器m1上開始加工,到最後乙個作業在機器m2上加工完成所需的時間最少。求這個最少的時間...