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

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

[相關文章]

2 comments:

Sai said...

讚~感謝分享

hows said...

thank ur translation~~ help alot!!