Unity VFX -- (5)VFX Graph基礎(chǔ)
?? ? ? ? 在Unity中,還有一種完全不同的創(chuàng)建VFX的工作流,VFX Graph。VFX Graph能夠生成出和粒子系統(tǒng)相同或更好的效果。

VFX Graph和粒子系統(tǒng)不同之處

VFX Graph的優(yōu)點(diǎn)
? ? ? ? VFX Graph能夠同時(shí)處理百萬(wàn)級(jí)別的粒子,而粒子系統(tǒng)同時(shí)能處理的粒子數(shù)要小于VFX Graph。
? ? ? ? VFX Graph產(chǎn)生處更加復(fù)雜的效果,比如開(kāi)頭的那個(gè)精靈,對(duì)于粒子系統(tǒng)來(lái)說(shuō)幾乎是不可能實(shí)現(xiàn)的。
VFX Graph的缺點(diǎn)
? ? ? ? VFX Graph對(duì)于初學(xué)者來(lái)說(shuō),上手難度相比于粒子系統(tǒng)來(lái)說(shuō)更大。
? ? ? ? VFX Graph有更嚴(yán)格的硬件需求,在部分設(shè)備上可能無(wú)法使用。
? ? ? ? VFX Graph運(yùn)行在GPU上,Unity的物理計(jì)算被放到了CPU上,因此VFX Graph的粒子不能和應(yīng)用的其它物理效果進(jìn)行交互(比如和地面產(chǎn)生碰撞)。粒子系統(tǒng)是跑在CPU上的,因此它們能夠和基于物理的(physics-based)組件進(jìn)行交互。
VFX Graph和粒子系統(tǒng)該如何選
? ? ? ? 如果我們的經(jīng)驗(yàn)很豐富并且需要?jiǎng)?chuàng)建出非常復(fù)雜的效果,或者效果需要百萬(wàn)級(jí)別的粒子支撐,可以選擇VFX Graph。
? ? ? ? 如果我們并非專(zhuān)家,并且只想創(chuàng)建出一些簡(jiǎn)單的效果,這些效果能跑在所有設(shè)備上,或者效果需要和場(chǎng)景中其它基于物理的物體進(jìn)行交互,則使用粒子系統(tǒng)。
? ? ? ? 下面兩張圖是一個(gè)天氣效果的對(duì)比,這個(gè)效果需要模擬的粒子數(shù)量是100萬(wàn)個(gè),分別用粒子系統(tǒng)和VFX Graph來(lái)實(shí)現(xiàn)。


擺放一個(gè)VFX Graph特效到場(chǎng)景中
? ? ? ? ?1. 將前面筆記中所制作的環(huán)境粒子關(guān)閉掉(Inspector中設(shè)置為inactive即可)。
? ? ? ? 2. 在Assets ->? CreativeCore_VFX -> VFX -> Samples中,拖動(dòng)天氣VFX Graph預(yù)制體中的一個(gè)(案例選的是Snow_VFXGraph_Prefab.prefab)到Heirarchy中。
? ? ? ? 3. 將這個(gè)新添加的物體位置移動(dòng)到空中,讓場(chǎng)景看起來(lái)像是在下雨或下雪。

? ? ? ? 1. 選中VFX Graph物體的情況下,定位到它的Visual Effect組件,這個(gè)組件的圖標(biāo)是一個(gè)小燈。
? ? ? ? 2. 選擇Edit按鈕打開(kāi)VFX Graph窗口


? ? ? ? ?在開(kāi)始編輯VFX Graph之前,我們可以先嘗試著在編輯器區(qū)域進(jìn)行移動(dòng)導(dǎo)覽,熟悉一下。和Shader Graph或者動(dòng)畫(huà)狀態(tài)機(jī)編輯器類(lèi)似,VFX Graph中主要的導(dǎo)覽方式有:
? ? ? ? 平移(Pan): 按住鼠標(biāo)中間并拖動(dòng),或者按住Alt(Windows)或Option(MAC),點(diǎn)擊鼠標(biāo)并拖動(dòng)。
? ? ? ? 縮放(Zoom): 滾動(dòng)鼠標(biāo)滾輪。
? ? ? ? 聚焦和放大(Focus and zoom in):選中一個(gè)元素按F鍵。
? ? ? ? 適應(yīng)窗口(Fit to window):按A鍵。

瀏覽VFX Graph上下文
Spawn Context
? ? ? ? 第一個(gè)上下文,控制粒子的生成,和粒子系統(tǒng)的Emission模塊功能類(lèi)似。

? ? ? ? 1. 調(diào)整Rate屬性,讓VFX Graph版本的特效和之前用粒子系統(tǒng)做的天氣特效的Rate一致。
? ? ? ? ? ? ? ? 這里的spawn rate可以設(shè)置到一個(gè)很大的值,同時(shí)對(duì)FPS影響較小。
Initialize Particle Context
? ? ? ? 初始化粒子上下文控制粒子最初在哪里出現(xiàn),以及如何出現(xiàn)。這個(gè)上下文包含了許多粒子系統(tǒng)主模塊中的相同的屬性,包括粒子的初始大小,形狀,速度,生命周期和最大數(shù)量等。它也包含了粒子系統(tǒng)中Shape的等價(jià)屬性,定義了粒子產(chǎn)生的容器的形狀。

Update Particle Context
? ? ? ? 更新粒子上下文控制著粒子從產(chǎn)生到消失期間粒子的變化。這個(gè)更新操作每一幀都會(huì)運(yùn)行。包含了和粒子系統(tǒng)里類(lèi)似的屬性:Color over Lifetime, Size over Lifetime,Noise(VFX Graph里叫做Trubulence)以及Texture Sheet Animation(VFX Graph里叫做Flipbook Player)。

? ? ? ? 3. 嘗試通過(guò)在Context中點(diǎn)擊右鍵并選擇Create Block來(lái)使用創(chuàng)建新的Block。我們可以通過(guò)子菜單里的搜索框來(lái)搜索要添加的Block。

? ? ? ? 輸出粒子上下文控制每個(gè)粒子的外觀,和粒子系統(tǒng)里的Renderer模塊功能類(lèi)似。在這里我們可以為粒子指定材質(zhì)。

創(chuàng)建一個(gè)全新的VFX Graph
? ? ? ? 1. 在Project窗口(注意不是Heirarchy)中,點(diǎn)擊右鍵,選擇Create -> Visual Effects -> Visual Effect Graph,然后將這個(gè)新建的VFX Graph放到Heirarchy中。然后再場(chǎng)景中將其移動(dòng)到你想要放置的位置。


查看一個(gè)復(fù)雜的VFX Graph
? ? ? ? 接下來(lái)我們來(lái)看一個(gè)專(zhuān)業(yè)級(jí)的VFX Graph例子,來(lái)感受一下復(fù)雜的VFX Graph長(zhǎng)什么樣。
? ? ? ? 1. 在主菜單中,選擇Window -> Package Manager,然后選擇Visual Effect Graph。在右邊的面板中,展開(kāi)Samples,然后選擇Import導(dǎo)入VisualEffectGraph Additions。



? ? ? ? 我們還注意到,這些VFX Graphs使用了Operators,Operators是連接到main context的更小的節(jié)點(diǎn)。

? ? ? ? VFX Graph能夠很輕易地和快速地變得復(fù)雜。隨著復(fù)雜度的增加,效果也會(huì)變得更加復(fù)雜豐富。




https://docs.unity3d.com/Packages/com.unity.visualeffectgraph@6.9/manual/index.html