unity之shader入門

1 渲染流水線

渲染流水線分爲三個階段,分別是應用階段,幾何階段,光柵化階段。

1.1 應用階段:CPU實現,輸出渲染圖元。

數據加載到顯存中:顯卡對顯存(VRAM)的訪問速度比對內存(RAM)要快,並且大多數顯卡對RAM沒有訪問權限。

設置渲染狀態:定義場景中的網格是怎樣被渲染的。

調用DrawCall:CPU通過調用DrawCall告訴CPU開始一個渲染過程,一個DrawCall會指向本次渲染圖元列表

 

1.2 幾何結算:GPU實現,輸出屏幕空間的二位點座標,深度,着色信息,傳送給光柵化階段。

頂點着色器:對輸入的每個頂點都會調用一次頂點着色器,而且無法得到頂點與頂點之間的關係。頂點着色器的主要功能是座標變換,把頂點座標從模型空間轉換到齊次裁剪空間。再由硬件進行透視除法,最終得到歸一化的設備座標。

裁剪:裁剪刪除不在攝像機範圍內的頂點。

屏幕映射:將x和y轉到屏幕座標系,z座標無作爲,但會被一起傳進光柵化後發揮作用。

 

1.3 光柵化階段:GPU實現,決定每個渲染圖元哪些像素應該被繪製在屏幕上,將幾何階段傳來的頂點數據進行插值。

三角形設置:計算光柵化一個三角網格所需的信息。

三角形遍歷:檢查每個像素是否被一個三角網格所覆蓋,覆蓋則賦予片元着色器。

片元着色器;對從頂點着色器來的數據進行插值數據完成很多渲染技術,最重要的一個是紋理採樣。

逐片元操作;合併數據加操作,通過測試來決定每個片元的可見性。半透明物體必須開啓混合操作。

 

2 shader入門

Shader(着色器)就是GPU執行的一段針對3D對象進行一系列操作的程序。

2.1 Unity中的Shader類型

Fixed function Shader :屬於固定渲染管線 Shader, 基本用於高級Shader在老顯卡無法顯示時的回滾。 使用的是ShaderLab語言,語法與微軟的FX files 或者NVIDIA的 CgFX類似。

Vertex and Fragment Shader:最強大的Shader類型,屬於可編程渲染管線. 使用的是CG/HLSL語法。

Surface Shader:Unity3d推崇的Shader類型,使用Unity預製的光照模型來進行光照運算。 使用的也是CG/HLSL語法。

 

3 shader編寫

簡單的shader示例

 

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