天天看點

基于實體的渲染—基于Haar小波基的實時全局光照明

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

基于實體的渲染—基于Haar小波基的實時全局光照明

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

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

基于實體的渲染—基于Haar小波基的實時全局光照明

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

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

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

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

基于實體的渲染—基于Haar小波基的實時全局光照明

1.2 視點不變且材質任意

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

基于實體的渲染—基于Haar小波基的實時全局光照明

其中,由于視點固定,是以 ωo 隻跟 x 相關。

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

基于實體的渲染—基于Haar小波基的實時全局光照明

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

基于實體的渲染—基于Haar小波基的實時全局光照明

1.3 預計算

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

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

基于實體的渲染—基于Haar小波基的實時全局光照明
基于實體的渲染—基于Haar小波基的實時全局光照明
基于實體的渲染—基于Haar小波基的實時全局光照明

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

1.4 實時渲染

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

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

基于實體的渲染—基于Haar小波基的實時全局光照明

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

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

基于實體的渲染—基于Haar小波基的實時全局光照明

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

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

基于實體的渲染—基于Haar小波基的實時全局光照明

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

論文作者渲染了采用更多的場景進行實驗,下表統計了不同場景中對環境光貼圖進行采樣的分辨率、稀疏矩陣中非零項的比例以及記憶體占用量。

基于實體的渲染—基于Haar小波基的實時全局光照明

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

基于實體的渲染—基于Haar小波基的實時全局光照明
基于實體的渲染—基于Haar小波基的實時全局光照明

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

原文出處:侑虎科技

本文作者:admin

轉載請與作者聯系,同時請務必标明文章原始出處和原文連結及本聲明。

繼續閱讀