Unity Shader編程
渲染流水線
概念渲染流水線
- 應用階段(CPU)
CPU準備好場景數據,輸出渲染所須要的幾何信息,即渲染圖元(能夠是點、線、面等)給幾何階段
- 幾何階段(GPU)
把頂點座標轉換到屏幕座標,輸出屏幕空間的二維頂點座標,每一個頂點座標對應的深度值、着色等相關信息,傳遞給下一個階段
- 光柵化階段(GPU)
根據幾何階段傳遞的數據,產生屏幕上的像素,並渲染出最後的圖像
GPU渲染流水線
GPU渲染流水線對應概念流水線的最後兩個階段,即幾何階段和光柵化階段 編程
幾何階段
- 頂點着色器(Vertex Shader)是徹底可編程的,它一般用於實現頂點的空間變換、頂點着色等功能
- 曲面細分着色器(Tessellation Shader)是一個可選的着色器,它用於細分圖元
- 幾何着色器(Gemetry Shader)是一個可選的着色器,用於執行圖元的着色操做,或者被用於產生更多的圖元
- 裁剪(Clipping)將那些不在攝影機視野內的頂點剪裁掉,並剔除某些三角圖元的面片(可配置)
- 屏幕映射(Screen Mapping)把每一個圖元的座標轉換到屏幕座標(不可配置不可編程)
光柵化階段
- 三角形設置(Triangle Setup)階段是固定函數的階段
- 三角形遍歷(Triangle Traversal)階段是固定函數的階段
- 片元着色器(Fragment Shader)是徹底可編程的,它用於實現逐片元的着色操做
- 逐片元操做(Per-Fragme Opreations)階段負責執行不少重要的操做,例如修改顏色、深度緩存、進行混合等,他不是可編程的,可是具備很高的可配置性
Draw Call
CPU調用圖像編程接口緩存
什麼是shader?
- GPU流水線上一些可高度編程的階段,而由着色器編譯出來的最終代碼是會在GPU上運行的
- 有一些特定類型的着色器,如頂點着色器、片元着色器
- 依着色器咱們能夠控制控制流水線中的渲染細節,例如使用頂掉着色器進行頂點變換以及傳遞數據,用片元着色器來進行逐像素的渲染