Follow Me

最近 FumeFX 的一些小心得



By  Sai     上午9:14    標籤: 
以下的內容只是個人自己反覆實驗加上爛爛的物理常識得到的結論,
只是想要有個邏輯能幫助自己以後製作效果時有個規則可以依附,
雖然用字好像是真有那麼一回事,
但完全不能代表 FumeFX 真正的運算核心和設計思維,
我並不希望有人看了文章就也覺得 FumeFX 真的是這樣,
而是可以去自己實驗出自己的心得。
--

一切都是因為 FumeFX 只模擬氣體 :

FumeFX 只模擬氣體的物理現象,液態和固態的部分會被忽略,
例如燃料( Fuel )也是氣態,當氣體接觸到物體,或是溫度低於零度的時候,
會發生型態轉換為液態,而液態在 FumeFX 是不處理的,所以就消失無法堆積。

但是其他物理上的氣體擠壓和速度向量變化還是會保留,
所以當氣體向地面噴射時,一樣會產生擠壓等等改變流體方向的效果,
只是接觸面的部分會像是被吸收掉一樣不見。

在 FumeFX 裡發生的物體碰撞,實際上是在進行熱對流和傳導。
火焰碰到物體時,會將火焰的熱能傳導到物件,
但是因為 Fume 並不計算固體,所以這個區域的熱能就是直接被吸收掉了,
因此碰撞區域的火焰會消失,並且產生溫度為零的空間,
當物體離開這個位置,周邊的熱空氣就會因為對流的關係填補到這個區域,
這才是 FumeFX 裡火焰或是煙霧被物體擾動的原因,
而不是像液體那樣真實的發生物理碰撞。



--
Fuel Type 、 Source Type、Free Flow :

 

Source Type :
Volume 代表填充物件,Shell 代表物件的外殼,Solid 代表物件本身,
一般使用 Volume 會有比較好的效果,
但是需要使用貼圖控制的時候,最好是使用 Shell 或是 Solid,
因為 Volume 填充物的 UV 不明。

有一點很重要的是,一般狀態下,發射器物體本身就會被視為碰撞物體,
(不管是 Simple Source 或是其他類型)
所以並不需要另外再去指定本身是碰撞物,
相反的如果你另外做了指定,
將會導致發射器區域的熱能一直被物件吸收掉而產生型態轉換,
自然就會發生模擬不出東西來的結果。

因此發射器本身是矛盾的,不斷的在該區域產生燃料,
但是物件本身又會吸收溫度使燃料發生型態轉換而消失。



那為什麼還是能計算出火焰呢?
因為 FumeFX 進行運算的時候,會有範圍和順序上的誤差,
我們計算到的,其實是在那誤差中逃逸出發射器區域的氣體,
如果你使用 Shell 或 Solid 模式,就會發生上圖右邊的的結果,中間的區域會消失,
而使用 Volume 模式,則會得上圖左邊的結果,中間因為 Volume 另外填入所以被回補。

看起來集滿能量的發射器,其實內心是中空的。





往往我們使用 Simple Sourec 做燃燒效果時,火焰很容易會集中在邊緣,這是其中一個原因,
另外一個原因是,發射器的空間邊緣會對速度向量產生影響,並且氣體本身就是不斷往外擴散,加上熱對流也是往外擴散,所以那樣的結果是正常的,尤其是當你都用預設值在算的時候,發射器區域強制 300 溫度永遠都是比旁邊高溫的。

但因為 Volume 模式無法定義 UV,所以當你需要用貼圖精準的控制範圍時,
必須使用 Shell 或是 Solid ,這時就需要開啟 Free Flow 模式來避免上面的問題。

Free Flow 是代表無實體的物件,氣體和溫度等等可以通過 FreeFlow 物件,
但是物件的邊緣還是會對速度向量有影響。

這有點像結界師的結界,雖然看不到,但實際上這個空間是存在的,
而流體的資料就像鬼一樣,不但沒辦法通過,靠近的話還會被消滅,
Free Flow 模式打開就是法力調低讓鬼可以過去,但是通過的時候又覺得很不舒服,
大概是這樣的感覺。 (笑





Fuel Type 預設是 Set 模式,這個設定會產生一些問題,使用上需要做一些判斷。

Set 模式,指的是在發射器的區域空間內,指定該區域的燃料、溫度和煙霧量。
Add 模式,指的是在發射器的區域空間內持續增加該區域的燃料、溫度和煙霧量。

如果我們用 Set 模式來做燃料燒完( Fuel Amount 100~0 ) 的效果,就會發生奇怪的現象,
當 Fuel Amount 為 0 的時候,發射器區域強制把那個範圍內的燃料和火焰清除掉了,
如果時間太短的話,就會發現 Fuel Amount 為 0 的那一格火焰突然消失,很不自然,
而設定溫度為 0 也是一樣道理,因為發生型態轉換,那個區域的流體資料會突然消失。

所以當我們要做燃料燒盡或是溫度自然消散,應該是要使用 Add 模式,
當 Add 為 0,發射器區域就不會再繼續增加燃料或是溫度,
讓剩餘的燃料和溫度就為自然地消耗掉。

有時看到做火焰燃料燒完或是煙霧漸漸消失的效果時,
往往發射器周圍還是會有一圈淡淡的煙霧附著,
這是因為區域的邊緣會影響速度向量,使流體在邊緣徘徊難以消散的關係,

因此別忘了 Active 也可以設 key。


_

關於 Advection  :

大氣的動態主要是平流和對流,溫度高往溫度低方向移動,而溫度平均的地方大氣就隨意擴散,因此大致上可以把對流視為影響主要運動方向,而平流則是影響擴散現象。

Advection  指的就是大氣的平流,平流越多,擴散現象越多,細節越多,運算需求通常越多。

模擬 Advection  設定有三種,default、Advance Fields、Advance Fields and vels,
三種都是在計算平流,在結果上最大的差異在於熱能的消散速度,
而如同前面所說,Fume Fx 只計算氣體部分,所以熱能的消失,就意味著氣體動態與細節的消失。

default 是最基本的演算法,根據 Advection Stride 的設定決定 Advection 發生的機率,普遍適用於所有狀況,熱能消散的最快,細節也較少。

Advance (Fields) 是 FumeFX 2.0 之後強化的演算法,另外在 fire、smoke 和 temperature 加入了各自的 Advection 計算,讓平流運動更豐富,熱能消散的比較慢,可以保留較多的細節,但是速度向量(velocities)的運算仍然使用 default 的演算法。

Advance (Fields and vels) 則是將所有的資料都加上 Advance 的計算,這種模擬方式會產生最多的細節,但是在高速流動或是末端大量消散的地方可能會產生不自然的現象。




上圖可以看出溫度資料加入 Advective 的運算後產生的影響,整體運動速度改變,扭曲的流動細節變多,但是消散的部分容易產生碎形,不易看出流動的方向,這也許就是發生不自然現象的原因。

Advection Stride 是平流消散的觸發頻率,數值越小觸發率越高,和 Grid Spacing 有相對關係,Advance (Fields and vels) 沒有這個設定是因為這裡整體都使用了 Advection field 運算。

Advection  也會使流體容易產生分流,還有末端容易擴散等現象。



Slow Speed Advection Compare:


High Speed Advection Compare:




相關資料:
Wiki Advection
待續..

About Sai

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas euismod diam at commodo sagittis. Nam id molestie velit. Nunc id nisl tristique, dapibus tellus quis, dictum metus. Pellentesque id imperdiet est.

1 則留言:


聯絡表單

名稱

以電子郵件傳送 *

訊息 *

Translate