2015/06/13

VRay render optimization 算圖最佳化


原文:V-RAY RENDER OPTIMIZATION
作者:Akin Bilgic
編譯:Hammer Chen

這篇譯自Akin Bilgic的大作。如果你喜歡原文請點這裡,在網頁的左下角『PAYPAL DONATION』捐獻鼓勵作者。這篇將V-Ray最佳化簡單地分成兩塊,一塊是由Image Sampler (一級採樣)所控制的幾何體、紋理與景深、動態模糊;另一塊是由 DMC Sampler(二級採樣)所控制的照明、 陰影、 全局照明、 反射、折射、次表面散射(SSS)。有個很重要的觀念,V-Ray內部有個公式會讓Image Sampler與 DMC Sampler之間會相互牽制(請見V-RAY DMC快速計算機)。在說明了幾個重要觀念後,作者提供了他的最佳化步驟,基本上這些步驟是將V-Ray的算圖功能都關掉,然後一個、一個開啟,個別去觀察雜訊是否減少到滿意的程度,利用render element來進行客觀地判斷。本篇為略譯,完整文章請見原文


= = = 以下為翻譯 = = =

深度說明VRay最佳化以取得最高品質又快速的算圖


本教學將介紹最佳化VRay算圖設定在最短算圖時間獲得最高品質。關於V-Ray的採樣方法有很多誤解,到底怎樣才是『最佳』設定? 常常你會看到大家採用『V-Ray萬用設定值』, 將Image Sampler (Anti-Aliasing, or AA) Max Subdivs設的很高,然後把noise threshold調低,直到得到乾淨的算圖結果。他們認為這樣就是V-Ray最佳或是最快的算圖效果了。但只要您對V-Ray實際運作的方式稍有了解,你就能獲得更高的算圖品質,而且更快的算圖速度。跟『通用設定』相比,甚至有可能達到3~13倍的速度!

首先,我們先了解光線追蹤與V-Ray採樣的觀念,接著我們會講解實際場景,演示如何最佳化算圖,更快速地獲得更乾淨的結果。然後我們會說明如何便是不同雜訊的來源,最後我將提供最佳化任何場景的詳細步驟,獲得品質與速度的最佳平衡。



 RAYTRACING光跡追蹤的基礎觀念

當算圖開始時,射線會先自場景的攝影機發送到場景中,收集有關在最終影像看得到的幾合體資訊(譯者注:攝影機看不到的區域不考慮,如此可加速算圖時間) 我們稱這樣的射線為 Primary Rays一級射線(或稱攝影機射線或是眼睛射線)。這個東西是由V-Ray's Image Sampler控制的。

當一級射線與場景的幾何體交錯時,就會在交錯點上射出更多的射線,這些射線用來收集場景中的照明、 陰影、 全局照明、 反射、 折射、 次表面散射(SSS)...等等資訊,我們稱這些射線為Secondary Rays 二級射線。它們由V-Ray's DMC Sampler所控制。

光跡追蹤的簡化圖表
一級射線自攝影機中發射到場景中與幾何體交錯,接著射出各式各樣的二級射線, 以後我們簡稱射線為『採樣』,因為射線的目的就是在場景中獲取樣本的資訊。因此基本上,射線等於採樣。

為了要更精確地了解場景中到底有哪些細節,我們必須要有足夠的一級與二級採樣,場景中有越多採樣,那麼V-Ray就能在場景中收集到更多的資訊,也就能獲得更高品質的算圖結果 也就是更少的雜訊,因為雜訊是缺乏資訊所造成的。算圖結果中的雜訊代表V-Ray無法收集到足夠的場景資訊,為了要減少雜訊,你必須要提供給V-Ray更多的資訊, 更多的資訊則代表要更多的採樣。

發射到場景中的一級採樣的數量主要由Min Subdivs, Max Subdivs與Image Sampler中的 Color Threshold所控制,二級採樣的數量主要由場景中個別的燈光 / 全局照明、材質球、以及DMC Sampler中的Noise Threshold來決定。

複習一下重要名詞
  • Ray射線 = Sample採樣
  • Primary Samples 一級採樣 = 就是由V-Ray's Image Sampler控制的採樣,專門用於場景中幾何體、紋理、景深與動態模糊的採樣
  • Secondary Samples 二級採樣 = 由V-Ray's DMC Sampler控制 專門用於場景的照明、全局照明、陰影與材質反射折射、次表面散射
  • Noise 雜訊 = 缺乏資訊
  • Subdivs 細分 = 實際採樣的平方根 因此8 Subdivs = 64 Samples

了解SAMPLERATE RENDER ELEMENT
SampleRate render element是幫助我們最佳化算圖的最重要工具之一 ,這個東西能夠展示每個像素的實際Image Sampler (AA) ,它會以不同顏色來顯示每個像素的實際Primary Samples (AA)數目。


  • 藍色表示在該像素使用了少量的Primary Samples (AA)
  • 綠色表示在該像素使用了中等量的Primary Samples (AA)
  • 紅色表示在該像素使用了大量的Primary Samples (AA)

因此如果某場景的Image Sampler (AA)設定為1min 與 10max Subdivs:

  • 藍色表示 該像素取得了一個Primary Sample       (因為Min = 1,1X1 = 1)
  • 綠色表示 該像素取得了50個Primary Sample       (因為介於1~100中間就是50)
  • 紅色表示 該像素取得了100個Primary Sample (因為Max = 10, 10X10 = 100)

範例場景 了解V-Ray運作方式

在本教學中 我們將使用以下測試場景,其中有反射、折射、 SSS、 區域光、 帶有HDRI的頂光 、全局照明則使用了Brute Force + Light Cache的組合。我們用以下設定最為基礎點(控制組):

  • Image Sampler (AA) 設定為 1min & 8max Subdivs.
  • Lights, GI, 與 Materials 設定為 8 Subdivs.
  • Noise Threshold = 0.01

做出這樣的設定代表告訴V-Ray:『我讓你每個像素最多使用64 (8 Subdivs) Primary Samples (AA) 然後根據Noise Threshold=0.01來減少場景的雜訊, 但是在這些使用的Primary Samples中, 你只能再額外射出一個二級採樣,用在場景的燈光GI與材質上面』

你可能會問..等等! 只有一個二級採樣而已?! 不是應該是我們設定的 64 Samples (8 Subdivs),要注意的是,即便是我們將Lights, GI, and Materials設定為 64 Samples (8 Subdivs) V-Ray有內部的機制將這個數值除以AA Max Samples。這樣做的理由是V-Ray要自動平衡這兩個採樣。如此設計背後的想法是:越多一級採樣,二級採樣所需要的越少 (我們後面實際操作會發現,這個自動機制並不一定是我們想要的)

一開始時Image Sampler 與DMC Sampler彼此之間的平衡對你來說可能會有點混淆,但最重要的是要知道 ,每當你增加Image Sampler,V-Ray就會自動減少DMC Sampler。 如果你想要知道詳細的運算公式,請參考這篇【V-RAY DMC快速計算機】。


基礎參數的算圖結果我們看到SampleRate render element有很多紅色,警告我們。V-Ray說:『 根據你給我的(noise threshold)我無法搞清楚你要求的場景細節 ,大部分時候我用到所有的64 Primary Samples 每個燈光GI與材質用到1個二級採樣,但是還是無法提供該區域足夠資訊!』
如果我們仔細看看算圖結果,會發現幾何體細節表現良好,只是在反射與陰影的地方有太多雜訊,接下來我們有兩個方向可解決雜訊的問題:

選項一    增加AA Max Subdivs,降低Noise Threshold,其餘參數不變

  • Image Sampler (AA) 設定為 1min  100max Subdivs.
  • Noise Threshold = 0.005

這樣的設定等於告訴V-Ray:『我允許你每個像素Primary Samples (AA)最多可以有10000 (100 subdivs)採樣, 但是這些一級採樣中, 只能有一個二級採樣用於燈光 GI與材質。』


算出來的結果是大部分為藍色。表示V-Ray說:『 我能夠搞清楚你想要的場景細節 ,不需要用完10000 Primary Samples…』因此選項一的結果,算圖時間為11min 44s 是原本的9.8倍,雜訊很明顯地減少了,這樣的結果大部分的人都會以為這就是最好的參數了!

選項二    增加燈光 GI 材質的細分, 但是一級樣本與Noise Threshold不變
  • Lights, GI, 與 Materials 設定為 80 Subdivs.
這樣的參數表示你告訴V-Ray:『我允許你最多每個像素使用64 (8 subdivs) Primary Samples來查探場景,根據noise threshold.來減少雜訊, 而每個一級採樣,最多可以有100個二級採樣用在燈光 GI與材質。請記得即便是我們把燈光GI材質設定為6400 Samples (80 Subdivs) V-Ray還是會自動除以AA Max Samples  6400 Secondary Samples / 64 Primary Samples = 100 Secondary Sample)。


我們從SampleRate render element看看選項二的最後結果,我們發現選項二雜訊很明顯地減少 算圖時間為4m 38s (為原本的4.5倍長)。有趣的是,我們發現雖然選項二花更少的時間算圖 但是選項二的雜訊還更少(如下圖),而且選項一的noise threshold還要更低(譯者註:直觀的認為noise threshold雜訊應該要更少才對)


如何達到最佳化

在基本設定的參數中,物件的邊界很乾淨,只在反射與陰影的地方有雜訊。 你應該還記得我們之前有說明 Primary Samples (AA)專門處理幾何體、 紋理與景深、 動態模糊;而Secondary Samples專門處理照明、 GI 陰影 、材質等等。

因此,為了要修正基礎參數中的雜訊問題,選項一 與選項二,用膝蓋想也知道應該選第二個方法! 殺雞何必用牛刀!

現在我們知道為何V-Ray通用設定1min 與 100max AA不可能是最有效率的方法。 通用設定是專門為那些不在乎算圖最佳化/或是背後的計算原理 的用戶所設計, 簡單說就像自動拍檔車那樣!讓用戶只需要管一個參數(noise threshold)就夠了。 如果算圖結果太多雜訊,只需要降低noise threshold數值, 那麼V-Ray便會持續發射Primary Samples (AA)至場景,直到滿足noise threshold的需求。但是用這樣的方法一般說來不會比真正了解VRay的Image Sampler 和 DMC Sampler之間的平衡關係,這樣去調參數所得到的算圖結果要更乾淨。

再者,選項二的參數還可以再更進一步地調校, 讓算圖時間由原本的5m 58s降到4m 53 而只增加一點點的雜訊而已。

萬用參數(左) 最佳化參數(右)

找出雜訊的來源

適當的最佳化算圖的關鍵是找到雜訊的來源,如此才能指定適當的採樣器來對抗雜訊問題。有些場景需要更多的Image Sampler, 有些需要更多的DMC Sampler。

以下狀況需要更多的Image Sampler (AA) 來減少雜訊
  • 大量細節的幾何體 例如頭髮 草 植物等等
  • 非常細膩的紋理 例如編織 細小的凹凸貼圖細節
  • 具有淺景深 或是動態模糊

以下狀況需要提高DMC Sampler以獲得足夠的二級採樣減少雜訊
  • 大量光源 投射軟陰影
  • 材質去有模糊反射與折射
  • 場景具有明顯的Global Illumination, 尤其是室內場景

由Image Sampler (AA)產生的雜訊,幸運地,很容易用肉眼看出來,例如物件的邊界有鋸齒、 模糊的紋理細節、 或是摩爾紋 、雜訊的景深或是雜訊的動態模糊。

由DMC Sampler所產生的雜訊就比較不容易看出來源。幸運的是,我們可以利用V-Ray's Render Elements: Lighting, Global Illumination, Specular, Reflection, and Refraction來判斷,用以上的Render Elements可以很快地找到雜訊的來源!

最佳化的標準程序

現在我們對V-Ray採樣有扎實的觀念,知道如何判斷場景的雜訊來源,我們接下來將介紹最佳化的詳細步驟。首先是設定 Image Sampler (AA) Max 然後再個別設定場景中的DMC Sampler, 一步一步的排除雜訊。以下我們先用V-Ray預設參數, 然後再進行最佳化的步驟:

步驟一 

  • 關掉'Shadows', 'Reflection/Refraction', 與 'Glossy Effects'
  • 關掉GI
  • 開啟SampleRate, Lighting, Global Illumination, Specular, Reflection, Refraction的render element
  • 在最佳化階段 你可以減小算圖解析度 這樣可以更快知道測試結果

慢慢提升Image Sampler (AA) Max Subdivs直到場景的幾何體邊界、紋理細節 、景深、動態模糊銳利且清晰(無雜訊) 。查看SampleRate Render Element紅色區域,提昇Image Sampler (AA) Subdivs Max,讓紅色區域只發生在物件邊界或是紋理細節上, 一旦這些細節清楚且無雜訊,就不要再改變Image Sampler (AA)的參數了。

步驟二  調校場景中的燈光 陰影 高光
啟用'Shadows,提昇燈光的Subdivs 直到場景的陰影與照明變得平滑且乾淨。你可藉由查看Lighting render element來判斷,當你提昇Subdiv時, 你在SampleRate render element應該會看到紅色像素退到物件的邊緣或紋理,其他區域則漸進地變得更綠或是更藍,這表示需要更少的Image Samples (AA)。

高光的品質也是由場景的Lights Subdivs來控制 ,根據的經驗法則,一旦燈光的陰影沒有雜訊 高光也應該不會有雜訊。 如果你利用Specular render element發現高光有雜訊 ,提昇light's Subdivs來消除雜訊。

步驟三  調校場景的GI
開啟VRay的GI。我建議使用Brute Force與 Light Cache的搭配法 。我們利用Global Illumination render element來觀察雜訊,提昇Brute Force的Subdivs來減少雜訊。當你提昇Subdivs時,在Global Illumination render element中你應該可觀察到紅色的像素退到物件的邊界或紋理,其餘區域會漸漸變成藍色或紅色,表示需要更少的Image Samples (AA)。

關於頭髮,如果你場景有使用VRayHairMtl 頭髮的反射/折射品質其實是由場景的Global Illumination Subdivs來控制。如果你GI沒開,那麼頭髮的折射與反射都會看不到。

步驟四 調校場景的反射
開啟'Reflection/Refraction' 與'Glossy Effects'。提昇場景材質的反射細分,直到算圖結果平滑且無雜訊。可以透過Reflection render element輕易地判斷結果。 再次強調,你應該可觀察到紅色的像素退到物件的邊界或紋理,其餘區域會漸漸變成藍色或紅色,表示需要更少的Image Samples (AA)。

步驟五 重複步驟四,但改為觀察折射

到這裡 算圖效果應該以到達最理想的算圖時間與品質了!如果你想要更少的雜訊,你可以調整Image Sampler's 'Color Threshold' 然後提昇Lights / GI / Materials Subdivs。



更多提示與技巧

  • 本教學中,我故意把Lights / GI / Materials都設定成相同的細分,是為了說明方便。但是請記得在最佳化場景時,最好根據需求做個別的調整。例如,如果材質只有5%的反射,可能不需要太多的反射採樣就能避免雜訊產生,因為該材質的最終RGB數值有95%是由diffuse所貢獻的 。相反地,如果材質有95%反射,就需要更多採樣才能避免雜訊 。同理模糊反射/折射 燈光也一樣,燈光越大, 陰影越模糊就需要更多採樣才能減少雜訊。
  • 記得將DMC Sampler's Adaptive數值設定低於1, 在很多例子裡,當數值接近1或是等於1容易得到難以預測的結果。預設值0.85很棒可以不用動它。
  • 取消勾選Use DMC Sampler Threshold後 ,可以測試Image Sampler's Color Threshold的影響。慢慢一點點地提昇Color Threshold 可以幫助你分辨雜訊是由幾何體的Color Threshold 或是紋理的細節而來的。提昇這個數值可能會增加場景的雜訊, 所以你必須要提昇二級Subdivs來抵消的個效應。或者就接受稍微的雜訊增加, 但是算圖變快的事實。需要點經驗你才能理解針對你的場景值得微調Color Threshold這個參數。
  • 你可以試著取消Image Sampler中的Image Filter。如果場景中沒有小的重複圖案。因為V-Ray's Image Sampler (AA)已經能很有效地解決平滑化細節。多餘的濾鏡其實沒有必要。
  • 你可以取消Filter Maps 或者降低各別的bitmap的模糊數值 ,例如0.1或0.2。尤其是場景中樹葉的opacity maps。取消或是減少filter/blur數值會很明顯地算圖提昇,缺點是會增加記憶體的使用,動畫中貼圖閃爍的問題。
  • 如果你GI的二級反彈用的是Light Cache,記得勾選'Use for Glossy Rays' 與 'Retrace Threshold ,可以加速反射/折射模糊的計算。
  • 如果你使用V-Ray 3.0 記得勾選'Use Embree'。在大部分情況Embree會大幅減少算圖時間,品質不變(難以看出差別)。
  • 減小V-Ray's Bucket Size 例如32x32或 24x24 以減少最後一格算很久的問題。 V-Ray 3.0的新增功能『dynamically reduces Bucket Size 』動態減少算圖框, 已經可以有效避免這種狀況的發生了

結論

請記得每個場景都不同,因此需要不同的採樣數值,某個場景的最佳化數值若是套用在另外一個場景可能反而會拖慢算圖。你需要點試誤經驗、耐心、才能累積經驗,讓你可以很直覺地知道該場景需要修改哪幾個參數。希望這篇教學澄清了你對VRay算圖最佳化的疑惑,祝您算的更快,做案子更順!

特別致謝

Toni BratinevicJohn O'Connell分享的經驗。 Peter Guthrie借我他的場景檔。 John Rouse幫我校稿並測試文章的步驟正確性。



[延伸閱讀]
VRay調參數的技巧

VRay動畫算圖最佳化

揭開V-Ray DMC採樣器的神秘面紗

No comments: