GPU 渲染管線簡單總結(網上資料總結)

Jad123123發表於2019-03-03

本文是網上各個部落格內容的總結

GPU渲染管線概述

GPU 渲染管線簡單總結(網上資料總結)

綠色為可程式設計階段、黃色為可配置階段、藍色為固定階段

  1. 應用程式階段
    CPU計算出 model 的頂點座標、法向量、紋理座標、紋理等資料,作為 GPU 渲染計算的輸入
  2. 幾何階段
    負責頂點座標變化、光照、裁剪、投影以及螢幕對映。該階段輸出經過變換和投影之後的頂點座標、顏色以及紋理座標。因為裁剪、投影和螢幕對映涉及到矩陣變換。故結合階段的主要工作是==變換三維頂點座標==以及==光照計算==
  3. 光柵化階段
    經過幾何階段的座標變換後,得到每個點的螢幕座標和需要繪製的圖元(primitive GL_POINTS、GL_TRIANGLES、GL_LINE_STRIP)。該階段主要通過插值將頂點和圖元對應到螢幕畫素上(整數),以及為畫素新增顏色

幾何階段

幾何階段主要作用是將三維場景轉換到二維。在應用程式階段,獲取到的三維模型只提供了模型物件在模型座標空間上的座標。進入到幾何階段後,需要對三維模型的座標進行多次轉換,直到生成在二維螢幕上的座標。
所謂空間轉換,簡單來講是指頂點座標向量乘以空間變換矩陣後得到的頂點座標為轉換後的空間中的座標系上的座標。比如對一個模型進行旋轉平移變換。旋轉平移的變換矩陣即為該模型的模型矩陣。用模型矩陣乘以該模型的頂點座標,即對模型頂點座標進行旋轉和平移變換。運算後的頂點座標就是在世界空間中的座標,而頂點在自己模型空間中的座標不變。

  1. 模型空間轉世界空間
    每個三維模型都有自己的模型空間座標系,模型在模型空間座標系上的座標就是模型的頂點值。模型空間座標的存在有利於計算該模型的旋轉、平移和縮放等操作。
    場景中世界空間座標系具有唯一原點,相對於其它座標空間來說是固定不變的。三維模型通過世界空間座標系得知自己的相對位置。
    GPU 渲染管線簡單總結(網上資料總結)

    上圖中,黑色座標系為世界空間座標系,灰色為模型空間座標系。假設該模型某頂點在模型空間座標系下的座標為列向量 A(x,y,z,1),在世界空間座標系下的座標為列向量 B(x1,y1,z1,1)。那麼存在M * A = B其中 M 為 4×4 矩陣,稱為模型矩陣。該變換稱為模型-世界變換。

  2. 世界空間轉檢視空間
    檢視空間:檢視空間是由攝像機可視範圍形成的一個空間。該空間的座標系稱為攝像機座標系,原點為攝像機,攝像機鏡頭對準方向為負Z軸。攝像機右方和上方分別為攝像機座標系的X軸和Y軸。
    GPU 渲染管線簡單總結(網上資料總結)

    上圖為一個透視攝像機的攝像機座標系示意圖。檢視空間由攝像機鏡頭方向、視角(fov)、近平面(near)以及遠平面(far)構成。世界空間中的場景只有處於檢視空間中的部分才會在螢幕上呈現出來。而檢視空間的錐形結構使得三維物體在螢幕上呈現出透視效果。
    而另一種正交攝像機的座標系中,攝像機位於Z軸正方形無窮遠處。故正交攝像機無法呈現透視效果。three.js 中移動攝像機實際上是移動攝像機座標系,場景內物體的移動實際是物體在攝像機座標系中的位置的變化導致的。
    世界-檢視變換:預設情況下,檢視座標系原點即攝像機位於世界座標系原點,並且座標系方向與世界座標系一致。故攝像機鏡頭初始朝向世界座標系負Z軸,即垂直螢幕向內。與步驟一同理,世界座標系中的座標轉換到攝像機座標系需要乘以一個變換矩陣,即檢視矩陣。

  3. 檢視空間轉齊次裁剪空間
    齊次裁剪空間:裁剪空間指通過攝像機可以被呈現在螢幕上的空間,由六個平面組成。頂點著色器必須要完成模型頂點從模型空間到齊次裁剪空間的轉換。齊次裁剪座標系為左手座標系,原點位於正方體空間中心,空間各個座標軸範圍為[-1, 1]。齊次裁剪空間與投影型別(透視、正交)以及螢幕解析度和長寬比獨立。裁剪過程即將座標不在[-1, 1]內的頂點去掉。
    GPU 渲染管線簡單總結(網上資料總結)

    上圖表示檢視空間到齊次裁剪空間的轉換。檢視空間中的 A,B 兩點在齊次裁剪空間中的座標分別為(-1, 1, -1)和(-1, 1, 1)。因為齊次裁剪座標系為左手座標系,那麼Z值越大的頂點離攝像機也越遠,故可以利用Z座標表示頂點的深度
    轉換過程:透視投影攝像機座標系轉裁剪空間座標系的變換矩陣為

    GPU 渲染管線簡單總結(網上資料總結)

    根據上圖矩陣先得到裁剪空間座標系下的座標:

    GPU 渲染管線簡單總結(網上資料總結)

    最後利用該列向量的 w 分量對 x,y,z 進行標準化,就得到頂點在齊次裁剪空間座標系中的座標。其中 w 分量值等於標準化前 z座標的值,即頂點到攝像機的距離。故 w 越大,在標準化過程中 x、y、z 值就變得越小,即離攝像機越遠的物體看上去越小,從而達到了透視的效果。

  4. 幾何著色器
    第一步到第三步為頂點著色器必須要實現的功能。幾何著色器位於頂點著色器之後,為可選部分。幾何著色器允許 GPU 高效地建立和銷燬幾何圖元 primitive。
  5. primitive assembly 圖元裝配
    圖元裝配指根據模型中頂點的原始連線關係還原出網格結構。網格由頂點和索引組成,根據索引將頂點連線在一起,組成線、面單元,然後再進行裁剪。OpenGL ES 支援點、線和麵三種圖元。
  6. 裁剪
    可配置功能階段,此階段可以新增自定義的裁剪面
  7. 齊次裁剪空間轉視窗空間
    頂點在齊次裁剪空間座標系中的 x、y 值乘以視窗的長高,即可得到頂點在視窗空間中的二維座標,即頂點在螢幕上的位置。

光柵化階段

該階段主要是確定幾何階段輸出的各個圖元 primitive 所覆蓋的畫素以及每個畫素的顏色

  1. 三角形設定 Triangle Setup
    幾何階段輸出的都是三角形網格的頂點。三角形設定階段需要計算光柵化一個三角網格所需要的資訊,具體就是計算三角形邊界的表示方式。
  2. 三角形遍歷 Triangle Traversal
    該階段會檢查每個畫素是否被某個三角形覆蓋。如果被覆蓋的話,就會生成一個片元。三角形遍歷階段會根據上一階段的計算結果來判斷三角網格覆蓋了哪些畫素,並使用三角網格三個頂點的資訊對覆蓋區域的畫素座標進行插值
  3. 畫素著色器|片元著色器
    畫素著色器的輸入為三角形遍歷階段得到的各個畫素中頂點資訊的插值結果。畫素著色器中可以處理場景光照和與之相關的效果,以及紋理取樣。頂點著色器會輸出每個頂點對應的紋理座標。在光柵化階段三角形遍歷中通過三角形三個頂點的插值運算可以得到三角形內各個畫素的紋理座標,從而可以在畫素著色器中確定各個畫素在紋理上對應的顏色。
  4. 合併階段 The Merging Stage
    合併階段是將畫素著色器中生成的各個片段的深度和顏色與幀緩衝結合在一起的地方。

Reference

www.cnblogs.com/ojo-blogs/p…
zhuanlan.zhihu.com/p/26894962
www.sohu.com/a/128065154…

相關文章