2014/07/19

Phoenix FD 2.2 重要參數介紹


編譯:Hammer Chen 

譯者前言:Phoenix FD的軟體設計風格很有Chaos Group的特色,就像VRay的GI引擎一樣,有Photon Map, Brute Force, Irradiance Map, Light Cache。各種狀況要用不同的組合,Phoenix FD的流體也搞成一樣的設計風格,光是守恆與平流就有3X3種組合,用起來複雜,但都是對各種狀況進行最佳化,這或許是Phoenix FD能夠突圍FumeFX的契機吧~

Inertial forces慣性力 當勾選這選項 移動模擬框會產生相反方向的慣性力,當模擬框連結到移動的物件,而物件的模擬效果會跟你用巨大的模擬框包含整個運動路徑一樣的效果 (由於大的模擬框需要消耗巨大資源,所以這個功能很實用)(譯者注:可用在移動中的火把,用小的grid link給火把,這個選項會讓火把自然產生移動的風,既節省運算資源,又寫實)

也可用在移動的表面或是船,或是需要避開移動的物件。周圍要用移動的空氣或是液體取代 。當與Initial fill up選項,加上open boundary conditions一起使用時,就可以做出在海面上移動的物件(船)的效果。

Time scale 控制時間快慢,可以用在慢動作效果。
(譯者注:相關討論請參考Chaos Group Forum官方論壇,大部分的使用者都有用過FumeFX,但是retime的觀念還是不同
Slowing down sim while keeping original characteristics?

Timescale

Liquid: a few questions about flow and shape )


Vorticity渦度 以網格計算流體(grid-based)的模擬通常會容易在每個step計算)過程消散其內容,這當然也包含了速度。當速度消散時,小尺度的亂流就會被壓抑,如果沒有針對這點特別處理的話,模擬就會變得很平滑沒細節,這個參數設定在模擬階段對小尺度的漩渦加速,讓漩渦不消失。這個功能沒辦法完全抵消消散的過程,但能明顯改善。勾選xV c會修改過程, 避免在緩慢的區域過度地抵銷消散。

Cooling 冷卻 這個參數控制流體的輻射冷卻,流體會逐漸降低溫度,直到達到300度 (相當於零度,煙既不會往上也不會往下。當冷卻速度為一時就相當時真實的煙的四公尺的一半(譯者注:原文這段似乎沒有解釋清楚)真實世界的冷卻非常的複雜,類似於Global illumination全局照明那樣,所以這裡我們只用到簡化的公式計算冷卻。

Randomize 隨機
這些選項讓你可以產生隨機的變動,可以跟Vorticity搭配使用。


Conservation 守恆
守恆的過程讓流體具有漩渦動態的特質讓直線運動變成漩渦越高的守恆移動的力量就越能在容器中傳達越遠因此在一點的運動也會讓遠方的流體移動。守恆會讓煙與火焰產生寫實的形狀,讓液體在靜止時支撐自身的重量,或是在傾倒時充滿整個容器。內部計算:守恆會更新grid中的每個cell的方向與數值與強度,這是為了為計算平流(Advection)步驟,當流體在兩個cell間移動就會需要這些資訊(方向與強度) ,基本上Phoenix FD會去平衡每個cell中的進來的速度與出去的速度,而且會經過好幾個pass的計算,然後越來越接近完美個平衡點。而這pass的總數就是所謂的conservation strength (quality) 守恆強度。在自然界,守恆具有無限的強度,而且是完美的。在Phoenix FD中,守恆的品質越高,從一個點到另一點的傳遞運動就會越遠,讓模擬的結果更加寫實,但也會讓每個frame的模擬時間更久。Phoenix FD提供好幾種守恆的方法,根據你的模擬需求所設計,每種都有其優缺點:



1. Symmetric對稱法 這個方法很適合用在具有對稱的模擬上,例如核彈爆炸的蕈狀雲。這個方法可以用在液體,也可用在火焰或是煙霧的模擬,可能會產生類似棋盤的圖案,當你預覽速度通道時會很明顯看到棋盤圖案。在大部分的狀況,你不會把速度視覺化出來,但是只顯示煙霧或是溫度,所以不必害怕使用這種對稱守恆法。

2. Smooth平滑 平滑的方法跟對稱法很類似,只是會產生更加平滑的速度場。這也是這三種方法中最強烈的方法,但不太擅長維持對稱,會產生較少的細節,所以很適合用在液體模擬。

3. Buffered緩衝 這個方法的運作方式跟上述兩種有大的不同,具有最弱的守恆強度,但可以產生最多的細節,因此很適合用在煙霧與火焰。當守恆強度很重要時,就不能用在流體或是其他類型的模擬上。



Quality品質 增加守恆的強度,這對液體或是煙漸漸減少體積的問題,能夠改善,或者能增加煙霧的卷度。請注意增加品質會減慢模擬的速度。以下動畫展示了品質會改善體積散失的問題:

在範例中,煙霧放在一個幾乎封閉的房間內,出口在天花板上。真實世界裡的煙霧會充滿整個房間,並從出口竄出。因為一旦煙霧產生,會累積且不消失;但在電腦模擬時,當守恆參數較低時,就無法維持住煙的總量會開始消失,且永遠也無法到達出口。請注意當煙霧到達洞口時,守恆強度約為200。這數值絕非巧合,整個grid的垂直高度為100,如果grid再小一點 那讓煙霧到達洞口所需的守恆數值可以再更小。你可以把這個參數視為守恆擴散影響速度的射程範圍。

你可能會問:『如果這個參數就是守恆的範圍,那是不是就代表我們不能模擬當守恆小於液體深度的液體? 』聽起來合邏輯,因為容器的底部必須要告訴表面,要支撐其底部。沒錯!這假設會成立,如果液體在不提昇守恆的狀況模擬的話。但其實不是這樣的。這就是為何你可以在深度為100的容器中模擬守恆只具有10的液體。


Material transfer (Advection) 物質轉移 平流
平流會處理流體在grid 中延著其速度移動。當目的地介於兩個cell之間時 (而通常也是介於兩者之間),grid-based的模擬的問題就是當內容由一個cell轉移到另一個時會變模糊。所以在每個新的frame,每次就會失去細節。Phoenix FD提供多種平流計算方法,用來對付這種問題,每種方法都有其優缺點,要看模擬的狀況而定。Phoenix每個frame可以處理多次平流,或是多個frame處理一次,根據你的Steps per frame (SPF)參數而定。為了要獲取最多細節的煙霧與火焰 ,最好將SPF設低,但是另一方面,高的SPF則會得到穩定平滑的液體,對於快速移動的液體也很適合。以下您可以指定計算平流的演算法

1. Classic (Semi-Lagrangian)經典法 / 半拉格朗日法    這個方法對於液體與煙都很適合,具有好的穩定性。唯一可以用在靜態液體的方法,在某些狀況下,液體還會增加或是減少體積,,當這樣的問題發生時,就應該增加Steps per frame (SPF) 如此可以維持住體積。
(注:請參考Wikipedia Semi-Lagrangian scheme)

2. Slow moving 緩慢移動  這個方法是Semi-Lagrangian的修改版,針對緩慢移動的液體最佳化,避免細節遺失,模糊化。

3. Forward transfer 正向轉移 具有好的守恆特質,但是跟經典法比較穩定性較差,容易產生十字狀的錯誤,或是在模擬液體時在水下容易產生空洞。

4. Multi-pass  多個pass 這個較少耗散的方法,能夠產生細緻的細節,可以讓煙的邊界很銳利。相較於其他方法,很適合用在大尺度的爆炸,或是薄紗式的煙霧或是火山岩流,或是其他需要很銳利的流體的狀況。


Steps per frame 決定每個frame進行多少次的平流運算,數值一代表每個frame只計算一次平流,這個數值可以小於一 。建議您盡可能使用整數。當對移動迅速的物件模擬時,你必須使用較高的SPF,否則結果會產生顆粒狀的結果、閃爍的液體表面...等等問題。越高的SPF,會以線性的方式減少效能。如果你增加兩倍的SPF那麼模擬速度就會變成兩倍慢,但是品質並不會與SPF呈現縣性關係。每次的模擬step都會抹滅細節,因此你必須要盡可能地減少SPF 隱藏上述的錯誤。如果SPF低於一,那就是每幾個frame才計算一次平流,所以其餘的frame只會進行部分的平流計算,到達新的位置不會失去細節。當你使用低於一的SPF,流體可能會在完成平流的那個frame會改變流體的方向,這跟你流體運動類型有關,這就是為何SPF小於一只用在非常緩慢的狀況之下。

Particle resimulation 粒子重新計算
勾選粒子重新計算,這個選項是當你對粒子行為滿意後,但是你喜歡改變泡沫或是水花。重新模擬粒子並不會產生一模一樣的結果,因為中間態的液體的遺失。建議的使用方式是進行液體的模擬,然後多次重新模擬粒子直到達到想要的數量與行為。

Sharpness銳利化 液體空氣介面的銳利化,越大的數值會產生細緻的細節,更好的液體行為,但是某些狀況在算圖的時候會看到grid cell。 越低的數值產生越平滑的液體表面,但是液體會失去其表面,變得更氣態。這個選項當你勾選Strong surface mode便會自動失效。

Viscosity黏度 液體的黏度就是其厚度 數值越高就需要花越多時間計算



Non-Newtonian 非牛頓流體 這個參數會影響黏度,會根據液體的黏度做修改。為何要引進這個參數? 因為黏度與wetting之間的衝突,越高的黏度會讓wetting效果變差,這不是程式的錯誤 ,真實世界的液體就是如此表現的。例如如果你需要讓巧克力覆蓋在餅乾上你需要高的黏度才能讓巧克力產生卷曲的運動,但另一方面你需要巧克力覆蓋整個餅乾而不產生粗糙的洞然而當黏度高的時候巧克力很可能不會在餅乾上面形成薄的層。這時這個參數就有用了,讓你可以產生美麗的,曲線的層,穩定地包覆餅乾,且無損品質。這個非牛頓黏度在靜止的液體區域減少了黏度,因次可以讓巧克力包覆整個表面。 (請參考Wikipedia)



Surface tension表面張力 這個力是根據液體表面的曲度產生,這對粘性的模擬很重要(蜂蜜、 奶油等等)

Drying time 乾燥時間 液體蒸發所需的時間

Wetting 當勾選這個選項 液體會在表面形成痕跡,然後緩慢地消失

Static surface correction靜態表面修正 用來避免緩慢移動或是靜態液體表面的粗糙,當啟動這個選項,每個模擬循環會小於單一個cell。表面處理會採用較少的銳利度。

Strong surface mode 這個選項會抑制grid的錯誤,但是液體會變得比較油滑。

Liquid-like 類似液體的 這個參數跟泡沫的B2B互動是一樣的意思。當這個數值不是零時,泡沫只能夠連接在一起 ,就像液體一般。數值越大,就需要越大的加速度打斷連接,如同B2B interaction, the conservation quality, and the viscosity這些參數一樣,這個參數越大,就會線性地增加運算時間。

If not solid如果不是實體  指定處理物件的方式讓它不是障礙物,如果物件是粒子會被視為非實體儘管具有實體的參數。

Inject注入 物件產生流體注入到模擬中對於粒子流體是從粒子的位置注射對於幾合體 流體是注射到內部體積當啟用這模式時,Discharge参数用来指定注射入的體積。

Brush 筆刷 物件更新流體的參數緩慢地帶入指定的數值Discharge會指定轉換的速度。

(譯者注:關於Inject與Brush這兩個參數是控制流體自物件(模型)發射的方式,官方說明文件寫的非常技術性,並不容易理解意義,個人覺得應該要重寫,譯者的理解是Brush相當於Realflow中的Fill Object,總之這個參數的名稱取的並不好)

Solid object 實體物件 如果這個參數沒有勾選物件就不會物理上的互動。但是仍然能做為來源或是吸引物。

Clear inside 清除內部 如果勾選此選項物件的內部會被清除。

Animated vertices 動態的點 當物件具有動態必須要對流體產生鄉對應的力如果你不需要就取消勾選此選項。(譯者注:寫的太技術性了,這個參數應該是針對帶skin的物件,vertex有變動的物件上,例如人物角色)

Velocity multiplier  速度加乘 這個選項讓你控制移動的物件對於流體的影響數值越大,流體的反應就越大。


[相關資訊]
Phoenix FD 2.2 新增功能介紹

fluid dynamics in CG 流體力學講座

No comments: