基於物理的渲染—基於Haar小波基的實時全局光照明

原文鏈接:基於物理的渲染-基於Haar小波基的實時全局光照明 - Blog

上一期惟學無際我們給大家介紹了一篇 基於球面調和基函數(Spherical Hamonices,簡稱 SH )的動態全局光照明演算法。它的思路是:將光線在物體間複雜的傳輸過程看作一個傳輸函數,預先模擬計算好並用 SH 基函數來近似表示。同時,在實時光照計算時,將入射的環境光用 SH 基函數近似,這樣光照渲染結果可以用兩者的 SH 基函數的點積進行計算。該演算法通過預計算模擬,使得實時計算的複雜度大大降低,從而能夠支持實時動態光源的全局光照明渲染。但是,該演算法有一個缺陷,即只能獲得低頻的渲染效果。因此,基於 SH 的 PRT 只能渲染類似於 AO(Ambient Occlusion)的軟陰影,無法渲染有明顯輪廓邊界的真實陰影。

今天介紹的這篇文章是 Ren Ng 等人在2003年發表於 Siggraph 會議上的經典論文 《All-Frequency Shadows Using Non-linear Wavelet LightingApproximation》,目前該篇文章的引用次數已經超過400次。在這篇論文中,作者提出了一個採用非線性小波變換來代替線性 SH 變換的 PRT 演算法。實驗結果證明,相較於前人的 SH 函數,本文作者在使用相同數量的小波函數時,能夠更好地捕捉到全局光照明的高頻信息。因此,該演算法能夠渲染出更加真實的全局光照明效果,比如具有明顯邊緣的實時陰影。

首先我們來看看這篇論文的效果圖,如上圖所示。其中,左圖是基於 SH 的 PRT 渲染結果,右邊是基於小波的 PRT 渲染結果。兩幅圖採用了相同數量的基函數項:左圖採用100個 SH 基函數,右圖採用100個小波基函數。中間的六個方形紋理則是環境光貼圖。比較左右兩圖的陰影渲染效果則可以發現,右圖的陰影邊緣較為清晰,而左圖的比較模糊。因此,在使用相同數量基函數的情況下,小波變換比 SH 變換能夠捕捉到更高頻的光照信息,渲染結果更加貼近真實情況。接下來,我們將詳細介紹這篇論文演算法的主要內容。

一、演算法與實現

所有的渲染問題,其實都是在解決渲染方程的計算問題。這篇論文也不例外,因此我們首先來介紹渲染方程。考慮物體表面某一點 x,其法線方向為 n,則該點從 ωo 方向反射出的光 P( x, ωo ) 可表示為:

其中,L 為入射光強,V 為可見性函數,fr 為BRDF函數,n 為法線方向,ω 為入射光方向。

論文演算法可以應用於兩種情況:1)視點變化,材質限定為Diffuse;2)視點不變,材質任意。接下來我們分別介紹這兩種情況下的解決方案。

1.1 視點可變且材質限定為Diffuse

當材質限定為Diffuse時,傳輸函數可以表示成為:

1.2 視點不變且材質任意

當材質為任意時,傳輸函數可表示成為:

其中,由於視點固定,所以 ωo 只跟 x 相關。

渲染方程中的積分式可以看成入射光強 L 與其他項關於入射光方向 ω 的卷積。離散化後就變成對應項相乘之後求和。於是,對於每一點 xi ,其光照計算可表示成為:

如果用矩陣以及向量形式表示,則可簡化為:P= T · L 。其示意圖如下圖所示。

1.3 預計算

在預計算階段,論文作者採用了兩種方法。第一種方法是每次對傳輸矩陣 T 的一列進行模擬計算,也就是對入射光向量 L 的每一個方向 ω 做計算,計算方式是光線跟蹤。因此,T 中每一列向量表示的是環境光貼圖每一個像素照射場景的結果。該方法比較簡單,並且支持各種全局光照效果,但是它只支持固定視點的情況。

第二種方法是每次對傳輸矩陣T 的一行進行模擬計算。這種方法只計算直接光照的部分。因此,傳輸矩陣的每一行表示的是物體表面某一點 x 的可見性立方體貼圖外加BRDF和Cosine項的權重,如下圖所示。

上方圖片為場景中某些頂點的預計算結果。其中,第一張圖是場景底部面片某一點的預計算結果,第二張圖是植物下方某點的預計算結果,第三張圖是植物葉子上某點的預計算結果。該方式可以用光柵化圖形硬體來實現。論文作者對每一個點 x ,首先渲染一個高解析度的半立方體可見性貼圖。然後計算BRDF和Cosine項的權重值,並且進行降採樣到環境貼圖一樣的解析度。

1.4 實時渲染

在實時渲染時,論文作者首先將環境光貼圖通過2D Haar小波變換計算出相應的係數向量 L 。然後,選用了一部分入射光進行計算。其主要目的是通過刪減能量比較小的入射光來減少計算量。論文作者採用了三種過濾方法。第一種是直接用Haar小波係數的大小進行過濾,第二種是用傳輸矩陣的對應列計算出一個權重,第三種是用光源的面積大小來過濾。然後,計算 L 與 T 的乘積得到最後的渲染結果。整個計算過程是在 CPU 端進行,因為小波變換後的係數向量和矩陣是非常大的稀疏向量和矩陣,而當時的 GPU 無法支持通用的稀疏矩陣乘法運算。

二、效果對比

論文作者分別用 SH 基函數以及小波基函數對環境光貼圖進行模擬,並且比較了兩者在採用不同數量基函數時的結果與原始環境貼圖差別,如下圖所示。

其中,左右兩幅圖是分別對兩張不同的環境光貼圖的模擬結果。在左右兩圖中,左邊一列是分別用100、4096以及10000個SH基函數項對環境光貼圖的模擬結果,右邊一列上兩幅圖是分別用100和4096個小波基函數項對環境光貼圖的模擬結果,第三幅是原始環境光貼圖。對比 SH 和小波的模擬結果可以看到,對於比較簡單的環境光貼圖,小波基函數只需要100項即可捕獲高頻信息,而 SH 需要4096項才能達到相似的結果。對於複雜的環境光貼圖,小波基函數只需4096項即可還原出原始貼圖,而 SH 即使採用10000項依然無法很好地還原原始貼圖。

小波變換之所以能夠用非常少的項就能捕捉全頻光照信息的原因是,經過小波變換後,大部分項的係數變成了零或接近於零,如下圖所示。

經過實驗發現,小波變換之後非零項所佔的比例只有0.1%~1%。小波變換相當於對全頻信息進行了壓縮。因此,採用相同數量項時,小波變換能捕獲的光照信息要比 SH 更多。但是,小波變換也有它的局限性。它並不具備 SH 的旋轉不變性,因此在傳輸函數中法線方向 n 被看作位置變數 x 的函數。這意味著基於小波變換的 PRT 無法實時渲染物體經過旋轉後的結果。而SH則沒有此限制。這也是基於小波變換的 PRT 在隨後的研究中發展受限的主要原因之一。

論文作者對比了採用不同數量項的 SH 基函數和小波基函數對環境光貼圖近似結果與原始圖的 L2 誤差,如下圖所示。

可以看到,隨著項數的增加,SH 和小波的近似誤差都在減少。但是小波收斂的更快,到1000 時已經比 SH 在10000項時的誤差還要小了。

三、更多渲染結果

論文作者渲染了採用更多的場景進行實驗,下表統計了不同場景中對環境光貼圖進行採樣的解析度、稀疏矩陣中非零項的比例以及內存佔用量。

更多的渲染結果如下圖所示,上排是 SH 渲染結果,下排是 Haar 小波渲染結果。從左到右採用的基函數項逐漸增加。可以見到 Haar 小波在採用相同數量基函數項的情況下,比 SH 渲染出的陰影結果具有更多的高頻細節。

四、總結

本篇論文提出了使用Haar小波函數來作為PRT的基函數,從而實時渲染出能夠保留全頻信息的全局光照明效果。與球面調和基函數相比,Haar小波基函數同樣具有標準正交性,同時,它的高壓縮比特性可以讓其以非常少的參數就可以保留住渲染效果的高頻信息,進而達到全頻光照明的渲染效果。雖然Haar小波由於自身特點限制在後續的全局光照明渲染中並沒有得到廣泛的應用,但其在推進全局光照明的實時渲染研究領域,有著不可磨滅的貢獻。

五、論文信息

論文參考視頻:

視頻網址: 基於物理的渲染-基於小波的實時全局光照明 - 騰訊視頻 https://v.qq.com/x/page/n0384trr1va.html

作者介紹:

Ren Ng,目前就職於UC Berkeley

個人主頁:EECS at UC Berkeley

Ravi Ramamoorthi,著名計算機圖形學學者,目前為UCSD教授。計算機圖形學界大牛,發表論文數量可謂著作等身(Publications 好幾頁翻不完)

個人主頁:RAVI RAMAMOORTHIS HOME PAGE

Pat Hanrahan,著名計算機圖形學學者,目前為斯坦福大學教授。計算機圖形學界大牛,曾經在Pixar工作,為RenderMan Shading Language開發者之一

個人主頁:Pat Hanrahan

下載連接:

graphics.stanford.edu/p

這是侑虎科技第213篇原創文章,歡迎轉發分享,未經作者授權請勿轉載。如果您也有任何獨到的見解或者全新的發現也歡迎聯繫我們,一起探討。(QQ群465082844)

關於惟學無際

為學無際是UWA在2017年推出的全新研究型專欄,我們將為大家推薦極具實際價值的學術論文,並梳理其中的研究背景、實現原理和執行方法等。內容專註於遊戲、VR和AR相關的計算機圖形學領域。正所謂問渠哪得清如許,為有源頭活水來 ,希望大家在研發的過程中不僅知其然,還能知其所以然。


推薦閱讀:

大萌喵的著色器特效第二發---相交高亮(掃描效果)
優化筆記:C# 從 List<T> 移除空元素
聊聊那些不常見的Shader
基於物理的景深效果
手游內存佔用過高?如何快速定位手游內存問題

TAG:Unity游戏引擎 | 3D渲染 |