對于反射方程, 是一個“空間-方向”相關的入射輻射度,ppg算法在于學習入射光輻射的近似
,并根據(jù)此對方向
進行采樣。然后因為沒有對bsdf進行采樣,后面可以對bsdf進行MIS。
ppg核心是一個迭代的學習機制:
- 渲染過程劃分成M個pass,稱作“iteration”,
- 每次都生成一個全新的,更強大的入射輻射近似
.
-
的生成基于
的引導。
這種機制不僅在渲染早期有效,也避免了耗時的預計算
Spatial-Directional Tree SD樹
- 上部是一個劃分空間域的二叉樹,
- 下部是一個四叉樹,劃分方向域。
記錄radiance:
當路徑計算完成的時候,記錄路徑上的每一個點v上的radiance,在sd tree的葉子上t向。在分到樹上的時候,需要用最近鄰的filter。
每次迭代產(chǎn)生一張圖像以及SD-tree
。早期的圖片噪點很大,如果將每次迭代的平均起來噪聲更大,因此,不如丟棄早期的圖片。因此ppg的迭代機制:后一次迭代的sample數(shù)是前一次的兩倍。
, 這是基本最后一次采樣數(shù)的兩倍。僅僅保留最后一次迭代的圖像。
第三節(jié)
ppg使用強化學習去構建一個入射光場的的近似表達。
由一個SD-tree來描述,然后用幾何級增長的計算代價逐漸迭代提高;每次迭代均使用兩倍sample。
總是維護兩個SD-tree,一個用來引導light path的構建,一個用來收集入射輻射的MC估計:
在第k次迭代中,基于上一次的進行重要性采樣,然后將
分發(fā)到
。當?shù)趉次迭代結束時,丟棄
,使用
的信息去準備一棵新的sd-tree
去收集下次迭代中的MC估計。
3.1 收集L的估計
當一個完成的路徑組成之后,遍歷路徑的所有頂點,分發(fā)所有頂點的MC入射光輻射估計至.
對于頂點v,及其入射估計, 首先進行一次空間位置查找,即在二叉樹中向下查找,找到包含
的葉子節(jié)點。這個葉子節(jié)點存儲了一個quad-tree的引用。quad-tree有兩個維度的參數(shù),刻畫了整個球面的方向;使用世界空間的柱坐標去保存面積比例(area ratios),當從primary到directional域進行轉換時。在quad-tree中按照方向域去遍歷,只進入包含了
的節(jié)點,并在下降遍歷的過程中,在所有經(jīng)過的節(jié)點中,保存
。
當當前迭代中,所有的輻射估計都已經(jīng)被保存時,quad-tree的節(jié)點估計了所有節(jié)點quad對應的通過球面區(qū)域的總入射輻射。在二叉樹葉子節(jié)點及其對應的quad-tree中采樣的所有空間位置中,他們的方向分布被averaged了。更多的,為了引導下一次迭代的路徑構建,這個信息也用于適配SD-tree的結構,以用于后面的估計的收集(在后面章節(jié)中介紹)
3.2 適應性的空間二叉樹
二叉樹的深度和結構,決定了輻射場空間近似的完善程度和適應性。
為了讓refinement更加直觀,我們交替使用x,y,z軸,永遠劃分在中間的節(jié)點。是否劃分節(jié)點由如下策略驅動:上一次迭代中,節(jié)點volume中記錄的,路徑頂點的個數(shù)。對于每個葉子節(jié)點,在path tracing的過程中,都有一個計數(shù)器。特別的,當一個節(jié)點至少有個路徑頂點的時候,去劃分一個節(jié)點,其中
與第
次迭代追蹤的路徑數(shù)量成正比(section 3.4),
來自于quad-tree的分辨率,section 5.3中有詳細細節(jié)。細分之后,每一個葉子節(jié)點大致包含了
個路徑頂點。因此,所有葉子節(jié)點的總數(shù),正比與
。這個閾值保證了葉子的總數(shù),以及,在迭代過程中,每個葉子節(jié)點的采樣數(shù)以
增長。常數(shù)c用空間二叉樹分辨率換取了方向quad-tree的收斂。
如果僅根據(jù)采樣數(shù)的方法,來優(yōu)化tree,似乎很原始,他的性能還是不錯的,因為迭代式學習的分布,引導路徑至對圖像有高貢獻的區(qū)域;相對于低貢獻的區(qū)域,這些區(qū)域會進一步的得到優(yōu)化。用一個更粗糙的輻射函數(shù)近似區(qū)域,這些區(qū)中有更少的路徑是可以的,因為相對噪聲的增加通常被這些路徑更小的貢獻所抵消了。
3.3 適應性的directional quad-tree
除了劃分空間二叉樹,在每一次迭代結束的時候,也重構quad-tree,用以更好的反映學習到的空間輻射分布;這些新的quad-tree將用于在下次的地帶中收集估計。
每一個新的quad-tree的結構,由上次迭代中,收集的空間分布的flux驅動。為了達到這個目的,我們首先拷貝葉子節(jié)點舊的quad-tree,或者quad-tree的父節(jié)點(如果這個葉子節(jié)點是新的 )。
劃分拷貝的quad-tree的目的是讓每個葉子節(jié)點包含不超過原quad-tree1%的flux。具體的,向下遍歷舊quad-tree的節(jié)點,如果節(jié)點的flux大于quad-tree的flux的
,就劃分節(jié)點。劃分節(jié)點是,我們分配一個四分之一的flux到新創(chuàng)建的孩子節(jié)點,然后遞歸的應用這個細分策略。同時,在每一個存在的內(nèi)部節(jié)點中估計細分策略 - 裁剪他的孩子節(jié)點如果策略不滿足。這樣,那些具有高入射flux的球面區(qū)域就可以有更高的分辨率。這種細分策略生成一個大致上等能量劃分的方向域。
在每次迭代之后重構quad-tree保證數(shù)據(jù)結構適應新收集到的數(shù)據(jù),其次內(nèi)存的使用也比較有效。閾值控制使用了多少內(nèi)存,quad-tree節(jié)點的個數(shù)正比與
. 5.2節(jié)有詳細分析。
3.4 無偏的迭代式學習和渲染
為了加速學習,使用了類似Vorba的迭代機制:訓練一個序列, 其中
僅僅使用BSDF采樣去估計,對于所有
則聯(lián)合
以及BSDF,通過MIS去估計。從
中采樣去估計
通常擊打的加速了收斂。
對于給定路徑頂點,使用
采樣的方法如下。首先,在二叉樹中向下尋找,去找到包含頂點位置
的葉子節(jié)點。接著,從空間葉子節(jié)點的quad-tree中采樣一個
,采樣方法是啟發(fā)式采樣warping。
指數(shù)級采樣計數(shù)
如果在每次迭代中,使用相同的路徑采樣個數(shù),那么僅有一小部分樣本能夠對圖像直接產(chǎn)生貢獻,因為前面大部分的樣本僅僅用于學習入射輻射場。如果學習到的分布與公式2中分子成比例,那么這不會是個問題,在這種情況,一個單個樣本理論上就可以找到分子與pdf的scale因子。然而,我們的分布,只對入射輻射進行了近似,仍然需要在半球空間進行乘積計算(Lfcos)。因此,提出在每次迭代中以幾何級數(shù)的增加路徑采樣樣本個數(shù),即:對于第k次迭代,我們使用兩倍于k-1次迭代的樣本數(shù)。因此,學習比學習
大概需要兩倍的時間,但是只有一半的方差。在實際應用中,由于迭代式的重要性采樣機制的積極效果,方差的減少通常更高。然而,在最壞的情形(迭代式學習無法加快收斂),僅有一半的樣本被浪費。
在每次迭代中,增倍樣本個數(shù)的另一個重要的特性是當考慮我們的空間細分機制。因為二叉樹葉子節(jié)點的空間細分將其空間一分為二,加倍樣本數(shù)保證了幾乎一樣的樣本數(shù)給到新的葉子節(jié)點中。因此,即使在局部,比
噪聲更少。
在線渲染預覽
為了給用戶快速的視覺反饋,我們使用當前迭代中的路徑樣本給出的漸進式顯示渲染的圖片。只要我們不在迭代之間混淆路徑樣本,圖像就是無偏的,因為在一次迭代過程中,所有的路徑樣本都是相互獨立的。
因為在每次迭代過程中,都是從頭開始渲染,即下一次循環(huán)開始的時候,圖像會突然有質量的下降。為了避免這種現(xiàn)象,當且僅當他聚集了比上次循環(huán)還多的樣本之后,再切換到當前迭代的圖像。
3.5 平衡學習和渲染
這里討論給定計算預算B,如何劃分學習和渲染,使得最終圖像方差最小。預算B可以定義為時間,或者樣本數(shù)。
對于第k次迭代,我們定義“單位房差預算(budget to unit variance)”,換句話說,第k次迭代路徑追蹤的圖像
的方差
和用于構建這些路徑的預算
.方差
根據(jù)
像素平均方差計算得來,假定使用
來引導路徑,直到達到預算B,那么最終圖像的方差
:
。其中
是從第k次迭代開始時,剩下的預算,即
.
這里的目標是找到最優(yōu)的迭代,是的最終圖像方差最小,即
。為了達到這個目的,假設訓練是單調(diào)遞減的回饋;更準確的,序列
是單調(diào)遞減以及凸,然后
也是凸的。然后可以找到一個最小的k,使得
成立。如果我們需要估計
,我們需要多進行一次迭代,但是這浪費掉的計算大大超過我們自動預算機制帶來的方差的減少。
當給定一個目標方差的時候,我們可以使用一個類似的方法去最優(yōu)地平衡訓練和渲染。在這種情況,我們可以估計需要的渲染預算,通過
,以達到目標方差的
。當總預算,
時,訓練停止,其中
。這樣,可能成功的找到
,因為當
增加的時候,是凸函數(shù)。