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

歡迎加入Unity業內qq交流羣:956187480

qq掃描二維碼加羣,行業縱橫頗多,每個人精通領域各異,旨在交流,


接上;

光柵化階段:

1.三角形設置

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

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

2.三角形遍歷

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

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

3.片元着色器

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

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

4.逐片元操作

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

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

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

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


歡迎加入Unity業內qq交流羣:956187480

qq掃描二維碼加羣,行業縱橫頗多,每個人精通領域各異,旨在交流,

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章