最近幾年圖形學社區對PBR的關注很是高,也許是因爲Disney以及一些遊戲引擎大廠的助推,也許是由於它能夠被輕鬆集成進實時渲染的遊戲引擎當中,也許是由於許多人發現如今只須要調幾個參數就能實現具備很是精細細節的表面着色了。反正如今網絡上隨便一篇PBR的文章均可以引來大量的關注,無論你有沒有講清楚,也無論我有沒有看明白(固然沒有調侃誰的意思啦,它們大部分都還不錯,並且這篇文章跟他們大部分討論的內容都不同)。算法
那麼PBR是否已經足夠完美,若是不是,那麼它有哪些方面的缺點及限制,以及針對這些不足,它的下一步發展應該是什麼?這些問題就是本文會聚焦的內容。對於一個知識點,解釋它的基本思路和概念也許並非最難的,最難的是你知道它的限制和不足在哪裏,這部分的理解每每會比它的基本概念要困難一些,你必須更深入地理解這種知識才能洞悉它的缺點,而後你便清楚它的下一步發展應該是什麼。所以,本文其實不只會討論PBR的下一步發展,這裏對PBR不足的一些分析也許可以讓你更深入地理解它的概念。不信?往下讀一讀試試!網絡
本文主要分爲三個部分,第一部分簡要介紹PBR的基本概念,第二部分則分析PBR存在的問題,而後咱們結合一些研究成果探討PBR的下一步發展。架構
這裏,咱們從兩個方面介紹PBR的基本概念:首先介紹它處於渲染中的什麼流程或者說哪一個環節,或者說它在整個渲染中具備什麼樣的做用;而後介紹它的基本原理和思路。在圖形渲染中,若是架構抽象的比較好的,咱們能夠將整個渲染流程劃分爲四個相對比較獨立的部分:app
其中,光源表述和攝像機模型是相對比較簡單的,最耗時間的是光照傳輸,由於它要執行光線與場景的相交計算,複雜的着色模型也可能比較耗時,但着色模型的最重要做用是決定物體表面所能表述細節(details)的能力。wordpress
在術語上,PBR英文全稱爲Physically based rendering,它是指可以實現接近物理真實的整個渲染算法或過程。可是因爲光照的傳輸算法一般是固定且內置於渲染引擎的(或者說已經具備比較穩定成熟的算法,例如離線渲染領域的路徑追蹤算法,或者實時渲染領域裏的光柵化+其它全局光照算法),剩下對基於物理的渲染算法影響最大的實際上是表面的着色(材質)模型。所以,人們一般在討論或描述PBR時,更多的是指其使用的着色模型。基於物理的着色模型更準確的稱呼應該是Physically based shading,可是一般並無PBS的稱謂。函數
那麼物理材質是指什麼,「材質」其實就是光在與某個特定表面交互時須要的全部光學交互計算的數據,例如法線,紋理,BRDF等,也就是說,材質定義了最終表面接受光照後的視覺結果。對於物體表面視覺特徵的定義,根據尺寸粒度能夠劃分爲三級:性能
上述前兩種視覺表述是比較常見的,也是早期使用的一些技術。然而這兩種表述遠遠不能描述物體表面的視覺特徵,這是由於一個像素的尺寸遠遠大於物體表面上微觀粒子的尺寸,以下圖所示,圖像空間中間的黃色方塊表示一個像素,下面灰色褶皺部分則是該像素對應的實際微觀結構,而光其實是做用在這些微觀結構上的,因此基於像素的着色模型(如直接貼圖)反應不出真實物體表面的微觀細節,因此這些技術均可以稱爲不是基於物理的材質。spa
物體表面微觀結構的尺度遠遠小於一個像素的尺度3d
那麼,要怎麼表述這麼微小的微觀結構的光學交互行爲呢?顯然咱們不可能像紋理那樣對每一個微觀粒子使用一個紋素進行表述,那樣咱們的計算機內存將遠遠不夠存儲這種級別的紋理,因此人們提出了Microfacet BRDF理論,它使用一個法線機率分佈函數,來模擬微觀粒子的法線分佈特徵,這樣就可以表述物體表面的微觀特徵,從而接近物理真實,因此稱爲基於物理的材質表述。orm
Microfacet BRDF表現出來的視覺特徵是什麼呢?那就是對於每一個固定方向的入射光,咱們能夠有多個對該入射光的觀察方向;或者反過來講,對於某個固定的觀察方向,咱們能夠從一個像素觀察到來自多個方向的入射光照。若是沒有Microfacet BRDF,一個像素只被當作一個平面,對於固定的觀察/入射方向,它只對應一個入射/觀察方向。在Microfacet BRDF中,咱們所能觀察入射方向的方向範圍,被參數化爲一個粗糙度參數,以下圖所示。這種着色模型使得咱們可以表現比像素更小尺寸的表面細節。
反射光的範圍大小取決於物體表面的粗糙度,物體表面越粗糙,它越能接收更大範圍的光照
在渲染中,咱們有許多模型來近似真實物體的微觀法線分佈,例如Normalized Blinn-Phong,Beckmann,GGX模型等等,這些模型具備不一樣的近似度和計算複雜度。因爲這些模型都是對真實物理特徵的近似,所以它們極可能不會遵循真實的物理分佈,所以正性(positivity),互換性(reciprocity)以及能量守恆(energy conservation)被用來衡量一個BRDF模型是不是基於物理真實的,注意它們不是BRDF的屬性哦,而是對BRDF是否知足物理真實的要求,由於你根據一些測量數據提出一個近似的BRDF模型極可能不是物理真實的,這些條件只是用來檢驗BRDF模型的物理真實性。
© DreamWorks Animation 2017
頂點和像素級別的紋理能夠存儲在一張紋理圖片中,這種基於物理的材質表述怎麼存儲呢?前面已經說過這個級別的表述是沒法精肯定義和存儲的,因此咱們將這個機率密度分佈直接寫進shader中,由於shader也是材質的一部分。
這也是爲何近幾年實時渲染的遊戲品質有了很大提高,實時渲染與離線渲染的最大不一樣在於光照的傳輸過程,實時渲染省略或者近似了不少路徑,可是在光與表面的交互上,它只涉及一個公式的計算,並不會對性能形成太大影響,因此能夠很容易地集成進來。不過實踐中,實時渲染使用的機率密度分佈函數要比影視中使用的計算量要簡單一些,這只是在質量上稍有差別,可是不影響它表述微觀粒子視覺特徵的能力。
有了上述Microfacet BRDF理論,物理着色的世界是否就完美了呢?換句話說你是否就可以經過幾個神奇的參數表述任意細節的物理材質呢?
若是你仔細觀察經過上述那些Microfacet BRDF模型渲染出的圖像,你會發現雖然它們可以表述粗糙度,可是它們都太過平滑或者說模糊,例以下邊右邊的圖。
傳統的Microfacet BRDF模型渲染不出上圖中左圖那種劃痕的效果。這是爲何,這是由於出於計算效率,傳統的Microfacet BRDF模型都是對真實BRDF分佈的一個粗略近似,這些近似每每都很是平滑,以下圖所示,右圖表示一個比較真實的BRDF分佈,而左圖表示一個傳統的Microfacet BRDF模型,左圖能夠看作是對右圖的一個(很是)平滑的結果,這是由於咱們須要計算效率足夠高的着色計算,複雜的BRDF分佈會大大增長採樣的計算時間。這種平滑的結果使得傳統的Microfacet BRDF模型只能渲染出必定距離範圍以外的表面着色,你能夠理解爲距離越遠着色越模糊,固然這裏實際上不是指實際物體離攝像機的距離,而是說這種模型永遠只能渲染出相似於超出這個距離的表面粗糙度,即便拉近攝像機的距離,它們看起來仍然是很平滑的,由於它們所使用的BRDF已經被嚴重的平滑了,也就是上面右圖中的效果,那些更細微的細節被下面左圖這樣相似的BRDF分佈給平滑掉了。
因此這裏能夠總結出傳統的Microfacet BRDF模型具備哪些不足。首先,傳統的Microfacet BRDF太過平滑,不能表現小於一個像素的幾何級的細節,這些細節的尺寸介於像素和微觀粒子之間,如文章封面左圖中的劃痕,後面會分析更多例子。
其次,物理材質的着色計算「表述」在像素着色器(shader)中,而物體表面的宏觀結構每每經過網格頂點或者像素級別的法線貼圖來表述,這兩種幾何表述是分離的,而且隨着表面離攝像機距離的改變,一個像素的尺寸和一個紋理中的紋素的尺寸之間的相對關係發生着變化,當物體表面離攝像機足夠遠時,實際上物體的宏觀法線貼圖或幾何結構其實變成了該像素的「微觀結構」,然而,一般法線貼圖或幾何結構與BRDF都是獨立的,例如法線貼圖首先被過濾到最模糊的級別,而後用於Microfacet BRDF的計算,這就使得artifacts很是嚴重,例以下圖中三種不一樣的距離下,近處的水波細節在遠距離下產生較大的artifacts。
或者以下圖中,光盤上的劃痕,在遠距離下直接被模糊掉了。
上述的描述其實能夠總結爲兩個方面:
這是兩個獨立的問題,例如單提升BRDF的精確度不能解決第二個問題,由於對於遠處的物體,咱們須要將幾何級的結構視做像素的微觀結構(例如微面元),不然咱們須要很高的採樣才能消除artifact,而這對於遠處的物體較高的採樣顯然是比較浪費的;其次,讓宏觀的幾何結構與BRDF相協調對於近處物體的細節表述是沒有什麼意義的。固然以下所述,若是高分辨率的法線貼圖被視做幾何結構,那麼第二個問題的確能改善第一個問題。
首先,對於微觀結構的表述,出於計算效率的考慮,目前咱們還不可能使用很是複雜的Microfacet BRDF近似模型,由於比較精確的模型可能須要上百倍的計算時間。當前的研究主要是集中於使用高分辨率的法線貼圖(或者其它一些特殊的高分辨率幾何結構)來表述這種介於像素和微觀粒子之間的幾何結構,而後將每一個像素對應的這種幾何級的數據與BRDF相融合,得出一種可以適應這些幾何結構的Microfacet BRDF模型。這種模型可以表述更微觀的幾何細節,例以下圖所示,光盤和地板上那種細節在傳統的BRDF上是表現不出來的,由於它們會徹底被平滑掉。
經過結合傳統的Microfacet BRDF模型與貼圖,兩種着色技術被結合起來,使得咱們沒必要使用更復雜的Microfacet BRDF模型就能夠表述更精細的微觀結構。
除了將高分辨率的貼圖融入進Microfacet BRDF模型中,對於遠處的表面,咱們還須要可以直接將宏觀的表面幾何結構融入進Microfacet BRDF模型中,即這些宏觀幾何結構成爲一個像素中的微面元自己。
在傳統的Microfacet BRDF模型中,針對每個像素,咱們首先根據法線貼圖或其它方式獲得一個當前像素的法線,而後代入進Microfacet BRDF模型中計算出射光照。然而咱們說過,Microfacet BRDF模型發生於像素尺寸,而法線採樣發生於紋理尺寸,這兩個尺寸一般是不對等且隨着表面到攝像機的距離變化而變化的,例如對於比較近的表面,假如像素與紋理尺寸是一比一的,那麼這個法線採樣會比較準確,它能夠直接被用於Microfacet BRDF模型中進行計算;而後對於遠處的表面,一個像素尺寸可能等於多個紋素尺寸,這時對法線貼圖的直接採用就會致使比較大的方差,咱們須要花不少的樣本才能把這些方差平均下來,所以傳統的作法就是首先對法線貼圖進行過濾,也就是從一個Mipmap中獲得對應距離的法線值。這種作法雖然使用平滑的誤差帶來了方差的減少,可是它又平滑了這種幾何級的細節,因此咱們仍然須要很是高的採樣率來填補這些細節。
因此,若是咱們可以將幾何級的宏觀結構也融入到Microfacet BRDF中,對於遠距離的表面,宏觀的幾何結構直接集成於Microfacet BRDF中,就可以使用比較少的樣原本獲得遠處表面的細節,例以下圖中,使用傳統的Microfacet BRDF,左圖使用100個樣本能夠獲得比較精細的細節,可是中圖使用一個樣本則比較模糊,由於較遠的地方法線貼圖的採樣被過濾了,右圖將幾何結構融入Microfacet BRDF中,可使用較少的樣本獲得遠處的幾何細節。
固然,因爲bump map或normal map都是對法線的fake,它們並不改變物體表面的幾何結構,僅僅是直接給着色器傳遞一個假的的法線值,這個法線值可能致使物體表面的表面幾何分佈並非一致的(consistent),所以這就破話了Microfacet BRDF的對稱性和能量守恆。例以下圖所示,因爲表面的真實幾何結構沒有發生變化,然而着色使用了一個假的法線,所以使得一部分的方向被丟失,例如對於下圖而言,左邊半球與幾何平面交叉的部分(紅色箭頭所示)和右圖半球面下方的方向(紅色箭頭所示)都是不能被採樣的,這形成了光照的泄露和丟失。
所以,開發更高效的Microfacet BRDF模型,使其可以與在bump/normal map的配合下可以呈現更真實的着色,也是Microfacet BRDF發展的話題,如下是Unity labs的一種解決方案。
出於性能考慮,當前傳統的Microfacet BRDF都採用比較模糊近似模型,這使得介於像素和微觀粒子之間的微觀結構被忽略。而實踐上咱們也不可能採用表述更精確的Microfacet BRDF模型,由於這每每須要較大的數據存儲(例如一些基於數據驅動的Microfacet BRDF模型)或者較大的計算時間,不過實際上可能人眼也不可能分辨太過微觀的細節,所以結合傳統的(bump/Displacement/normal map等)貼圖技術,經過高分辨率的貼圖來展示比像素更微觀的細節,並讓這些貼圖所表述的相對宏觀的幾何結構融入到Microfacet BRDF模型中,便成爲比較簡潔而有效的方法。此外,除了貼圖級別的宏觀幾何結構,遠處更大尺寸的如頂點級別的幾何結構也是須要與Microfacet BRDF模型進行融合的。
對於理解Microfacet BRDF模型,表面表述的尺寸是一個很是關鍵的因素,仔細去理解每種尺寸下着色模型的選擇,以及它們之間怎麼聯合起來對總的表面進行着色,這是讓你透徹理解着色的關鍵。
參考引用或相關補充資源:
[1] 2010 LEAN Mapping
[2] 2013 Linear Efficient Antialiased Displacement and Re ectance Mapping
[3] 2014 Discrete Stochastic Microfacet Models
[4] 2014 Geometry into Shading
[5] 2014 Rendering Glints on High-resolution Normal-mapped Specular Surfaces
[6] 2014 Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs
[7] 2015 Multiple-Scattering Microfacet BSDFs with the Smith Model
[8] 2015 Skin Microstructure Deformation with Displacement Map Convolution
[9] 2016 Multi-Scale Rendering of Scratched Materials using a Structured SV-BRDF Model
[10] 2016 Position-Normal Distributions for Efficient Rendering of Specular Microstructure
[11] 2017 Microfacet-based Normal Mapping for Robust Monte Carlo Path Tracing
[12] 2017 Pixar's Foundation for Materials
[13] Racing for Realism