路徑追蹤技術(Path tracing,PT)已是當下工業中離線渲染使用的主流技術,不論是商業渲染器如皮克斯的RenderMan,Solid Angle的Arnold等,仍是迪士尼的in-house渲染器Hyperion以及Weta Digital的Manuka都是基於路徑追蹤技術。路徑追蹤算法很是簡單,它首先將光照方程表述爲面積積分的形式,而後一束光線從光源通過各個物體表面及內部屢次交互(反射,折射,散射)後進入圖像平面的貢獻值(即輻射照度)被轉換爲這些表面交互點造成的路徑的一個積分,其被積函數爲這些表面的雙向散射係數(BSDF),頂點之間的積分變量變化(change of variables)以及頂點之間可見性的乘積。在統計中,積分能夠很簡單地使用蒙特卡洛方法進行估計,所以光照傳輸的問題就轉化爲對場景進行路徑採樣,而後對每條路徑的貢獻值進行平均求和的蒙特卡洛積分計算。git
儘管自基本的路徑追蹤算法被提出以來,各類加強改進的方法被整合進來,然而上述路徑追蹤技術的「基礎架構」幾乎沒有多少實質性的變化。對於任何行業,工業中主流的技術通常不是當下最早進的技術,而是最成熟可工業化的方案,當前工業中的路徑追蹤技術優化主要集中在優化算法的執行效率,主要是針對處理器硬件架構進行優化,例如針對緩存系統的優化,加強數據局部性和指令局部性,以及改進光線連貫性(ray coherence)使其可以利用SIMD指令進行高效計算等,這方面比較突出的是迪士尼的Hyperion渲染器,一些渲染器的優化更是幾乎能達到某些場景複雜度範圍內實時渲染,例如Embree。算法
然而以上這些內容卻不是本文關注的重點(上述內容會在thegibook中詳細討論),本文咱們要討論的是一些路徑追蹤算法基礎架構層面的改進,這些算法還不多出如今當前工業解決方案中,可是確實將來的重要發展趨勢。緩存
傳統的路徑追蹤算法是一個單純的積分問題,所以可使用蒙特卡洛方法來估計,然而蒙特卡洛方法的每一個抽樣是獨立的,所以很難有效快速對一些比較困難的路徑進行採樣,一些很難被採樣的路徑須要巨量的採樣數才能達到「使人滿意」的結果,這致使很是緩慢的收斂速度。儘管開始的收斂速度很是快(4倍採樣數量能夠減小1/2的偏差),可是越到後面會花費更多倍的時間。傳統的方差縮減技術如重要性採樣,分層採樣,擬蒙特卡洛方法(Quasi-Monte Carlo)仍然不能改變這個收斂速度。架構
要提高蒙特卡洛估計的收斂速度,直觀上,咱們須要可以辨識每一個圖像的分佈特徵,而後在一些高頻變化區域增長採樣的密度。然而,傳統的蒙特卡洛方法中每一個抽樣之間是獨立的,它並不能有效辨識這種頻率變化特徵,儘管梅特波利斯光照傳輸(Metropolis light transport,MLT)經過採樣點之間的相關性可以尋找一些困難路徑,本質上它仍然並不善於處理和分析頻率域特徵。要想可以辨識圖像的分佈特徵,咱們須要瞭解每一個路徑的局部特徵,便是咱們須要對路徑追蹤算法引入微分運算。路徑的微分涉及路徑與附近局部範圍內光線的差值,即圖像的局部特徵,所以它引入了光線之間的相關性,能夠從多個層面改善路徑追蹤算法的效率(也正是如此,咱們認爲這是近幾年路徑追蹤技術領域的重大進展)。app
最近幾年路徑追蹤領域的一些重大進展正是微分幾何(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)。dom
如下咱們就來從概念和思路上分析上述這些技術,固然咱們能夠提早知道的這些技術的一個重要共同點就是:這些微分計算一般不須要經過光線追蹤引入新的採樣點,不然那樣的計算成本就很高,這些技術一般都是利用微分幾何和某些假設進行單純的微分計算,這裏主要的工具是一階泰勒展開式(first-order Taylor approximation)和頂點處的切線平面空間(tangent space),所以,這些新技術一般均可以很容易地集成於目前主流的路徑追蹤技術基礎架構之上,更詳細的內容請參考thegibook中相關章節。函數
接下來咱們討論的每一種微分的運用都涉及一個相對比較獨立的層面,在閱讀這些內容的時候,你首先須要很是清晰的瞭解的是它用來解決什麼問題,所以我會在每一節的開頭提出這個問題,而後讀者能夠圍繞這個問題來閱讀每一小節,即每一種技術。工具
微分反應的是圖像的局部特徵,所以其在圖像渲染中最直觀的運用就是用於反走樣(anti-aliasing)。光線追蹤算法中因爲採用不足致使的走樣問題能夠分爲兩大類:對路徑空間(path space)的採樣不足和對紋理空間(texture space)的採樣不足,本質上這都是因爲路徑採樣的不足致使的,可是它們一般使用不一樣的方法來解決。一個像素區域內的光線從屏幕空間發射出去以後,隨着光線在表面的各類交互這個面積可能會無限擴散,因此單純增長路徑採樣的數量可能也很難彌補紋理走樣(texture aliasing)的問題。因此它們分別對應路徑追蹤算法中兩個比較獨立的反走樣技術:路徑空間採樣不足主要對應於降噪技術,紋理空間採樣不足對應於紋理過濾技術。post
目前降噪技術主要的思路是針對圖像的分佈特徵進行適配性採樣以及適配性重建,前者對應於在圖像的高頻區域放置更高的路徑採樣密度;後者對應於根據圖像特徵對不一樣的區域使用不一樣的重建過濾器(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)效果,在該圖中,首先從光源發出光線通過一次表面交互(即直接光)以後投射一個橢圓形分佈到屏幕空間,而後根據這些分佈就能夠計算出圖像的頻率分佈,這些分佈特徵被用於適配性採樣。
除了協方差追蹤,光照傳輸的局部頻率域分析還包括其餘一些方法,可是目前協方差追蹤是更簡單和高效的一種技術。固然協方差追蹤的限制是它將局部光照場近似爲一個橢圓形的分佈,實際的局部光照場分佈特徵可能還須要更負責的形狀表述,這也是將來的優化方向。
下一篇咱們將討論梯度域渲染和流形探索或者半矢量空間光照傳輸。