基於物理的渲染—基於球面調和基的實時全局光照明

原文鏈接:基於物理的渲染-基於球面調和基的實時全局光照明 - Blog

在介紹本文的主要內容PRT之前,我們先介紹在遊戲引擎渲染管線中常見的一個步驟 IBL。迪士尼在2012年Siggraph會議上發表的 PBR course中提到,他們在 PBR 的渲染管線中加入了 IBL(Image Based Lighting)使得渲染結果更加真實。目前,IBL幾乎成為了 PBR 渲染管線必不可少的一部分(例如:很多引擎提供了 SkyBox 作為環境光貼圖,或者提供採樣工具來抓取場景的環境光貼圖,然後用該貼圖來渲染場景中物體)。

什麼是IBL,為什麼要使用它呢?其實,在早期實時渲染中,我們常用方向光模擬無限遠的太陽光,用點光源來模擬近處的燈光。但實際上,當一個物體處於某一個場景中時,它被來自四面八方的入射光線所照亮。這些入射光不僅來自於光源,有的還來自於物體表面的漫反射、鏡面反射、折射,甚至有的來自於霧氣中的散射。為了模擬這些真實的、來自四面八方的入射光,IBL的思路是:假設場景中的物理被一個密閉的立方體包圍,那麼場景中射向它的光線必定來自於這個立方體的6個面。我們只需要將物體周圍的場景渲染到這6個面上作為入射光,那麼這6個面即涵蓋了所有來自光源、物體表面反射、霧氣散射等的各種光線。

由於 IBL 採用了真實拍攝的環境光貼圖作為入射光,因此能夠更加逼真地模擬物體在真實環境中被照亮的情況。但是這一演算法需要對立方體環境貼圖進行採樣,計算來自環境貼圖各個方向的入射光對物體的光照信息,這一過程時間開銷非常大,即使是利用GPU的並行性也無法實時地完成。於是,有人提出了將入射光和材質在半球面上的卷積計算轉換為球面調和函數基(Spherical Harmonic Function,簡稱 SH)上的點積,減少實時計算的開銷。今天我們介紹的這篇論文就是基於IBL,並且在此基礎上引入了全局光照明,達到了實時全局光照的效果。

這篇文章是Peter-Pike Sloan發表在2002年Siggraph會議上的論文。它提出了一種預計算的方法,將全局光照計算中的不變數預計算存儲下來,實時渲染時只需要計算變化的部分,這樣大大減少了實時渲染的時間開銷。這篇論文的演算法是第一個做到實時全局光照的渲染演算法,並隨後掀起了一波極大的研究浪潮,它就是著名的PRT(Precomputed Radiance Transfer)。

我們首先來看這篇論文的渲染結果,如下圖所示。

其中,左圖是不包含全局光照的結果,右圖是包含全局光照的結果。對比左右兩邊,可以看到右邊的模型表面凹陷進去的地方比左邊更加暗,這是因為右圖增加了AO(AmbientOcclusion)。同時,右圖還增加了表面多次反射光照的計算。這些效果都是通過實時計算完成,而這正是傳統的全局光照演算法無法達到的,如:蒙特卡洛光線跟蹤、輻射度以及多遍點光源等。

要實時地渲染出全局光照效果,其難點主要有三個:1)需要模擬複雜的BRDF;2)需要計算入射光線半球積分;3)需要計算遮擋,物體表面多次反射。

論文作者將這些複雜的光照計算過程看作一個光線傳輸函數(Transfer Function),將入射光信息看作函數的輸入。並且利用球面調和基函數、光線傳輸的線性性以及預計算,將入射光線在物體之間多次反射傳遞的複雜計算變為簡單快速的內積計算。由於作者採用了低階的球面調和基函數來表示,因此只考慮了低頻的光照信息(環境光貼圖的變化不大)。PRT 演算法的流程圖如下圖所示。

其中,上圖是 Diffuse 材質的流程圖,下圖是 Glossy 材質的流程圖。從上圖可以看到,PRT 演算法先將環境光貼圖投射到 SH 上,計算出一個 SH 係數向量。然後,利用離線的全局光照演算法對物體進行全局光照模擬計算出傳輸函數,並且將傳輸函數也投射到 SH 上,得到一個係數向量。最後在實時計算的時候,將光照的 SH 係數向量與預先計算好的傳輸函數 SH 係數向量做點積,即可計算出物體表面上的光照。由於 Diffuse 材質與視線方向無關,因此傳輸函數只需一個向量即可表示。但是對於 Glossy 材質,不同視點觀察物體表面同一點會有不同的光照。因此,Glossy 材質的傳輸函數需要增加一個視線方向的維度,變成一個矩陣。在實時計算時與 Diffuse 一樣,將光照向量與傳輸函數矩陣做乘法,得到傳輸後的入射光照向量。然後,將該向量與物體材質 BRDF 做卷積,得到一個表示各個方向反射光線的向量。最後,從這個向量中計算出視線方向的反射光線。接下來我們介紹這篇論文的主要內容。

一、球面調和基函數介紹

PRT 演算法利用了一個重要的數學工具,就是球面調和基函數。SH 類似於傅里葉變換,只不過傅里葉變換定義在一維變數上,SH 是定義在二維球面上。而渲染方程中的積分正是定義在二維球面方向上,因此 SH 非常適合解決渲染方程的計算問題。同樣,一個定義在二維球面 s 上的函數可以用 SH 基函數以及係數近似表示。若用 l 和 m 表示 SH 的兩個參數, f(s) 表示定義在球面上的函數,ylm 表示基函數,則 f(s) 在 SH 上的投影係數可以表示為:

f(s) 則可以近似表示為:

PRT 利用了 SH 的兩個性質,1)旋轉不變性,2)正交性。旋轉不變性保證了在將環境光貼圖投射到 SH 上之後,對於物體表面任意法線方向,我們可以對其進行旋轉後採樣。正交性保證了對於任意兩個定義在球面上的函數的卷積計算,它們可以轉化為對應 SH 係數的點積。

二、傳輸函數介紹

2.1 Diffuse材質

不考慮物體表面多次反射時,對於材質為Diffuse的物體 O ,其表面一點 p ∈ O 處的渲染方程可表示為:

其中, HNP(s)=max(Np . s, 0) 為餘弦項,Np 為 p 點法向,ρp 為 p 點顏色,Lp 為入射光,可見性函數Vp (s) → {0,1} ,被遮擋時取 0,反之取 1 。因此,傳輸函數 MpDS 可表示為:

其中將 Lp 以及 Mp 分別投影到 SH 上,TDS 的積分計算變成了 SH 係數向量的點積。

考慮物體表面多次反射時,p 點的渲染方程可表示為:

其中,LP (s)表示來自物體 O 從 s 方向射入 p 點的光。對於TDI 的傳輸函數 MpDI (s) ,難以用完整的表達式表示。但是在實現的過程中,我們可以通過多次迭代表面反射來計算 MpDI (s) 。

2.2 Glossy材質

類似於 Diffuse 材質,Glossy 材質的渲染方程可以表示為:

其中,G (s, R, r ) 為 p 點 BRDF,R 為反射光線方向,r 為 Glossy 參數。由於 Glossy 材質不僅與光線入射方向 s 有關,因此其傳輸函數不能僅僅用一個向量表示。論文作者提出的方法是,將入射光 LP (s)轉換為傳輸後的入射光 LP (s) 。假設 G 是關於 R 對稱的,則可通過將LP (s)與卷積 G (s,(0,0,1), r ) 來計算最後的結果。因此,從 LP (s)到 LP (s)的傳輸函數可以表示為:

三、預計算與實時渲染

論文作者採用多遍模擬方式來預計算傳輸函數。在第一遍時,對於物體 O 上每一點 p ,僅僅計算直接光照的結果。然後,對於被物體遮擋住的光線,繼續迭代計算從該方向反射的光線。並且,在後續的迭代計算中,將之前的光照結果加入其中。在計算每一點的傳輸函數時,論文作者採樣 10k~30k 個方向。在計算光照的同時,也計算遮擋信息。隨著迭代次數的增加,當能量衰減到某一閾值時,停止迭代結束計算。

在實時渲染時,採用如下步驟:

1) 計算物體 O 入射光 Lp;

2) 將 Lp 旋轉到 O 法線方向的局部坐標;

3) 將 Lp 向量與 Mp 向量做點積,或者與Mp 矩陣乘法;

4) 對於 Glossy 物體,將傳輸後的入射光 Lp 與 BRDF 做卷積,並計算 R 方向反射光線。

當需要計算不同物體之間的多次反射光線時,採用如同單個物體一樣的迭代計算,但在迭代時不僅僅計算來自自身的反射光線,也計算來自其他物體的反射光。

四、實驗結果

論文作者採用不同的場景做實驗,均能達到實時的幀率。實驗數據如下圖所示。

更多的渲染結果對比如下圖所示。

五、總結

論文作者利用 SH 的旋轉不變性和正交性,在預計算中模擬光線在照亮物體時傳輸的過程,並將該過程的傳輸函數投射到 SH 上。在實時渲染時,只需要計算光源在 SH 上的投射係數,然後與傳輸函數的 SH 投射做點積即可計算出光照信息。這一演算法達到了實時地計算全局光的效果。

PRT 不僅為我們提供了實時全局光照明的方法,更重要的是它為我們提供了一個優化實時渲染性能的思路,即預計算。在任何渲染計算中,我們都可以找到一個預計算與實時計算的平衡點。當實時性需求高而硬體性能又達不到要求時,我們可以將部分計算預先做好,然後只保留少量必要的變數。在實時計算時,通過查表的方式讀取預先計算好的結果,然後通過簡單擬合計算出最終結果。當然,如果採用預計算的方式,就意味著需要採樣,增加存儲量。並且,輸入環境發生改變時,預計算的變數不會發生變化了,這必然會帶來限制條件。例如本文介紹的這篇論文中的 PRT ,因為它採用傳輸函數將光線在物體間傳輸的過程預計算好,所以它只能計算實時計算靜態物體的全局光照。當物體之間的幾何關係發生變化時,預計算好的傳輸函數則不再有效。

六、論文信息

論文參考視頻:

視頻網址:PRT-實時全局光照明 - 騰訊視頻

作者介紹:

Peter-Pike Sloan,著名計算機圖形學學者,曾經在微軟研究院從事圖形學研究工作,目前在動視暴雪做圖形研究。

Jan Kautz,著名計算機圖形學學者,曾經在max planck institut informatik研究所學習,目前在Nvidia做圖形研究。

John Snyder,著名計算機圖形學學者,曾經在微軟研究院從事圖形學研究工作。

下載鏈接:

www-inst.eecs.berkeley.edu/~cs283/fa10/lectures/p527-sloan.pdf

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

關於惟學無際

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


推薦閱讀:

電影工業中的流體模擬(四)- 納維斯托克斯方程(下)
利用Stencil來優化局部後處理特效
在中國科幻電影人才缺乏時,是否能通過設立電影物理學專業,實現彎道接近國外頂尖水準?
遊戲後期特效第四發 -- 屏幕空間環境光遮蔽(SSAO)

TAG:计算机图形学 | 3D渲染 | Unity游戏引擎 |