Shader和3D圖形渲染管線(Render Pipeline)
最近在系統學習Shader,發現編寫之前需要對渲染繪圖管線流程有一個系統的認知才能學的更加深刻
網上查了一篇教程發現內容並不是很多,本文將自己學習的內容以儘可能的簡單易懂的方式記錄下來並分享給大家
大家也可以關注我的部落格,可以和我一起學習Shader程式設計和Unity3d遊戲開發。
開始本文的學習!!!
定義
渲染管線也稱渲染流水線,是顯示晶片內部處理圖形訊號相互獨立的並行的處理單位。
一個流水線是一序列可以並行和按固定順序進行的階段。
也就是說每個階段都是從它的前一階段輸入,然後輸出發給隨後的階段。
渲染流程
渲染管線流程就是是輸入3D模型,輸出2D片顯示出來的過程
渲染管線流程可以細分為以下4個階段
·頂點處理
通過一系列的座標轉換,將模型的頂點在攝像機前進行位移,並最終投影到攝像機的投影螢幕上
其中的空間位置轉化過程為:本地座標系->世界座標系->觀察座標系->投影座標系
頂點處理這個階段包括頂點的座標變換、逐頂點霧化、材質屬性、光照屬性處理
·面處理
面處理也叫圖元處理。
這一階段主要包括面的組裝、面的擷取、面的剔除
·光柵化
將以向量為基本結構的面轉換為一個個點陣形式的畫素
·畫素處理
這一階段包括對每個畫素區域進行著色、對畫素貼上貼圖、形成最終的畫面(輸入畫素的位置、深度、貼圖座標、法線、切點、顏色等;輸出每個畫素的顏色和透明度)
CPU與GPU的分工
CPU在記憶體中建立以下資源
·頂點定義
·頂點快取
·索引快取
·貼圖
·攝像機
·投影
CPU從記憶體中傳送以下資源到視訊記憶體中供GPU使用
·頂點定義
·頂點快取
·索引快取
·貼圖
·座標系變換矩陣
·渲染狀態
·貼圖取樣方式
Shader定義
Shader中文的翻譯是著色器,是一種較為短小的程式片段,用於告訴圖形硬體如何加速輸出影象,過去是有組合語言來編寫。
總而來說,Shader是可程式設計圖形管線的演算法片段
主要分為:Vertex Shader和Fragment Shader
Shader與渲染流水線的關係
由上圖易發現,著色器是穿插在渲染流水線上的一段演算法程式,它負責將輸入的頂點資料以指定的方式和輸入的貼圖或者顏色等組合起來,然後輸出。
Shader和材質、貼圖的關係
Shader將頂點資料以指定的方式和貼圖或者顏色組合起來,將輸出資料繪製到螢幕上。
材質就是將Shader以及輸入引數(包括貼圖)打包儲存起來,將材質賦予到三維物體上進行渲染
這樣就是說材質就是引擎最終使用的商品(每個渲染的物體都需要一個材質)
Shader就是生產這種商品的加工過程或方法,貼圖就是商品材料之一。