第二篇論文研讀文章了,雖然依舊很菜,但這一篇開始就相對輕鬆一點了。文檔種有些問題,其中所有“實時”應該替換爲“高效”。
Hierarchical Russian Roulette for Vertex Connections
主要目標
爲了解決雙向路徑跟蹤算法在specular-diffuse-glossy或glossy-diffuse-glossy情況下反射計算低效且質量差的問題,提出了一個分層的俄羅斯輪盤賭技術來進行頂點連接。該技術利用在眼睛子路徑(或相機子路徑)頂點處的近似散射波瓣來與VPL進行連接,不在波瓣中的VPL便可以直接剔除。由於使用了俄羅斯輪盤賭技術,便可以不需要使用太多的採樣點就可提升繪製的質量。
算法細節
符號表格
Symbol | Domain | Description |
---|---|---|
光子路徑中的頂點 | ||
眼睛子路徑中的頂點 | ||
俄羅斯輪盤的概率 | ||
表面法線 | ||
散射波瓣上的一個方向 | ||
入射方向 | ||
處的BRDF | ||
處的近似散射波瓣 | ||
第個均勻隨機數 | ||
處的隨機散射範圍 | ||
GGX分佈 | ||
平方橢球波瓣(SEL)函數 | ||
GGX的粗糙度 | ||
SEL的粗糙度 | ||
光子路徑的數量 |
分層的俄羅斯輪盤賭
在這個方法中,對於所有緩存的光頂點,都會執行一次俄羅斯輪盤賭,並且會將眼睛頂點處的BRDF考慮在內。俄羅斯輪盤賭通過基於範圍的剔除來加速,因此就可以從大量的光頂點中高效地採樣出一些光頂點。現有的光剔除方法都使用光頂點的範圍,而我們使用眼睛頂點的範圍來對眼睛子路徑跟蹤中的每個頂點進行光頂點剔除。本節介紹一種高效的分層的俄羅斯輪盤賭算法。
隨機散射範圍
對於光頂點和眼睛頂點的連接,我們使用下面的俄羅斯輪盤賭的接受概率:其中,是一個用戶指定的參數,可用來控制方差和性能之間的權衡。球函數約等於散射波瓣:
公式中出現的符號可以在表格中查詢。爲了對所有緩存了的光頂點進行俄羅斯輪盤的加速操作,就需要通過眼睛頂點在世界空間中的接受範圍來剔除那些不重要(被拒絕)的光頂點。使表示第個均勻隨機數,那麼眼睛頂點處在世界空間中的範圍的界限就是一個橢球函數,並且給定距離滿足,其定義如下:因此,只有在範圍內的光頂點纔會進行頂點連接的操作。
分層拒絕
使用BVH剔除
爲了快速地在散射範圍中尋找光頂點,我們構建了一個光頂點的二分層級包圍體(BVH)。使用這個BVH,散射範圍和光頂點的包圍盒之間的相交測試就可以使用一種自上而下的分層方式進行。然而,儘管散射範圍的形狀只依賴於近似波瓣,但範圍的大小卻依賴於隨機變量並且對於不同的光頂點(即葉子節點)來說都是不同的。因此,爲了適當地對每一個BVH節點執行相交測試,對於內部節點都使用最大的大小,如圖3所示。
這個大小爲,其中表示該節點包含的葉子節點的索引集。每一個節點都需要能夠高效地獲得這個最小的隨機數。
預生成隨機數的問題
一種低效的獲取每一個節點中最小的隨機數的方法就是以自下而上的方式進行預計算。首先,在預處理步驟中將單個隨機數分配給每個光頂點,其方法類似於隨機光剔除方法。然後,在構建BVH的階段,將最小隨機數從葉子節點傳播到更上層的節點。然而,因爲對於所有的眼睛頂點都是使用相同的預計算的隨機數,這種方法就會在眼睛頂點間產生相關性方差。如果眼睛頂點被密集採樣(例如超採樣)的話,這種相關性方差會影響計算效率,並且在後處理去噪過程中(例如圖片去噪)也會極大地降低效率。爲了避免相關性方差,就必須爲每一對光頂點和眼睛頂點賦予不同的隨機數。但是,在每一個眼睛頂點處都進行一次完全自下而上傳播的代價明顯是非常昂貴的。所以我們提出了一個實時生成最小隨機數的方法,該方法是自上而下的方式並且不會對所有光頂點生成隨機數,自然也就不需要自下而上地傳播隨機數了。
實時生成最小的隨機數
我們首先討論一種時間複雜度爲O(1)的方法來在均勻隨機數之間生成最小值。然後,我們擴展這個方法爲一種自上而下的分層算法,並以此來在每一個BVH節點中生成最小的隨機數。爲了提升這個算法的數值穩定性,我們採用一種半分層的採樣方法,並使用重疊層來生成均勻且部分分層的隨機數。
最小隨機數的PDF
個隨機數中的最小值可以通過考慮其PDF來生成[問題2]。這個PDF可以通過分析的方法來獲得,如下:其中,,推導過程可參考補充材料。這個PDF的累積分佈函數的逆函數也有一個封閉形式的解[問題3]。因此,只需要生成一個單一的均勻隨機數即可隨機地生成一個最小隨機數,公式如下:
分層採樣
儘管基於以上公式,我們可以使用一種實時的隨機數生成方法,但當很大時會有精度問題(如圖4b所示)。然而,對於1維分層採樣的情況(因爲是對隨機數的邊界進行分層,所以這裏是1維),我們可以避免數值誤差並簡化公式。由於分層隨機數的最小值總是在最低層內,因此,可以簡化爲:如果,這個情況中的PDF爲;否則。(注:這裏最後的結果顯然不能無偏差地生成最小值,所以這裏很可能是有了這個最後結果,然後作者爲了給這個方法合理性而強行構造的理論。原方法可能是隨機地生成一個較小的隨機數,然後根據這個較小的隨機數來劃分一個範圍,在這個範圍就可以隨意均勻生成隨機數了,這樣就可以保證隨機數局部均勻並且較小的隨機數很容易得到)
分層生成
使用上一個部分中的方法,在自上而下遍歷BVH的過程中,我們可以對每一個節點實時生成一個最小的隨機數。這是自下而上傳播的逆過程。對比自下而上的方式,我們這種自上而下的算法不會對剔除了的節點生成隨機數,因此在每一個眼睛頂點進行子路徑追蹤時的執行效率非常高。
對於我們的BVH來說,父節點的最小隨機數一定等於子節點最小隨機數中的最小值。因此,在自上而下的分層生成過程中,父節點的最小隨機數就會傳播給一個子節點(圖5中用藍色節點表示)。然後,對於另一個節點(即圖5中的橙色節點),就需要生成一個比其父節點值大的新的最小隨機數。繼承父節點最小隨機數值的子節點是根據子節點中包含的葉子節點數量來隨機選擇的。這是因爲如果所有葉子節點中的隨機數是均勻分佈的話,那麼子樹中出現最小值的概率與葉子節點數量成正比。因此,子節點被選中的概率爲:其中,表示節點的索引,表示節點包含的葉子節點的索引集,並且表示節點的兄弟節點的索引。對於非分層採樣,上面的比父節點值大的新的最小隨機數可以用這個公式生成:,其中,是父節點傳播給其兄弟節點的最小隨機數,並且當該節點爲根節點時。然而,這種形式在數值上是不穩定的。爲了提高分層採樣的數值穩定性,我們只對兄弟節點(新生成隨機數的節點)的隨機數空間進行分層。儘管這種半分層的方法不能保證其兄弟節點的後代節點也是完全分層的,但它可以在葉子節點中生成均勻的隨機數。
半分層算法
算法1顯示了我們使用實時半分層隨機賦值進行分層俄羅斯輪盤賭的僞代碼。我們的方法首先在根節點處假定1維的分層採樣來生成一個最小的隨機數。這個最小的隨機數是通過生成一個單一的均勻隨機數,然後使用上面的公式來生成的:其中,是根節點包含的所有葉子節點的索引集(即所有緩存的光頂點)。在我們自上而下的算法中,父節點中最小的隨機數會被傳播給一個子節點,並且會在另一個子節點中生成一個新的最小隨機數。對於這些隨機數的傳播和生成,我們使用了數值上穩定的分層採樣方法。爲了對兩個兄弟節點之間的隨機數空間進行分層以獲得最小隨機數,我們從父節點中傳播其分層的上確界到子節點中(包括)。然後該子節點的兄弟節點使用一個相鄰的分層。這個上確界由分層和其包含的葉子節點數量決定,公式如下:儘管這個分層會和其兄弟節點的後繼節點的分層重疊,但其計算非常簡單。使用分層,新的最小隨機數只需要生成一個單一的均勻隨機數就可獲得,公式如下:上上個公式是上面這個公式的特殊情況,即對於根節點來說。這個過程在BVH的遍歷中會迭代執行。使用這個算法,我們給每一對光頂點和眼睛頂點賦予了不同的隨機數,並且不需要在整棵樹中執行一次完整的自下而上的遍歷。
我們的實時隨機數賦值方法將條狀走樣轉換成了高頻的噪聲。儘管在我們的方法中只是部分分層,但對於性能和數值穩定性來說都是非常有利的。更多的實現細節可以參考補充材料中的c++示例代碼。
半分層算法的PDF
我們的半分層算法避免了兄弟節點之間分層的重疊,但它卻忽略了兄弟節點的後繼節點的完全分層。因此葉子節點的分層會出現重疊的情況。但由於這些重疊的分層的PDF之和總是爲1(即均勻分佈)[問題4],因此我們的方法是無偏差的。爲了在分層之間生成隨機數,這個PDF計算如下:在某個節點處發生生成事件的概率值爲從根節點到該節點處的子選擇概率的乘積。根據從該節點到後繼節點處子選擇概率的乘積,這個生成的隨機數會被傳播給後代節點。設爲從根節點到某節點的節點索引集,這個生成隨機數的PDF爲:其中,如果表示根節點,則。當到達葉子節點時,,因此這個PDF變爲,其中。圖5顯示了我們算法中隨機數、分層和PDF的生成和傳播過程。如該圖所示,葉子節點中重疊區域的PDF之和爲1。
對接受概率的近似各向異性反射波瓣
雖然隨機散射範圍的形狀由所表示的波瓣決定,但理想的形狀也應該能簡單、高效地進行剔除操作(即在和每一個BVH節點間進行相交測試)。儘管一個鬆弛的包圍球可以用來進行保守的相交測試,但其增加了許多誤匹配的情況,尤其在各向異性的BRDF中。爲了對微平面BRDF的各向異性散射波瓣生成一個更緊密的包圍橢球,我們引入了一個平方橢球波瓣(SEL)函數來表示波瓣。對於高效地實現橢球與包圍盒的相交測試,可以參考補充材料。
GGX分佈
我們的SEL函數是基於GGX分佈的:其中,是一個由波瓣軸和組成的的正交矩陣,並且是變換到波瓣空間的方向。這個正交矩陣表示波瓣的朝向。是海維賽德函數:當時值爲1,否則爲0。對於各向同性的情況,這個分佈可以使用來重寫:對於微平面BRDF,GGX分佈用於法線分佈函數(NDF,即微平面法線的分佈),其中參數如下:,表示半程向量,正交投影矩陣由切線、副切線和平面法線組成。對於這個情況,表示平面粗糙度。GGX分佈也用於近似散射波瓣(例如基於圖片的光照)。在本文中,只有用作爲NDF時,GGX分佈才被稱爲GGX NDF。使用GGX近似的散射波瓣被稱爲GGX散射波瓣。我們使用SEL近似的波瓣是基於GGX散射波瓣的。
平方球波瓣(SSL)
對於微平面BRDF,可用半角近似各項同性GGX分佈的散射波瓣:其中,是位於和波瓣軸(即散射波瓣的主導方向)之間的夾角,並且是散射波瓣的粗糙度。這個公式表示的散射範圍就變成了一個球體。在本文中,上面公式的右邊沒有標準化因子,所以稱爲平方球波瓣,可以由下式計算:
平方橢球波瓣(SEL)
即使NDF是各向同性的,微平面BRDF也會生成各向異性的散射波瓣。因爲上式是一個各向同性的球函數,所以它不能表示這種各向異性的散射效果。因此,我們將平方球波瓣推導到了平方橢球波瓣(SEL)。我們在生成SEL時使用了兩個粗糙度參數:
其中,。對於這個公式的推導,可以參考補充材料。這個SEL的平方根是一個簡單的橢球,其在波瓣空間中的中心點和半軸分別爲和。
GGX的近似
儘管GGX是一個半球分佈,但SEL是一個橢球函數。然而,對於低粗糙度的情況,可以使用下面的公式來近似:圖6顯示了不同粗糙度參數時上式的近似準確率。對於較小的粗糙度值,近似誤差可以忽略不計。
各向異性散射波瓣的近似
對於使用了多重重要性採樣(MIS)的雙向路徑跟蹤(BPT),只有在散射波瓣峯值的附近(即BRDF和cos的乘積),PDF的近似準確率纔是重要的。因此,我們在近似的峯值方向使用原始的波瓣值來作爲SEL的係數:其中,是係數。對於微平面BRDF來說,因爲陰影遮罩函數和菲尼爾係數是低頻的,所以峯值方向就可以在光滑平面用完美的鏡面反射方向來近似。波瓣軸和粗糙度可以通過分析球面翹曲[問題1]來獲得。儘管球面翹曲是通過各向異性球面高斯推導得出,但其仍然可以應用於GGX分佈。因此,本文生成SEL的步驟如下:
(1)如果NDF不是GGX,則將它近似爲GGX NDF;
(2)GGX散射波瓣在的中心可以用GGX NDF的球面翹曲來計算;
(3)使用上上式可以將GGX散射波瓣轉換爲SEL。
可以參考附錄A來獲取更多關於球面翹曲的細節。
集成進雙向路徑跟蹤
本文通過使用多重重要性採樣(MIS)來將我們的基於分層俄羅斯輪盤賭的連接方法和概率連接相結合。這是因爲我們的連接方法在鏡面-漫反射-光澤(SDG)和光澤-漫反射-光澤(GDG)的路徑上非常高效,但概率連接在低頻的光照效果處也很高效。概率連接根據概率質量函數(PMF)從緩存中爲給定的眼睛頂點採樣重要的光頂點,該函數會同時考慮可見性、幾何項和光頂點及眼睛頂點處的BRDF。然而,概率連接有重用的光子路徑的數量限制(例如100條),因爲它的計算代價和內存需求與重用的子路徑數量及PMF記錄數量成正比。在非常光滑的表面處使用成百上千個採樣依然不夠充分。儘管我們方法在計算範圍時忽略了光頂點的可見性和BRDF,但是重用數百萬的光子路徑可以減輕概率連接和常規頂點連接的限制。
多重重要性採樣
爲了使用例如平衡啓發等強大的多重重要性採樣(MIS)策略,就必須獲得採樣數和PDF。簡單的俄羅斯輪盤爲M條光子路徑詳細地給出了採樣密度:其中,是根據光子路徑和眼睛子路徑構建得到的路徑,並且表示眼睛頂點處常規頂點連接的PDF。表示和之間連接的俄羅斯輪盤賭的接受概率。另一方面,概率連接忽略了PMF,而使用作爲採樣密度。這是因爲,對於其他技術構建的路徑,概率連接無法獲得PMF,而考慮到子路徑重用導致的路徑相關性的最壞情況,樣本計數會被修改爲1。雖然這種修改對路徑相關性來說比較保守,但並沒有提高SDG和GDG路徑的效率。因爲將光澤反射考慮在內,我們這種結合的方法可以高效地採樣SDG和GDG路徑及其他路徑。儘管我們的俄羅斯輪盤賭在許多光源的情況下也會產生路徑相關性,但通過設置一個小系數表示接受概率,這個誤差可以比連接一個眼睛頂點到所有光頂點的誤差小很多。
優化
爲了提高這個結合方法的效率,本文只在位於光滑表面的眼睛頂點處使用基於俄羅斯輪盤賭的連接,因爲概率連接在漫反射表面處的效率更高。另外,在我們的連接方法中,不會重用和(即光源處的光頂點和第一個相交的表面)。這是因爲這種連接路徑不可能是SDG或GDG的情況。這個優化操作不僅提高了執行效率和採樣效率,也減少了緩存的光頂點的內存佔用。
未來工作
限制
完美鏡面
分層的俄羅斯輪盤賭不支持完美鏡面的表面。因此,在不可連接的鏡面-漫反射-鏡面(SDS)路徑時使用頂點合併方法,如圖13所示。
然而,我們的方法在極端光滑的反射表面處依然可以高效地工作(例如,GGX粗糙度爲0.0001),這時再最終渲染處的圖片裏就很難區分完美的鏡面反射和極端光澤的了。
閃爍高光
由於眼睛頂點和光頂點之間的平方逆距離,頂點連接會產生閃爍高光(Fireflies)走樣。對於SDG和GDG的雙向路徑跟蹤(BPT)情況,如果使用的是無偏差的方法,閃爍高光在光滑物體的邊緣部分是無法避免的。儘管我們的方法明顯地減少了閃爍高光走樣,但在BPT中,閃爍高光依然會在角落等少量地發生。這是因爲俄羅斯輪盤的概率必須限制爲小於等於1。然而,這種閃爍高光在後處理階段可以輕鬆地移除,如圖14b所示。結合使用小合併半徑的頂點合併方法也能抑制閃爍高光,如圖14c所示。
路徑相關性
對於使用小的接受概率的多頂點連接的俄羅斯輪盤賭,會產生比連接眼睛頂點到所有光頂點方法更少的相關性。然而,當光頂點的分佈在局部非常密集時,也可能會產生明顯的路徑相關性效果,類似VCM。如果啓發式的多重重要性採樣將光頂點的密度也考慮在內的話,算法的魯棒性也可以進一步提升。我們推薦讀者閱讀多重重要性採樣的方法來實現將VCM中光頂點的密度也考慮在內的算法。
改進
各向異性折射
在我們的散射波瓣表示方法中,對各向異性的反射使用了現有的球面翹曲方法,然而對於各向異性的折射卻沒有相應的球面翹曲方法被提出。儘管可以用簡單的各項同性球面翹曲來替代,但是對於各項異性的NDF來說會很低效。推導各項異性折射波瓣的球面翹曲將會是我們未來的工作。
多反射波瓣
我們現在實現的分層俄羅斯輪盤方法只適用於單個波瓣的表示情況,因此也應該將其引用於多散射波瓣BRDF的每一個波瓣中。然而,分層俄羅斯輪盤方法只支持表示多散射波瓣的聯合橢球。我們將會研究多散射波瓣的高效表示方法。
光頂點處的BRDF
因爲我們的方法忽略了光頂點處BRDF的俄羅斯輪盤概率,但對於光滑到光滑相互反射和光滑-漫反射-鏡面(GDS,不是SDG路徑)路徑的情況就很低效。對於GDS路徑,我們可以使用所提出的分層俄羅斯輪盤的逆過程,即在光頂點的散射範圍和眼睛頂點的BVH間進行相交測試。然而,這種方法必須額外緩存眼睛頂點,並且實現起來也非常複雜。考慮光頂點處BRDF的高效方法也是未來的工作。
問題
問題1
球面翹曲(spherical warping)是什麼?
a:類似於17年那篇文章的球面橢圓形。
問題2
爲什麼可以根據概率密度函數來生成最小值?
a:根據補充材料中公式的推導,這個是指最小隨機數,所以這個PDF表示個均勻隨機數中,爲最小隨機數的概率。這樣就可以根據這個PDF去判斷每一個隨機數是最小隨機數的概率,然後確定哪個是最小的隨機數。但是這種方法不高效,所以就需要使用累積分佈函數。
問題3
沒看出累積分佈函數和生成最小隨機值之間的邏輯關係。
a:累積分佈函數的反函數可以用來生成服從該隨機分佈的隨機變量。因此,若想要生成最小的隨機數,則該最小的隨機數也必須滿足這個分佈(必要條件)。累積分佈函數可以用來計算從0到某個值()爲止所有隨機數爲最小隨機數的概率和,也就表示最小隨機數出現在區間內的概率,由於其公式中包含最小隨機數,所以用其反函數可以直接求出最小隨機數(充分條件)。最後只剩下累積分佈函數的反函數的輸入參數了,這個參數可以通過隨機生成一個數決定,因爲都是隨機的,所以這個參數隨機可以增大隨機性。
問題4
怎麼計算出的重疊區域的PDF之和爲1?
a:可以參考這篇paper的slide