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時 讓光線穿透過整個粒子雲 衰減的效果很微弱

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

[相關文章]

2011/06/26

Tutorial pages 新增精選文頁面


自2005年成立至今也度過了六年了, 這六年來發表過許多文章, 在各位網友的支持下, 也見證了本站的成長. 一直以來, 站長就希望能有像Peter Draper或是Neil Blevins那樣的教學目錄頁, 在累積了上百篇文章的今天, 我想是時候了, 把這些文章中挑選出來, 方便各位快速瀏覽與選擇. 希望對各位有幫助, 也感謝各位多年來的支持與鼓勵!

教學目錄頁就在頁面上方的Tutorial精選文, 點選這裡就可以看到教學目錄頁.

Enjoy,

Hammer Chen

2011/06/17

Afterburn 4.0參數使用技巧


Afterburn是年代很久遠的外掛, 早在布魯斯威力還沒老之前演的世界末日電影裡面有用到的, 那時候Afterburn還是尖端科技, 跨時代的發明. 說起來這套外掛也算老人外掛了, 即便如此Sitni Sati公司還是持續地更新它, 代表它不是全然無用.

在某些情況下, Afterburn會比FumeFX更經濟, 更有效率. 拿濃煙來說吧, 用FumeFX可以做到非常寫實的滾滾濃煙, 動態阿, 透明度的細節阿, 都是Afternurn無法達成的; 可是這需要極大的代價:好幾G的快取檔, 長時間的算圖才能達成. 倘若是火箭筒的尾煙, 火山爆發的濃煙等這類的煙, 其實用Afterburn是相當經濟又實惠, 只要設定合宜, 效果也是可以十分寫實的. 如果是用在靜態圖稿, 更是相當合用.

這裡整理幾個關鍵的參數供各位參考:

Noise Type: 用Turbulent這種類型的noise最適合做煙霧

選擇了Turbulent還不夠, 還要將Levels設定夠高, 建議設為6

Shadow的類型也會影響到最終效果, 用ray traced的效果會比AB Shadow要好

可以設定可變的Density, 但是要注意密度越小, 算圖時間就會變得超級久. 這裡用Density=10效果就很不錯.

由於Afterburn與FumeFX這類的Volume rendering都是利用一種叫做Ray marching的計算技巧, 如上圖當光線透過雲層時, 把雲用固定的間隔切割成片來計算光影(橘色的線). 所以切割的距離越短, 效果會越寫實, 相對也會算圖越久.

因此當Step size設定的越小, 效果就會越寫實, 但是會算的很久, 這裡的測試用Step size=1就相當實用. step size用太大時, 計算的結果就會很奇怪.

堡爺的意見:"Step size 根據本人的經驗, Step size數值是以場景本身相對單位, 還有鏡頭距離來調整. 很容易被帳面數字欺騙, 0.1 不會比較慢, 1不會比較快~~是以物件單位, 以及鏡頭距離! Step size還是越小越好, 這點沒錯, 但是也是越暴力. 指是1這個預設值 ,如果當你攝影機是處在離AB很近的狀態下, 它就是一個很大的格~ 而當你拉遠的時候, 一就變成是很暴力的數值; 只是AfterBurn這, 需要以你的單位與鏡頭~~來取決那個1好不好用, 恰不恰當~"

想要表現濃煙之內透出火焰的效果, Afterburn是可以達到這樣的效果的, 只要透過Explode helper就可以. 這裡Color shift數值會影響火焰的分佈範圍.



[相關文章]

2011/06/02

FumeFX製作煙霧參數使用技巧


這篇譯自Jeff Lim的文章. 每的測試參數都有對應影片, 而9大結論更是字字珠磯. 個人的心得是, 在用FumeFX作煙的時候採用以下參數較易成功:

Gravity=0~0.25
timescale=2~4 (越高很容易產生細節, 這個參數效果很明顯)
Vorticity=0.25~0.5 (越高會有越多細節, 但是如果等於1時會太過鬆散)
Advetion Stride=0.1~0.5 (建議用0.5)

自己用這樣的參數作的測試影片:



作者Jeff Lim十分用心, 建議到他的部落格賞文.

------以下為翻譯------
作者:Jeff Lim

靈感來自電影2012, 我測試了FumeFX (1.x)各種參數影響煙的翻滾.

以下場景設定是把gravity指向畫面的右方, 如此可以產生煙塵翻滾的效果.
Grid Size設定在300x300x300
Simple Src 把Smoke Channel emitting Fuel關閉
“Fuel Creates Smoke”選項打鉤

(點擊以下個標題可看效果影片)
煙 密度與擴散
高的擴散會產生比較軟, 蓬鬆的煙
高的密度似乎會影響煙的移動

煙 密度與重力
高密度的煙會避免煙的擴張

在小的SystemScale環境, 要產生有細節的煙就必須要用小的Grid Spacing

Grid Spacing & Advection Stride
Grid Spacing對水平對流似乎沒有太大影響

為了要有很多的細節, 最好要養成高Time Scale數值的習慣

Grid Spacing & Vorticity把渦度提高會有較多的細節
低的渦度會產生比較平滑的煙

在本案例裡面, 不建議你把渦度設為1.0, 因為這樣會讓你的煙的細節顯示不出來

時間尺度對水平對流沒有太大影響

Time Scale對場景尺度感很有貢獻

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

[相關文章]

2011/05/29

3ds max 2012: 永別了Reactor!

(本篇譯自http://www.offsetnull.com

最近從3ds Max 2011 升級到3ds Max 2012 ,花很多時間在學新功能. 因為我對物理模擬情有獨鍾, 對新的MassFX功能很感興趣. 令人難過的是, Autodesk 把Reactor 拿掉了! 這個物理引擎已經內建在3ds Max裡面好幾年了, 跟Reactor不同, MassFX無法模擬軟體動力學(soft-body dynamics), 布料, 水,ragdolls...等等功能. 目前只能模擬剛體而已.

那又怎樣呢? 對於新手, 如果你在舊版裡面作的Reactor場景沒辦法在3ds Max 2012裡面用, 它會跳出"遺失外掛"的訊息. 用戶還會失去Reactor的軟體動力, 繩索, 布料與水...等等. 如上表, 你可看到3ds Max 2012用戶除了剛體模擬會保留以外, 其他的模擬功能都會不見, 不再整合ragdoll進來, 沒辦法再做果凍模擬, 航行的船, 或是車輛模擬了! 這真是令人難過的日子阿! 請注意雖然動態的角色可以影響MassFX的剛體, 例如人去踢磚牆, 但是MassFX並沒辦法同時影響角色.

Reactor有沒有可能再回到3ds Max的懷抱? 令人難過的是, 不會了! 在3ds Max用戶群的新增功能網頁裡面Ken Pimentel(Autodesk傳媒娛樂的總監)說道:

Reactor不能再回來了! 因此, 你們最好把票投到別的新增功能, 不像Reactor的狀況, Autodesk團隊現在是全心全意地在PhysX與APEX團隊裡面合作 .我期望各位在接下來的幾年內看到我們這樣作的價值!

移掉Reactor的這項決策是根據客戶意見回報(Customer Involvement Program (CIP))的統計資料而來, 根據統計, 只有3%的用戶還有在用Reactor. 我現在很恨我自己, 當初為什麼沒有投Reactor一票 ,但是我現在很希望這個功能不會被閹割掉!

還不到萬念俱灰的程度, Cloth modifier用還模擬布料還不錯, Flex也可以用來模擬軟體與水波紋 , 而這兩個系統也當可以模擬繩索. 接下來的幾週, 我會寫一些關於這些功能的教學, 歡迎寫信給我如果你對某個教學感興趣. 請看這裡用Flex modifier作水波效果, 與浮力特效.

你也可以連上http://developer.nvidia.com/physx-dcc ,註冊申請PhysX plugin, 應該很快就能支援到3ds Max 2012.

關於模擬水與海洋, 你可以用Houdini Ocean Toolkit for 3dsmax, 是由Guillaume Plourde先生所改寫的. 這個工具是根據Jerry Tessendorf先生在2004年的SIGGRAPH所發表的論文而來.

[相關文章]

2011/05/27

Making of Twister with PhoenixFD in 3ds max


In this video tutorial I am going to demonstrate creating a twister with PhoenixFD in 3ds max 2011. This continue my PhoenixFD series, will be focus on the spiral gravity force. If you find this tutorial too hard, please read my previous PhoenixFD tutorial.

2011/05/23

Thinking Particles碰撞偵測注意事項


如果你正在製作有鐵鍊的案子, 在試過Rayfire, Reactor, NVidia PhysX等方案後, 最後發現只有Thinking Particles能夠模擬鐵鍊動畫的話, 那你應該要讀這篇文章.

既然是注意事項, 就直接跳到重點. 所有剛體都要給予重力才會有物理寫實的結果. 在TP裡面你可以用max標準的gravity或是用一個向量做出重力的效果.

如上圖:方法一 你可以用stdForce, activate場景中的gravity; 方法二是先做一個Force oprator再接上一個往下的向量. 第二個方法似乎比較笨, 比較明顯的優點是不需要在場景中拉一個gravity force, 另一個優點是重力可以是對速度增加數值, 或是相乘數值(如果初速度等於零, 計算就會錯誤)但是其實用向量的方法的優點會比你預期的還要更重要!


首先是可以控制strength強度, 這沒有什麼. 可以有variation變化度, 這就厲害了, 一條直挺挺的鐵鍊每個鐵鍊可以對重力有不同反應, 模擬結果會更加自然.

綠色的小點表示voxel

第二個優點就非常重要了, 那就是關於collision leak 剛體間沒有正確的碰撞導致鐵鍊斷掉. 若是忽略重力這件事, 要避免collision leak, 1)可以增加sub-frame的數目 (讓快速移動的物件可以計算更多的內差位置, 增加碰撞的成功機會 2)增加voxel數值, 同樣可以讓鐵鍊更容易碰撞 3)修改模型的密度, 讓網格分布更加平均更加緊密.

答案揭曉, subframe, voxel與模型這三個因子都沒有重力的影響要重要. 而重力的設定務必要使用向量加Force Operator的串法, 這裡引用Bobo在CGTALK的一句話

請記住, 外力要影響粒子需要花費一點時間 (因為外力影響的是速度, 速度進而影響粒子的位置). 預設值的狀況, 外力的強度往往對那些速度很小的物件影響力不足.

我通常會把Influence %設為10000.0 另外加一個Wind將其Turbulence設為1.0 Frequency 0.01 and Scale 1.0 外加 Drag with 5% for X,Y and Z 最後的結果就會很隨機.
換句話說當鐵鍊物件起始速度為零時, 標準的gravity根本就對鐵鍊沒有影響力 (這時候你會以為重力的強度不夠, 或是認為模擬的結果不夠真實), 問題就在用標準的gravity的串法有根本上的問題, 它可能是把重力與速度相乘, 而不是真正把重力作用到鐵鍊本身. 因此場景中已經有設key的鐵鍊本身有初速度, 它會拖著沒有速度的鐵鍊, 而沒有速度的鐵鍊是在被拖動的時候才真正被重力所影響, 造成鐵鍊之間的模型交錯, 最後就發生collision leak的問題了.

[相關文章]

2011/05/10

Smoke, fire and explosion火焰,煙霧,爆破特效參考


時候我們在調特效的時候追求寫實的效果, 但是什麼是真實呢? 像FumeFX這種有上百個參數如果隨意排列組合調出來大概也調不出來, 所以還是要以真實的照片當作參考; 可是有時候並不是軟體使用的人笨, 而是軟體本身的侷限就無法達到完全真實.

如果仔細查看真實的火焰, 煙霧或是爆炸的照片就會發現, 真實世界裡面的特效都具有無窮鏡的細節, 這些細節幾乎是無法用CG電腦模擬出來的; 或者是說, 為了追求那樣的細節, 必須要花費上百G甚至上千T的快取資料來產生該有的細節.

以實用的角度來說, 只要達到讓人信服的細節就夠了吧. 例如上圖筆者以約2GB的cache用PhoenixFD產生的煙霧, 爆炸. 要有更多細節其實也不是不行, 但是需要更多的快取, 更久的模擬時間, 考驗大家的耐心了~

這邊整理了收集的真實煙霧, 火焰, 爆破的照片當作日後製作上的參考:

Smoke 煙霧























fire 火焰



















explosion爆破



























FumeFX做出的效果










Phoenix FD做出的效果



[相關文章]