## **貳、一起來創建火焰Shader吧【利用Shader插件愉快的創建自己的Shader吧】**
### 二點一、導入資源到Unity
**H子**:**AOI**老師,接下來就要開始做Unity部分的開發了吧。你告訴我,要為火焰特效專門創建一個Shader,但是我并不會寫Shader代碼啊,于是要怎么做呢。
**AOI**:我就知道你不會Shader,所以你去買個叫Shader Forge的插件吧,在AssetStore就有了。這個插件可以讓你通過節點編輯器,去可視化編程的創建自己的Shader。而且要教你寫代碼太麻煩了,代碼你就自己去學吧,有這個插件,你只要理解原理就能愉快的做出想要的Shader了,非常方便。
**H子**:買好了。對了,剛才做的sbsar文件直接拖進Unity就可以了嗎。
**AOI**:對,Unity和UE都是直接支持了sbsar格式,拖進項目就直接可以使用了。展開拖進來的sbsar文件,就可以看到下面有Substance系列的圖標的材質球,以及這個材質里面所包含的紋理。

因為我們現在只創建了一個Substance Graph,所以導入Unity之后默認也就只有一個材質球。而在我們創建的這個Graph中,只創建了一個Output節點,所以,也就只有一張紋理了。

在導入的sbsar文件的Inspector面板上,可以見到創建新材質的按鈕,如果有多組Substance Graph,只要點擊這個按鈕就可以選擇Graph并創建新的材質球,同時就會創建對應的紋理。而暴露的紋理參數,也會在這個面板上見到。
**H子**:也就是一組紋理對應一組材質球了。如果我要根據需要,創建多組不同的紋理,只要創建材質球就好了。
**AOI**:沒錯。而且包含在sbsar文件內的紋理,是可以直接當作普通紋理使用的,而不是僅僅限于sbsar內創建的材質球。所以可以利用這個特性,通過sbsar文件,利用Substance Designer創建程序化紋理。
### 二點二、形態與能量中心的混合
**AOI**:好了,從Window - Shader Forge打開插件,并且創建一個空白的Shader吧。注意是空白的。因為模板對于這個項目來說并沒有任何用。對,就是Unlit那個。

可以見到,場景上只有一個Color節點,連到了Emission的出口上。
這個節點也沒有什么用。可以刪掉。

在動手前,我們先分析一下。我們所有的紋理都在同一張紋理的不同通道上面。但是用于模擬搖曳和擾亂效果的噪聲貼圖需要依靠偏移UV實現移動,而其他的三個通道都不需要任何的移動。
**H子**:也就是說,需要一張紋理,兩種UV的操作模式咯?直接創建兩個Texture2D的節點?
**AOI**:并不需要這么麻煩呢。你可以看到Texture2D節點的入口有三個

* UV
* MIP
* Tex
可以看到有一個綠色的Tex入口,這個入口的數據類型是用來接收紋理數據的
實際上,還有一個叫做TextureAsset的節點,他比Texture2D更為簡潔。

這個節點只有一個綠色的Tex出口,毫無疑問,就是用來輸出紋理數據的,他并不包含UV等的其他參數
首先把sbsar里面用來制作火焰的紋理拖到TextureAsset節點上,并且把TextureAsset跟Texture2D節點相連。

**H子**:那么接下來就該混合和處理RG通道里面記錄的能量中心和火焰形態了。我嘗試了Add和Max兩種節點。

Add的話,中心的看起來好像亮了好大一塊阿。看起來怪怪的。
**AOI**:中間那塊,是因為混合之后的值已經大于1了。考慮到后面要進行各種的操作,要是有數據過大的話,會對整體控制造成影響,而且想必這樣做出來,中間一定是一個圓形的火球。對造型的控制也不怎么好呢。
**H子**:那么就用max混合的結果來處理好了。
最后這部分看起來就是這樣的。

### 二點三、為搖曳效果進行噪聲的偏移。
**H子**:好,接下來就是要對噪聲紋理的偏移操作了吧。
那么,首先就是要增加一個新的Texture2D的節點,并且把TextureAsset節點連上去。
那么,要對UV偏移的話,要單獨對UV每個通道進行運算嗎。
**AOI**:并不需要呢,在ShaderForge里,有一個名叫Panner的節點,即可操作UV的偏移。
**H子**:我試試看。連起來就是這個樣子呢。

連到Emission上看起來他會不斷的45度偏移阿。
**H子**:我懂了,Panner節點下面的可以填寫的兩個輸入框,就是U和V方向的偏移量吧。如果要讓他垂直向上偏移的話......那就是這樣!

好了!把V值改成-1就好了!
**AOI**:這一步相當簡單對不對。因為自帶節點具有了期望的功能,所以復雜的操作可以被減少,同時節點圖也會變得簡單。
### 二點四、整體進行混合得到初步的效果。
**H子**:那么接下來我要把搖曳效果進行混合了。那么這里直接用乘法就好了。

看起來好像有點意思了,但是火焰總不會是這種效果嘛。
**AOI**:對的。到這一步的時候可以先進行一下最后效果的測試。
先添加一個Step(A<=B)節點。
并且把混合的結果連到B,并且在A入口連接一個Slider,拖動一下看看效果。




**H子**:阿火焰的邊緣變得明確了阿,造型開始有那么些意思了。
但是好像并沒有能量中心結構阿。果然是前面用add更好?

結果好像并沒有任何好轉。
**AOI**:因為不管前面做了什么運算,最后都會跟噪聲紋理進行混合,也就是說,最后有些區間的值一定會因為乘法運算導致變得相當小,無限的接近黑色。這樣的話,最后在處理Step的步驟時候,這些區域依舊會被剔除掉。
所以最佳的做法就是,把對能量中心的混合操作移動到后一步。在噪聲紋理和形態紋理混合之后,再混合能量中心紋理。
**H子**:看起來效果好多了。

果然兩邊也依舊有產生搖曳的火苗,跟預計的一樣。那么我繼續在這一步混合之前修正造型用的蒙版。


**H子**:看起來像話多了!
**AOI**:那么,最后把這個節點的輸出鏈接到Opacity節點上吧。

**H子**:但是看起來黑色的地方沒有透明啊。
**AOI**:看看左邊的Console,里面有個黃色的感嘆號對吧。這個地方是錯誤或者警告提醒。打開Console分頁,點擊旁邊黃色警告按鈕,大部分問題就會自動修復了。

看,修復了,成功了是不是。
具體對于透明以及渲染排序的設置是在下面的Blending頁面

不過除非要主動進行細節的調整,不然利用模板或者自動修復都可以解決大部分的需求。所以這里可以先不管。