2012/10/05

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



原文:http://interstation3d.com
翻譯:Hammer Chen

引言
這篇教學裡面我將給您DMC採樣器(sampler)的基本技術背景, 但在談DMC採樣器的技術細節之前, 我們先複習V-ray裡面另外一個採樣器--- Adaptive Subdivision採樣. 我不會談固定的採樣(fixed sampler)技術, 因為固定採樣很直覺. 自適應細分採樣(Adaptive Subdivision sampling)是一項技術, 用在幾乎所有偏差算圖引擎(biased render engine)上, 這是相對舊的技術, 在大部分的狀況應用的非常棒.

(註: DMC的全名是Deterministic Monte Carlo, 也就是確定性蒙特卡羅)

自適應細分採樣可以給你很乾淨, 採樣好的影像, 用來渲染靜態圖片真是太完美了. 但是跟DMC採樣相比, 通常會對影像的同一個地方過度採樣(oversamples), 即使你只需要用少量的反射模糊採樣(glossy reflection samples)就足夠了. 正如我說, 細分採樣器存在於大部分的偏差算圖引擎中, 但我覺得有些積極正面的VRay用戶, 卻開始採用另外一種採樣器演算法. 我知道有個渲染器用了類似於DMC的技術. 兩個算圖器, 越來越被用在高階的製作環境上面, 原因是 DMC目前是基於raytracing, 最佳的在可接受的時間裡面, 計算攝影機景深與3D動態模糊.

自適應的採樣的採樣過程 
所有偏差的引擎大部分是用自適應的(adaptive). 這表示, 讓我們先把狀況簡化一下, 比如說有一個3X3像素解析度的區域, 當你算圖的時候, VRAY一開始的時候會用9個採樣來算, 表示每個像素有一個採樣, 我們會先假定採樣的位置位於每個像素的正中間.


3x3 INITIAL SAMPLING
1 SAMPLE PER PIXEL

數量為3x3的啟始採樣
每個像素有一個採樣
如果你不是很了解raytracing運作的方式, 讓我們很快速地複習一遍. 這很簡單, 想想看你有攝影機, 在攝影機前面有個格點(grid), 呈現出你最終算圖的解析度. 如果你場景中有某些物件, 當Vray開始算圖, 它會從攝影機射出線段 (稱為eye ray, 眼睛射線 )一直到像素的中央區域. 像量實際上是由攝影機射出去, 它會勇往直前, 會直線前進直到遇到場景中的物件才會停止.

眼睛的視線撞擊到某物體的點 算圖器就會開始計算該點上面的色彩, 反射, 折射的資訊. 這些會回傳收集的資訊給vray, 告訴它說這就是在該像素的顏色. 從攝影機發出的射線稱為眼睛射線, 或是一級射線. 所有其他從材質射出的射線 用來收集GI, 燈光, 反射…稱為二級射線. 請記住這點, 因為我們會談到這兩種射線. 讓我們複習下面圖示, 讓我們更了解什麼是raycasting.



這個有九個像素的grid上面的每個像素, 都會進行上述的程序, 最後你就會得到算圖的影像. 這邊的問題是---每個像素只有得到一個採樣, 而這個採樣只會回傳該無限小的點的顏色資訊, 這是從眼睛射線到場景中與物件交錯的點. 然而實際上, 如果你把grid放在攝影機前面, 你最後應該要得到的是, 該像素無限個點的平均採樣, 而不是只有一個點而已. 由於這對算圖引擎幾乎是不可能做到的事, 你不可能射出無限個射線, 因為這樣會耗費無窮盡的時間. 程式設計師開發了一個聰明的方法, 怎樣解決特定像素的過度採樣----這個叫做自適應的採樣(adaptive sampling)  射線的自適應是根據算圖圖像的複雜度, 所以像素對比強的地方會有比較多的採樣. 假設它會射出25個射線到一個像素, 然後平均化結果, 在該區域我們有單一的色塊, 它就只會放出一個採樣, 而不會浪費時間在過度採樣該像素.


(左圖) 在初始的算圖採樣之後, 會回傳該像素的顏色

(右圖)根據閥值所定義的差異程度, 算圖引擎會在該像素投射更多的採樣, 而顏色也會更新.


上圖展示了自適應採樣的優點: 第一個例子是每個像素只有一個採樣; 第二個是對每個像素固定用100個數量的採樣; 第三個是用自適應的技術, 每個像素最小採樣是1, 最大採樣是100. 你可以很清楚地發現當使用固定採樣, 跟自適應採樣相比, 浪費了多少時間, 但自適應採樣卻能獲得幾乎相同的品質.

恩, 自適應細分採樣與DMC採樣這兩者相同的地方是兩者都是自適應的(adaptive), 但是以不同的方式運作. 讓我們先看看細分採樣, 因為這是最古老的技術, 我想要點出使用DMC的優點, 在不了解細分採樣以前這觀念很難解釋清楚.

細分採樣(Subdivision sampler)
上一段落我提到採樣, 提到啟始的採樣是怎樣射到像素的正中心的, 細分採樣其實是用不同的方式運作的, 並不是把採樣放在像素的中心, 而是把採樣放在像素的邊邊. 如下圖:

細分採樣會把起始的採樣放在每個像素的邊邊

在啟始射線射到場景並收集資訊後, 細分採樣會分析資訊 決定哪個像素需要更多採樣, 哪些不需要. 每個像素, 在其邊邊的採樣都會拿來比較, 如果顏色比顏色閥值(color threshold)要高, VRAY就會把該像素再次細分一次, 在該像素產生更多的採樣.

依據在算圖選項裡面 Clr Thresh (Color Threshhold) 閥值所定義, Vray會檢查是否在該像素的邊邊採樣比閥值要高, 如果是, 那就會在該像素裏面投射更多的採樣; 如果不是, 就會終止採樣的程序, 會回傳最終的像素顏色.

範例A
起始的採樣會投射到每個像素的邊 , 然後收集顏色. 第一個像素非常接近於第二個像素的顏色, 因為顏色差異低於算圖設定定義的閥值, 算圖器就會決定不值得對該像素做出更多採樣.

範例B
第一個與第二個像素的差異非常高, 超過了顏色閥值 (Color Threshold), 這表示算圖器會針對該像素傳送更多的採樣. 最大的採樣是由Max rate所定義, 在本例裡面表示每個像素最多有16個增加的採樣.

這個操作會執行好幾次直到達到顏色閥值 或者是達到由Max rate所定義的最大的每個像素採樣點. 請記住在Subdivision sampler所設定的max subdiv最大細分, 並不代表每個像素最大的採樣數目, 它所表示的是像素會被細分幾次. 所以當等於0的時候表示有1個採樣, 1=4, 2=16,3=64依此類推. 請記住有些採樣會被兩個像素間的邊所共用, 因此, 基本上如果你把Max Rate設定為2 實際上對該像素只會有25個採樣. 以Max Rate=1來說, 每個像素都採樣一個, 與其他像素共用8個. 我們來看下一張圖片, 有更加直覺得解釋:

自適應的細分採樣(ADAPTIVE SUBDIVISION SAMPLER)
有些像素會有比較多的採樣, 有些比較少. 這全都是根據顏色的對比與像素邊的採樣差異. 本例將Subdivision sampler設定為最小為0, 最大為2. 這表示最初的採樣是每個像素1個採樣.  因為每個邊共享像素, 根據顏色的差異, 過度採樣每個像素可以達到16個採樣.

現在, 最大的問題是, 細分採樣器(subdivision sampler)只會根據像素的邊所收集到的資訊來做決定. 它基本上並不知道像素周圍的全部色彩資訊, 它只知道像素的邊的資訊, 這樣的機制用在某些場景是沒問題的. 但是若是在有很多細小的物件, 材質有許多細節, 顏色採樣的資訊只是根據像素邊的資訊是不足的. 我們需要在像素周圍完整的色彩資訊, 才能讓過度採樣做出最佳決定, 這就是DMC sampler在做的事情, 這也就是為什麼具有很多細節的場景, 比方說有很多很細的線段, DMC採樣會做出更好的決定. 在場景中增加採樣點, 特別是針對動畫 產生會更乾淨, 更穩定, 每個frame到frame之間不會有明顯的變化. 下一張圖要講的是:

做出投射採樣的決定
在像素裏面的射線, 是根據在像素周圍的邊的色彩資訊所決定, 這是Adaptive Subdivision sampler特有的方式, 當場景有很多細節的時候會出現問題, 所以要得到每個個別像素完整的顏色資訊會比較有效一些.


(左圖) 自適應的細分採樣(ADAPTIVE SUBDIVISION SAMPLER)
對有場景中有很細的物件會發生很大的問題, 這裡的簡單例子, 你可以看到線段算出來是斷掉的. 在需要採樣的地方沒有給予適當的採樣, 原因是細分採樣是根據像素的邊來決定採樣的. 在本例裡面, 我已經把顏色閥值設定到0.01, 最小的細分(Min subdivs)設為0. 這表示一開始的時候是以每個像素一個採樣, 最大的細分(Max Subdivs)為3, 表示如果需要的會它會投射最多64個採樣. 最大64個採樣應該是綽綽有餘了, 但是vray沒辦法從第一次投射裡面獲取場景中足夠的資訊.

(右圖) DMC採樣
…就沒有這種問題, 因為它是根據完整的像素收集的採樣. 因為如此, 它可以偵測到非常細微的線段, 用很有效率的方式, 而且不會產生錯誤, 而本身有具有細分採樣的特性, DMC 設定為最小為,一 最大為八的細分. 這本例裡面意思是代表它一開始的時候會投射每個像素一個採樣, 而最後會在需要的地方最大投射64個採,樣 顏色的閥值設定為0.01, 跟細分採樣一樣.

當使用細分採樣, 為了要取得乾淨的結果, 場景中的每個區域都使用某中過度採樣(oversampling) .例如反射模糊, 折射, brute force, GI, 景深與動態模糊, 都會用完全相同數量的採樣來處理. 所有的東西會一起平均化以後, 結合到顏色資訊裡面, 而顏色資訊會跟周遭的樣本相比, 決定是否要對該像素進行過度採樣. 這表示如果對於景深有20個採樣, 對動態模糊有10個採樣, 對反射模糊有100個採樣, 你就很有對每個像素都要計算超多個採樣數目了. 雖然這樣可以產生好的, 乾淨的結果, 但卻要消耗大量算圖時間, 因為在像素裏面, 每個多的採樣, 你都會投射X個增加的採樣, 給動態模糊, 景深, 反射模糊…等等, 才能得到一張好的渲染圖像, 而這就是為什麼, 中心化的自適應演算法, 如DMC這樣的科技會出面. 實際上它會控制每個區域, 找到那些需要超過一個採樣才能取得乾淨的資訊 (例如反射模糊)的地方

在我們跳入DMC採樣技術以前, 我們先複習一下VRay DMC採樣的選單. 請注意這個選單並不只是會在你啟動DMC sampler的時候才會啟動, 它在當你切換到fixed sampler的時候也會啟動, 唯一的差別是, 當使用Adaptive Subdivision sampler時, 影像的處理會與二級的射線無關, 例如材質的模糊反射, 而DMC會合併這些選項 (影像採樣, 與其他場景中的細分採樣).

DMC採樣的選項
讓我們一個一個的複習, 你可以查看VRay help, 但是我們會用更簡單的方式來解釋. 我會解釋: 當X數量的反射模糊射線從材質射出來, 這是在當影像的採樣由攝影機穿過像素, 當射線打到某物件, 而具有反射模糊的材質被呼叫. 謹記這是很極端的例子, 會跟你的場景有所不同, 主要是為了讓你了解原理, 但是實際狀況可能不會有這麼大的差異.

自適應的強度(Adaptive amount) 例如, 如果你材質有100個採樣 (10 subdivs) 用來對反射模糊做採樣, 將adaptive設定為0.,5會讓Vray 投射固定的數值為50 (也就是100X50%=50) 的反射的採樣. 然後接著會決定你是否需要投射更多的採樣.  實際上在初始的50個採樣以後. 更多的採樣會一個一個地被投射出來. 如果需要. Vray會比較那些已經投射的採樣的平均顏色, 如果這個數值不是很高, 它就會停止進行更多的採樣, 因為它發現做更多的採樣沒甚麼道理, 對目前已經算出的東西沒有麼幫助. 如果將adaptive amount設為0.7, 你會投射30%的100個採樣. 如果設定為0的話會投射所有的 100個採樣, 會投射以Min Sample的數值為基準的採樣, 而在這之後會進行自適應計算. 使用需要用來清理反射模糊的採樣. 最小採樣在這個例子裏面算是保險措施, 因為有時候Adaptive amount設為1 ,Vray無法做出正確的決定, 是否在初次的兩個採樣之後還需要添加更多的採樣, 因此有了最小採樣. 你可以確保不論Adaptive amount設為多少 ,對反射模糊而言都能有最小量的採樣數目 (同理可套用到折設, 陰影...等等)也就是8, 在這之後就會開始自適應.

ADAPTIVE AMOUNT 0
所有材質的反射採樣, 每個眼睛打到地板的射線都採用
ADAPTIVE AMOUNT 0.5
50%的反射模糊採樣會在進行反射模糊計算的時候, 這個操作是自適應的, 也就是說在雜訊閥值的條件下, 只有需要的時候才會投射採樣.
ADAPTIVE AMOUNT 1.0
當Adaptive設定為1 , 最小的採樣就會啟動, 起始的反射模糊採樣會是8, 在之後就會依照雜訊閥值的條件, 投射需要數量的採樣. 請記住我的raytracing圖解, 讓我們再次複習一遍, 但是從不一樣的角度來看.



雜訊的閥值(Noise threshold) ---如果adaptive amount設定為0.5, 而如果反射模糊材質具有100個採樣(10 subdivs) , vray就會投射50個採樣, 在其後它會以自適應的方式, 根據雜訊的閥值, 這表示在啟始的50個採樣, 每個新的採樣都會被平均在這50個採樣裡面, 如果這50個採樣所提供的數值超過雜訊的閥值, 它就會送出更多的採樣, 直到達到雜訊的閥值. 但是如果它提供不夠高的話, 在閥值以下, vray就會停止對反射採樣, 對反射模糊做最終計算 以下表示當改變雜訊閥值的時候, 影像反射的品質. 這是非常重要的參數, 最終的數值最好在0.005-0.01之間.



最小採樣 (Min Samples) 如果自適應性設定為1 (也就是完全自適應), 即便是你有100個反射採樣可供反射模糊使用, Vray還是只會投射1-2個反射採樣, 也無法做出智慧的判斷, 是否需要增加採樣. 為了避免這種狀況, 最小採樣是採樣數值的最後防線, Vray會對每個反射模糊的數值至少採取8個採樣.

全局細分採樣(Global Subdivs samples) 這是一個針對場景中所有需要細分採樣的參數, 可以用來作場景微調. 可以對area shadows ,area light的 subdivs或是反射/折射的細分, 動態模糊的細分, 景深的細分…等等. 因此, 例如你把反射模糊射定為10 而Global Subdivs設定為2, 那麼最後的反射模糊細分會是20 (10X2=20) ;如果設為0.2, 那就會把反射模糊的最終細分值變為2, 把這個數值調高會讓你得到乾淨的結果但是缺點就是算圖時間增加. 請記住這會影響到場景裡面所有的細分, 我建議你如果有採樣的問題, 請到特定的材質去修改細分, 會比更改Global Subdivs samples要好.

歡迎來到不直覺的世界 DMC sampler
現在我們已經累積了夠多的知識, 要了解DMC sampler的運作方式會比較容易. 首先我們必須知道, 這是DMC sampler很重要的功能----也就是完整的像素資訊, VRAY會納入考量, 是否在該採樣點需要更多的採樣, 這個技術的效果我們之前已經看過了, 也就是那個茶壺的範例. 但請看以下不同的範例:

自適應細分採樣 (ADAPTIVE SUBDIVISION SAMPLER)
細分採樣只會在像素的邊做考慮是否需要更多的採樣
DMC SAMPLER
有了DMC sampler, 會使用在像素周圍完整的色彩資訊, 依此決定是否中央像素需要更多的採樣.

或許聽起來不是很重要, 但其實非常重要! 因為這個技術真的幫助我們捕捉到場景中微小的細節. 跟DMC sampler相比, 當初始的採樣在像素的邊, DMC sampler會在第一個採樣裡面, 每個像素內部產生隨機的點, 決定是否要進行過度採樣, 它的判斷不像一般的自適應細分採樣. DMC採樣的分布會更加隨機, 不會有固定的圖案. 雖然deterministic表示它會呈現某種圖案, 但跟早期用在vray的QMC相比, 事實上它是根據low discrepancy numbers.

很多人好奇為什麼拿DMC sampler處理景深可以比Subdiv sampler算的更快, 原因是DMC sampler控制與影響場景的方式不同, 它只會在我們需要過度採樣 (細分). 因此你只會針對你需要的地方投射很少的採樣, 而不會在不需要的地方過度採樣, 因此不會影響到最終品質.

技術上, DMC sampler有設定DMC的最大採樣數目, 會對每個系分數值做細分 燈光, 材質等. subdivision sampler就不會做上述的工作, 這是這兩個採樣器最主要的差異了

讓我再重申一遍. 例如, 某材質有反射模糊, 而你把它設定為40 subdiv, 場景中燈光設定為shadow subdiv=10, 把DMC max samples設為5, 反射模糊的最大採樣數值會是8 (40/5) ,燈光陰影的最大細分會是2. 請記住, 我們是以每個射到場景的眼睛射線的採樣數目. 但是, 如果, vray採樣的像素需要超過一個眼睛射線的採樣數目的話, 例如果們需要DMC的最大採樣為subdivs=5, 那麼5x5=25採樣 vray來是有可能使用材質球所有的subdiv =40的反射模糊, 因為每個眼睛射線會投射8個subdivs(64個採樣) , 因為會投射最大為 5 DMC subdiv samples (25個採樣) , 5x8=40個反射模糊採樣. 搞混了嗎? 這可是我花了好幾天才搞懂, 因為這些觀念沒有些在VRay官方文件裡面.

這裡用簡單的圖示用來說明DMC是如何處理場景中模糊數值的細分的. 材質中的反射模糊預設值為100個細分設定. 在第一組例子裡面 DMC最多對眼睛樣本有5次細分 因此最後會使用比100要少的20個採樣. 最後的一例子是DMC可以細分像素為50, 最多可以做出25000個採樣. 既然如此, 你會對像素做出數次的過度採樣, 所以就算是反射細分只有2也可以產生不錯品質.


因此 我們知道DMC對每個場景細分數值的細分. 我們可以再次複習自適應性 以及自適應性如何處理場景的細分數值. 在Adaptive subdivision sampler裡面是很直接了當地, 因為該採樣器並不會影響場景中的細分數值(例如材質與燈光)

因為DMC運作的方式以及它如何對場景中的數值做細分, 需要多次採樣, 如果你把DMC Max samples設定的很低的話, 自適應的選項會扮演某些功能. 如果你把DMC Max Subdivs設為1, 關於第二次採樣會對反射, 折射, 陰影所需要的採樣, 你會的得到跟Subdivision sampler一樣的結果. 但是, 因為DMC演算法的本質, 把Max DMC提高到非常高, 例如50好了, 某些程度上自適應性是無效的, 可以忽略它, 為什麼呢? 因對當你把Max DMC設為50, Vray就會把場景裡面的所有細分數值改為1, 也就是投射到場景中的每個射線採樣, 對反射模糊來說只有一個採樣, 燈光也是一個, 動態模糊也是.
為什麼VRay要這樣做? 因為它知道它能投射出50 subdivs的採樣, 大約就是2500個眼睛採樣, 即便是眼睛只會對反射模糊投射一個採樣而已, 還是能取得相當好的反射模糊.

這很有用, 原因是, 例如場景的3D景深, 動態模糊, 大量的反射模糊, VRAY會試著投射最少量的採樣以產生最乾淨沒有雜訊的結果. 這種狀況, 它會把DMC數值設的很高, 如果需要的話, 你可以進到場景材質裡面, 個別設置材質. 通常 動態的物件, 你並不需要投射太多的反射採樣, 因為到最後還是會模糊掉. Subdivision sampler並不知道這種狀況, 它會從眼睛採樣就可能地投射高數量的樣本, 即便反射模糊在最後的算圖裡面不具有重大影響. 下個很簡單的例子, 我採用Adaptive subdivision sampler 與 DMC sampler兩種採樣, 你可以很清楚地看到DMC 採樣勝過Adaptive Subdivision.



DMC採樣的最大缺陷是很容易令人搞混, 設定上也很不直覺. 有時候場景有很多細節, 很多燈光, 動態模糊與景深, 最好把DMC設定設的高一點, 例如Min 1 Max 50. 因為如果把Max DMC設的很低的話, 例如4, 會大大增加算圖時間. 讓我來看以下實際的例子

範例一: 頭髮
頭髮很難採樣, 頭髮具有大量的細節. 大部分的raytracers無法用很快, 又有效的方式處理頭髮的採樣. Adaptive subdivision samples在本例裡面效果更差, 這種採樣器無法決定哪邊要放更多的採樣; 相反地DMC的表現就相當好, 它可以很快地對頭髮採樣, 而不會有Adaptive subdivision samples那種錯誤. (斷掉的頭髮, 閃爍的問題) .同樣的frame分別用DMC與Adaptive Subdivision sampler算圖, 前者會勝過後者. 在圖片裡面我們可以很清楚地比較出來.


這邊我用的設定是DMC Min 1, Max 50, Color threshold 0.02. Adaptive Subdivision 的採樣器我的設定是Min 0, Max 2, Color Threshold 0.5. 我使用了相當高的閥值 針對Adaptive Subdivision. Adap Sub 估計算圖時間會花上20分鐘.

現在就剩下的問題是我們該怎樣針對頭髮來做設定. 通常我會把DMC Minimum samples設為1或2 ,Maximum設定為50.  如果你在製作動畫裡面有偵測細節的問題, 把min改為2可能可以把問題修掉. Color threshold可以設為非常低, 例如0.02或是0.05, 忘了在DMC sampler選項裡面的設定吧, 因為自適應性基本上會被忽略掉, 因為Max DMC設為50, 會把場經中所有的細分數值細分為1, 這表示每個眼睛射線 vray只會有1個採樣來計算陰影, 1個用來計算反射模糊. 本例裡面, 效果很棒, 而頭髮本來就需要相當多的眼睛射線.


如同你所見, 第三張影像效果最好, 畫面中的一切看起來很平順, 我可以保證你不會看到任何閃爍, 即便是在渲染動畫. 在Blur那邊工作的時候, 我通常把我算頭髮用另外的pass算, 設定為Min 1 與 Max 50的採樣. 其餘的模型設定為matte (vray 屬性). 接著我在後製裡面把頭髮合成進去, 因為沒有必要對場景中其它物件使用DMC Max 50來計算.

範例二: 平坦的表面, 反射模糊
有趣的是, 在某些狀況下, 把DMC設為4可以得到乾淨的影像, 算圖時間快. 這是真的, 因為對於地板反射模糊不需要有太多細節, 你會更專注在對材質採樣而不是對幾何體採樣.


讓我們來看看採樣器發生什麼事, 當把DMC Max由5改為50的時候, 你會看到投射出更多眼睛射線到場景裡面.


很奇怪不是嗎? 第一張影像 DMC sampler Max設為5, 實際上獲得的採樣比DMC Max 50要少很多.  還記得當我解釋DMC Max細分每個模糊數值嗎? 恩, 這就是原因了, 對於材質模糊反射, 我設定細分數值為50, 表示在第一個案例裡面, DMC Max設為5 每個眼睛射線打到模糊反射的地板可以最多投射100 (10 subdivs)反射採樣; 但是當DMC射定為50時, 它只會投射一個採樣. 這表示. 當DMC設為50,  VRay無法以很少的眼睛射線得到乾淨的反射, 因此它就會對該像素射出更多的眼睛, 就算我們在如此平坦的區域不需要這麼多採樣.

第二排用的是DMC Max 50, 但是我調整了材質的反射的細分. 對地板與牆壁 你可以很清楚地看到, 藉由改變Refl Subdiv 你會得到大量個DMC sampler (眼睛射線), 因此, 在這樣的狀況下, 不要害怕把Refl Subdiv拉高到300, 因為當DMC Max 50,這樣的細分你只會得到每個眼睛射線六個細分而已, 這樣可以真的加速算圖而得到平滑的反射效果.

範例3  Subpixel mapping (位在V-Ray:選單裡面)

大部分的時候, 我會開啟subpixel mapping,來算場景與動畫. 如果你要算靜態畫面, 你可以把這個選項關閉, 這樣可以得到最寫實的效果. 但是當算動畫的時候 你會用到攝影機3D動態模糊與景深效果, 這時候開啟subpixel mapping會是明智的決定, 因為這樣算圖時間可以變短, 而可以用更少的採樣來計算乾淨的景深與3D動態模糊效果. 開啟或是關閉subpixel mapping的差異在於: 當開啟subpixel mapping的功能, 每個眼睛採樣進行的時候, 當對像素採樣時, 會先進行tonemapped, 然後再跟下一個採樣平均化, 如果Vray有對該像素過度採樣的話;  當subpixel關閉時, 這些樣本會先平均化, 然後當你得到最終像素顏色的時候, Vray才套用tonemaping. 用下圖來說明:


當SUBPIXEL MAPPING開啟
當Subpixel mapping開啟的時候, 每個在像素裏面的新樣本將會先進行tonemapped (把顏色壓縮到你定義的尺度裡面, 可以在Color Mapping選單裡面 或是Camera exposure做設定) , 然後再跟現有的像素顏色合併.

當SUBPIXEL MAPPING 關閉
當Subpixel mapping關閉的時候, 每個採樣都會先計算, 然後合併, 最後當採樣完成整個像素顏色會進行tonemapped, 形成每個像素的最終顏色. 這個過程可以產生更寫實的結果, 但是會產生雜訊, 特別是當使用3D動態模糊與景深的時候.

實際看起來會像這樣:

DMC MIN 1 MAX 50
SUBPIXEL ON
DMC MIN 1 MAX 50
我們可以很清楚地看到對最終影響的影響, 右邊的圖示把subpixel mapping打開 會產生比較乾淨的結果, 會算的比較快, 但是會失去某些亮度, 不夠真實的結果.

SUBPIXEL OFF
DMC MIN 1 MAX 1
SUBPIXEL ON
DMC MIN 1 MAX 1
把DMC Max數值改為1, 表示反射模糊的細分不會減少每個眼睛射線傳到像素的採樣量, 我們可以藉由把subpixel關閉得到相同的結果.

這就是為什麼會有差異發生, 當DMC設為1 , VRay從像素放出一個眼睛射線, 當它打到反射的地板, 它會花30個模糊反射採樣, 反射採樣會一起平均, 跟diffuse 數值與tonemapping一起合併. 因為VRay對單一個反射模糊計算用了30個反射模糊, 由與subpixel mapping關閉了, 所以就這30個的亮度維持一樣. 跟我把DMC設為50相比較, 這表示透過像素, 模糊細分的數值會降到每個眼睛射線只有一個採樣而已, 而採樣會跟跟diffuse元件一起平均化,  然後合併到採樣, 一起進行tonemapped. 因為我把DMC設為50, 所以VRay我射出更多的眼睛射線到場景, 用來清理反射模糊, 而每個眼睛射線只會有很少量的眼睛採樣.

這可以藉由到材質設定裡面, 使用比較高的反射模糊採樣來彌補 (少的眼睛採樣).  我的例子裏面, 如果我把DMC設到50, 我可以把材質裡面的反射設定為500 這表示 (還記得剛剛講過的桌子嗎) , 每個眼睛的光線 VRAY 會投射10個反射細分採樣,到場景裡面, 如此會讓反射變得非常亮 好似我們把subpixel mapping的選項觀調了一樣, 可是你卻還能享有把subpixel mapping打開的優點.

範例04: 場景中的區域光 (AREA LIGHS)
如果場景有大量的區域光源, DMC可以幫很大的忙, 特別是你要套用動態模糊與景深的時候. 下兩張圖展示了, 我用了100展區域光, 你可以看到DMC sampler勝過Adaptive Subdivision sampler. 這兩張圖片的雜訊幾乎一樣, 甚至在DMC那張某些地方還要更加地乾淨, 而Adaptive Subdivision sampler甚至雜訊更多. 但是請記住, 我在DMC sampler使用的是Max 50採樣, 算是相當高了. 為了計算場景中的反射模糊, 場景中又有這麼多盞燈, 把Lightcache打開會幫助很大. 所以請記住, 當你遇到這類型的場景時候要採用DMC SAMPLER.


範例05: IRRADIANCE GI品質也會受到DMC設定所影響
要記得的, 當你想要移除雜訊或是Irradiance Map造成的閃爍的時候, IR Map也會受到DMC Sampler的參數所影響.


這個問題通常在Adaptive amount設為1的時候會出現, 我假定IR map並沒有投射這麼多固定數量的GI採樣, 因此, 就沒辦法有效地決定是否需要投射更多的光線, 這可以藉由把adaptive amounte改成比1小的數值來解決, 也就是第二張圖所採用的0.5. 你可以很清楚看到GI的差異, 或者可以把Min samples提高到128解決這個問題.

結論
希望我寫的每個東西都很容易理解, 雖然有時候還是會令人搞混. 我看到有人對DMC sampler搞混因為它統一的核心, 所以又改回去用subdiv sampler, 因為用起來比較可以預測效果. 但相信我, 一旦你搞懂DMC sampler採樣的威力, 你會維持住思考力, 因為你對算圖採樣演算法有了完全的控制力, 你還可以利用這個統一的核心發揮其威力, 做出更快的算圖, 更乾淨的效果, 祝算圖愉快.

[相關資訊]



No comments: