空洞騎士重現 - Shader Graph

這次來練習怎樣使用 Unity 中的 Shader Graph 來創造出不同的視覺效果,會使用最簡單的 HDR effect 跟特製一個 vanish effect 來做出一個超級斬擊的效果。
Sprites
上述 sprites 可能會有紅框,可以透過此程式來移除。
Shader Graph

Shader Graph 是 Unity 提供讓開發人員能透過 UI 介面來達成基礎的影像處理,過程不用撰寫程式,對於一些簡單影像處理是相當方便的工具,這邊有找到幾個很棒的教學影片可供參考: video1、video2、video3,上圖是一個 glow effect 的 shader graph,實作步驟如下:
- 創建 Shader Graph - 在 project 內創造一個新的 shader graph,如果特效要與環境光互動就使用 lit,不用就選 unlit。
- 創建 Material - 直接
Create/Material然後設定使用剛剛創建的 shader。 - 新增參數 - 左上角視窗點擊新增創造一個 Texture2D,名稱一定要取作 MainTex ,這樣當外部 sprite 套用此 shader graph 時就會自動把 sprite 的 texture 讀取到此變數中,另外也可以在左下角設定 default value 把要測試的 sprite 載入。同時再新增一個 Float 參數用來控制 Glow 的程度。
- 新增 Node - Node 是 shader graph 中執行運算的最小單位,每種 Node 都有不同功能,要達到 Glow 效果僅需使用兩種 Node:
- Sample Texture 2D - 標配,這是把 texture 轉成 RGBA 的形式,方便後續操作。
- Multiply - 調整像素亮度。
- 套用 material - 替我們的 sprite 修改 material,然後可以從 material property 中控制 shader graph 新增的參數。
- 開啟 bloom - 要看到 glow effect 需要先開啟 camera 的 postprocess 並套用 volume 的 bloom 效果,參數可以自由調整,threshold 設定成 2 是為了避免小騎士的頭發光。
- 檢驗成果 - 可以看到隨著 material 的 glow scale 越大,像素的亮度會越大,然後就會超過 bloom 設定的 threshold 並產生發光的效果,另外這邊採用紅色感覺有點像是亡者之怒護符的效果呢 ~~~






Particle System + Shader Graph
除了一般的 sprite,particle system 也可以採用 shader graph,透過修改 render 內的 material:

此外可以修改 shader graph 的
graph blending mode = additive 來讓粒子間可以疊加達成更高的亮度,效果蠻好看的:
效果差異如下:

Super Slash
前面學到了基本的應用,接下來就是發揮創意的時間了~~~ 我很喜歡隻狼裡面不死斬的視覺效果,所以打造一個 shader graph 來模擬,目標效果是黑色的斬擊揮出後,由上而下慢慢消失

關於漸進式消失的 Node 組合可以去看前面提到的教學影片,他們都有很詳細的說明,這邊想要補充的是如何達成 "由上而下" 的消失 - 像素之所以消失是因為透明度歸零,而透明度會歸零是因為沒有超過 step node 設定的閥值,因此只要設定出一個函數在座標上方數值越小、下方數值越大即可:

為了產生與座標相關的函數,先使用 UV node 得到 sprite 的像素座標,然後透過 split node 得到 G 軸 (RGB 對應 XYZ) = Y 軸,範圍是 0 ~ 1,由於希望是上面比較小,所以加上一個 subtract node,最後 saturate node 是控制輸出是 0 ~ 1 之間,這樣當 VerticalDisplay 夠大 (ex: 1.5),整張 sprite 都會大於閥值而顯示出來,當 VerticalDisplay 逐漸變小,sprite 上方的數值就會變小而低於筏值並消失。
最後要做的就是讓他在動畫播放的時候 VerticalDisplay 由大慢慢變小就好,這可以透過 animation 的參數來控制,只要用錄製的時候調整 material 上的參數即可,真方便阿 ~~~

成品
除了 glow 的斬擊外,可以看到影片中展示了有無使用 shader graph 的粒子效果差異,以及超級斬擊的漸進式消失特效,此外還替他加了一個集氣的動作特效,整體來說我覺得很不錯 !!
總結
Shader graph 是個容易上手並且能與 particle system & animation 結合的好工具,這次特效學完了,該繼續學習一些基本的遊戲機制了,像是血量系統等等。
