【基於物理的渲染(PBR)白皮書】(五)幾何函數相關總結

 

        本文由@淺墨_毛星雲 出品,首發於知乎專欄,轉載請註明出處  

        文章鏈接: https://zhuanlan.zhihu.com/p/81708753

 

在基於物理的渲染中,幾何函數(Geometry Function)是保證Microfacet BRDF理論上能量守恆,邏輯上自洽的重要一環。其描述了微平面自陰影的屬性,表示具有半矢量法線的微平面(microfacet)中,同時被入射方向和反射方向可見(沒有被遮擋的)的比例,即未被遮擋的m = h微表面的百分比。

Microfacet Specular BRDFD,G,F三項中,如果說法線分佈函數是最核心的一項,那麼幾何函數則是核心的輔助項,而且是三項中最複雜的一項。

歷史上主流的幾何函數建模,按提出或歸納的時間進行排序,可以總結爲:

  • Smith [1967]
  • V-cavity(Cook-Torrance)[1982]
  • Schlick-Smith [1994]
  • Neumann [1999]
  • Kelemen [2001]
  • Implicit [2010]

其中,Smith遮蔽函數(Smith masking function)是現在業界所採用的主流遮蔽函數,Eric Heitz2014[Heitz 2014]將其拓展爲Smith聯合遮蔽陰影函數(Smith Joint Masking-Shadowing Function),該函數具有四種形式:

  • 分離遮蔽陰影型(Separable Masking and Shadowing)
  • 高度相關遮蔽陰影型(Height-Correlated Masking and Shadowing)
  • 方向相關遮蔽陰影型(Direction-Correlated Masking and Shadowing)
  • 高度-方向相關遮蔽陰影型(Height-Direction-Correlated Masking and Shadowing)

其中,高度相關遮蔽陰影型(Height-Correlated Masking and Shadowing),以及其近似,是目前業界採用的主流遮蔽陰影函數。


 

核心要點與思維導圖

本文將從如下方面,對基於物理的渲染中幾何函數(Geometry Function)的相關內容進行一個系統的總結:

  • 一、幾何函數的定義與要點總結
    • 1.1 幾何函數的定義與主要屬性
    • 1.2 幾何函數的兩種主要形式:G1和G2
    • 1.3 幾何函數與法線分佈函數的聯繫
    • 1.4 業界對幾何函數模型的選擇
  • 二、從微平面理論到遮蔽陰影函數
    • 2.1 從微平面理論引出幾何函數
    • 2.2 選擇合適的微表面輪廓(microsurface profile)
    • 2.3 Smith遮蔽函數的性質
    • 2.4 Smith聯合遮蔽-陰影函數
      • 2.4.1 分離的遮蔽陰影函數(Separable Masking and Shadowing Function)
      • 2.4.2 高度相關的遮蔽陰影函數(Height-Correlated Masking and Shadowing Function)
      • 2.4.3 方向相關的遮蔽陰影函數(Direction-Correlated Masking and Shadowing Function)
      • 2.4.4 高度方向相關的遮蔽陰影函數(Height-Direction-Correlated Masking and Shadowing Function)
    • 2.5 多重散射微平面BRDF
  • 三、幾何函數的基本性質
    • 3.1 標量性
    • 3.2 對稱性
    • 3.3 同向可見性
    • 3.4 拉伸不變性(Stretch Invariance)
  • 四、從法線分佈函數導出的Smith遮蔽函數
    • 4.1 主流法線分佈函數導出的Smith遮蔽函數
      • 4.1.1 Beckmann法線分佈的Λ函數
      • 4.1.2 Blinn-Phong法線分佈的Λ函數
      • 4.1.3 GGX法線分佈的Λ函數
    • 4.2 Smith GGX的演變和發展
      • 4.2.1 SIGGRAPH 2012:Disney
      • 4.2.2 SIGGRAPH 2013:UE4
      • 4.2.3 SIGGRAPH 2014至今:業界轉向Smith Joint Masking-Shadowing Function
        • 4.2.3.1 Frostbite 的GGX-Smith Joint近似方案
        • 4.2.3.2 UE4的 GGX-Smith Correlated Joint 近似方案
        • 4.2.3.3 Unity HDRP 的GGX-Smith Correlated Joint近似方案
        • 4.2.3.4 Google Failment渲染器 的GGX-Smith Joint近似方案
        • 4.2.3.5 Respawn Entertainment的 GGX-Smith Joint近似方案
  • 五、BRDF標準化測試:白爐測試與弱白爐測試
    • 5.1 白爐測試(The White Furnace Test)
    • 5.2 弱白爐測試(The Weak White Furnace Test)

本來還想聊到Microfacet Specular BRDF的推導,分母中的4的來歷,以及Smith遮蔽函數的推導,高度相關的Smith遮蔽陰影函數的推導的。但還沒加上這些內容,字數統計就已經1萬多字了。沒事,後面有機會再一起聊吧。

OK, 按照慣例,開始正文前,先放出本文內容總結的思維導圖:

高清原圖下載地址:https://github.com/QianMo/PBR-White-Paper/raw/master/content/part%205/media/161b0caae09c258a64dccfadbda6b62d.png


 

一、幾何函數的定義與要點總結


 

1.1 幾何函數的定義與主要屬性

  • 在基於物理的渲染中,幾何函數(Geometry Function)是一個0到1之間的標量,描述了微平面自陰影的屬性,表示了具有半矢量法線的微平面(microfacet)中,同時被入射方向和反射方向可見(沒有被遮擋的)的比例,即未被遮擋的m= h微表面的百分比。幾何函數(Geometry Function)即是對能順利完成對光線的入射和出射交互的微平面概率進行建模的函數。
  • 在microfacet BRDF中,單純的法線分佈函數得到數值不是有效的微表面的法線強度,需結合幾何函數,才能得到有效入射和出射法線,得到能對microfacet BRDF產生貢獻的強度。
  • 在各種文獻中,幾何函數(Geometry Function)還有大量不同的別名。一些主要的常見叫法有:
    • 幾何項(Geometry Term)
    • Specular G
    • 幾何衰減因子(Geometric Attenuation)
    • 陰影因子(Shadowing Factor)
    • 遮蔽函數(Masking Function)
    • 陰影函數(Shadowing Function)
    • 遮蔽陰影函數(Masking-Shadowing Function)
    • 雙向遮蔽陰影函數(Bidirectional Shadowing-Masking Function)
  • 其中,在部分遊戲引擎和文獻中,幾何函數G(l,v,h)和分母中的校正因子4(n·l)(n·v)會合併爲可見性項(The Visibility Term),Vis項,簡稱V項。其也經常作爲幾何函數的代指:

                                                             

 

  • 通常,除了近掠射角或非常粗糙的表面,幾何函數對BRDF的形狀影響相對較小,但對於BRDF保持能量守恆而言,幾何函數至關重要。
  • 幾何函數取決於微表面的細節,並且很少有精確的表達式。很多情況下,各類文獻會使用各種統計模型和簡化假設推導出近似值。



 

1.2 幾何函數的兩種主要形式:G1G2

幾何函數具有兩種主要形式:G1G2,其中:

  • G1爲微平面在單個方向(光照方向L或觀察方向V)上可見比例,一般代表遮蔽函數(masking function)或陰影函數(shadowing function)
  • G2爲微平面在光照方向L和觀察方向V兩個方向上可見比例,一般代表聯合遮蔽陰影函數(joint masking-shadowing function)
  • 在實踐中,G2由G1推導而來
  • 默認情況下,microfacet BRDF中使用的幾何函數代指G2

 

幾何函數的兩種主要形式:G1G2G1爲微平面在單個方向(光照方向L或觀察方向V)上可見比例。G2爲微平面在光照方向L和觀察方向V兩個方向上可見比例(圖片來自GDC 2017, PBR Diffuse Lighting for GGX+SmithMicrosurfaces, Earl Hammon )



 

1.3 幾何函數與法線分佈函數的聯繫

幾何函數與法線分佈函數作爲Microfacet Specular BRDF中的重要兩項,兩者之間具有緊密的聯繫:

  • 幾何函數的解析形式的確認依賴於法線分佈函數。 在微平面理論中,通過可見微平面的投影面積之和等於宏觀表面的投影面積的恆等式,選定法線分佈函數,並選定幾何函數的模型,就可以唯一確認幾何函數的準確形式。在選定幾何函數的模型後(一般爲Smith),幾何函數的解析形式的確認則由對應的法線分佈函數決定。
  • 法線分佈函數需要結合幾何函數,得到有效的法線分佈強度。 單純的法線分佈函數的輸出值並不是能產生有效反射的法線強度,因爲光線的入射和出射會被微平面部分遮擋,即並不是所有朝向m=h的微表面,能在給定光照方向L和觀察方向V時可以順利完成有效的反射。幾何函數即是對能順利完成入射和出射的微平面概率進行建模的函數。法線分佈函數需要結合幾何函數,得到最終對microfacet BRDF能產生貢獻的有效法線分佈強度。



 

1.4 業界對幾何函數模型的選擇

  • 自2014年之後,遊戲和電影業界主流的遮蔽函數爲Smith高度相關遮蔽陰影函數(Smith height-correlated masking-shadowing function)以及其近似,因爲其具有與不相關形式相似的成本和更高的精度:

                                                             

 

  • 另外,如果追求性價比,可以選擇部分遊戲和電影製作中採用的隱式遮蔽函數(The Implicit Masking Function):

                                                         

 

隱式遮蔽函數 The Implicit Masking Function)可以和Specular的分母校正因子4n·l)(n·v)相消爲1,雖然不是嚴格基於物理,但具有非常好的性價比。



 

二、從微平面理論到遮蔽陰影函數

 

本節將從微平面理論講起,引出幾何函數,隨後聊到業界對於衆多幾何函數模型的選擇,

Smith遮蔽函數成爲業界主流的原因,以及從Smith遮蔽函數拓展到Smith聯合遮蔽-陰影函數,最後聊到業界主流Microfacet BRDF的缺陷,以及採用Image Work能量補償的方式解決該缺陷的方案。


 

2.1 從微平面理論引出幾何函數

  • 微平面理論(microfacet theory)作爲一種研究微觀幾何(microgeometry)對反射率影響的數學分析方法,基於將微觀幾何(microgeometry)建模爲微平面(microfacets)的集合的思想。其最初由光學物理領域開發,用於研究統計表面上的散射[Beckmann Spizzichino 1963]。在圖形社區中,我們使用它來推導基於物理的BRDF。
  • 在微平面中,正確朝向(即m = h)的微平面法線m的統計分佈由法線分佈函數D(m)進行建模。若將D(m)在整個微平面法線上積分,會得到微表面的面積。但並非所有m = h的微平面都會對microfacet BRDF有所貢獻:有些微平面會被光照方向或視圖方向遮擋,這些被遮擋的光線在業界主流的微平面理論中被忽略不計。所以需要引入幾何項G來對這種現象進行建模,得到最終對microfacet BRDF能產生貢獻的法線分佈。

 

m = h的表面點的朝向纔會將光線l反射到視線v的方向,其他表面點對BRDF沒有貢獻(圖片來自《Real-Time Rendering 4th》)

  • 實際上,雖然陰影區域沒有從l接收任何直射光,但它們確實接收(並因此反射)從其他表面區域反射的光(如右圖所示)。Microfacet理論忽略了這些相互反射。
  • 對此,可以引出陰影(Shadowing)和遮蔽(Masking)兩種不同的光與微表面的交互行爲:
    • 陰影(Shadowing)表示微平面對入射光的遮擋,一般爲對光源方向L而言。
    • 遮蔽(masking)表示微平面對出射光的遮擋,一般爲對觀察方向V而言。

 

  • 圖 左圖:光線被微表面從l的方向進行遮擋,右圖:光線被微表面從v的方向進行遮擋。在這兩種情況下,這些表面點對BRDF沒有貢獻。(圖片來自Naty Hoffman, Recent Advances in Physically Based Shading, SIGGRAPH 2016)

                         

 

對可見微平面的投影區域(亮紅色)進行積分,得到宏觀表面在垂直於v的平面上的投影面積

  • 從上篇文章可以得知,可見微平面的投影面積之和等於宏觀表面的投影面積。我們可以通過定義遮蔽函數(masking function)G1(m,v)來對其進行數學表達,它給出了沿着視圖向量v可見的具有法線m的微平面的比率。
  • G1(m, v)D(m)(v · m)+在球體上的積分然後給出投影到垂直於v的平面上的宏觀表面的面積:

                                                 

 

  • 上式中,通過x+的表示方法表達將v · m限制爲大於等於0。背面微平面不可見,因此在這種情況下不對其進行計算。乘積G1(m,v)D(m)則表示了可見法線的分佈。
  • 上式對G1(m,v)施加約束,但並不能唯一地確定它。有無數個函數滿足給定微平面法線分佈D(m)的約束。這是因爲D(m)沒有完全指定微表面(microsurface)。它僅告訴我們有多少百分比的微平面(microfacets)的法線指向了某些方向,而沒有告訴我們這些法線是如何進行排列。而且對於固定的輸出方向v,遮蔽函數(masking functions)是二維,存在無限多個函數滿足等式(1)。



 

2.2 選擇合適的微表面輪廓(microsurface profile

 

  • 爲了確定唯一的G項,Heitz在[Heitz 2014]中引入了第二個約束:選擇合適的微表面輪廓(microsurface profile),從而對G項進行具象化建模。

如下所示,輪廓的選擇可對所得BRDF的形狀產生強烈影響。

 

具有相同法線分佈但具有不同輪廓(profiles)的微表面導致不同的BRDF

一旦選擇好合適的微表面輪廓(microsurface profile),即選擇了合適的微表面模型,加上等式(1)的約束,就可以完全確定遮蔽函數,用於BRDF中的實際使用。

業界提出的表面輪廓/模型,按照提出或歸納的時間,可以總結如下:

  • Smith [1967]
  • V-cavity(Cook-Torrance)[1982]
  • Schlick-Smith [1994]
  • Neumann [1999]
  • Kelemen [2001]
  • Implicit [2010]

Heitz[Heitz 2014]中進行了證明,在上述幾種模型中僅如下兩種是基於物理的:

  • Smith遮蔽函數(Smith masking function)
  • V腔遮蔽函數(V-cavity masking function)

兩者的微表面輪廓(microsurface profile)建模可以通過下面兩幅圖進行表達。

 

Smith模型和真世界連續微表面的對比。左圖:具有大自相關距離的真實世界連續微表面。右圖:Smith模型,其具有不相關的表面,即每個微平面與其鄰域不相關。(圖片來自[Heitz 2014]

 

V腔散射模型(V-cavity scattering mode)。該模型不是對一個微表面上的散射進行建模,而是計算單獨微表面上的散射並混合結果。(圖片來自[Heitz 2014]

Heitz還證明了Smith遮蔽函數是唯一既遵循公式(1),又具有法線遮蔽獨立性(normal-masking independence)便利特性的函數。且Smith遮蔽函數具有比Cook-Torrance使用的V腔遮蔽函數(V-cavity masking function)更好地匹配真實世界的反射現象,這也是業界在兩種基於物理的遮蔽函數中,更加青睞Smith遮蔽函數的原因。如下圖所示。

 

使用V-cavitySmith遮蔽陰影函數的各向同性Beckmann分佈產生的BRDF,以及Reference BRDF的對比。其中,Smith遮蔽函數隨着粗糙度的增加,分佈向輸出方向移動,更匹配Reference BRDF。(圖片來自[Heitz 2014]



 

2.3 Smith遮蔽函數的性質

  • Smith遮蔽函數(Smith masking function)是現在業界所採用的主流遮蔽函數。Smith系列遮蔽函數被廣泛認爲比Cook-Torrance使用的V腔遮蔽函數(V-cavity masking function)函數更準確,並且考慮了法線分佈的粗糙度和形狀。
  • 最初的Smith函數是爲Beckmann NDF所設計,但Brown [Brown 1980]和後來的Bourlier等人 [Bourlier 2002]將Smith函數推廣到計算幾何函數以匹配任何NDF的方法中。
  • Smith遮蔽函數(Smith masking function),該函數最初是爲高斯正態分佈(Gaussian normal distributions)導出的,後來推廣到任意NDF。
  • Smith G1函數的形式如下:

                                                                            

 

其中,χ+(x)表示正特徵函數:

                                                                       

 

是Smith遮蔽函數的廣義形式 [Brown 1980; Walter 2007]。對於許多隨機曲面,其具有閉合形式的解。因此,在法線/遮蔽獨立(normal/masking independence)的假設下,Smith遮蔽函數是精確的。表示微表面斜率上的積分(integral over the slopes of the microsurface)的表達式爲:

                                                    

 

在上式中:

                                                            

是視圖方向上斜率的1D分佈。

  • 爲微表面的斜率分佈(distribution of slopes of the microsurface)。
  • 爲與法線相關的斜率:

                                                 

  • 斜率的分佈必然是標準化的:

                                                                   

  • 且斜率分佈與法線分佈的關係爲:

                                                                            

  • Smith遮蔽函數的每個法線分佈函數會導出不同的Λ(lambda)函數。需要注意,僅具有形狀不變性的法線分佈函數(如GGX、Beckmann)可以導出具有解析形式的Λ函數,而且不具備形狀不變性的函數(Blinn-Phong),則Λ不存在解析形式。
  • 在[Walter 2007]和[Heitz 2014]中都有描述推導出給定NDF的Λ的過程。
  • Smith遮蔽函數是常見遮蔽函數中,唯一既滿足能量守恆又具有法線遮蔽獨立性(Normal/Masking Independence)便利特性的函數。
  • 法線/遮蔽獨立(Normal/Masking Independence)作爲Smith遮蔽函數的一大特點,源自Smith微表面輪廓假設微曲面不是自相關的(autocorrelated),即在微表面的一個點處的高度(或法線)與任何相鄰點處的高度(或法線)之間沒有相關性。 這意味着一組隨機的微平面並不是連續的表面,微表面的高度和法線是獨立的隨機變量。 如下圖所示。

微表面及其自相關函數。(左)具有大自相關距離的真實連續微表面(右)不相關型表面,其中每個微平面與其鄰域不相關,如Smith模型(圖片來自[Heitz 2014]

  • Smith遮蔽函數(Smith masking function)對非隨機表面與重複或結構化圖案(例如布料(fabric))的相關性的影響可能非常顯著。因此,對於布料之類的非隨機表面或結構化圖案,推薦使用專用模型,如專門的布料shading model。
  • 需要注意的是,業界選擇Smith遮蔽函數的原因其實並不是因爲它是由法線分佈參數化的物理上可信的近似。真正原因在於Smith公式是在所選擇的微表面輪廓(即法線/遮蔽獨立性)的假設下的精確遮蔽函數。
  • Smith遮蔽函數確實也有一些缺點。從理論角度來看,其假設是與實際表面的結構不一致的,甚至可能在物理上無法實現。從實際的角度來看,雖然它對於隨機表面非常準確,但是對於在法線方向和遮蔽之間具有更強依賴性的表面,例如下圖中所示的表面,其預期精度會降低,特別是如果表面具有一些重複結構(如多數面料)。然而,在找到更好的替代方案之前,Smith遮蔽函數目前依然是業界的最佳選擇。

圖中所示的微觀幾何體在高度和表面法線之間具有很強的相關性,其中凸起區域是平滑的而下部區域是粗糙的。 在圖示的上半部分中,表面從接近宏觀表面法線的角度照射。 在這個角度,許多入射光線可以觸及粗糙的凹坑,並且許多光線在不同的方向上散射。 在圖示下半部分中,表面從掠射角入射。陰影(Shadowing)阻擋了大部分凹坑,因此很少有光線觸及到它們,所以大多數光線都從表面的光滑部分反射。在這種情況下,表面粗糙度的作用很大程度上取決於光照角度,這就是Smith遮蔽的函數的缺陷所在。(圖片來自《Real-Time Rendering 4th》)



 

2.4 Smith聯合遮蔽-陰影函數

  • 除了G1之外,業界常常使用Eric Heitz在[Heitz 2014]中提出的Smith聯合遮蔽陰影函數(Smith Joint Masking-Shadowing Function)G2(l, v, m)來代替遮蔽函數G1(m, v)。
  • 該函數具有四種形式:
    • 分離的遮蔽陰影型(Separable Masking and Shadowing)
    • 高度相關的遮蔽陰影型(Height-Correlated Masking and Shadowing)
    • 方向相關的遮蔽陰影型(Direction-Correlated Masking and Shadowing)
    • 高度-方向相關遮蔽陰影型(Height-Direction-Correlated Masking and Shadowing)

下文將分別進行總結。


 

2.4.1 分離的遮蔽陰影函數(Separable Masking and Shadowing Function

  • 最簡單和最廣泛使用的遮蔽陰影函數的變體是Walter等人推廣的可分離形式[Walter 2007]。 在這種情況下,遮蔽(masking)和陰影(shadowing)是獨立的,並且分別計算並相乘:

 ​​​​​​​                                                                  

  • 這種形式不模擬遮蔽和陰影之間的相關性,因此總會多估算陰影,因爲一些相關性總是存在的。


 

2.4.2 高度相關的遮蔽陰影函數(Height-Correlated Masking and Shadowing Function

  • 更精確形式的遮蔽陰影函數模擬了由於微表面高度引起的遮蔽和陰影之間的相關性[Ross et al. 2005]。 直觀來說,微平面(microfacet)在微表面(microsurface)內升高得越多,對於出射方向未被遮蔽(unmasked)和入射方向未被掩蔽(unshadowed)的可見概率會同時增加。 因此,遮蔽和陰影通過微平面的升高而相關。 這種相關性以聯合遮蔽陰影函數(joint masking-shadowing function)的高度相關形式進行表達:

​​​​​​​                                                                   

  • 需要注意的是,當出射方向和入射方向彼此遠離時,此形式是準確的,但是當方向接近時,此形式會估算出更多的陰影。
  • Heitz建議在實踐中使用此版本的遮蔽陰影函數,因爲它比可分離的遮蔽陰影函數更精確,卻同時具有相同的計算複雜度。


 

2.4.3 方向相關的遮蔽陰影函數(Direction-Correlated Masking and Shadowing Function

  • Ashikhmin等 [Ashikhmin 2000]通過混合可分離的遮蔽陰影函數與兩個方向完全相關的情形來表達方向相關:

​​​​​​​                                        

  • 其中λ(φ)是類似於Ginneken等人的經驗因子。
  • 作者沒有找到函數Λ的Smith解析表達式,所以必須分別計算遮蔽和陰影。 這就是爲什麼他們必須混合可分離的形式和方向相關的形式,並且無法將高度相關性結合到他們的模型中。


 

2.4.4 高度方向相關的遮蔽陰影函數(Height-Direction-Correlated Masking and Shadowing Function

  • 遮蔽和陰影之間的方向相關可以通過將方向相關因子λ納入高度相關形式來進行建模:

​​​​​​​                                                

  • 這裏,當出射和入射方向平行且λ= 0時,遮蔽和陰影完全相關。相關性隨着方向之間的角度增加而減小,並且隨着λ增加到1,遮蔽和陰影不再是方向相關,公式返回高度相關的形式。
  • Ginneken等人[Ginneken 1998]提出了一個經驗因子,此因子取決於φ,即v和l之間的方位角,此因子與表面粗糙度無關。
  • Heitz等人在2014年[Heitz 2014]對這個問題進行了更深入的研究,並對λ(v,l)進行了解析近似,當D是Beckmann分佈時,其結合了表面粗糙度。他們僅給出了各向同性Beckmann分佈的結果,



 

2.5 多重散射微平面BRDF

  • 通過包含G2函數,Microfacet BRDF能夠考慮遮蔽(masking)和陰影(shadowing),但依然沒有考慮微平面之間的互反射(interreflection),或多表面反射(multiple surface bounce)。 而缺少微平面互反射(interreflection)是業界主流Microfacet BRDF的共有的限制。

                                          

​​​​​​​ 現有Microfacet建模未考慮圖中藍色部分的multiple surface bounce反射(圖片來自Naty Hoffman, Recent Advances in Physically Based Shading, SIGGRAPH 2016

  • 即標準Microfacet BRDF模型的最大問題,是雖然它們能量守恆(即不會產生任何能量),但它們也不能在高粗糙度時維持能量。 這是由於建模微平面模型時所做出的單散射假設,沒有模擬微表面上的多次散射,即缺少微平面互反射(interreflection)。單散射的在高粗糙度時會有較大的能量損失,從而顯得過暗。尤其對於高粗糙度的金屬而言,如下圖所示。

​​​​​​​ 由於單次散射,反射隨着粗糙度增加而變暗

多散射則是能量守恆的

GGX + height-correlated masking & shadowing,在粗糙度1時會損失接近一半的入射能量(來自[Kulla 2017]

  • 對此Heitz在[Heitz 2016]中深入討論了多重散射微平面BRDF(Multiple-scattering microfacet BRDF),但該文章僅介紹了多尺度BRDF的隨機計算,並不適用於實時渲染。

SIGGRAPH 2017, Revisiting Physically Based Shading at Imageworks

  • 隨後,Sony ImageWork的Kulla和Conty[Kulla 2017]在SIGGRPAPH 2017上中提出了一項新的技術方案,創建一個模擬多次反射表面反射的附加BRDF波瓣,作爲能量補償項(Energy Compensation Term):

​​​​​​​                                                    

  • 其中:
  • fsF1是F0設置爲1的鏡面BRDF項。
  • RsF1是fsF1的方向反照率(Directional albedo),取決於粗糙度α和仰角θ。它相對平滑,因此可以在數值上預計算,並存儲在一個小的二維紋理中。32×32分辨率就已足夠。
  • 函數是半球上RsF1的餘弦加權平均值。其僅依賴於α,因此可以存儲在一維紋理中,或者可以將廉價的曲線擬合到數據中。
  • 是菲涅爾項的餘弦加權平均值,如果使用原始Schlick近似,則可以表示爲

                                                                                      

GGX單散射

GGX單散射+能量補償

GGX單散射

GGX單散射+能量補償



 

三、幾何函數的基本性質

幾何函數的基本性質可以總結爲如下四條:

  • 標量性
  • 對稱性
  • 同向可見性
  • 拉伸不變性(Stretch Invariance)

下面分別進行說明。



 

3.1 標量性

  • 幾何函數是0和1之間的一個標量:

​​​​​​​                                                          

  • 低粗糙度下幾何函數大多情況下數值接近1,如下圖所示。

  • GGX對應的遮蔽陰影函數,增加表面粗糙度(更高的值)會使函數更快地降至零。(圖片來自[Physically Based Rendering 3rd])

​​​​​​​

  • GGX-Smith幾何項,從左到右的粗糙度爲 0.0, 0.2, 0.5, 0.8, 1.0


 

3.2 對稱性

幾何函數在兩個可見方向(出射和入射)上是對稱的:


 

3.3 同向可見性

幾何函數從宏觀表面正面方向上無法看到微表面的背面,反之亦然:

 

3.4 拉伸不變性(Stretch Invariance

  • 微表面幾何輪廓具有拉伸不變性(Stretch Invariance)。拉伸微表面輪廓就像拉伸一張圖片,即在一個維度上乘以常數因子,不會更改微表面輪廓的拓撲結構:拉伸後,遮擋的光線仍會被遮擋,未遮擋的光線仍未被遮擋。
  • 當微表面輪廓中涉及的所有斜率同時縮放時,遮蔽概率對於配置拉伸是不變的。這包括微表面的斜率和與出射方向相關的斜率。它們都是通過拉伸因子的倒數來縮放的。因此,斜率寬度的分佈也被反向拉伸因子拉伸。如下圖。

​​​​​​​

1D的微表面配置拉伸2倍不會改變遮蔽概率,但是配置的所有斜率都會縮放1倍,包括微表面的斜率以及與出射方向相關的斜率(圖片來自[Heitz 2014]



 

四、從法線分佈函數導出的Smith遮蔽函數



 

4.1 主流法線分佈函數導出的Smith遮蔽函數

 

由上文可知,Smith G1函數的形式如下:

其中,χ+(x)表示正特徵函數:

下面將總結主流各項同性法線分佈函數對應的Λ函數的解析形式。


 

4.1.1 Beckmann法線分佈的Λ函數

Beckmann法線分佈函數具備形狀不變性,其Smith遮蔽函數對應的Λ解析形式爲:

其中

上式的計算成本很高,因爲它包括誤差函數erf,於是Walter 等人[Walter et al. 2007] 爲其提出了精確的有理逼近,可以用於近似Λ(v):


 

4.1.2 Blinn-Phong法線分佈的Λ函數

Blinn-Phong NDF不具備形狀不變的(shape-invariant),所以其Λ函數不存在解析形式。Walter等人建議使用貝克曼Λ函數結合

參數進行等價。


 

4.1.3 GGX法線分佈的Λ函數

GGX法線分佈函數具備形狀不變性,其Smith遮蔽函數對應的Λ解析形式相對簡單,爲:

                                                                            

其中,

GGX分佈和GGX –Smith遮蔽陰影函數的組合,是目前遊戲和電影業界主流的方案。且業界一直致力於優化兩者的組合。下面將對Smith GGX的演變和發展做一個總結。



 

4.2 Smith GGX的演變和發展

遊戲和電影工業對GGX-Smith遮蔽函數的選用方面,可以總結爲兩個主要階段:

  • SIGGRAPH 2014之前,Smith分離的遮蔽陰影函數
  • SIGGRAPH 2014之後,Smith相關的遮蔽陰影函數

而這兩個階段的演變,主要在於2014Eric HeitzJCGT 2014上發表了著名的paper Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs》,以及其後續在SIGGPRAPH 2014上進行的同名的talk

下面將以此爲線索,對2012年至今,業界有代表性的Smith GGX選用的演變和發展做一個盤點。



 

4.2.1 SIGGRAPH 2012Disney

Disney參考了 [Walter 2007]的近似方法,使用Smith GGX導出的G項,並將粗糙度參數進行重映射以減少光澤表面的極端增益,即將α [0,1]重映射到[0.5, 1]α的值爲(0.5 + roughness/2)^2。從而使幾何項的粗糙度變化更加平滑,更便於美術人員的使用。

以下爲Disney 實現的Smith GGX的幾何項的表達式:


 

4.2.2 SIGGRAPH 2013UE4

其中UE4SIGGRAPH 2013上公佈的方案爲基於Schlick近似,將k映射爲k=a/2,去匹配GGX Smith方程,並採用了Disney對粗糙度的重映射:


                                                                             
 

4.2.3 SIGGRAPH 2014至今:業界轉向Smith Joint Masking-Shadowing Function

  • 在2014年,Heitz在JCGT 2014發表了著名的paper 《Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs》,以及後續在SIGGPRAPH 2014上進行了同名的talk,將遊戲和電影業界對遮蔽陰影函數(The Smith Joint Masking-Shadowing Function)的理解上升到了一個新的層次。

​​​​​​​ SIGGPRAPH 2014Understanding the Masking-Shadowing Function in Microfacet-Based BRDF

  • UE4 ,Frostbite 和Unity等引擎都受到Heitz的啓發,爲了得到更精確的幾何遮擋關係,開始考慮入射陰影和出射遮蔽之間的相關性,並在後續更新中各自轉向了Smith聯合遮蔽陰影函數(The Smith Joint Masking-Shadowing Function)的高度相關遮蔽陰影形式(Height-Correlated Masking and Shadowing),並相應地都做了一些近似與優化。

下面將分別對其進行總結。



 

4.2.3.1 FrostbiteGGX-Smith Joint近似方案

FrostbiteLagarde[Lagarde 2014 ]觀察到對GGX高度相關的Smith G2height-correlated Smith G2)具有與鏡面微平面BRDF的分母組合時抵消的項, 因此可以簡化組合項爲:

其中,



 

4.2.3.2 UE4GGX-Smith Correlated Joint 近似方案

 

UE4採用的 GGX-Smith Correlated Joint Approximate爲:

實現代碼如下:

// Appoximation of joint Smith term for GGX
// [Heitz 2014, "Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs"]
float Vis_SmithJointApprox( float a2, float NoV, float NoL )
{
    float a = sqrt(a2);// a2 = Pow4( Roughness )
    float Vis_SmithV = NoL * ( NoV * ( 1 - a ) + a );
    float Vis_SmithL = NoV * ( NoL * ( 1 - a ) + a );
    return 0.5 * rcp( Vis_SmithV + Vis_SmithL );
}

 


 

4.2.3.3 Unity HDRP GGX-Smith Correlated Joint近似方案

 

Unity HDRP採用的GGX-Smith Correlated Joint Approximate爲:

實現代碼如下:

// Note: V = G / (4 * NdotL * NdotV)
// Ref: http://jcgt.org/published/0003/02/03/paper.pdf
float V_SmithJointGGX(float NdotL, float NdotV, float roughness, float partLambdaV)
{
    float a2 = Sq(roughness);

    // Original formulation:
    // lambda_v = (-1 + sqrt(a2 * (1 - NdotL2) / NdotL2 + 1)) * 0.5
    // lambda_l = (-1 + sqrt(a2 * (1 - NdotV2) / NdotV2 + 1)) * 0.5
    // G        = 1 / (1 + lambda_v + lambda_l);

    // Reorder code to be more optimal:
    float lambdaV = NdotL * partLambdaV;
    float lambdaL = NdotV * sqrt((-NdotL * a2 + NdotL) * NdotL + a2);

    // Simplify visibility term: (2.0 * NdotL * NdotV) /  ((4.0 * NdotL * NdotV) * (lambda_v + lambda_l))
    return 0.5 / (lambdaV + lambdaL);
}

float V_SmithJointGGX(float NdotL, float NdotV, float roughness)
{
    float partLambdaV = GetSmithJointGGXPartLambdaV(NdotV, roughness);
    return V_SmithJointGGX(NdotL, NdotV, roughness, partLambdaV);
}

float GetSmithJointGGXPartLambdaVApprox(float NdotV, float roughness)
{
    float a = roughness;
    return NdotV * (1 - a) + a;
}


 

4.2.3.4 Google Failment渲染器 GGX-Smith Joint近似方案

 

Google Failment渲染器採用的 GGX-Smith Correlated Joint Approximate爲:

實現代碼如下:

float V_SmithGGXCorrelated(float NoV, float NoL, float a)
{
    float a2 = a * a;
    float GGXL = NoV * sqrt((-NoL * a2 + NoL) * NoL + a2);
    float GGXV = NoL * sqrt((-NoV * a2 + NoV) * NoV + a2);
    return 0.5 / (GGXV + GGXL);
} 


 

4.2.3.5 Respawn Entertainment GGX-Smith Joint近似方案

 

  • Hammon[Hammon 2017]在GDC 2017上提出,UE4在2013年提出的近似G1可以導出由高度相關的Vis項的高效近似:

​​​​​​​其中,lerp表示線性插值算子, lerp(x, y, s) = x * (1 − s) + y * s

GDC 2017, PBR Diffuse Lighting for GGX+Smith Microsurfaces ,Earl




 

五、BRDF標準化測試:白爐測試與弱白爐測試

Eric Heitz[Heitz 2014]中提出了白爐測試與弱白爐測試,作爲BSDFBRDF是否能量守恆的標準化測試方法。

GGX Furnace Test。可以看到在高粗糙度有能量損失。

GGX + Energy Compensation Furnace Test。可以看到基本可以保持能量守恆



 

5.1 白爐測試(The White Furnace Test

  • 白爐測試(The White Furnace Test)的思路爲驗證入射總能量爲1的光線的反射光線分佈是否歸一化的測試。
  • 可以將白爐測試理解爲一束輝度(irrandiance)爲1的光線從上往下照到菲涅爾反射項爲1的材質表面,並測定反射光線總能量是否爲1的過程。若反射光線總能量爲1,則通過白爐測試,否則,便不通過白爐測試。

白爐測試:將光線投射到微表面上,並測試反射光線的總能量是否爲1

  • 在白爐測試中,菲涅爾反射項始終爲1,則光線永遠不會透射,即所有的入射光線都會被全部反射,則表示投射的光線將被散射一次或多次並最終離開表面。
  • 白爐測試(The White Furnace Test)方程由下式給出:

​​​​​​​                                                           

  •  其中,ρ即爲待測試的BRDF

​​​​​​​ 不同microfacet材質的白爐試驗。



 

5.2 弱白爐測試(The Weak White Furnace Test

  • 因爲在2014年白爐測試被提出時,主流的BRDF模擬微表面上的單次反射,並不能多次散射,具有能量損失。所以業界主流的BRDF模型即使在“完美的反射表面(perfect reflector)”微表面上進行參數化時也不會積分到1,並且不滿足白爐測試方程。對此,Eric Heitz在[Heitz 2014]中設計了另一個限制性較小的,用於測試常見的基於microfacet的BRDF是否標準化的測試:弱白爐測試(The Weak White Furnace Test)。
  • 弱白爐測試(The Weak White Furnace Test)的主要思路爲驗證在第一次反彈之後和離開表面之前反射的光線分佈是否歸一化。對幾何項而言,即沒有入射的陰影(shadowing)項,只有出射的遮蔽(masking)項。可以通過用遮蔽(masking)函數替換遮蔽陰影(masking-shadowing)函數,即G2(l,v,h) = G1(v,h)來實現。
  • 弱白爐測試方程(Weak White Furnace Test)由下式給出:

                                                              

弱白爐測試對於漫反射微平面BRDF也同樣適用,具體方案可見[Heitz 2014]。

  • [Heitz 2014]的附錄中也有實現弱白爐測試的Matlab代碼。

對微平面Specular BRDF的弱白爐測試的具體過程如下:

微平面Specular BRDF弱白爐測試的具體過程



 

六、總結

正文到這裏已經結束。不妨使用本文主要內容提煉出的思維導圖作爲全文的內容總結:


高清原圖下載地址:https://github.com/QianMo/PBR-White-Paper/raw/master/content/part%205/media/161b0caae09c258a64dccfadbda6b62d.png

 

系列文章的GitHub Repo

另外,和這個系列文章一起發佈的還有一個GitHub倉庫【PBR-White-Paper】,作爲這個系列文章的合集,後續整理好的PDF也會發布至此Repo中。

這裏是本文的GitHub版:

https://github.com/QianMo/PBR-White-Paper/blob/master/content/part%205/README.md

 

 

Reference

[1] Akenine-Moller T, Haines E, Hoffman N. Real-Time Rendering 4th[M]. AK Peters CRC Press, 2018

[2] Pharr M, Jakob W, Humphreys G. Physically based rendering: From theory to implementation[M]. Morgan Kaufmann, 2016.

[3] Kulla C, Conty A. Revisiting physically based shading at Imageworks[J]. SIGGRAPH Course, Physically Based Shading, 2017.

[4] Hoffman N. Background: physics and math of shading[J]. Physically Based Shading in Theory and Practice, 2013

[5] Sébastien Lagarde , Physically Based Material Where Are We , SIGGRAPH 2017

[6] Heitz E. Understanding the masking-shadowing function in microfacet-based BRDFs[J]. Journal of Computer Graphics Techniques, 2014

[7] Walter, Bruce, Stephen R. Marschner, Hongsong Li, and Kenneth E. Torrance, "Microfacet Models for Refraction through Rough Surfaces," Rendering Techniques 2007, Eurographics Association, pp. 195-206, June 2007.

[8] Burley, Brent, "Physically Based Shading at Disney," SIGGRAPH Practical Physically Based Shading in Film and Game Production course, Aug. 2012.

[9] https://github.com/EpicGames/UnrealEngine

[10] https://github.com/Unity-Technologies/ScriptableRenderPipeline

[11] https://google.github.io/filament/Filament.md.html

[12] 題圖來自《Anthem》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章