Unity Shader Graph- GRASS SWAY HDRP

前言

在Unity 世界裡面草叢以及樹木的動態可能需要用一些插件或是語法控制物件,但其實利用Shader Graph也是可以做到草被風吹動的動態,利用UV的軸向以及時間的控制就可以讓原本不會動的貼圖也動了起來,這種技術還可以運用在海的波動或是魚的游泳方式,Shader Graph的世界真的是非常厲害呢!以下的案例會使用Unity HDRP來製作整個長草的過程。

因為這次的練習會用到texture的簡單地建模,以下給大家下載素材方便練習。

● Download grass assets: https://ole.unity.com/grasssway

下載好assets以後用裡面的mesh排列一下你喜歡的草叢方式

  1. 因為是HDRP的關係,這邊新建一個Lit Shader,並開始將草的texture一一上上去,首先要建立一個base color,我們在這邊建立一個Texture 2D並將素材用的草貼圖放上去,如果有做過貼圖shader graph的朋友應該知道Texture是無法直接串到主要通道的,所以我們這邊要再給他一個Sample Texture 2D Node才能串到Base Color。

2. 這時候串上basecolor 會發現草怪怪的,因為我們的Texture遮罩還沒被使用到,所以要在Lit 設定裡面的surface選擇Transparent以及勾選Alpha Clipping這樣就會出現Texture製作好的遮罩效果,這時候如果旋轉一下mesh會發現下面看不到圖,所以我們要在Double – Sided 選擇 Flipped Normals 這樣就可以從四面八方都看得到圖了。

3. 接著我們來製作Metallic,這邊比較特別的是這張貼圖不只是可以用在Metallic上,上面的RGB分別可以給Metallic、Smoothness、AO通道做使用。以下為RGB對應串連的通道

Red Channel – Metallic

Green Channel – Smoothness

Blue Chanenel – AO

4. 再來我們一樣製作一個texture2D拿來做Normal,這邊記得在Sample Texture 2D的Type選擇Normal直接串給Normal,這樣我們在HDRP裡面的PBR base已經完成了。

5. 串好基本的PBR 貼圖後我們接著要開始製作風吹動的效果,不免俗的一樣先建立一個Time Node,接著需要一個可以控制時間的Vector2屬性,這邊先預設X-6 Y-0,因為要控制貼圖主要是要控制貼圖的XYZ軸,所以這裡我們先建立一個Position以及Tiling and offset來控制UV的位置。

6. 因為風吹動的時候不可能這麼整齊,所以我們需要一點Grandient noise 當作隨機的波動,而且我們希望這個Noise scale是可以控制的,所以一樣製作一個Vector1 當作屬性。

7. 有波動就一定會風的強度了,這邊我們建立一個Vecotr1 命名strength控制noise的強度,並先減去後再相乘。

8. 因為風的波動通常是左右搖擺比較,所以我們需要一個新的Position Node來做Split(分裂)將裡面的Red Channel與剛剛建立好的Noise串進AddNode裡面,這時候可以看到動態已經有點樣子了。

串到 Position 以後發現草動得非常的厲害! 怎麼會連底下也一起動呢?那是因為我們貼圖的XYZ軸主要目前只有設定了X軸的部分,所以當然看起來非常的奇怪。

9. 所以這邊我們要串一下xyz軸的動態,建立一個Combine Node當作結合,並將剛剛Split出來的通道做一下串接

Red Channel – X軸

Green Channel – Y軸

Blue channel – Z軸

10. 這時候串到position的時候會發現我們預覽的草不見了,那是因為現在的材質只能在game模式下才看得到,但我們希望能夠在scen裡面也看得到,所以我們建立一個Camera Position跟剛剛combine做減去,並新建一個Transform Node,並將Transform 設定為World to Object,這樣就可以看得到草的律動了。

11. 最後我們需要讓Y軸的地方穩定一點才不會發生剛剛那種草下面也在動的慘劇,這邊在加入一個UVNode 一樣做分裂出來取Y軸,串連到Lerp的T通道,將剛剛combine好的串到Lerp的B通道,最後在新增一個Posotion當作XYZ軸的基底串連到Lerp的Alpha通道。

最後將作好的Shader graph製作成材質球放到一開始排列的mesh上面看一下,看起來相當自然呢!

小結:

這次的練習非常實用,可以運用在未來場景上的草叢、樹葉、甚至是湖面等等動態上,目前跑起來也不會太吃資源,感覺是製作場景上另一種不錯的選擇呢!

參考連結:https://youtu.be/L_Bzcw9tqTc

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *