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一樣的算圖效果.

[相關文章]

2011/07/04

Krakatoa的密度, 陰影與衰減

翻譯:Hammer Chen

Krakatoa是套volumetric renderer, 通常不會拿它用在渲染一般模型. 因此, 在使用這個外掛時也會有不同工作流程.

要知道, 當你想要渲染由粒子所形成的模型時. 因為粒子在表面的位置多少會共平面, 而且粒子本身沒有厚度, 這會導致進行光照與自身陰影計算的時候產生詭異的圖案---摩爾紋(moire effects). 這種情形發生是因為, 模型剛好就位於光源與陰影之間, 而軟體本身(3ds max)的精度只能判斷到在光照面與陰影面選邊站. 理論上, 由粒子構成的面, 它既不屬於光照面, 也不屬於陰影面. 但實際上渲染器在算圖時會選邊站, 而這種選擇是根據某種數字規則(numeric pattern), 這導致摩爾紋的產生!


摩爾紋常見於條紋圖案 (例如襯衫)透過電腦像素顯示時的花紋

而當粒子構成的點雲具有厚度時, 光線透過粒子得強度會根據粒子密度而減弱, 這樣當光線穿透粒子層時, 光線會減弱, 越往深入 越減弱, 最後光線會完全消失. 這樣就會產生很漂亮的SSS光線散射效果, 這也就是我們想要得到的效果. 因為真實物理世界的狀況就是這樣的, 當光線透過小分子構成的東西, 如煙塵或是雲就會發生這種現象. 遺憾的是, 目前版本的Krakatoa, 光線透過粒子時並不會有散射現象, 光線在粒子雲中只會直線前進.

而粒子的密度會受到很多因子影響 通常 預設的粒子密度=1.0 而密度會受到影響:
  • Node的Visibility Track(可視度) 0.0-1.0
  • 材質的不透明度, (除非你沒勾選Krakatoa Material with Multiply Density這個選項)
  • 在Krakatoa GUI裡設定的Global Particle Density factor. 這個參數可以跟Lighting and the Final pass相同或是不同.
要知道Krakatoa會隨著particle count 粒子數量來改變Global Particle Density, 而在某種程度內, 你可以修改per-particle density, 以達到在不同的粒子數量, 可是卻有相同的效果. 因此, 使用者可以先用少的粒子數量來做測試算圖, 來找到適合你的Global Particle Density, 接著增加粒子數量, 以追求更細緻但是又有效率的結果.

還有一點技巧也要知道, 你算圖的解析度也會影響到密度. Krakatoa會把每顆粒子算成單一個像素, 因此算大圖就會導致粒子好像比較鬆散, 如果你鏡頭拉遠的話, 粒子看起來密度又變高了. 當然這跟真實世界的狀況還蠻符合的, 如果你在沙塵暴裡面, 你會看到很多顆粒, 飛來飛去, 中間的間距很大. 但是當你從遠方看沙塵暴的時候, 看起來就會很扎實.

用粒子構成的模型表面所造成的摩爾紋要怎樣修正?
這裡範例是用10節的Geospher, 然後用一百萬個粒子充滿表面, 而且沒有做偏移的動作(offset) 一盞direct light用來做照明.

這張的密度是5.0 * 10^-1 (在Krakatoa GUI 裡數值是 5.0與 -1 , 代表0.5):
如同預期的, 這樣產生很嚴重的摩爾紋 ,這是因為粒子介於光照面與陰暗面產生的自身陰影, 而面光面的粒子雲照的很陰暗, 因為粒子密度太高了, 而且粒子的自身陰影害他們自己變得很黑暗, 沒有照到光.

把數值減少到0.05 來減少密度, 減低了摩爾紋的問題, 可是沒有完全解決, 因為當粒子密度減少時 陰影密度也變少. 因此, 光線並沒有完全地削減掉, 而當粒子被他們自己的陰影投射到得時候, 還是受到這些陰影影響.

把密度減少到0.005時, 就完全消除摩爾紋了, 可是缺點是, 粒子就沒有陰影的效果. 而背光面的粒子幾乎跟受光面的粒子一樣量, 因為陰影的密度太弱了.

解決之道
與其把所有的粒子都擺放在同一個表面上, 不如做一點偏移, 你可以到Particle Flow > Position Object operator 把Offset偏移量設定為-1/1 這樣再用0.005的密度再算一次.

這樣的話, 光線還是會完全穿透粒子雲 ,可是會看到很明顯的薄殼. 這時候我們把密度提升到0.05 就得到令人滿意的結果!

若是把密度再提升到0.5 沒辦法提昇品質 .
所以如果算圖解析度為320x240, 計算一百萬個粒子, 密度為0.05, 可以得到可接受的結果.

分別控制Lighting Pass與密度
Krakatoa GUI讓你可以分別控制粒子密度, 與final pass rendering.

這裡的設定是密度為0.05, 而Final pass是用0.5 讓陰影比較不密, 而粒子本身還是很不透光, 這樣同時讓粒子雲有厚重感, 當密度設為0.5 而照明強度設為0.05 就可以達成.

即使Lighting pass用較少的密度, 有會造成光線穿透表面, 會把球的背面照明, 儘管粒子雲很密.
類似的效果也可以global density設為0.5, 這樣會減低Shadow Density, 這樣你可以對不同的光源微調光線與陰影.

光線透過厚重的粒子雲的衰減設定
接著我們來看當光線在一百萬個粒子中的衰減效果, 與其用Geosphere的體積整個填滿 這樣算圖會太久, 可以改用Position Icon operator, 改用Sphere shape當做粒子發射來源 ,採用跟Geosphere同樣的半徑.
左圖顯示密度為0.5的效果, 如果用Clipping Plane的方式把前半部切掉. 我們可以觀察到光線怎樣穿透的, 這裡顯示光線進入粒子雲以後, 很快地衰減了.

把密度減少到0.05 得到以上結果

把密度減少到0.005時 讓光線穿透過整個粒子雲 衰減的效果很微弱

----翻譯完畢----

[相關文章]