聊聊最近幾年的路徑追蹤技術的進展(一)
路徑追蹤技術(Path tracing,PT)已經是當下工業中離線渲染使用的主流技術,不管是商業渲染器如皮克斯的RenderMan,Solid Angle的Arnold等,還是迪士尼的in-house渲染器Hyperion以及Weta Digital的Manuka都是基於路徑追蹤技術。路徑追蹤演算法非常簡單,它首先將光照方程表述為面積積分的形式,然後一束光線從光源經過各個物體表面及內部多次互動(反射,折射,散射)後進入影象平面的貢獻值(即輻射照度)被轉換為這些表面互動點形成的路徑的一個積分,其被積函式為這些表面的雙向散射係數(BSDF),頂點之間的積分變數變化(change of variables)以及頂點之間可見性的乘積。在統計中,積分可以很簡單地使用蒙特卡洛方法進行估計,因此光照傳輸的問題就轉化為對場景進行路徑取樣,然後對每條路徑的貢獻值進行平均求和的蒙特卡洛積分計算。
儘管自基本的路徑追蹤演算法被提出以來,各種增強改進的方法被整合進來,然而上述路徑追蹤技術的“基礎架構”幾乎沒有多少實質性的變化。對於任何行業,工業中主流的技術一般不是當下最先進的技術,而是最成熟可工業化的方案,當前工業中的路徑追蹤技術優化主要集中在優化演算法的執行效率,主要是針對處理器硬體架構進行優化,例如針對快取系統的優化,增強資料區域性性和指令區域性性,以及改進光線連貫性(ray coherence)使其能夠利用SIMD指令進行高效計算等,這方面比較突出的是迪士尼的Hyperion渲染器,一些渲染器的優化更是幾乎能達到某些場景複雜度範圍內實時渲染,例如Embree。
然而以上這些內容卻不是本文關注的重點(上述內容會在thegibook中詳細討論),本文我們要討論的是一些路徑追蹤演算法基礎架構層面的改進,這些演算法還很少出現在當前工業解決方案中,但是確實未來的重要發展趨勢。
傳統的路徑追蹤演算法是一個單純的積分問題,因此可以使用蒙特卡洛方法來估計,然而蒙特卡洛方法的每個抽樣是獨立的,因此很難有效快速對一些比較困難的路徑進行取樣,一些很難被取樣的路徑需要巨量的取樣數才能達到“令人滿意”的結果,這導致非常緩慢的收斂速度。儘管開始的收斂速度非常快(4倍取樣數量可以減少1/2的誤差),但是越到後面會花費更多倍的時間。傳統的方差縮減技術如重要性取樣,分層取樣,擬蒙特卡洛方法(Quasi-Monte Carlo)仍然不能改變這個收斂速度。
要提升蒙特卡洛估計的收斂速度,直觀上,我們需要能夠辨識每個影象的分佈特徵,然後在一些高頻變化區域增加取樣的密度。然而,傳統的蒙特卡洛方法中每個抽樣之間是獨立的,它並不能有效辨識這種頻率變化特徵,儘管梅特波利斯光照傳輸(Metropolis light transport,MLT)通過取樣點之間的相關效能夠尋找一些困難路徑,本質上它仍然並不善於處理和分析頻率域特徵。要想能夠辨識影象的分佈特徵,我們需要了解每個路徑的區域性特徵,即是我們需要對路徑追蹤演算法引入微分運算。路徑的微分涉及路徑與附近區域性範圍內光線的差值,即影象的區域性特徵,因此它引入了光線之間的相關性,可以從多個層面改善路徑追蹤演算法的效率(也正是如此,我們認為這是近幾年路徑追蹤技術領域的重大進展)。
最近幾年路徑追蹤領域的一些重大進展正是微分幾何(differential geometry)的引入,由於微分反應的是流形(manifold)的區域性變化,因此非常善於尋找影象分佈中的高頻部分,目前路徑追蹤演算法中的微分運用主要包括:以通過計算紋理過濾函式實現反走樣的光線/路徑微分(ray/path differential)和協方差追蹤技術(covariance tracing);以通過計算梯度影象用於利用篩選泊松方程(Screened Poisson equation)重建目標影象的梯度域渲染(gradient-domain rendering);以及通過將微分幾何結合費馬定理(Fermat principle)用來尋找鏡面/光澤路徑的流形探索(manifold exploration),半向量空間光照傳輸(half vector space light transport)等技術;此外,微分還被用於適配性取樣(adaptive sampling),成為重要的降噪技術(Denoising)。
以下我們就來從概念和思路上分析上述這些技術,當然我們可以提前知道的這些技術的一個重要共同點就是:這些微分計算通常不需要通過光線追蹤引入新的取樣點,否則那樣的計算成本就很高,這些技術通常都是利用微分幾何和某些假設進行單純的微分計算,這裡主要的工具是一階泰勒展開式(first-order Taylor approximation)和頂點處的切線平面空間(tangent space),因此,這些新技術通常都可以很容易地集成於目前主流的路徑追蹤技術基礎架構之上,更詳細的內容請參考thegibook中相關章節。
接下來我們討論的每一種微分的運用都涉及一個相對比較獨立的層面,在閱讀這些內容的時候,你首先需要非常清晰的瞭解的是它用來解決什麼問題,因此我會在每一節的開頭提出這個問題,然後讀者可以圍繞這個問題來閱讀每一小節,即每一種技術。
光照傳輸的區域性頻率域分析
微分反應的是影象的區域性特徵,因此其在影象渲染中最直觀的運用就是用於反走樣(anti-aliasing)。光線追蹤演算法中由於採用不足導致的走樣問題可以分為兩大類:對路徑空間(path space)的取樣不足和對紋理空間(texture space)的取樣不足,本質上這都是由於路徑取樣的不足導致的,但是它們通常使用不同的方法來解決。一個畫素區域內的光線從螢幕空間發射出去之後,隨著光線在表面的各種互動這個面積可能會無限擴散,所以單純增加路徑取樣的數量可能也很難彌補紋理走樣(texture aliasing)的問題。所以它們分別對應路徑追蹤演算法中兩個比較獨立的反走樣技術:路徑空間取樣不足主要對應於降噪技術,紋理空間取樣不足對應於紋理過濾技術。
目前降噪技術主要的思路是針對影象的分佈特徵進行適配性取樣以及適配性重建,前者對應於在影象的高頻區域放置更高的路徑取樣密度;後者對應於根據影象特徵對不同的區域使用不同的重建過濾器(reconstruction filter)。對路徑進行適配性取樣的方法可以分為兩類:第一種直接對光照傳輸方程進行分析,稱為先驗方法(a priori method);而第二種只對螢幕空間的影象進行分析,稱為後驗方法(a posteriori method)即是說與路徑取樣的方法無關。
光照傳輸的區域性頻率域分析可以用於紋理過濾以及作為降噪技術中的先驗方法。以下我們討論區域性頻率域分析的方法和思路。
路徑的區域性頻率域分析雖然不是源自光線微分(ray differential)技術,但是跟它有很大的聯絡。光線微分技術的核心思路是隨著光線的傳播跟蹤該光線對應的頻率區域一個畫素的大小,這稱為光線的足跡(footprint),如下圖所示,在路徑追蹤演算法中追蹤每條路徑的時候,同時沿螢幕空間x和y方向分別發射一條一個畫素大小的偏移路徑,然後對每條基礎路徑同時跟蹤兩條偏移路徑。路徑在每個頂點處的足跡大小則可以通過積分計算出來。當然光線微分技術並沒有完全利用微分幾何的知識,因為它假設偏移路徑和基礎路徑在每個路徑頂點處位於同於平面-即該頂點的正切平面(tangent space)上,所以光線微分的計算大大簡化了。
由於假設偏移路徑和基礎路徑和表面的交點位於同一平面,上述光線微分技術僅適用於鏡面表面(specular surface),路徑微分(path differential)在此基礎上將光線微分擴充套件到了光澤面(glossy surface)和漫反射表面(diffuse surface),它雖然有比較理論的推導,但是實踐上主要使用經驗方法,即根據表面的粗糙度用來縮放足跡的大小以支援光澤面和漫反射表面。
上述的光線/路徑微分技術實際上是光線的一種區域性特徵,傳統的路徑追蹤演算法中每條光線之間的獨立的,所以不能夠分辨這種區域性特徵。然而上述方法還是有很多缺點,例如光線經過多次傳播之後可能形狀非常不規則,而兩條偏移路徑計算的四邊形無法表達這種形狀;其次偏移路徑可能被阻擋,而光線/路徑微分是忽略這種阻擋的;為了更好的追蹤光線的區域性特徵,我們需要更完整的對光線的傳輸過程進行分析。
目前對光線進行區域性分析的方法的思路主要是將光線的區域性特徵表示為一個空間-方向分佈(spatial-angular distribution)的區域性光照場(local light field),如下圖所示,黃色的中心光線表示基礎光線,周圍的一些具有不同位置和方法分佈的光線是一些虛擬光線,它們共同構成一個區域性的空間-方向分佈。例如對於攝像機光線,它的區域性光照場的分佈就是一個畫素範圍大小的一個過濾器,該過濾器對於每個不同方向和位置處的光線都具有一個不同的權重值,這個過濾器就反映了攝像機路徑的區域性特徵;對於光源路徑,如果是面積光,則區域性光照場的方向為固定值,而位置分佈於面積光源的各個位置。
有了區域性光照場的描述,剩下的事情就是計算該光照場隨著中心光線的傳輸。早期的思路是將光線在傳輸過程中的各種互動過程看做一個操作函式,例如光線的直線傳輸(transfer),反射,折射,陰影遮擋等,如下圖所示,然後在區域性光照場函式的頻率空間進行互動,這樣就可以跟蹤區域性光照場隨中心光線的傳播過程。
上述的傅立葉分析過程計算成本相對較高,為了簡化區域性光照場的傳輸,協方差追蹤(covariance tracing)技術考慮可以將一個4D的空間-方向分佈近似為一個橢圓形高斯分佈(elliptical Gaussian filter),如下圖所示,然後該分佈可以使用該4D光照場的協方差來表示,所以區域性光照場可以用其協方差矩陣(covariance matrix)來表示。然後這些對區域性光照場的傳播運算元就轉變為矩陣操作,最後在計算足跡的時候再從協方差計算出該4D區域性光照場的尺寸,這就可以用來替代上述的光線/路徑微分技術用來實現紋理過濾。
協方差追蹤不僅用於紋理過濾中計算區域性光照場足跡的大小,還被用於適配性取樣,如果我們從光源路徑方向追蹤光源的空間-方向分佈至螢幕空間,則我們可以在螢幕空間分析影象的頻率分佈,進而可以用於適配性取樣,如下圖所示。下圖的區域性光照場是一個5D空間,它還包含了時間維度,因此可以用於計算運動模糊(motion blur)效果,在該圖中,首先從光源發出光線經過一次表面互動(即直接光)之後投射一個橢圓形分佈到螢幕空間,然後根據這些分佈就可以計算出影象的頻率分佈,這些分佈特徵被用於適配性取樣。
除了協方差追蹤,光照傳輸的區域性頻率域分析還包括其他一些方法,但是目前協方差追蹤是更簡單和高效的一種技術。當然協方差追蹤的限制是它將區域性光照場近似為一個橢圓形的分佈,實際的區域性光照場分佈特徵可能還需要更負責的形狀表述,這也是未來的優化方向。
下一篇我們將討論梯度域渲染和流形探索或者半向量空間光照傳輸。