Showing posts with label Krakatoa. Show all posts
Showing posts with label Krakatoa. Show all posts
2015/10/05
2013/02/14
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/04/24
Krakatoa 2.0 全速前進!

這篇是由Maxscript大師Bobo在祂的部落格發表關於新版的Krakatoa 2.0的效能提升, 由於不是正式的產品文所以比較口語 (比較難翻譯), 又提到很多數字(million, billion)加上邏輯性的段落, 增加了一點翻譯的困難度. 後段感覺是在替Fusion-io打廣告, 不過, 未來硬體速度絕對是CG特效的一個關鍵 (其實現在就是這樣). 到時後用固態硬碟做特效的時候, 應該會變得更有趣~
Enoy!
------以下為翻譯-----
原文網址點這裡
作者: BORISLAV PETROV (Bobo)
譯者: Hammer Chen
全速前進
發現我有好一陣子沒貼文了, 在Frost, Krakatoa's BFF發片前也沒有發文, 之前在拉斯維加斯待了至少四天, 展示Deadline, Krakatoa與Frost給大家看, 我想現在是寫寫關於未來發展的好時機...
你應該還記得我之前寫的: "多快才算快?" 關於Krakatoa 1.6, 那次的升級還不太可能會有明顯的效能躍進. 這樣想是沒錯,, 我也有數據支持這種說法 事實上, 下一版的Krakatoa會比從1.6到1.5的速度提升相比要多很多!
產生分割並載入PRT序列檔案, 是Krakatoa標準作業流程, 傳統上載入粒子的時間大約是算圖時間的一半. 有幾點因素會影響載入的速度: 一是硬碟的速度 (如果檔案存在網路硬碟), 二是網路傳輸速度 CPU的讀取資料的速度, 與將解壓縮的資料串流道記憶體的速度, 還有其它操作會影響到粒子載入速度, 如MagmaFlow與 Material evaluation, 或是形變與culling都會影響. 在以前, 後者的操作慢慢都支援多核心的計算,了 但是起始載入的動作還是只有兩核心的計算而已, 而且通常只會讓單核滿速.
現在不再有這個問題啦! 我很高興來測Krakatoa 2.0的alpha效能如何, 在不同的電腦配備與不同的硬碟資料量, 為了要測載入速度, 我先做了一個長寬高100的box 轉換成PRT Volume,, 然後分割 儲存到硬碟中分成100個分割組. 每一個分割都有一百萬個粒子, 請注意! 要載入每個有一千萬個粒子, 總共有10個分割檔, 這樣會產生多的開銷, 或者也可以一個分割檔, 包含了一億個粒子, 後者會比較快, 但是我想要做出比較最糟糕的狀況, 因為Krakatoa會受限於3dsmax本身, 而且這樣的測試方法還有個優點, 就是可以產生很多計算量讓每個CPU核心都能工作. 為了要模擬出一般的狀況, 我採用預設的頻道輸出, 位置, 速度, 法線, 顏色, 密度與ID. 縱使我平常不開速度或是ID這通道, 接著我產生一個PRT Loader, 載入100個分割, 放一盞spotlight.
到了實測階段, 首先我用了比較舊的電腦來測 (這台我們用在拉斯維加斯的NAB產展示Thinkbox功能, 配備是dual Intel Core Duo, 也就是四核心, 沒有Hyperthreading). 這台有一個7200 轉的硬碟, 兩個10000 轉的硬碟, 一個SSD硬碟, 還有一個Fusion-io卡 (固態硬碟). 這些硬碟都接在同一部電腦中, 這樣我就可以找到不同的儲存媒體對這個新軟體有怎樣不同的效應.
為了比較差異, 我先用了1.6.1版, 結果花了57.3秒載入一億個粒子, 花了兩分46秒算圖. 不管我用哪種硬碟都一樣, 因為載入的速度取決於PRT壓縮檔的核心讀取速度.
如果我用新版的Krakatoa 自7200轉的硬碟載入, 則花了38.2秒, 總算圖時間為兩分29秒. 這樣的速度提升不是很令人激賞, 但是有達到硬碟的物理極限了, 因為已經達到CPU存取的瓶頸了. 例如你有四核心 4線程(threads)的CPU同時讀取4個PRT串流資料, 硬碟沒有辦法跟得上CPU的速度!
而從兩個10000轉速的硬碟, 在硬碟的頻寬達到最大限度之前, 四核心的CPU才達到80%的運轉率而已. 測試載入一億個粒子時, 整個載入時間降到了16.1秒!相當棒! 當然囉, 如果用固態硬碟的話預期會有更高效能... 真的耶! 同樣的測試用固態硬碟載入時間僅花了11.2秒, 算圖時間為1分49.96秒, 而且四核心的CPU都完全滿載了. 如果我用更快的Fusion-io card進行實驗, 結果是跟故態硬碟一樣的載入時間, 一樣的算圖. 這樣的結果證明了我們達到了CPU的瓶頸(譯者註: CPU可以完全發揮效能的意思).
很感謝Fusion-io在NAB也有展覽, 我有機會用到八核心的電腦來測試水特效 直覺告訴我 CPU核心達兩倍時, 載入時間應該可以減為一半. 所以當我'載入1億個粒子, 才花六秒就載入檔案, 而算圖才花52秒, 我一點也不意外! 幸還是不幸, 所有八核心的CPU這時候都完全滿載了, 現在整個狀況反過來了---是CPU變成運算的限制, 而不是硬碟速度. 這樣個結果讓我更想用16或是32核心的電腦來看看Funsion-io固態硬碟真的能把Krakatoa發揮到怎樣的狀況?!
我的直覺是應該可以讓載入時間降到3秒 甚至更少, 可是當我真的用16或是32核心的電腦測試效能時, 還是可以接受結果啦. 照理來說, 好的SSD硬碟應該也可以跟得上8核心的電腦, 達到6秒的載入時間, 所以你不需要花買一部車的錢就可以達到好的效能.
新版的Krakatoa有幾個地方有加強效能, 用我家裡面的i7 quadcore電腦來測試 如閃電般快速地, 載入一億個粒子由舊版的12秒降到8秒, 而drawing時間由5秒降到4秒. 我的電腦不是很適合拿來做測試, 因為我的硬碟很慢, 所以你可以想像, 如果是用最新的電腦配備, 有很多的CPU核心, 有快速的SSD硬碟Krakatoa真的會在今年下半年飛起來呢!
當然, 這只是新版的Krakatoa牛刀小試而已, 等著看今年的Siggraph吧, 一定會很令人興奮! 至少我會很興奮啦...
---翻譯完畢---
[推薦文章]
Subscribe to:
Posts (Atom)