Unity學(xué)習(xí)筆記 Vol.73 使用VFX Graph創(chuàng)建火焰、煙霧和迷霧
摘要
????在本節(jié)中,我們將進(jìn)一步了解2019.3中的Visual Effect Graph功能,并介紹一些基礎(chǔ)概念幫助大家在Unity中開始設(shè)計視覺特效(Visual Effect)。詳細(xì)教程請參考官方視頻。

教程
????本節(jié)中,我們通過學(xué)習(xí)VFX Graph基本的思路與概念,在Unity中入門視覺特效制作,在前邊的專欄中,我們了解了什么是Visual Effect Graph,如何使用工具制作粒子效果。在本節(jié)里,我們將學(xué)習(xí)如何用有趣的方式修改紋理,來制作炫酷的視覺特效如火焰、迷霧和煙霧。

????圖中使用VFX Graph Spaceship Demo場景,Spaceship Demo展示了一系列能用VFX Graph制作的特效,工程可在下方鏈接中下載,VFX Graph一個很棒的功能是使用紋理表單制作帶動畫的粒子。
????紋理表單,又稱作精靈表單或紋理圖集,是一張由許多小圖片組成的圖片,在使用多個小紋理時,比如在粒子上的紋理,可用紋理表單來高效地引用多張圖片,僅需引用一張紋理,不必再引用多個單獨(dú)的紋理,我們能用紋理表單保存多幀動畫,通過更改坐標(biāo)來生成動態(tài)紋理。

????比如,這里有一個 煙霧動畫效果的紋理表單,我們看看如何VFX Graph中更迭紋理,制作一種帥氣的煙霧效果。

????首先新建VFX Graph稱為Smoke Effect,再建立Spawn文本框,煙霧應(yīng)持續(xù)生成。

????????那新建Constant Spawn Rate,暫時將值設(shè)為1,方便隨后預(yù)覽紋理。

????然后,創(chuàng)建Initialize和Update文本框,在Initialize文本框中,新建Set Lifetime功能塊,將其設(shè)為5。

????在Output中,將粒子渲染到Quad上,添加Size over Life功能塊和Alpha over Life功能塊,讓煙霧粒子能隨時間變大/淡出。

????接著,添加煙霧紋理,在Output中 ,將紋理表單指定為主紋理。

????我們希望圖表分離出子紋理,而不是像這樣渲染整張紋理,因此需要告訴VFX Graph該紋理為紋理圖集。

????在Output的設(shè)定中,將uv模式從Default改為Flipbook,接著確定紋理的大小,讓圖表能正確分離紋理,煙霧紋理以8x8的網(wǎng)格排列,將其設(shè)為Flipbook的大小。

????這下紋理的大小正確了,然而紋理并沒有動畫,貌似VFX Graph僅使用了表單上的第一個子紋理,但我們需要循環(huán)過所有的紋理,形成一個動畫。

????我們可通過修改紋理索引值,來更改VFX Graph展示出的子紋理,可在Initialize文本框中使用Set Text Index功能塊實(shí)現(xiàn)。

????如果增加生成速率,在粒子生成時調(diào)整索引數(shù)值,便能在每次粒子生成時,讓圖表選擇不同的紋理,在明確紋理索引的用法后,我們需要讓VFX Graph,隨時間按順序增加紋理索引值,逐幀展示煙霧動畫。

????我們能用Flipbook Player功能塊實(shí)現(xiàn),在Update文本框添加Flipbook Player功能塊,將Frame Rate設(shè)為16。

????現(xiàn)在,當(dāng)每個粒子生成時,VFX Graph會逐個抓取紋理表單,播放煙霧動畫的幀。這樣看起來很不錯了。

????接下來還可以,給煙霧添加矢量,讓其像煙霧一樣移動,在Initialize文本框中添加Set Velocity(Random)功能塊,正如名字所示,功能塊會在粒子生成時為其添加一個隨機(jī)的矢量,這里將最小范圍設(shè)為-0.1、-0.4、-0.1,將最大范圍設(shè)為0.1、-1和0.1。

????這下紋理會向下移動,并且向兩邊有一定軌跡。

????再將Spawn Rate設(shè)為20,將Lifetime縮減為1.5。

????最后,還需要在Output文本框中,添加Orient Face Camera Plane功能塊,這樣會生成所謂“展示牌(Billboard)”的效果,可讓平面紋理從任何角度都像是3D的。

????一個好看的煙霧效果完成了。

????VFX Graph的一個優(yōu)點(diǎn)是可以輕松用同一張圖表創(chuàng)建不同的特效,在Initialize文本框內(nèi)新建Set Color功能塊,將其作為屬性暴露在檢視器中。

????這時復(fù)制煙霧特效,將顏色改為紅色,煙霧就變紅了,但是,如果將Intensity數(shù)值提高到約8,再將顏色稍微向黃色偏移,煙霧顏色會自我混合,看起來就像火焰,我們僅點(diǎn)擊了幾下,就制作出了一個完全不同的特效,我們繼續(xù)修改,讓這里涼快一下,加入一個水汽迷霧效果。

????項(xiàng)目中有一些云朵紋理,我想拿來優(yōu)先霧氣,問題在于它們都是單獨(dú)的圖片紋理,而我想在每次粒子生成時從中隨機(jī)選擇一個紋理。
????因此,我們要將圖片組合成一個紋理表單,VFX工具 箱中的圖片排序器,可以制作用于視覺特效的紋理表單,從視頻訪問下方鏈接便能從GitHub下載VFX Toolbox。

????下載完成后,從Package Manager中安裝VFX Toolbox。

????在磁盤上選擇包的JSON文件即可。

????安裝完成后,打開圖片排序器窗口,選擇Window > Visual Effects > Image Sequencer。

????選擇窗口中的Create? Image Sequence。

????接著,將紋理插入窗口的Input Frame部分。

????在Processors一欄,選擇Texture Sheet > Assemble Flipbook,功能會根據(jù)uv設(shè)定,將幾個幀拼接在一起生成采樣圖片,選擇Get按鈕來自動為紋理指定最合適的長寬比。

????然后選擇Export一欄,選擇Export as New來導(dǎo)出、保存紋理,一個能用于VFX Graph的紋理表單就完成了,我們來創(chuàng)建煙霧效果,在檢視器中設(shè)定紋理。

????新加Texture2D節(jié)點(diǎn),將其轉(zhuǎn)換為屬性,再添加Vector2屬性,來設(shè)定手翻書的大小。

????接著復(fù)制效果,將紋理替換成剛剛創(chuàng)建的紋理表單,更新Size來匹配紋理,效果開頭不錯,
但精靈應(yīng)該有動畫才對。

????在圖表中為Frame Rate添加一個屬性。

????接著在檢視器中將霧氣的幀率設(shè)為0,停止播放動畫,看起來好多了,但效果目前僅使用了表單上的一個紋理,我想要在粒子生成時,隨機(jī)設(shè)定紋理索引值。

????在Initialize文本框中,添加Set Tex Index Random功能塊,新加Vector2屬性,稱為Tex Index Range,將輸出指定到功能塊。

????這下我們能設(shè)定霧氣粒子生成時的紋理范圍了,希望你了解了如何使用表單和手翻書動畫,來為游戲制作有趣的視覺特效,使用、控制紋理來模擬如煙霧、火焰、迷霧和爆炸是初學(xué)者入門視覺特效的絕佳課題,你也能修改不同的類型的紋理,看看能做出什么,許多視覺特效都由不同效果組合而來。