## **壹、開始制作火焰的基礎吧【利用SubstanceDesigner制作基礎紋理】**
### 一點一、Output節點的創建
* * * * *
**H子**:軟件已經買好了。那么我們開始吧。
**AOI**:好。首先打開軟件吧。我們先來分析一下,到底需要做些什么。
**H子**:嗯,首先是確定火焰的形態吧。但是總不可能是畫出火焰的外形吧,那么只要確定一個大體的輪廓就可以了?還有就是能量中心的位置,因為并非寫實化的火焰,那么簡化一下,火焰中心就是近似圓形的一個區域吧。火焰搖曳的話......這個想不到了。
**AOI**:分析大體來說是沒問題的。因為火焰是動態的,所以實際上也不可以使用準確的造型來定義火焰區域,能量中心也是同樣。只要利用素材紋理,然后再進行混合得到想要的造型就好了。至于火焰的搖曳,其實分析一下火焰就會發現,像是蠟燭在無風環境下,燃燒是非常穩定的,造型在燃燒過程也基本穩定,近似一個橢圓形。而會產生搖曳和不均勻效果的燃燒,主要都是發生在燃料相對復雜,氣流也不穩定等的地方產生。也就是說,可以認為,燃料,氣流變化,以及不均勻的溫度是產生火焰變得搖曳以及造型產生破碎的原因。而程序化產生不均勻的隨機紋理效果的話,第一時間會想到的是......
**H子**:噪聲紋理?柏林噪聲?
**AOI**:好吧,這是你的第一時間想到的東西。別人會怎么想,那就隨它去吧。
既然你說出了柏林噪聲,那么我們就用程序化柏林噪聲模擬火焰的形狀破碎和搖曳效果吧。
首先創建一個新的**SubstanceDesigner**空項目,命名為S_Fire

紋理尺寸根據需要設置就是了。默認使用512像素也沒有問題。
創建好之后,先給他添加一個輸出節點。
在主界面按空格鍵,搜索output

即可找到Output節點,選擇并創建。
創建后,選擇節點,點擊節點參數面板的Add Item,為節點添加RGBA通道的baseColor用作輸出用的紋理,并設置好各項參數。

到此便完成了輸出節點的創建。
### 一點二、定義火焰形態
* * * * *
**H子**:說到火焰形態的話,如果以火球,蠟燭,篝火等偏小型的火焰來說,就是接近下大上小的橢圓形了吧。那么就是說,可以用圓形的為基礎進行修改?
**AOI**:說的沒錯,所以首先創建圓形的節點,并且以此為根據進行修改。
首先在Library面板中找到Generator - Patterns目錄,在目錄下找到Shape,把Shape節點拖到畫布上

然后在參數面板修改參數Pattern為Cone,基本的圓形節點就創建好了。

然后再按空格鍵,搜索并創建Transformation2D節點

然后把Shape節點的輸出鏈接到Transformation2D節點的入口上,并修改Transformation2D節點,根據需要,修改出中心偏下的橢圓形形狀。


**H子**,但是這樣的話,看起來不就下半段直接貼在了紋理的地步了嗎,火焰總不會是平底的燃燒吧......啊,我懂了,只要混合一下其他的紋理就好了嗎?**AOI**老師?
**AOI**:對的,可以根據需要,自己混合其他的形狀產生出需要的結果。混合的節點是Blend。里面包含的混合算法,跟各類繪圖軟件上主要的幾個圖層混合功能是一致的。至于其他的形狀,在Generator - Patterns目錄中都可以找到,而且這個目錄里面的形狀都是基于程序化生成,也就是說,只要暴露參數出來,就可以在游戲引擎內進行快速修改了。
**H子**:我試試看,果然首先還是要把頂部和底部遮掉呢。
那么就用Gradient Linear節點自己相加一下,控制一下上下的范圍,然后跟火焰形態相乘好了。

**H子**:這就是下大上小的基本火焰形態了對吧。那么,定義火焰中心也是一樣的做法嗎。
**AOI**:沒錯,使用同樣的方法就可以制作能量中心的形狀了,而且相對也更簡單。
**H子**:做好了!

### 一點三、火焰的搖曳
**H子**:解決了基礎形狀之后,就是火焰搖曳的效果了吧。那么直接就上PerlinNoise?
**AOI**:其實在Generator-Noise目錄下面,有相當多種類的程序化噪聲紋理可以選擇,根據實際需求,選擇不同的噪聲,會有不同的混合效果。所以其實并不需要拘泥于PerlinNoise。當然這次就先用PerlinNoise制作,往后再根據需求和喜好等等的條件進行選擇使用。
**H子**:好了,那就用PerlinNoise3好了,這個還能調整Distance。

**AOI**:恩,這個可以根據實際需要調整Distance,得到想要的大小。而且SubstanceDesigner產生的噪聲紋理都是無縫銜接的。所以也很方便做紋理偏移。而且你也可以在這里,把Distance暴露成參數,然后直接在Unity的材質編輯器屬性面板上面就可以編輯參數,并且得到新的紋理了。
在PerlinNoise3節點參數面板上,點擊Expose,并創建一個名為Distance的參數,即可將此參數暴露到面板上,便于在游戲引擎對紋理進行操作了。

### 一點四、范圍的進一步限制
**AOI**:咦,**H子**,你增加了這個Gradient Line 2節點是打算干什么用呢?


**H子**:這個啊,我感覺可能兩邊會太寬了,火焰的燃燒估計總是向上吧,但是通過之前的那些節點的混合,總覺得會在底部接近能量中心的兩邊也有火焰搖曳的感覺。所以打算多加一個紋理用于抑制兩邊的搖曳效果,讓火苗集中向上。
**AOI**:對于這個效果,這也是你自己的見解了。那么就保留這個節點,最后合成的時候看看效果吧。
**H子**:那么**AOI**老師,到了這一步,感覺已經準備好需要的素材了,那么我需要怎么樣才能導出到Unity呢。分別導出4張紋理嗎。但是只有一個節點呢。
**AOI**:因為這四個都是灰度圖,只需要一個通道就可以完成記錄。那么我們就把四種數據合并到一張紋理上面就好了。分別占據RGBA四個通道。然后之后在Unity里面創建Shader的時候,只需要分開讀取就可以了。
首先在Library里面招待Filters - Channal目錄下面的RGBA Merga節點,并拖到畫布上。
然后把之前創建好的四組節點的輸出,分別連接到RGB Merga節點上。再把RGBA Merga的出口鏈接到Output節點。就大功告成了。
通道的對應要制定好規范,在這個項目里面
* R:能量中心
* G:火焰形態
* B:搖曳和擾亂
* A:范圍限制

### 一點五、導出
**AOI**:完成了節點的編輯之后,只要導出就可以。提醒一句,以防萬一,編輯的過程中記得保存。
在項目名稱上,點擊右鍵,在彈出的右鍵菜單選擇Export .sbsar file,在彈出的對話框中設置保存的位置和文件名即可。

至此,火焰形態需要的素材便制作完成。