UnityShader - 渲染管線


  • 定義: 顯卡內部處理圖像信號的並行處理單元,也稱為渲染流水線
  • 發生位置: CPU和GPU
  • 渲染機理: 將圖像所具備的圖形信息(頂點、紋理、材質、攝像機位置等)經過一系列階段的處理,最終轉換為屏幕上的圖像.
  • 渲染流程:
    • 應用階段
    • 幾何階段
    • 光柵化階段


應用階段 Application Stage

  • 發生位置: CPU
  • 階段目標: 准備渲染所需的幾何信息,即渲染圖元(rendering primitives)
  • 渲染數據:
    • 場景數據:如攝像機,視錐體,模型,光源..
    • 粗粒度剔除:即剔除不可見物體
    • 渲染狀態:材質,紋理,Shader..
  • 基本流程:
    1. 加載數據到顯存: 由於渲染管線的圖形化處理基本位於GPU,所以渲染數據先從硬盤加載到RAM,再加載到顯存以供GPU后續處理.
    2. 設置渲染狀態: 定義渲染圖形的方式,例如使用頂點着色器或者片元着色器、材質、光源等.
    3. 調用Draw Call: 由CPU發起的DrawCall指令給GPU,指向已經准備好的渲染圖元
  • Draw Call:
    • 本質:圖像編程接口
    • 機理:CPU通過調用DrawCall向命令緩沖區(Command Buffer)的隊列中添加渲染命令,而GPU則從已有的隊列中讀取渲染命令去執行
    • 優化:由於調用DrawCall即使得CPU准備大量渲染數據提交到緩沖隊列,大量的DrawCall會使得CPU過載,因此盡量減少DrawCall的調用次數(如進行批處理,合並網格...)

幾何階段 Geometry Stage

  • 發生位置: GPU
  • 接收數據: 應用階段所准備好的渲染圖元的信息,也就是頂點數據(模型自身坐標系、頂點顏色、紋理UV等)
  • 階段目標: 決定所需繪制圖元的信息(繪制方法,繪制坐標)
  • 基本流程:
    1. 頂點着色器(Vertex Shader):
      • 調用次數:每個頂點均調用一次
      • 工作:坐標轉換(模型空間->齊次裁剪空間,也可說模型自身坐標->屏幕空間坐標。可人為干涉)和逐頂點光照(顏色計算)
    2. 曲面細分着色器(Tessellation Shader):
      • 工作:細分圖元
    3. 幾何着色器(Geometry Shader):
      • 工作:逐圖元着色操作或是生成新的圖元(減少CPU負擔)
    4. 裁剪(Clipping):
      • 工作:裁剪去不在攝像機視野內的頂點
    5. 屏幕映射(Screen Mapping):
      • 工作:將圖元的x和y坐標轉換到屏幕坐標系(不對z坐標處理)

光柵化階段 Rasterizer Stage

  • 發生位置: GPU
  • 接收數據: 幾何階段准備好的頂點信息
  • 階段目標: 對幾何階段傳遞過來的屏幕空間的頂點信息進行處理,最終生成屏幕像素,渲染出圖像
  • 基本流程:
    1. 三角形設置(Triangle Setup):
      • 工作:根據幾何階段傳遞的數據(三角網絡的頂點),計算三角網絡每邊的數據信息
    2. 三角形遍歷(Triangle Traversal):
      • 工作:根據三角形設置的結果,判斷某個三角網格所覆蓋的像素,並根據三個頂點的信息對整個覆蓋區域進行 插值 ,生成一系列 **片元(fragment) ** ,片元包含信息有:屏幕坐標、深度、法線、紋理...
    3. 片元着色器(Fragment Shader): 又稱像素着色器(Pixel Shader)
      • 調用次數:一個像素點調用一次
      • 工作:紋理采樣,計算光照(陰影、明暗...)
    4. 逐片元操作(Per-Fragment Operations):
      • 工作:模板測試->深度測試->混合->顏色緩沖區
    5. 輸出屏幕圖像

參考

  • UnityShader入門精要 - 馮樂樂


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM