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

應用階段 Application Stage
- 發生位置: CPU
- 階段目標: 准備渲染所需的幾何信息,即渲染圖元(rendering primitives)
- 渲染數據:
- 場景數據:如攝像機,視錐體,模型,光源..
- 粗粒度剔除:即剔除不可見物體
- 渲染狀態:材質,紋理,Shader..
- 基本流程:
- 加載數據到顯存: 由於渲染管線的圖形化處理基本位於GPU,所以渲染數據先從硬盤加載到RAM,再加載到顯存以供GPU后續處理.
- 設置渲染狀態: 定義渲染圖形的方式,例如使用頂點着色器或者片元着色器、材質、光源等.
- 調用Draw Call: 由CPU發起的DrawCall指令給GPU,指向已經准備好的渲染圖元
- Draw Call:
- 本質:圖像編程接口
- 機理:CPU通過調用DrawCall向命令緩沖區(Command Buffer)的隊列中添加渲染命令,而GPU則從已有的隊列中讀取渲染命令去執行
- 優化:由於調用DrawCall即使得CPU准備大量渲染數據提交到緩沖隊列,大量的DrawCall會使得CPU過載,因此盡量減少DrawCall的調用次數(如進行批處理,合並網格...)
幾何階段 Geometry Stage
- 發生位置: GPU
- 接收數據: 應用階段所准備好的渲染圖元的信息,也就是頂點數據(模型自身坐標系、頂點顏色、紋理UV等)
- 階段目標: 決定所需繪制圖元的信息(繪制方法,繪制坐標)
- 基本流程:
- 頂點着色器(Vertex Shader):
- 調用次數:每個頂點均調用一次
- 工作:坐標轉換(模型空間->齊次裁剪空間,也可說模型自身坐標->屏幕空間坐標。可人為干涉)和逐頂點光照(顏色計算)
- 曲面細分着色器(Tessellation Shader):
- 工作:細分圖元
- 幾何着色器(Geometry Shader):
- 工作:逐圖元着色操作或是生成新的圖元(減少CPU負擔)
- 裁剪(Clipping):
- 工作:裁剪去不在攝像機視野內的頂點
- 屏幕映射(Screen Mapping):
- 工作:將圖元的x和y坐標轉換到屏幕坐標系(不對z坐標處理)
- 頂點着色器(Vertex Shader):
光柵化階段 Rasterizer Stage
- 發生位置: GPU
- 接收數據: 幾何階段准備好的頂點信息
- 階段目標: 對幾何階段傳遞過來的屏幕空間的頂點信息進行處理,最終生成屏幕像素,渲染出圖像
- 基本流程:
- 三角形設置(Triangle Setup):
- 工作:根據幾何階段傳遞的數據(三角網絡的頂點),計算三角網絡每邊的數據信息
- 三角形遍歷(Triangle Traversal):
- 工作:根據三角形設置的結果,判斷某個三角網格所覆蓋的像素,並根據三個頂點的信息對整個覆蓋區域進行 插值 ,生成一系列 **片元(fragment) ** ,片元包含信息有:屏幕坐標、深度、法線、紋理...
- 片元着色器(Fragment Shader): 又稱像素着色器(Pixel Shader)
- 調用次數:一個像素點調用一次
- 工作:紋理采樣,計算光照(陰影、明暗...)
- 逐片元操作(Per-Fragment Operations):
- 工作:模板測試->深度測試->混合->顏色緩沖區
- 輸出屏幕圖像
- 三角形設置(Triangle Setup):
參考
- UnityShader入門精要 - 馮樂樂
