為什么需要ASE模板
以開發一套角色Shader的過程為例:
- 開發基礎版本, 滿足基本功能
- 開發角色溶解, 褪色等基於基礎版本Shader
- 基礎版本迭代改代碼
- 基於基礎版本的Shader跟着迭代改代碼
- 基礎版本再次迭代改代碼
- 基於基礎版本的Shader再次跟着迭代改代碼
.......
以上過程可見維護成本之高, 為了降低維護難度, Unity Standard Shader的辦法是把代碼 "共用" 的部分拆分到 ".cginc"文件中, 也就是的Shaderlab的頭文件.然而這么干的話會導致代碼可讀性很差, 手工維護代碼也難免出錯.
ASE則提供了模板功能來實現方便維護的需求.ASE允許用戶從已存在的Shader用作基礎或模板創建新的Shader. 模板是常規Unity Shader,只是在關鍵點上放置了特殊的ASE標記,這些標記寫為注釋,因此它們不會影響着色器編譯及其默認行為。
同樣已開發一套角色Shader的過程為例, ASE工作流是這樣的:
- 開發基礎版本, 滿足基本功能
- 基礎版本轉換為ASE模板
- 使用模板在ASE中制作角色溶解,褪色等版本的Shader
- 模板迭代改代碼
- 溶解,褪色等版本的Shader重新編譯
......
上下對比,ASE主要有以下優勢:
- ASE是可視化編程,自動編譯成Shader代碼,開發效率高
- 復雜代碼確實手寫代碼更有優勢, 如角色光照部分的代碼可以的作為的模板中不對外暴露修改的部分, 所以在ASE中制作溶解褪色效果時,節點連接變得極為簡潔
- 修改模板后,基於模板的shader只要重新編譯即可
以上可知, ASE可極大減少 "整套的Shader" 的開發維護成本.