使用Amplify Shader Editor優化特效Shader


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編程的最大優點就是能實時看到當前節點的運算結果,下面開始優化:

  1. 首先使用新舊練個shader調成一樣,用作優化是做對比,保證優化完后效果基本一致

  2. 首先是4個step,這樣互換AB,結果其實就是反向,使用OneMinus代替

  3. 繼續, 乘法的結果總是黑色的,這些節點都浪費了

另一組Lerp的結果也一樣是浪費的↓

  1. 修復bug, 改用合適的混合模式

  2. 最后效果跟原來美術做的一樣, 但性能提升極大!

跟原Shader相比

  • 去掉了grab
  • 2個Step指令 + 0個lerp指令組成的溶解
  • 動畫控制UV
  • 2張貼圖 + N個uniform變量 (酌情精簡)
  • 去掉了頂點色和法線語義等無用的代碼

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM