ASE相對於Shader Forge生成的代碼更加干凈, 用於制作特效的再合適不過,以下是使用ASE優化一個SF制作特效的經過:
## 分析美術用SF制作的Shader
懶得裝SF, 直接分析代碼可知這個溶解效果大致有以下部分組成:
- 使用Grab的扭曲
- 4個Step指令 + 3個lerp指令組成的溶解
- 時間變量控制的UV動畫
- 2張貼圖 + N個uniform變量
- 頂點色
溝通去掉部分功能
由於這個特效核心需求是實現刀光的溶解消失,因此可去掉一部分功能
使用Grab的扭曲(太快看不清楚)- 4個Step指令 + 3個lerp指令組成的溶解 (需要精簡)
時間變量控制的UV動畫(可以用動畫組件做UV動畫)- 2張貼圖 + N個uniform變量 (酌情精簡)
頂點色(有A通道,不需要)
在ASE中重新創建Shader
1 Sahder Forge會生成很多實際不使用的代碼,先要手動清理掉這部分代碼
2 清理后的代碼可讀性依然很差,花時間在ASE重建如下:
優化節點
ASE可視化Shader編程的最大優點就是能實時看到當前節點的運算結果,下面開始優化:
-
首先使用新舊練個shader調成一樣,用作優化是做對比,保證優化完后效果基本一致
-
首先是4個step,這樣互換AB,結果其實就是反向,使用OneMinus代替
-
繼續, 乘法的結果總是黑色的,這些節點都浪費了
另一組Lerp的結果也一樣是浪費的↓
-
修復bug, 改用合適的混合模式
-
最后效果跟原來美術做的一樣, 但性能提升極大!
跟原Shader相比
- 去掉了grab
- 2個Step指令 + 0個lerp指令組成的溶解
- 動畫控制UV
- 2張貼圖 + N個uniform變量 (酌情精簡)
- 去掉了頂點色和法線語義等無用的代碼
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">