2012/10/13

用VRay算出不閃爍的動畫



作者:MintViz
翻譯:Hammer Chen

當使用GI (Global illumination)在算動畫的時候, 由於GI是依據快取的採樣(caching samples), 也因此會產生閃爍的問題. 原因是每個frame的採樣位置並不同, 造成每個frame的照明會有差異. 為了解決這個問題, 你可以先用預先計算的採樣點(pre-calculated solution) 這些合併的採樣點用來計算每一個frame. 你可以對兩個GI方法都做預先計算, 通常是irradiance map light cache. 對irradiance map來說, 你可以用multiframe incremental mode模式, 對light cache來說, 你可以用fly-through mode模式.
irradiance map 與 light cache兩者個結合運算對於場景中沒有物件移動的動畫很有效, 但這種做法只適用於攝影機飛越(fly-through)的動畫.



如果你對在特定位置的特定物件預先計算快取, 如果物件移動新的座標, 在新的位置沒有物件的快取採樣, 你在算圖的時候就會看到雜點. 因此這種把多個frame合併的方法雖然很快速, 跟把每個shading point都計算的brute force相比較要快了很多, brute force的效果很精確, 而且不會有閃順的問題, 但是會計算很慢.

為了要避免閃爍, Vray SP2版提供了隨著時間的irradiance maps內差計算, 主要的功能是要降低使用irradiance map算GI的時候產生的閃爍問題, 減少閃爍的程度是要靠interpolation frames這個參數所決定的.

使用攝影機路徑(camera path)的參數
雖然隨著時間對irradiance maps進行內差可以解決大部分的閃爍問題, 但是攝影機本身還是會引起閃爍, 這是因為攝影機會隨著每個frame在移動, 每個frame射出的ray會不同. 到了VRay SP3版本, 多了一個參數叫做camera path. 這個參數會改變ray自攝影機射出的方式, 它會從整個攝影機的路徑射出ray, 因此, 你每個frame射出的ray就相同了!

動畫prepass與動畫渲染模式
這個方法分成兩階段: 首先, 在prepass模式下, 每個frame都會計算個別的irradiance map ; 第二階段是用動畫模式把irradiance map的效果渲染出來(你不需要再設定secondary GI 因為這在第一階段已經完成了)

動畫prepass的流程
Irradiance map
勾選使用camera path並將模式設定為animation prepass, 按下儲存指定你irradiance map儲存路徑, 勾選auto save.

當瀏覽的時候, 請確認在irradiance map存放的地方已經存有irradiance map的檔案, 這點很重要.


Light cache
在Light cache選單裡面, 勾選use camera path, 模式設定為single frame
或者, 你可以預先計算light cache, 這有可能可以減少一些算圖時間.

很重要, 一旦prepass算完以後, 你就必須要去設定irradiance maps之間混合的程度. 所以在算圖之前, 因為這會影響到動畫長度範圍. 例如, 如果你把混合(blend)設為 2 ,這個意思是, 它會把該frame的前兩個與後兩個frame做混合. 例如如果是對frame 5來說, 它就會混合3,4,5,6,7 5這幾個frame. 如果是Frame 6來說, 它就會混合4,5,6,7,8 依此類推.


這個混合的數值越高就越不容易閃爍 但同時也會增加算圖時間 如果你把這個數值調太高的話 結果會過於平滑 細節會不見 因此 對第0個frame來說 他前面必須還要有frame才能正確地混合 否則因為frame 0混合的frame數目比其他的frame 這會造成不一致性 請把你的動畫起始frame更改為-2 這樣 frame 0就可以跟–2,-1,0,1,2 做混合 同理可證 如果最後一個frame是100 請增加frame到102

動畫算圖的流程
1. Irradiance map
一旦計算完了prepass, 你會發現採樣的訊息, 這會告訴你採樣已經成功地儲存了. 你可以到檔案儲存的地方看看動畫範圍的採樣是否都存到了


切換到動畫算圖模式, 會跳出訊息要你選取檔案, 你必須要選取第一個快取檔案 (沒有數字的那一個) 讀取這個檔案會自動載入動畫範圍內所有的irradiance map.

在irradiance map參數裡面, 你會發現interp. Frames這個參數不再是顯示灰色的了. 這個參數會決定多少數量的frame會被模糊化, 動畫範圍是-2到102, 所以用2 這個數值是正確的. 如果你希望混合4個frame 就把參數設為4, 但切記要把動畫時間延長. Interp. Samples內插採樣控制了irradiance map之間內差計算的數量.
因為我們每個frame都會計算好幾個irradiance maps (因為計算內插) 所以沒有必要把這個數值設定為20, 這麼高的數值一定會增加很多算圖時間. 這個數值要看你的需求, 可以試著用5這個數值, 測試看看滿不滿意. 根據經驗, 大部分的室內動畫需要的數值為10-12, 是否用攝影機路徑(Use camera path)不會有很大影響, 所以在這裡把攝影機路徑勾選會不勾選都沒關係.


2. Light cache
看你的流程, 可以有兩種選項: (1)如果你採用light cache算動畫而且勾選了glossy rays, 你就必須要把secondary GI設定為light cache, 設定在single frame模式, 勾選camera path (2) 如果你沒有勾選use light cache for glossy rays 那就請把secondary GI取消勾選, 只用irradiance map作為primary GI engine就好, 為什麼可以把secondary GI關閉呢? 因為secondary GI的資料已經被儲存在irradiance map prepass裡面了!


算圖
把動畫範圍改成0-100, 你再也不需要去算範圍外的frame了, 因為你不需要為了prepass的混合而擴充動畫範圍.

最後會算出沒有閃爍的動畫~

[相關資訊]


2 comments:

十月 said...

很有用!另外在存vrmap的時侯,可以先把解析度調小,輸出動畫時再把解析度調回來即可,可以減少時間

十月 said...

呃....這個好像只能用在lightcache的vrlmap上....我試了一下不行弄在vrmap...哇哈哈自婊了..