More DETAILS! PBR的下一個發展在哪裡?

最近幾年圖形學社區對PBR的關注非常高,也許是由於Disney以及一些遊戲引擎大廠的助推,也許是因為它可以被輕鬆集成進實時渲染的遊戲引擎當中,也許是因為許多人發現現在只需要調幾個參數就能實現具有非常精細細節的表面著色了。反正現在知乎上隨便一篇PBR的文章都可以引來大量的點贊,不管你有沒有講清楚,也不管我有沒有看明白(當然沒有調侃誰的意思啦,它們大部分都還不錯,而且這篇文章跟他們大部分討論的內容都不一樣)。

那麼PBR是否已經足夠完美,如果不是,那麼它有哪些方面的缺點及限制,以及針對這些不足,它的下一步發展應該是什麼?這些問題就是本文會聚焦的內容。對於一個知識點,解釋它的基本思路和概念也許並不是最難的,最難的是你知道它的限制和不足在哪裡,這部分的理解往往會比它的基本概念要困難一些,你必須更深刻地理解這種知識才能洞悉它的缺點,然後你便清楚它的下一步發展應該是什麼。因此,本文其實不僅會討論PBR的下一步發展,這裡對PBR不足的一些分析也許能夠讓你更深刻地理解它的概念。不信?往下讀一讀試試!

本文主要分為三個部分,第一部分簡要介紹PBR的基本概念,第二部分則分析PBR存在的問題,然後我們結合一些研究成果探討PBR的下一步發展。

PBR基本概念

這裡,我們從兩個方面介紹PBR的基本概念:首先介紹它處於渲染中的什麼流程或者說哪個環節,或者說它在整個渲染中具有什麼樣的作用;然後介紹它的基本原理和思路。

在圖形渲染中,如果架構抽象的比較好的,我們可以將整個渲染流程劃分為四個相對比較獨立的部分:

  • 光源表述(lighting):例如是點光源,面積光源或者其它形式的(例如將網格用作一個)光源,是使用輻射強度還是直接使用輻射亮度來表述光源發出的光照。
  • 光照傳輸(light transport):就是光在場景中是怎麼傳輸的,例如離線渲染中的光線追蹤演算法,它能模擬比較真實的光子傳輸行為,就是說能覆蓋全部光子傳輸路徑(或空間),但是在實時渲染中使用的一些近似方法也是表述光照傳輸的,雖然它可能省略掉了一些不重要的路徑,但是這仍然是一種光照傳輸演算法。光柵化的整個過程也是模擬了直接光照的傳輸。
  • 著色模型(shading):就是光與表面相交時發生的光學交互,比如反射和折射等,所有著色相關的數據匯總成一個材質對象,每個物體表面都需要一個材質對象,以便決定光在經過物體表面時應該如何對物體表面進行著色。
  • 攝像機模型(camera):比如投影方式,對景深效果的實現方式,是否支持全景繪製,是否支持對時間採樣實現運動模糊等。

其中,光源表述和攝像機模型是相對比較簡單的,最耗時間的是光照傳輸,因為它要執行光線與場景的相交計算,複雜的著色模型也可能比較耗時,但著色模型的最重要作用是決定物體表面所能表述細節(details)的能力。

在術語上,PBR英文全稱為Physically based rendering,它是指能夠實現接近物理真實的整個渲染演算法或過程。但是由於光照的傳輸演算法通常是固定且內置於渲染引擎的(或者說已經具有比較穩定成熟的演算法,例如離線渲染領域的路徑追蹤演算法,或者實時渲染領域裡的光柵化+其它全局光照演算法),剩下對基於物理的渲染演算法影響最大的其實是表面的著色(材質)模型。因此,人們通常在討論或描述PBR時,更多的是指其使用的著色模型。基於物理的著色模型更準確的稱呼應該是Physically based shading,但是通常並沒有PBS的稱謂。

那麼物理材質是指什麼,「材質」其實就是光在與某個特定表面交互時需要的所有光學交互計算的數據,例如法線,紋理,BRDF等,也就是說,材質定義了最終表面接受光照後的視覺結果。對於物體表面視覺特徵的定義,根據尺寸粒度可以劃分為三級:

  • 基於網格頂點的表述,這種就是只對網格頂點的著色進行描述,然後中間的表面像素則通過插值來計算。
  • 基於像素的紋理貼圖,這就是最常見的各種貼圖,它們能表述像素級別的視覺特徵。
  • 基於微觀粒子的微面元表述,這就是我們這裡所關心的物理著色。

上述前兩種視覺表述是比較常見的,也是早期使用的一些技術。然而這兩種表述遠遠不能描述物體表面的視覺特徵,這是因為一個像素的尺寸遠遠大於物體表面上微觀粒子的尺寸,如下圖所示,圖像空間中間的黃色方塊表示一個像素,下麵灰色褶皺部分則是該像素對應的實際微觀結構,而光實際上是作用在這些微觀結構上的,所以基於像素的著色模型(如直接貼圖)反應不出真實物體表面的微觀細節,所以這些技術都可以稱為不是基於物理的材質。

物體表面微觀結構的尺度遠遠小於一個像素的尺度

那麼,要怎麼表述這麼微小的微觀結構的光學交互行為呢?顯然我們不可能像紋理那樣對每個微觀粒子使用一個紋素進行表述,那樣我們的計算機內存將遠遠不夠存儲這種級別的紋理,所以人們提出了Microfacet BRDF理論,它使用一個法線概率分布函數,來模擬微觀粒子的法線分布特徵,這樣就能夠表述物體表面的微觀特徵,從而接近物理真實,所以稱為基於物理的材質表述。

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也是材質的一部分。

這也是為什麼近幾年實時渲染的遊戲品質有了很大提升,實時渲染與離線渲染的最大不同在於光照的傳輸過程,實時渲染省略或者近似了很多路徑,但是在光與表面的交互上,它只涉及一個公式的計算,並不會對性能造成太大影響,所以可以很容易地集成進來。不過實踐中,實時渲染使用的概率密度分布函數要比影視中使用的計算量要簡單一些,這只是在質量上稍有差異,但是不影響它表述微觀粒子視覺特徵的能力。

PBR的限制

有了上述Microfacet BRDF理論,物理著色的世界是否就完美了呢?換句話說你是否就能夠通過幾個神奇的參數表述任意細節的物理材質呢?

如果你仔細觀察通過上述那些Microfacet BRDF模型渲染出的圖像,你會發現雖然它們能夠表述粗糙度,但是它們都太過平滑或者說模糊,例如下邊右邊的圖。

右圖:傳統的Microfacet BRDF模型太過於平滑(圖片來自【10】)

傳統的Microfacet BRDF模型渲染不出上圖中左圖那種劃痕的效果。這是為什麼,這是因為出於計算效率,傳統的Microfacet BRDF模型都是對真實BRDF分布的一個粗略近似,這些近似往往都非常平滑,如下圖所示,右圖表示一個比較真實的BRDF分布,而左圖表示一個傳統的Microfacet BRDF模型,左圖可以看做是對右圖的一個(非常)平滑的結果,這是因為我們需要計算效率足夠高的著色計算,複雜的BRDF分布會大大增加採樣的計算時間。這種平滑的結果使得傳統的Microfacet BRDF模型只能渲染出一定距離範圍之外的表面著色,你可以理解為距離越遠著色越模糊,當然這裡實際上不是指實際物體離攝像機的距離,而是說這種模型永遠只能渲染出類似於超出這個距離的表面粗糙度,即使拉近攝像機的距離,它們看起來仍然是很平滑的,因為它們所使用的BRDF已經被嚴重的平滑了,也就是上面右圖中的效果,那些更細微的細節被下面左圖這樣類似的BRDF分布給平滑掉了。

左:傳統的Microfacet BRDF模型:右:真實的BRDF分布(圖片來自【5】)

所以這裡可以總結出傳統的Microfacet BRDF模型具有哪些不足。首先,傳統的Microfacet BRDF太過平滑,不能表現小於一個像素的幾何級的細節,這些細節的尺寸介於像素和微觀粒子之間,如文章封面左圖中的劃痕,後面會分析更多例子。

其次,物理材質的著色計算「表述」在像素著色器(shader)中,而物體表面的宏觀結構往往通過網格頂點或者像素級別的法線貼圖來表述,這兩種幾何表述是分離的,並且隨著表面離攝像機距離的改變,一個像素的尺寸和一個紋理中的紋素的尺寸之間的相對關係發生著變化,當物體表面離攝像機足夠遠時,實際上物體的宏觀法線貼圖或幾何結構其實變成了該像素的「微觀結構」,然而,通常法線貼圖或幾何結構與BRDF都是獨立的,例如法線貼圖首先被過濾到最模糊的級別,然後用於Microfacet BRDF的計算,這就使得artifacts非常嚴重,例如下圖中三種不同的距離下,近處的水波細節在遠距離下產生較大的artifacts。

近距離下的幾何級的細節,可能導致遠距離下的artifact(圖片來自【1】)

或者如下圖中,光碟上的劃痕,在遠距離下直接被模糊掉了。

在遠距離下,由於幾何級的法線數據首先被過濾,然後作用與BRDF,因此這種細節丟失,物體表面的細節隨著距離攝像機的距離改變而改變(圖片來自【13】)

PBR的下一步發展在哪裡?

上述的描述其實可以總結為兩個方面:

  • 傳統Microfacet BRDF對微觀結構的表述精確度不足
  • 傳統的Microfacet BRDF與宏觀的(如法線)貼圖或幾何結構不相容,或者說不能相互協調工作

這是兩個獨立的問題,例如單提高BRDF的精確度不能解決第二個問題,因為對於遠處的物體,我們需要將幾何級的結構視作像素的微觀結構(例如微面元),否則我們需要很高的採樣才能消除artifact,而這對於遠處的物體較高的採樣顯然是比較浪費的;其次,讓宏觀的幾何結構與BRDF相協調對於近處物體的細節表述是沒有什麼意義的。當然如下所述,如果高解析度的法線貼圖被視作幾何結構,那麼第二個問題的確能改善第一個問題。

首先,對於微觀結構的表述,出於計算效率的考慮,目前我們還不可能使用非常複雜的Microfacet BRDF近似模型,因為比較精確的模型可能需要上百倍的計算時間。當前的研究主要是集中於使用高解析度的法線貼圖(或者其它一些特殊的高解析度幾何結構)來表述這種介於像素和微觀粒子之間的幾何結構,然後將每個像素對應的這種幾何級的數據與BRDF相融合,得出一種能夠適應這些幾何結構的Microfacet BRDF模型。這種模型能夠表述更微觀的幾何細節,例如下圖所示,光碟和地板上那種細節在傳統的BRDF上是表現不出來的,因為它們會完全被平滑掉。

Microfacet BRDF與高解析度貼圖結合產生更多細節(圖片來自【10】)

通過結合傳統的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中,可以使用較少的樣本得到遠處的幾何細節。

左圖:傳統的Microfacet BRDF,使用每像素100個樣本;中圖:傳統的Microfacet BRDF,每像素一個樣本;右圖:將幾何結構融入Microfacet BRDF中,每像素一個樣本(圖片來自【4】)

能夠將幾何級的貼圖數據和Microfacet BRDF融合,許多的表面都可以得到更精細的表述。

圖片來自【13】

當然,由於bump map或normal map都是對法線的fake,它們並不改變物體表面的幾何結構,僅僅是直接給著色器傳遞一個假的的法線值,這個法線值可能導致物體表面的表面幾何分布並不是一致的(consistent),因此這就破壞了Microfacet BRDF的對稱性和能量守恆。例如下圖所示,由於表面的真實幾何結構沒有發生變化,然而著色使用了一個假的法線,因此使得一部分的方向被丟失,例如對於下圖而言,左邊半球與幾何平面交叉的部分(紅色箭頭所示)和右圖半球面下方的方向(紅色箭頭所示)都是不能被採樣的,這造成了光照的泄露和丟失。

圖片來自【11】

因此,開發更高效的Microfacet BRDF模型,使其能夠與在bump/normal map的配合下能夠呈現更真實的著色,也是Microfacet BRDF發展的話題,以下是Unity labs的一種解決方案。

圖片來自【11】

總結

出於性能考慮,當前傳統的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 Pixars Foundation for Materials

[13] Racing for Realism

推薦閱讀:

計算機圖形學,下一步如何提高?
渲染倒角反射的不正常如何解決?
說說一個美工寫代碼的感受

TAG:全局光照 | 计算机图形学 | 渲染 |