第5篇 Shader的組織和優化 - Unity 3D ShaderLab開發實踐
chapter 30 shader的組織和複用
1 通過cginc檔案實作複用,可以定制自己的cginc檔案,然後通過#include包含進來,實作shader代碼的複用。
2 可以通過UsePass實作複用:
Shader "Test" {
SubShader {
UsePass "Test/My"
}
}
3 定義自己的Shader關鍵字,運作時更改關鍵字改變shader行為
shader代碼如下:

腳本中的代碼如下:
chapter 31 必須知道的渲染概念
- 逐點計算:在vertex函數中進行的計算就叫做逐點計算;
- 逐像素計算:在fragment函數中進行的計算叫做逐像素計算,和物體在螢幕上的大小相關;是shader的計算和渲染優化的重點;
- 上述兩個方法選擇:盡量把計算移動到vertex函數中;
- draw call:CPU為GPU準備渲染資料,并指令GPU進行一次渲染的操作(是重量級的);一個Draw Call的消耗還要具體看Draw Call的内容;
- Batching的概念和Unity為優化DrawCall所做的工作:通過把數個或數百個簡單的、共用同一材質的物體合并為一個mesh。Unity Draw call batching小結_圖形學和遊戲開發國小生-CSDN部落格
- 利用渲染隊列,後渲染的物體盡量有更多的範圍被遮擋;
chapter 32 基于渲染路徑的優化
一定不要在ForwardAdd中計算除了_WorldSpaceLightPos0之外的任何光源,這是非常耗時的事情。
針對Deferred渲染路徑,它必然是逐像素進行的。
chapter 33 移動平台上的優化
對于tex2D/texCUBE指令,在移動平台上,一個讀取貼圖的指令和一個普通的數學運算指令消耗大概相差至少一個數量級;在PC平台,這個差别更大,大概在兩個數量級以上。
對于mipmaps的選項,如果遊戲是3D,一定要打開mipmaps選項。慎用後期效果,慎用透明效果。
版權說明
作者: grassofsky
出處: http://www.cnblogs.com/grass-and-moon
本文版權歸作者,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出, 原文連結 如有問題, 可郵件([email protected])咨詢.