天天看點

渲染管線流程描述精簡

渲染管線流程

渲染管線流程:頂點資料輸入、頂點着色器、曲面細分過程、幾何着色器、圖元組裝、裁剪剔除、光栅化、片段着色器、混合測試

每個階段會把前一個階段的輸出作為該階段的輸入

各項流程簡述

1.頂點資料輸入:輸入裝配階段,送入到渲染管線的資料包括頂點坐标、紋理坐标、頂點法線和頂點顔色等頂點屬性。

頂點資料在流水線中以圖元的方式處理,常見的圖元包括:點、線、線條、三角面

2.頂點着色器:主要功能是進行坐标變換,将輸入的局部坐标變換到世界坐标、觀察坐标、裁剪坐标。

  • 平面着色:最簡單最快效果也是最差的着色方式;
  • 高洛德着色:中等的一種,因為高光并非是線性變換,是以插值得到的效果較差;
  • 馮氏着色:在片段着色器階段進行的一種着色方式,效果最好,但計算量最多,自然也最慢

3.曲面細分:可選,曲面細分是利用鑲嵌化處理技術對三角面進行細分,以此來增加物體表面的三角面的數量。

曲面細分由外殼着色器、鑲嵌器、域着色器構成,其中外殼着色器和域着色器可以程式設計,鑲嵌器是硬體管控的。

我們可以借助曲面細分技術實作細節層次的機制,使得離錄影機越近的物體具有更加豐富的細節,反之則具有較少的細節。

4.幾何着色器:可選,幾何着色器的輸入是完整的圖元,可輸出圖元或者不輸出圖元,亮點在于它可以建立或銷毀圖元。

幾何着色器可以将輸入的點或線擴充成多邊形。

5.圖元組裝:圖元組裝階段會進行裁剪和背面剔除相關的優化,以減少進入光栅化的圖元的數量,加速渲染過程。

  • 剪裁:完全位于視錐體外部的圖元會被裁剪掉,部分位于視錐體外部的圖元會被進行剪裁操作。
  • 背面剔除:背對錄影機的圖元會被剔除掉

6.螢幕映射的操作:透視除法和視口變換兩個操作,這兩個操作主要是硬體實作,不同廠商會有不同的設計。最後會得到視窗坐标。

7.光栅化:光栅化将變換到螢幕空間的圖元離散化為片元的過程。主要包括兩個過程:三角形的組裝和三角形的周遊

  • 三角形組裝:對頂點的輸入資料進行插值,得到每個片段的資料值
  • 三角形周遊:周遊三角圖元覆寫了哪些片段的采樣點,随後得到圖元所對應的片元

8.片段着色器:片段着色器用來決定螢幕上像素的最終顔色。在這個階段會進行光照計算以及陰影處理。

  • Phong光照模型:朗博餘弦定理計算漫反射,半朗博模型提高了漫反射量度資訊。反射光線夾角大于90度時鏡面反射分量會被消除,高光不連續
  • Blinn-Phong光照模型:引入了半角變量,半角向量和法線夾角不會超過90度,不會出現高光不連續的問題
  • PBR光照模型:考慮了光照能量守恒,基于粗糙度值,計算了法線半球内所有入射光線經過直接反射到觀察點的占比

9.測試混合階段:測試包括裁切測試、Alpha測試、模闆測試和深度測試。經過測試的片段會進入混合階段。混合階段進行Alpha混合。測試混合階段是不可程式設計階段,但是我們可以通過OpenGL或DirectX提供的接口進行配置,定制混合和測試的方式。

  • 裁切測試:可選,當視口比螢幕視窗小時應用裁切測試将渲染視窗變得和視口一樣大,超出的部分進行裁切。
  • Alpha測試:根據Alpha值來裁剪片段
  • 模闆測試:可選,高度可配置,控制選區片段可見性,超出的部分進行裁剪
  • 深度測試:統一片段的多個片段,根據深度值,保留并更新深度緩存和顔色緩存,并丢棄其餘片段
  • Alpha混合:根據片段的alpha值進行混合,用來産生半透明的效果。

更加詳細的請參考下述參考連結:

參考來源:https://zhuanlan.zhihu.com/p/79183044

繼續閱讀