Unity Shader 1 Shader、渲染管線

Unity Shader 1 什麼是Shader

  • 什麼是Shader
  • 什麼是渲染管線
  • Shader、材質、貼圖的關係

1 什麼是Shader

建一棟房子,結構、框架都有了,如何裝飾裝修呢,Shader就是一道道工序,這就是Shader的作用,他是要給實時處理渲染器,又稱爲着色器。他是程序片段,又稱可編程圖形管線的算法片段。
他分爲兩種

  • Vertex Shader 頂點Shader
  • Fragment Shader 像素(片段)Shader

2 渲染管線

渲染的過程,就是GPU、CPU實現圖形化的過程,好比房子的裝修,Shader就是一道道工序,GPU、CPU就是負責實現的核心動力,各種圖形數據通過渲染管線把最終圖形呈現在屏幕上。
包括:

  • 應用程序階段(主要由CPU負責)
  • 幾何階段
  • 光柵化階段

2.1 應用程序階段

  • 可見性判斷:僅提交可見物體給GPU
  • 提交幾何圖元:提交網格、材質等數據,建立GPU命令表
  • 控制着色器參數: uniform

2.2 幾何階段

處理的是幾何數據,形成幾何數據,主要流程包括:頂點着色器、圖元裝置(投影變換)、裁剪和屏幕映射

  • 頂點着色器:進行頂點座標變換。將輸入的模型空間頂點座標變換到裁剪空間頂點座標。
  • 圖元裝配:將頂點裝配成指定圖元的形狀(如三角形)。
  • 幾何着色器:改變圖元。通過產生新頂點構造出新的圖元來生成其他形狀。外殼着色器和域着色器可編程,鑲嵌器是由硬件管理。

2.3 光柵化階段

把圖元映射爲最終屏幕上顯示的顏色。

  • 光柵化:把圖元映射爲最終屏幕上相應的像素(把三角型切分成一個個像素)。
  • 片段着色器:計算每個像素的最終顏色。
  • 深度測試和混合階段:判斷像素的遮擋關係和透明度,決定是否應該丟棄和怎麼顯示。

2.4 流程說明

  1. 應用程序階段:準備好各種素材包括燈光、模型等,CPU向GPU下達渲染指令 Draw Call,向深度緩衝區放入指令,GPU依次取出指令
  2. 幾何階段:把3D數據轉換成2D數據,包括頂點數據、圖元裝置、裁剪、屏幕映射。
  3. 光柵化階段:
    光柵化將頂點轉爲屏幕上的像素。會進行三角形遍歷。三角型遍歷,檢測出所有被三角型覆蓋的像素。(此處可拓展出怎麼劃分片元、怎麼抗鋸齒);
    片段着色器計算每個像素的最終顏色。是一個可編程的階段,主要的光照處理都在這個階段。
    透明度(Alpha)測試通過深度信息決定像素是否顯示。可設置閾值,顯示的像素將與顏色緩衝區中顏色混合。
    模板測試通過片元的模板值與模板緩衝區的模板值的比較來篩選像素。
    深度測試通過深度信息判斷像素的遮擋關係。篩選掉被遮擋的像素。現在大多數 GPU 都支持提前深度測試(Early depth testing),在片元着色器之前測試,由硬件功能完成。

最終渲染好的顏色先被送入後置緩衝,隨後再替換前置緩衝,顯示在屏幕上

2.5 Unity的處理

2.5 Unity的處理2


Culling Depth Test:對圖元進行裁減,把不顯示的部分去掉;
Texturing Fog:如何在屏幕上顯示每個像素的顏色,從紋理中找到對應的點;Fog霧化處理,遠近處理;
Fragment Shader:片段編程
Alpha Test:繪製透明物體
Blending:混合

3 Shader、材質、貼圖的關係

Shader + 貼圖等->材質
Shader是一種算法,把各種資源通過計算輸出材質。
例如一個立方體,加上光照,光照就是Shader來添加。最終具有光照的立方體就是材質。

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