2012/10/13

FumeFX – Large Grids 設定技巧



作者:Jeff Lim
翻譯:Hammer Chen

有時候, 場景裡面有移動的火焰, 因此, 就必須要設定非常大的grid, 最後就會導致速度緩慢, 記憶體消耗過大的模擬.

有幾種方法可以解決這類問題

*** 以下方法經過FumeFX 1.x測試****

1. 大型的Static Grid
為了要模擬會動來動去的火焰, 就必須要建立大的grid能夠包裹住火焰的運動範圍.你可以到ScriptSpot網站去下載Allan Mckay的免費script, 叫做Create Animation Bounding Box, 作者是這樣解釋他的script的: “基本上就是想要把角色整個的動畫範圍呈現出來, 也就是說產生一個能包含整個動畫的bounding box.” 另外Anubis先生也有寫他自己的版本, 使用起來比較簡單, 速度比較快.


2. 把Bounding Box獨立出來的script
這個方法也是使用大的grid, 但這個script必須用在FumeFX裡面, 使用的條件是:一個能夠做為bounding volume的物件, 建議使用Box, 把這個box link給你要燃燒, 會移動的物件. 而且該box不能旋轉.


BBox Alignment
下載這個script, 在FumeFX中指定進來.
http://www.scriptspot.com/files/u149/FumeFX_-_Object_Bounding_Box.ms


MaxScript Assignment選單
按下Edit按鈕, 取代原本的script, 改用上面所提供的script. 你必須要編輯圈起來的部分, 把$'BBox' (紅色部分), 改成你的bounding box物件最後, 把$'FumeFX01'改成你FumeFX物件.


Object Bounding Box Script的片段
請注意, 你可以省略掉FumeFX命名的那個步驟, 你可以把第26行的script省略掉 (comment out) 以及25行. 我之所以要做這兩個步驟的原因是, 內建的ffx變數沒辦法回傳正確的FumeFX物件, 所以直接指定結點名稱會是一個比較保險的做法.

以下是模擬的預覽效果


你可以看看Log視窗裡面, 由fume模擬產生的log. 請注意看看裡面的“–>”, 這是由script產生的資訊.



FumeFX Log
如果你不想用這個script, 然後在32bit環境模擬這個場景, 你可能跟我一樣會因此當機.


記憶體耗盡
基本上, 當你在進行模擬的時候, 建議你用64位元的作業系統, 這樣你就能夠完全利用所有的實體記憶體. 很多高手會用這個方法, 除了對大型grid有效外, 在模擬的時候, 你能以定速進行模擬, 你可以查看FumeFX的log, 你就會發現每個frame是以固定7秒的速度在模擬.

缺點是在Box volume外面的voxel會被刪除, 所以這對於大型的煙霧模擬是不適合的.

3. Grid Lock
這個方法也是要用script 跟第二的方法做法很像. 整個概念是要能夠直接對FumeFX grid設定動態. 一開始的時候把FumeFX link給動態的物件, 跟Bounding Box方法一樣, 不可以設定帶旋轉的動畫. 例如: 我把FumeFX grid link給Point Helper 而Point Helper連結到動態物件, 我利用Point Helper來幫助把FumeFX grid放到pivot的中心, 因為FumeFX的grid的pivot總是在底部的中心. 接著, 我使用Tera Bake Transforms這個腳本, 它提供了一個功能能夠持續地讓grid對齊, 即使grid在場景中不斷移動.

 http://www.scriptspot.com/files/u149/Tera_Bake_Transforms.ms

這個script, 可以把物件的動畫bake成keyframes. 這個東西提供特殊的功能叫做Snap Positions, 當你使用這個功能進行動畫烘培的時候, 你可以以特定的數值snap 動畫的位置. 下圖應該可以解釋得更加清楚:


以下是用這個script進行的baking結果, 開啟或是關閉Snap Position的功能:

關閉或是開啟Snap Positions 進行baking
有了’snap位置這個操作, 我們就可以套用script據grid emitter運動
 來對 voxel data做偏移

下載這個script, 把這個script放到FumeFX maxscript裡面

現在當我們進行模擬

FumeFX Simulation預覽
跟第二種方法相比, 這個方法花的時間較長

第二種方法 37分鐘
第三種方法 47分鐘

4. 剪切法 (Cut-Of)
你可以到Afterworks論壇上面找到這個方法, 它也是利用script把使用者指定, 超過特定數值範圍的voxel 資料給清掉. 我想在CGFluids也可以找到這個script.

5.空的Src (Void Src)
如果你有FumeFX 2.x, 你可以利用新的FumeFx Helper, 稱為Void Source. 基本上, 跟第二種和第三種方法很像, 但是方便的是它不是用script來操作的, 而且這個還允許你使用旋轉.

6. CGTalk論壇上面lutteral寫的Script
根據第二種方法 lutteral寫了另外一個script, 你可以點擊這邊看討論串, 這個script可在第三個post找到.
http://forums.cgsociety.org/showthread.php?p=6768120

[相關教學]


2 comments:

Unknown said...

看到3.5新增功能後~
再回頭看到這篇翻譯~

是否3.5就可以無視這個問題了呢~?

hammerbchen said...

這早就不是問題了,把sensitivity調高就好