2011/08/20

Large scale smoke with Fumefx的設定技巧



Large scale smoke直譯為大尺度的煙霧, 指的就是像這些很濃很濃的煙霧, 或是爆炸含有火焰的那種煙霧. 這種煙霧在製作上面有些技巧, 過去也是困擾筆者許久. 這裡分享一下FumeFX使用心得並作為日後使用的參數筆記.

先來回顧一下之前失敗的經驗吧!
首先看用FumFX的測試, 通常會做出來像這樣, 絲狀的煙霧感, 其實很容出來.

這是很認真要做出厚重的煙, 它可以一開始很厚重, 但是過了幾個frame後就又變回絲狀感.

拿別人調好的Large scale smoke場景來用, 如果直接用的話當然可以做出來(但是要算很久), 自己降解析度的結果也就像這樣, 不甚理想.

如果不是像像絲狀的煙, 就會變得像棉花球的樣子, 真是兩個極端阿~

如果是像這樣的話, 則是完全失敗的, 完全沒有厚重感. 這是初學者幼稚園般的程度XD. 不過話說回來, 某些狀況這種輕煙十分合適.

接著, 筆者就把希望寄託在同家公司的產品---Afterburn身上, 以下是測試效果:

Afterburn的某些參數特性, 其實可以調出相當不錯的效果, 比說說這個地雷爆炸的煙.

Afterburn的缺點是動態會比較不自然, 畢竟它的動態是靠粒子來驅動的. 用在靜態圖像有兼顧速度與品質的優勢.

細節畢竟是有, 但是還是不很自然

像這種濃煙效果, 用Afterburn頗為合適

後來ChaosGroup公司推出了新的煙霧火焰外掛Phoenix FD, 筆者跳下去給它嘗試一下:
剛開始對參數不熟悉, 請問這是發霉的香菇嗎?

失敗的核爆效果

嗯, 有那麼一點樣子了, Phoenix FD有潛力

用Phoenix FD做濃煙效果, 跟FumeFX的感覺不太一樣, 有點類似Afterburn的僵硬感.

厚重有達到, 還是很僵硬阿

如果煙弄的比較淡, 它的細節就沒有出來.


不適合用在濃煙, 用在爆破卻十分合適, 讚喔~ 而且是跟VRay同一家公司出品, 相容性很高.

跟FumeFX相比, 因為Phoenix FD 有一部分的細節要靠Displacement, 所以往往會渲染很久.

測試的後期, 效果已經相當理想了!


這樣的效果已經可以稱得上是Large scale smoke的要求了!

做一點不同的變化



最後來個橫向煙霧的效果, 細節, 寫實度都有達到了, 唯一缺點是, 這張渲染要八分鐘呀.

直到最近由友人Slayer提供做好的Large scale smoke場景檔, 經過筆者最佳化過後, 最後算出這樣的效果:


(鋼彈模型由阿德提供)

-----看完了以上艱辛的測試過程, 我們進入正題-----

怎樣做出厚重又帶有細節的濃煙?

打開3ds max首先要注意的就是尺度, 既然是大尺度一定是以公尺為範圍. 尺度不對自然就很難模擬出來想要的效果.

再來直接進入到FumeFX的設定

勾選Adaptive, 調高Sensitivity, 這樣會比較節省cache大小. Exporting Channels有Fuel與Smoke. 這樣的解析度, 600張frame總共要花約6個小時. 平均一個小時算100張. 如果算動畫要模擬的話, 大概就要晚上睡覺的時候來算吧!

說到Simulation的部份, 把Maximum iteration 降到100. Time Scale與Gravity都調整到不合平常物理的高數值. 之前的"FumeFX製作煙霧參數使用技巧"有提到, 這兩個數值要提高, 細節才比較容易表現出來. 要注意的是Gravity這邊如果我們希望煙霧往橫向移動, 要另外添加FumeFX Gravity Vector才能控制往橫向移動. Vorticity則是渦度, 數值越高的話, 會產生比較多細節與絲狀的煙, 注意數值不能為1, 否則它會變到十分的粉狀.

Fuel燃料的模擬, 這邊箭頭所指是所有設定的最關鍵的參數. 簡單的說就是不要讓發射器(emitter)一開始就發射smoke, 而是讓燃料(fuel)達到它的燃點(Ignition), 經過燃燒(Burn)後, 再產生煙霧. 這是整個Large Scale Smoke設定的最重要觀念. 而這燒燃燃料隨之產生的煙濃度是由Smoke Density密度所決定, 設為25(高一點才會有濃煙的效果).

Smoke的 擴散(Diffusion)設為0, 目的是讓煙霧在飄散的過程時不要過為分散.

FumeFX算圖的部分
煙霧的不透明度(Opacity)設定為2.48, 曲線則是如圖設定. 勾選Cast Shadow與Receive Shadow. 把煙的顏色設為灰色(

Lighting照明設定
因為我都是用Scaline來算煙霧(因為比較快), 所以如果要有間接照明的話就要用補光的方式造假出來. 主光打一盞偏橘的Direct Light, 強度設為2; 另外一盞補光是Omni light顏色為淡藍色, 強度為0.3.

主光Directional Light設定

補光Omni Light設定

如圖, 補光就是要彌補主光照不到的陰暗面.

上面的算圖設定是針對沒有火焰(fire)的狀況, 如果有渲染火的部份, 筆者可能會用Mental Ray來處理, 因為MR會根據火焰來產生全局光照(GI)效果, 效果會比較寫實.

如果要渲染火焰, 把Fire選項打溝外, Opacity設定為0.305, 漸層設定為橘色, 暗紅色, 黑色, 黑色.

火焰透過煙霧的透光效果則是可以用Multiple Scattering的參數來處理
Smoke Strength設為0.1. Falloff越小則透光越明顯.

最後, Emitter的設定可以參考以下

而是實際在用Scaline算圖, 解析度為1280X720, 450個frame耗費了多少時間算圖呢?才花了75分鐘. 換句話說一個frame平均才花10秒而已, 夠快吧!

以上, 各位可以也來試試看~

------設定解說完畢-------



2011/07/11

Making of Fire Tornado with FumeFX in 3dsmax


Tutorial results:

In this quick video tutorial, we will create a fire tornado with Fumefx 2.0 in 3ds max 2011. The fire generate by Fumefx will be stir by Vortex force and the force is visualized by Forceviewer plugin (Click HERE to download).

Scene setup:
A vortex force put at top of the FumeFX grid. The Forceviewer is a free plugin can help us to visualized Vortex force. Two geospheres can make the fire more curly.

Parameters for the Vortex. With help of Force Viewer, you know what direction & strength generate by the Vortex. This will influence how the fire acting like a tornado. You can try those highlighted parameters.

ForceViewer: pick up the Vortex to visualize the force. The the X, Y, Z resolution as the image above.

FumeFX simulation: set those highlighted parameters.

FumeFX rendering: uncheck the Smoke and set Fire Gradient, color, Opacity as image above.

FumeFX obj/src: add Vortex001, FFX Simple Src and Geosphere.

Video tutorial (running time: 14 mins)
click HERE


[more tutorial]

2011/07/05

Krakatoa的兩種算圖模式:Particle與Voxel

電影 X-Men 2利用Krakatoa算出來的效果

翻譯: Hammer Chen

Krakatoa是一套volumetric粒子渲染器, 也是第一個實現讓粒子以像素的大小來進行高速細節算圖的外掛. 但其實在Krakatoa推出以前, 有另外一種作法可以渲染粒子, 用在電影超人再起(Superman Returns)裡面. 在場景裡面粒子在水晶中必須要進行光跡追蹤計算, 光跡追蹤計算極小的點, 是一項極為困難的工作, 必須要利用特殊的作法---稱為voxel grid計算法. 新版的Krakatoa 1.5.0 把當時電影裡的作法重新呈現, 用voxel grid來計算粒子, 這個方法有其優缺點, 請看以下:


優點
  • Voxel Rendering會產生實體的渲染效果, 不會像一般的點雲渲染出來容易出現的錯誤(例如摩爾紋). 只需要用較少的數量就能產生密度很高的點雲, 只要在每個voxel至少有一顆粒子, 而算出來的結果voxel之間不會有縫隙.
  • 渲染的細節與平滑度可以用voxel size與filter半徑來控制, 可以得到和預設的point rendering相當品質的渲染效果. 然而, 當voxel size設定太高, filter半徑太大時, 容易計算出模糊的結果.
  • 跟Point Rendering 比較起來, voxel rendering的方法比較適合多核心運算, 讓你更能享受到多核心CPU的優勢.
缺點
  • 至少在目前的版本 通常voxel rendering要比particle rendering算圖時間要更久.
  • 儘管算圖品質與細節很接近 point rendering 還是沒辦法達到跟particle rendering那樣一顆一顆粒子的感覺, 因此voxel rendering還是比較適合用來渲染雲, 煙與其他細節較少的自然現象; 而particle rendering就適合表現細砂, 塵土與泥沙.
Particle 與 Voxel Rendering的比較
如上圖, 你看到同樣的幾合體利用Krakatoa PRT Volume object充滿了粒子 而Voxel Length為0.5, 1, 2 與 3 第一排影像顯示Particle Rendering的效果, 當粒子密度減少時, 粒子的間距就變寬鬆了

上圖中顯示利用Voxel Rendering的效果, 而Voxel Size分別為0.5, 1, 2與 3 Filter Radius設定為1 (1代表沒有filter)

這個範例裡 當算圖的細節減小時Voxel Rendering方法算出來的密度還是可以維持住, 只是說整體而言變得比較模糊的粒子雲. 以Particle方法算圖時間分別為10.938 | 1.484 | 0.547 | 0.454秒
以Voxel的算圖時間分別為6.109 | 3.734 | 1.829 | 1.422秒

Voxel Rendering的參數設置
以下範例渲染兩萬顆粒子, 用兩盞燈照明, 白色光源在右, 藍色光源在左下.

左圖與右圖的密度分別為5.0/-1, 5.0/0.
算圖時間都是0.2秒

改變Voxel Size
上面三張圖顯示用5.0/-1密度 Voxel Filter Radius為1 而Voxel Size分別為0.5, 1.0 與 5.0來渲染

當voxel size等於0.5時, 算出來的結果十分接近particle rendering的效果. 因為在這個範例裡面,voxels十分接近particle的算圖顆粒大小, 但是就算圖時間上缺要花費很久.

當把voxel size增大時, 結果變得很平滑 而算圖時間也變短了
算圖是用Dual-Quadcore Xeon 2.5GHz的CPU 算圖時間分別為6.641 | 4.953 | 2.843秒

改變出圖大小
Voxel Rendering跟Particle Rendering的效能不同, 出圖大小對算圖時間有很大影響

當解析度比超過一個像素時 Voxel Renderer就必須要多計算像素

以下是用Voxel Sizes分別為0.5, 1, 2 與 5計算的結果, 但是用不同的解析度出圖Krakatoa會用接近線性的方式縮放. 實際上, 因為多核心計算的關係, 儘管解析度增大讓圖面積增加了四倍, 算圖時間還是少於原本的四倍, 通常是三倍多.

640x480 : 13.922 | 11.141| 3.484 | 2.578 秒.
1280x960 : 31.874 (2.289x) | 27.391 (2.458x) | 9.718 (2.789x) | 7.532 (2.921x)
2560x1920 : 103.078 (3.233x) | 90.890 (3.318x) | 33.906 (3.488x) | 27.015 (3.586x)

改變Voxel Filter Radius
上面三張圖顯示用密度為5.0/0 Voxel尺寸為5 但是Voxel Filter Radius分別為,2 和 5

當Voxel Filter增加時voxels變得越來越平滑, 導致計算結果越模糊, 而算圖時間也會拉長.算圖時間分別為2.843 | 3.656 | 7.294秒

Voxel Rendering 與 Particle Rendering
以下的BOX包含了一百萬個粒子 其中在Diffuse Map裡面用了Cellular Map 以Particle Mode算圖
第二排顯示一樣的粒子, 但是把Cellular Map放在Opacity Map裡面

第三排則是同時開啟Diffuse 與 Opacity Map
第四排則是一百萬個粒子分割成10個partition然後分別用Particle mode 與Voxel Mode兩種模式來算圖
如果是用Particle mode方法的算圖時間是2.687 | 2.703 | 2.797 | 26.421秒
用Voxel mode的算圖時間分別為8.829 | 8.782 | 8.86秒

經由這些比較, 你會發現一般來說Particle Rendering算圖比較快, 需要相當多數量的粒子才能維持跟Voxel Rendering一樣的密度. 某些情況下Voxel Rendering即便是用了較少的粒子, 還是能達到跟Particle Rendering一樣的算圖效果.

[相關文章]