【基於物理的渲染(PBR)白皮書】(四)法線分佈函數相關總結

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

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

 

作爲基於物理的渲染(PBR)技術中材質高光質感的決定因素,更先進的法線分佈函數(Normal Distribution Function,NDF)的問世和發展,是PBR能夠在遊戲和電影工業日益普及的重要推動力之一。

從法線分佈函數和微平面理論(Microfacet Theory)的視角來看,基於物理的渲染代表着一種從宏觀表現到微觀細節的渲染理念的進化,從而對材質有了亞像素級更精細的把控和更科學的定量表示,從而推動了遊戲和電影業界渲染品質的提升,以及工作流的升級。

圖 基於PBR渲染的《雷神3:諸神黃昏》 @Arnold Renderer

圖 基於PBR渲染的《銀河護衛隊2》@Arnold Renderer

圖 基於PBR渲染的真實感槍械 @ArtSation,linus scheffel

圖 基於PBR渲染的Agent 327@ Blender Animation Studio

圖 基於PBR渲染的場景 @BattleField V

歷史上主流的法線分佈函數,按提出時間進行排序,可以總結爲:

  • Berry [1923]

  • Beckmann [1963]

  • Phong [1973]

  • Blinn-Phong [1977]

  • ABC [1989]

  • GGX [2007] / Trowbridge-Reitz [1975]

  • Shifted Gamma Distribution,SGD [2012]

  • Trowbridge-Reitz(GTR)[2012]

  • Student’s T-Distribution , STD [2017]

  • Exponential Power Distribution , EPD [2017]

而在如今的PBR時代,業界主流的法線分佈函數已從傳統的Blinn-Phong等分佈,遷移到更接近真實材質外觀表現,具備能量守恆,具有更寬尾部和更高峯值的GGX分佈,而且在朝着多高光波瓣(multiple specular lobes)的方向發展。

本文將從以下幾個方面,對基於物理的渲染中法線分佈函數(Normal Distribution Function,NDF)相關內容進行一個系統的總結:

  • 基於物理的渲染理念:從宏觀表現到微觀細節

  • 法線分佈函數與微平面理論

  • 法線分佈函數的基本性質

  • 各項同性NDF相關總結

  • 法線分佈函數的形狀不變性

  • 各向異性NDF相關總結

  • NDF的性能優化

  • 多高光波瓣(multiple specular lobes)

  • PBR中的高光抗鋸齒

  • 主流NDF的侷限性和發展趨勢

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

OK,讓我們從第一部分開始。



 

一、基於物理的渲染理念:從宏觀表現到微觀細節

關於基於物理的渲染理念,其實跟圖形學中對幾何體的建模尺度有一定關聯。圖形學中,對幾何體外觀的建模,總會假設一定的建模尺度和觀察尺度:

  • 宏觀尺度(Macroscale), 幾何體通過三角形網格進行建模, 由頂點法線(Vertex Normal)提供每頂點法線信息

  • 中尺度(Mesoscale), 幾何體通過紋理進行建模,由法線貼圖(Normal Map)提供每像素法線信息

  • 微觀尺度(Microscale), 幾何體通過BRDF進行建模,由粗糙度貼圖(Roughness Map)配合法線分佈函數,提供每亞像素(subpixel)法線信息

圖 PBR物體的渲染建模。從左到右:渲染後物體,幾何體三角形網格,法線貼圖,粗糙度貼圖。(圖片來自Sébastien Lagarde ,Physically-Based Material, where are we,SIGGRAPH 2017)

傳統光照模型中,一般只將幾何體建模到中尺度的法線貼圖(Normal Map)層面。雖說Blinn-Phong等分佈也是基於微平面理論推導而來,但並沒有配套粗糙度貼圖(Roughness Map)爲其提供亞像素級精度的細節,而且傳統的NDF一般都沒有經過歸一化,不滿足能量守恆,容易出現失真。

而在基於物理的渲染工作流中,通過將粗糙度貼圖(Roughness Map)與微平面歸一化的法線分佈函數結合使用,將需渲染的幾何體的建模尺度細化到了微觀尺度(Microscale)的亞像素層面,對材質的微觀表現更加定量,所以能夠帶來更加接近真實的渲染質量和更全面的材質外觀質感把控。如下圖。

圖 多尺度的幾何建模表示(圖片來自Sébastien Lagarde ,Physically-Based Material, where are we,SIGGRAPH 2017)



 

二、法線分佈函數與微平面理論

  • 微平面理論(microfacet theory)作爲一種研究微觀幾何(microgeometry)對反射率影響的數學分析方法,基於將微觀幾何(microgeometry)建模爲微平面(microfacets)的集合的思想。其最初由光學物理領域開發,用於研究統計表面上的散射[Beckmann Spizzichino 1963]。在圖形社區中,我們使用它來推導基於物理的BRDF。

  • 微平面模型的一個重要特性是微平面法線m的統計分佈(statistical distribution)。 此分佈由曲面的法線分佈函數(Normal Distribution Function,NDF)定義。

圖 微觀表面(Micro Surface)與宏觀表面(Macro Surface)法線方向(圖片來自[Walter 2007])

  • 法線分佈函數(Normal Distribution Function,NDF)在一些文獻中也用Specular D進行表示。

  • 微平面的法線分佈函數D(m)描述了微觀表面上的表面法線m的統計分佈。給定以m爲中心的無窮小立體角dωm和無窮小宏觀表面區域dA,則是相應微表面部分的總面積,其法線位於指定的立體角內。因此NDF的本質是一個密度函數,單位爲1/球面度(1/steradians)。

  • 從直覺上來說,NDF就像是微平面法線分佈的直方圖(histogram)。 它在微平面法線更可能指向的方向上具有更高的值。大多數表面都具有在宏觀表面法線n處顯示出很強的法線分佈峯值。

  • 若以函數輸入和輸出的角度來看NDF,則其輸入爲微表面粗糙度(微表面法線集中程度)和宏觀法線與視線的中間矢量(微表面法線方向),輸出爲此方向上的微表面法線強度。

  • 一般我們用宏觀表面的半矢量h來表示微觀表面法線m,因爲僅m = h的表面點的朝向纔會將光線l反射到視線v的方向,其他朝向的表面點對BRDF沒有貢獻(正負相互抵消)。

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

  • 目前業界廣泛採用的Microfacet Cook-Torrance BRDF形式如下:

  • 其中 D(h) 即法線分佈函數 (Normal Distribution Function),描述了平面法線分佈的概率,即具有正確朝向的微表面法線濃度。即具有正確朝向,能夠將來自l的光反射到v的表面點的相對於表面面積的濃度。D(h)常被直接寫作D(m)。

  • 可以將法線分佈函數 D(m) 理解爲微觀幾何表面區域上的微平面表面法線的統計分佈。 對 D(m) 在整個微平面法線上積分,會得到微表面的面積。更有用的是對D(m)(n · m)進行積分,即將 D(m) 的投影到宏觀表面平面上,會得到宏觀表面片元(patch)的面積,其被約定等於1,如下圖所示:

圖 微表面的側視圖。積分D(m)(n · m),得到投影到宏觀表面平面上的微平面區域,等於宏觀表面的面積,被約定爲1。(圖片來自《Real-Time Rendering 4th》)

  • 換句話說,投影D(m)(n · m)是被歸一化的:

  • 上式在積分時用到了Θ符號,表示在在整個球體上積分。而在以n爲中心的半球上積分時,一般用Ω表示。實際上,圖形學中使用的大多數微結構模型都是高度場(heightfields),這意味着對於Ω外的所有方向,D(m) = 0。 但是,上式也適用於非高度場微觀結構。

  • 更一般地,微觀表面(microsurface)和宏觀表面(macrosurface)在垂直於任何視圖方向v的平面上的投影是相等的:

  • 上面兩個積分公式定義了成爲一個合法的基於物理的法線分佈函數必須服從的約束。

  • 另外,上面兩個積分公式中的點積不用被約束爲大於等於0,因爲投影會產生正負抵消,如下圖所示。

圖 對D(m)(v · m)進行積分,微平面區域投影到垂直於v的平面(圖中黑色的cos θo線段),產生宏觀表面到該平面的投影,即cos θo或(v·n)。當多個微平面的投影重疊時,背向(backfacing)微平面的負投影區域抵消了“額外的”前向(frontfacing)微平面。(圖片來自《Real-Time Rendering 4th》)

可以發現,儘管存在許多具有重疊(overlapping)投影的微平面,但用於最終渲染而言,我們僅關注可見的微平面,即在每個重疊集合中最接近相機的微平面。 這一事實表明了將投影的微觀區域與投影的宏觀幾何區域相關聯的另一種方法:可見微平面的投影面積之和等於宏觀表面的投影面積。 我們可以通過定義遮蔽函數(masking function)G1(m,v)來對其進行數學表達,其給出了沿着視圖向量v可見的具有法線m的微平面的比率。G1(m,v)D(m) 在球體上的積分給出投影到垂直於v的平面上的宏觀表面的面積(其中x+ 表示爲被約束爲大於等於0):

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

  • 上式中,通過x+的表示方法表達將v · m限制爲大於等於0。 背面微平面不可見,因此在這種情況下不計算它們。 乘積G1(m,v)D(m)則表示了可見法線的分佈

  • 上式對G1(m,v)施加約束,但並不能唯一地確定它。有無數個函數滿足給定微平面法線分佈D(m)的約束。 這是因爲D(m)沒有完全指定微表面(microsurface)。 它僅告訴我們有多少百分比的微平面(microfacets)的法線指向了某些方向,而沒有告訴我們這些法線是如何進行排列。

本文的重點是法線分佈函數D,遮蔽陰影函數G相關的討論暫時就不繼續展開,下篇文章將對遮蔽陰影函數G做更詳細的探討。



 

三、法線分佈函數的基本性質

一個基於物理的的微平面法線分佈的基本性質,可以總結如下:

1. 微平面法線密度始終爲非負值:

2. 微表面的總面積始終不小於宏觀表面總面積:

3. 任何方向上微觀表面投影面積始終與宏觀表面投影面積相同:

4. 若觀察方向爲法線方向,則其積分可以歸一化。即v = n時,有



 

四、各項同性NDF相關總結

最常見的法線分佈函數是各向同性(isotropic)的,它們圍繞由宏觀表面法線n定義的軸旋轉對稱(rotationally symmetrical)。常見的各項同性法線分佈函數按出現時間進行排序,可以總結如下:

  • Berry [1923]

  • Beckmann [1963]

  • Phong [1973]

  • Blinn-Phong [1977]

  • ABC [1989]

  • GGX [2007] / Trowbridge-Reitz [1975]

  • Shifted Gamma Distribution,SGD [2012]

  • Trowbridge-Reitz(GTR)[2012]

  • Student’s T-Distribution , STD [2017]

  • Exponential Power Distribution , EPD [2017]

本文將對其中在歷史上使用和討論較爲廣泛的幾種法線分佈函數,Blinn-Phong、Beckmann、GGX(Trowbridge-Reitz)和GTR進行總結。

4.1 Blinn-Phong分佈

  • Blinn-Phong分佈的前身Phong分佈是計算機圖形學文獻中提出的最早的着色方程之一。

  • Blinn-Phong法線分佈函數由Blinn推導出,作爲(非基於物理的)Phong着色模型的改進,以更好地擬合微平面BRDF的結構。

  • Blinn-Phong 分佈不具備形狀不變性(shape-invariant)。

  • 雖然Blinn在提出Blinn-Phong分佈時沒有指定歸一化因子,但很容易計算,關於Blinn-Phong的歸一化的討論,可以參見(http://www.thetenthplanet.de/archives/255)。下式是較爲主流的歸一化的Blinn-Phong(Normalized Blinn-Phong)的形式:

  • 其中,冪αp是Blinn-Phong NDF的“粗糙度參數”;高值表示光滑表面,低值表示粗糙表面。對於非常光滑的曲面,值可以任意高(一個完美的鏡面αp=∞),並且通過將αp設置爲0可以實現最大隨機曲面(均勻NDF)。

  • αp參數不便於藝術家操縱或直接繪製,因爲它帶來的視覺變化非常不均勻。出於這個原因,經常讓美術師們操縱“界面值”,即通過非線性函數從中導出αp。例如:αp=ms,其中s是0到1之間的藝術家操縱值,m是給定的電影或遊戲中αp的上限。這種映射被多款遊戲使用,包括《使命召喚:黑色行動(Call of Duty: Black Ops)》,其中m被設置爲值8192。

  • UE4中,則採用映射 ,那麼得到的Blinn-Phong的形式爲:

  • UE4中對Blinn-Phong的實現代碼如下:
// [Blinn 1977, "Models of light reflection for computer synthesized pictures"]
float D_Blinn( float a2, float NoH )
{
        float n = 2 / a2 - 2;
        return (n+2) / (2*PI) * PhongShadingPow( NoH, n );		// 1 mad, 1 exp, 1 mul, 1 log
}

4.2 Beckmann分佈

  • Beckmann分佈是光學業界開發的第一批微平面模型中使用的法線分佈。[Beckmann 1963],也是Cook-Torrance BRDF在提出時選擇的NDF [Cook 1981] [Cook 1982]。

  • Beckmann NDF具備形狀不變性(shape-invariant)

  • 正確歸一化後,Beckmann分佈具有以下形式:

  • Beckmann分佈在某些方面與Phong分佈非常相似。 兩種法線分佈的參數可以使用關係式 進行等效。

圖 Blinn-Phong(藍色虛線)和Beckmann(綠色)分佈,αb值在0.025到0.2之間(使用參數關係)。(圖片來自《Real-Time Rendering 4th》)

UE4中對Beckmann分佈的實現代碼如下:

// [Beckmann 1963, "The scattering of electromagnetic waves from rough surfaces"]
float D_Beckmann( float a2, float NoH )
{
	float NoH2 = NoH * NoH;
	return exp( (NoH2 - 1) / (a2 * NoH2) ) / ( PI * a2 * NoH2 * NoH2 );
}

4.3 GGX(Trowbridge-Reitz)分佈

  • GGX即Trowbridge-Reitz分佈,最初由Trowbridge和Reitz [Trowbridge 1975]推導出,在Blinn 1977年的論文 [Blinn 1977]中也有推薦此分佈函數,但一直沒有受到圖形學界的太多關注。30多年後,Trowbridge-Reitz分佈被Walter等人獨立重新發現[Walter 2007],並將其命名爲GGX分佈。

  • 在[Walter 2007]重新發現並提出GGX分佈之後,GGX分佈採用風潮開始在電影 [Burley 2012]和遊戲 [Karis 2013][Lagarde 2014]行業中廣泛傳播,成爲了如今遊戲行業和電影行業中最常用的法線分佈函數。

  • GGX分佈的公式爲:

  • 在流行的模型中,GGX擁有最長的尾部。這是GGX能夠日益普及的主要原因:

圖 主流法線分佈函數高光長尾對比

  • GGX分佈具備形狀不變性(shape-invariant),而與其對標的GTR等分佈不具備形狀不變性,這是GGX能普及的深層次原因。

  • 在迪士尼原理着色模型(Disney principled shading model)中,Burley推薦將粗糙度控制以α= r2暴露給用戶,其中r是0到1之間的用戶界面粗糙度參數值,以讓分佈以更線性的方式變化。這種方式實用性較好,不少使用GGX分佈的引擎與遊戲都採用了這種映射,如UE4和Unity。

// GGX / Trowbridge-Reitz
// [Walter et al. 2007, "Microfacet models for refraction through rough surfaces"]
float D_GGX( float a2, float NoH )
{
	float d = ( NoH * a2 - NoH ) * NoH + 1;	// 2 mad
	return a2 / ( PI*d*d );			// 4 mul, 1 rcp
}

4.4 Generalized-Trowbridge-Reitz(GTR)分佈

  • Burley [ Burley 2012]根據對Berry,GGX等分佈的觀察,提出了廣義的Trowbridge-Reitz(Generalized-Trowbridge-Reitz,GTR)法線分佈函數,其目標是允許更多地控制NDF的形狀,特別是分佈的尾部:

  • 其中,γ參數用於控制尾部形狀。 當γ= 2時,GTR等同於GGX。 隨着γ的值減小,分佈的尾部變得更長。而隨着γ值的增加,分佈的尾部變得更短。上式中:

  • γ=1時,GTR即Berry分佈

  • γ=2時,GTR即GGX(Trowbridge-Reitz)分佈

以下爲各種γ值的GTR分佈曲線與θh的關係圖示:

圖 各種γ值的GTR分佈曲線與θh的關係

  • GTR分佈不具備形狀不變性(shape-invariant),導致其發佈以來,無法被廣泛使用。

以下是γ= 1和γ= 2時GTR分佈的Shader實現代碼:

// Generalized-Trowbridge-Reitz distribution
float D_GTR1(float alpha, float dotNH)
{
    float a2 = alpha * alpha;
    float cos2th = dotNH * dotNH;
    float den = (1.0 + (a2 - 1.0) * cos2th);

    return (a2 - 1.0) / (PI * log(a2) * den);
}

float D_GTR2(float alpha, float dotNH)
{
    float a2 = alpha * alpha;
    float cos2th = dotNH * dotNH;
    float den = (1.0 + (a2 - 1.0) * cos2th);

    return a2 / (PI * den * den);
}

4.5 其他分佈

2017年以來新發布的學生T-分佈(Student’s T-Distribution , STD) [ Ribardière 2017]和指數冪分佈(exponential power distribution ,EPD)[ Holzschuch 2017] NDF包括形狀控制參數。兩者都具有形狀不變性,但由於發佈時間較新,實用性尚不明朗,目前很少有聽說有實際使用。

五、法線分佈函數的形狀不變性

  • 形狀不變性(shape-invariant)是一個合格的法線分佈函數需要具備的重要性質。具有形狀不變性(shape-invariant)的法線分佈函數,可以用於推導該函數的歸一化的各向異性版本,並且可以很方便地推導出對應的遮蔽陰影項G。

  • 若一個各向同性的NDF可以改寫成以下形式,則這個NDF具有形狀不變性(shape-invariant):

還有一種等價的寫法是:

  • 對於形狀不變的NDF,縮放粗糙度參數相當於通過倒數拉伸微觀幾何,如下圖所示。

圖 對於形狀不變的NDF,縮放粗糙度參數相當於通過倒數拉伸微觀幾何(圖片來自Naty Hoffman, Recent Advances in Physically Based Shading, SIGGRAPH 2016)

  • 爲了更容易理解形狀不變性,可以將NDF視爲P22,即一個2D斜率的分佈。原始的NDF是一個3D的矢量分佈。然後我們可以發現,對於具有形狀不變形式的分佈,線性縮放粗糙度α會導致斜率空間中的分佈線性拉伸。

  • 2D斜率的分佈P22和法線分佈函數的關係以及變換式可寫作:

  • 關於形狀不變性的好處,可以總結爲:

    • 方便推導出該NDF歸一化的各向異性版本

    • 方便推導出遮蔽陰影項 Smith G()

    • 方便基於NDF或可見法線分佈推導其重要性採樣

      • 對於Smith G(),可用低維函數或表格處理所有粗糙度和各向異性
  • 對於常見的法線分佈函數的旋轉不變性的分類:

    • 具備形狀不變性的常用法線分佈函數爲:

      • GGX

      • Beckmann

    • 不具備形狀不變性的常用法線分佈函數爲:

      • Phong

      • Blinn-Phong

      • GTR

  • 下圖顯示瞭如何通過拉伸表面(stretching the surface)將各向同性的形狀不變分佈轉換爲各向異性分佈。相反,任何具有各向異性分佈的配置都可以轉換回具有各向同性分佈的配置。

圖 通過拉伸表面,可以將各向同性具備形狀不變性的分佈,轉換爲各向異性分佈。(圖片來自[Heitz 2014])

通過使用這種方法,我們可以推導出Beckmann和GGX分佈的各向異性形式。

六、各向異性NDF相關總結

現實世界中,大多數材質具有各向同性的表面外觀,但有些特殊材質的微觀結構具有顯著的各向異性(Anisotropy),從而顯著影響其外觀。

圖 各向異性(Anisotropy)材質渲染表現 @Arnold Renderer

圖 各向異性(Anisotropy)材質渲染表現 @Arnold Renderer

創建各向異性NDF的常用方法是基於現有各向同性NDF進行推導。而推導所使用的方法是通用的,可以應用於任何形狀不變的(shape-invariant)各向同性NDF,這便是GGX等形狀不變的NDF能更加普及的另一個原因。

如上文所述,若一個各向同性(isotropic)的NDF具備形狀不變性(shape-invariant),則其可以用以下形式寫出:

其中g代表一個表示了NDF形狀的一維函數。而通過此形式,可得到各向異性的(anisotropic)版本:

  • 其中,參數αxαy分別表示沿切線(tangent)方向t和副法線(binormal)方向b的粗糙度。若αx = αy,則上式縮減回各向同性形式。

  • 需要注意的是,一般的shader寫法,會將切線方向t寫作X,副法線(binormal)b方向寫作Y。

6.1 Anisotropic Beckmann Distribution

各項異性的Beckmann分佈形式如下:

  • 其中,m爲微表面法線(可以理解爲half半矢量),n爲宏觀表面法線,t爲切線方向,b爲副法線方向。

以下爲UE4中Anisotropic Beckmann分佈的Shader實現代碼:

// Anisotropic Beckmann
float D_Beckmann_aniso( float ax, float ay, float NoH, float3 H, float3 X, float3 Y )
{
	float XoH = dot( X, H );
	float YoH = dot( Y, H );
	float d = - (XoH*XoH / (ax*ax) + YoH*YoH / (ay*ay)) / NoH*NoH;
	return exp(d) / ( PI * ax*ay * NoH * NoH * NoH * NoH );
}

6.2 Anisotropic GGX Distribution

各項異性的GGX分佈形式如下:

以下爲UE4中Anisotropic GGX分佈的Shader實現代碼:

// Anisotropic GGX
// [Burley 2012, "Physically-Based Shading at Disney"]
float D_GGXaniso( float ax, float ay, float NoH, float3 H, float3 X, float3 Y )
{
	float XoH = dot( X, H );
	float YoH = dot( Y, H );
	float d = XoH*XoH / (ax*ax) + YoH*YoH / (ay*ay) + NoH*NoH;
	return 1 / ( PI * ax*ay * d*d );
}
  • 其中,X爲tangent,t切線方向,Y爲binormal,b,副法線方向

  • 需要注意的是,將法線貼圖與各向異性BRDF組合時,重要的是要確保法線貼圖擾動(perturbs)切線和副切線矢量以及法線。

6.3 其他各項異性參數化方法

  • 雖然參數化各向異性NDF的最直接的方法是使用各向同性粗糙度進行兩次參數化,一次用於αx,一次用於αy,有時也使用其他參數化。 在迪士尼原理着色模型中,各向同性粗糙度參數r與第二標量參數kaniso組合,範圍爲[0,1]。 因此,從這些參數計算αxαy的值:

  • 其中,上式中的因子0.9將縱橫比限制爲10:1。

  • Sony Imageworks 則使用了一種不同的參數化,允許任意程度的各向異性:



 

七、NDF的性能優化

7.1 Blinn-Phong不一定比GGX更省性能

需要注意的是,Normalized Blinn-Phong不一定比GGX更省,要具體看GPU架構。讓我們從指令數對兩者的計算量進行量化。兩者的計算Shader代碼如下:

// [Blinn 1977, "Models of light reflection for computer synthesized pictures"]
float D_Blinn( float a2, float NoH )
{
	float n = 2 / a2 - 2;
	return (n+2) / (2*PI) * PhongShadingPow( NoH, n );	// 1 mad, 1 exp, 1 mul, 1 log
}

// GGX / Trowbridge-Reitz
// [Walter et al. 2007, "Microfacet models for refraction through rough surfaces"]
float D_GGX( float a2, float NoH )
{
	float d = ( NoH * a2 - NoH ) * NoH + 1;	// 2 mad
	return a2 / ( PI*d*d );			// 4 mul, 1 rcp
}

若統計一下兩種分佈函數的計算指令,可以得到:

  • 標準的GGX計算指令爲兩次mad,4次mul,一次rcp。共7次運算。

  • 標準的Blinn-Phong計算指令爲1次mad, 1次exp, 1次mul, 1次log。共4次運算。

不難發現,Blinn-Phong雖然比GGX的總運算次數少3次,但具有exp、log等稍複雜的運算。兩者的性能差異主要還是要看GPU架構,對某些架構的GPU而言, GGX可能會更快。

7.2 GGX分佈的移動端性能優化

標準的GGX的公式和一般Shader實現如下:

// GGX / Trowbridge-Reitz
// [Walter et al. 2007, "Microfacet models for refraction through rough surfaces"]
float D_GGX( float a2, float NoH )
{
	float d = ( NoH * a2 - NoH ) * NoH + 1;	// 2 mad
	return a2 / ( PI*d*d );			// 4 mul, 1 rcp
}

在上述實現中,用float進行數據的存儲與計算。其實我們可以通過使用半精度浮點數(half precision floats)來對此實現進行改進。這種優化需要改變原始方程,因爲在半浮點數half(即mediump)中計算1-(n·h)^2時存在兩個問題:

由於n和h都是單位矢量,那麼| n×h |^ 2 = 1-(n·h)^2。

於是,我們可以通過使用簡單的叉積| n×h |^2來直接計算半精度浮點數下的1-(n·h)^2。

總的來說,此優化方案會帶來更好的性能,並保持所有計算都在half(mediump)內進行。

UE4對GGX的移動端優化的Shader實現代碼如下:

#ifndef MOBILE_GGX_USE_FP16
	#define MOBILE_GGX_USE_FP16 1
#endif

#define MEDIUMP_FLT_MAX    65504.0
#define MEDIUMP_FLT_MIN    0.00006103515625

#if MOBILE_GGX_USE_FP16
	#define saturateMediump(x) min(x, MEDIUMP_FLT_MAX)
#else
	#define saturateMediump(x) (x)
#endif

half GGX_Mobile(half Roughness, half NoH, half3 H, half3 N)
{

#if MOBILE_GGX_USE_FP16
	float3 NxH = cross(N, H);
	float OneMinusNoHSqr = dot(NxH, NxH);
#else
    float OneMinusNoHSqr = 1.0 - NoH * NoH;
#endif

	half a = Roughness * Roughness;
	float n = NoH * a;
	float p = a / (OneMinusNoHSqr + n * n);
	float d = p * p;
	return saturateMediump(d);
}

更多關於NDF性能優化的討論,由於篇幅原因,這邊就不一一展開了。這裏列舉一些其他的法線分佈函數優化相關的材料供大家參考:



 

八、多高光波瓣(multiple specular lobes)

  • 即便是GGX的高光長尾,仍然不足以媲美真實世界材質中的高光表現。在不增加NDF本身的複雜性的前提下,更好地匹配測量材質的替代解決方案是使用多個高光波瓣(multiple specular lobes)。

  • Cook 和Torrance [Cook Torrance1981]首先提出了這個想法。之後 [Ngan 2005]進行了實驗測試,他發現對於大部分材質來說,添加第二個高光波瓣確實顯着改善了貼合性。

  • 皮克斯PxrSurface材質具有“粗糙鏡面反射(rough specular)”波瓣,旨在用於此目的(與主鏡面波瓣一起使用)。附加波瓣是一個完整的鏡面微平面BRDF,包含所有相關的參數與項。

  • Sony Imageworks使用更外部的方法,使用兩個GGX NDF的混合作爲擴展的NDF暴露給用戶,而不是整個單獨的鏡面BRDF項。在這種情況下,所需的唯一附加參數是第二粗糙度值和混合量。

  • Disney Principled BRDF也使用了兩個固定的高光波瓣(specular lobe),且都使用GTR分佈。 主波瓣(primary lobe)使用γ=2的GTR(即GGX分佈),代表基礎底層材質(Base Material)的反射,可爲各項異性(anisotropic)或各項同性(isotropic)的金屬或非金屬。次級波瓣(secondary lobe)使用γ=1的GTR(即Berry分佈),代表基礎材質上的清漆層(ClearCoat Layer)的反射,一般爲各項同性(isotropic)的非金屬材質,即清漆層(ClearCoat Layer)

  • 另外,多高光波瓣(multiple specular lobes)常與Layered mixture model結合使用。

圖 離線渲染器的多層混合建模(Layered mixture model)。 @ Autodesk Standard Surface

圖:Autodesk Standard Surface多層建模的multiple specular lobes材質。整體框架爲“原子”閉包的加權和,每個閉包的重量是沿着從其相應葉節點到根節點的路徑的邊緣重量的乘積。shader參數權重以粗體顯示。@ Autodesk Standard Surface

圖 通過組合clearcoat層和標準層的多高光波瓣(multiple specular lobes)架構,可以實現各種效果。 從左到右:鋁花(flakes),表面水滴(raindrops),碳纖維(carbon fiber)。@Arnold Renderer



 

九、PBR中的高光抗鋸齒

  • 鋸齒(Aliasing)是實時渲染和圖形學中經常會面對的問題。而PBR由於使用了標準化的法線分佈函數(normalized NDF),以及無處不在的反射現象,加上實時渲染中較少的採樣率,讓其高光的鋸齒問題更加明顯。這導致了基於物理的渲染中,高光鋸齒是實踐中經常會遇到的問題。

  • 模型精度越高、工作流越傾向於全PBR方式、光照計算精確程度越高,則反射的高光鋸齒問題就越明顯。

  • 以下是帶高光鋸齒的PBR渲染圖和經過TAA處理鋸齒後的對比圖:

圖 PBR賽車渲染(未經過抗鋸齒處理) @CTAA , Unity AssetStore

圖 PBR賽車渲染(基於TAA(Temporal Anti-Aliasing,時域抗鋸齒)處理)@CTAA , Unity AssetStore

  • 出現高光鋸齒的原因可以總結爲: 法線分佈函數作爲亞像素表面結構(subpixel surface structure)的統計描述。 當相機和表面之間的距離增加時,先前覆蓋多個像素的表面結構會減小到亞像素(subpixel)大小,從而從法線貼圖的領域移動到法線分佈函數的亞像素領域。在亞像素領域,紋理的mipmap一般以平均的方式進行處理,會丟失原有的細節,從而讓該像素處的法線分佈過於狹窄和集中,於是便會出現高光在像素級別的不連續性,以閃爍高光(flickering highlights)形式引起鋸齒。

  • 關於高光鋸齒,業界的解決方案分爲兩大流派:屏幕空間抗鋸齒(Anti-Aliasing)和預過濾(Pre-Filtering),下面分別進行總結:

  • 屏幕空間抗鋸齒(Anti-Aliasing)。 MSAA(MultiSample Anti-Aliasing,多采樣抗鋸齒),SSAA(SuperSample Anti-Aliasing,超採樣抗鋸齒), FXAA(Fast Approximate Anti-Aliasing,快速近似抗鋸齒)和TAA(Temporal Anti-Aliasing,時域抗鋸齒)等抗鋸齒技術可以求解單像素上多個點的入射光,找出其中小的變化點,從而減少可見的鋸齒。其中目前較爲有效的PBR高光抗鋸齒的技術,當屬TAA(Temporal Anti-Aliasing,時域抗鋸齒)。有關TAA技術的更多詳細信息,可以參考UE4在SIGGPRACH 2014中的分享:http://advances.realtimerendering.com/s2014/epic/TemporalAA.pptx

  • 預過濾(Pre-Filtering)。 類似Toksvig,LEAN Mapping、CLEAN Mapping和LEADR Mapping等技術方案,按照像素覆蓋區域,將宏觀幾何(macro- geometric)(曲率)和中觀幾何(meso-geometric)(法線貼圖,位移貼圖)的變化,轉移到材質屬性的微觀幾何變化,來保持採樣數量較少。這種變換可以更容易和更快地求解像素覆蓋區域內發生的所有交互。其中,Toksvig和LEAN Mapping專注於法線貼圖的過濾,LEAN映射的簡單變體CLEAN Mapping需要較少的存儲,代價是失去各向異性支持,而LEADR Mapping則用於位移貼圖的過濾。而其他技術則通過將曲率轉換爲材質屬性來近似宏觀的幾何過濾。Stephen Hill的blog文章(https://blog.selfshadow.com/2011/07/22/specular-showdown/)對此內方案進行了結合改進,而這邊是一個對應的WebGL實現demo:http://www.selfshadow.com/sandbox/gloss.html



 

十、主流NDF的侷限性和發展趨勢

當前主流NDF的侷限性可以主要總結爲如下三點:

  • 缺少更好的形狀控制NDF

  • 無法表示粗粒度微觀結構

  • 單次散射建模的侷限性

下面分別進行說明。

9.1 缺少更好的形狀控制NDF

  • 現有的主流NDF缺少更好的形狀不變性(Shape Invariance)+形狀控制(Shape Control)的結合。對此,Naty Hoffman在SIGGRAPH 2016上提出,廣義Beckmann分佈(Generalized Beckmann)和超柯西分佈(Hyper-Cauchy)可以作爲實踐中的選擇。

圖 廣義Beckmann分佈(Generalized Beckmann)(圖片來自Naty Hoffman, Recent Advances in Physically Based Shading, SIGGRAPH 2016)

圖 超柯西分佈(Hyper-Cauchy)(圖片來自Naty Hoffman, Recent Advances in Physically Based Shading, SIGGRAPH 2016)

9.2 現有NDF無法表示粗粒度微觀結構

  • 當今使用的NDF從外觀而言都很平滑,如下圖中左邊的NDF。這種NDF每個像素覆蓋了數萬個表面細節,是對細粒度的微觀幾何的一種良好表示形式。

圖 細粒度的NDF vs 粗粒度的NDF(圖片來自Naty Hoffman, Recent Advances in Physically Based Shading, SIGGRAPH 2016)

  • 但其實真實世界中的許多表面材質,具有粗粒度的微觀結構,像素僅覆蓋了幾十個表面元素。在這種情況下,法線分佈的表現更像是如如上圖的右邊所示,表面有一個複雜而閃爍外觀,而不僅僅的各項異性這麼簡單。目前提出的模型都無法表示出這種類型的法線分佈。期待未來有更多能解決此問題的法線分佈函數的問世。

圖 真實世界中的法線分佈(圖片來自[Yan 2014])

9.3 單次散射建模的侷限性和發展趨勢

  • 目前渲染領域廣泛採用的Cook-Torrance microfacet BRDF微平面模型,實際上是人們可以想到的最簡單的模型,它僅對幾何光學系統中的單層微表面上的單次散射進行建模。沒有考慮多次散射,沒有考慮衍射,也沒有考慮波動光學。其假設所有遮擋的光線都被丟失,會導致與現實行爲相比的能量損失。
  • 對此,一些論文提出,可以採用非基於物理的修正因子(corrective factors)來嘗試對缺失的能量進行補償。例如迪士尼模型中的的“Sheen”光澤項。
  • 圖 現有Microfacet建模未考慮圖中藍色部分的multiple surface bounce反射(圖片來自Naty Hoffman, Recent Advances in Physically Based Shading, SIGGRAPH 2016)

     

  • 另外,近年不少渲染器也開始結合multiple-scattering BSDF使用多次散射進行建模,如cycles renderer的 Multiscatter GGX(https://developer.blender.org/D2002)。但目前的multiple-scattering BSDF方案主要爲隨機求解,所以不適用於實時渲染和遊戲領域。

圖 cycles renderer Multiscatter GGX @ cycles renderer

雖然Multiscatter GGX等方案離實時渲染還有很長一段路。這邊也列舉一些相關資料,感興趣的同學不妨根據需要深入研究。



 

十一、本文內容要點總結

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



 

Reference

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

[2] Blinn, James F., "Models of Light Reflection for Computer Synthesized Pictures," ACM Computer Graphics (SIGGRAPH '77 Proceedings), vol. 11, no. 2, pp. 192-198, July 1977. http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.131.7741&rep=rep1&type=pdf

[3] 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.https://www.cs.cornell.edu/\~srm/publications/EGSR07-btdf.pdf

[4] https://lesterbanks.com/2014/01/v-ray-new-ggx-shader-offers-better-microfacet-distribution-over-blinn-or-phong/

[5] Ribardière, Mickaël, Benjamin Bringier, Daniel Meneveaux, and Lionel Simonot, "STD: Student's t-Distribution of Slopes for Microfacet Based BSDFs," Computer Graphics Forum, vol. 36, no. 2, pp. 421-429, 2017. https://mribar03.bitbucket.io/projects/eg_2017/

[6] Holzschuch, Nicolas, and Romain Pacanowski, "A Two-Scale Microfacet Reflectance Model Combining Reflection and Diffraction," ACM Transactions on Graphics (SIGGRAPH 2017), vol. 36, no. 4, pp. 66:1-66:12, July 2017. https://hal.inria.fr/hal-01515948

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

[8] Cook, Robert L., and Kenneth E. Torrance, "A Reflectance Model for Computer Graphics," Computer Graphics (SIGGRAPH '81 Proceedings),vol. 15, no. 3, pp. 307-316, Aug. 1981. http://www.irisa.fr/prive/kadi/Lopez/p307-cook.pdf

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

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

[11] https://stackoverflow.com/questions/4414041/what-is-the-precision-of-highp-floats-in-glsl-es-2-0-for-iphone-ipod-touch-ipad

[12] https://en.wikipedia.org/wiki/Floating_point\#Addition_and_subtraction

[13] Dupuy, Jonathan, "Antialiasing Physically Based Shading with LEADR Mapping," SIGGRAPH Physically Based Shading in Theory and Practice course, Aug. 2014.

https://blog.selfshadow.com/publications/s2014-shading-course/dupuy/s2014_pbs_leadr_slides.pdf

[14] Beckmann, Petr, and André Spizzichino, "The Scattering of Electromagnetic Waves from Rough Surfaces", Pergamon Press, 1963. http://www.gbv.de/dms/ilmenau/toc/017290422.PDF

[15] Blinn, James F., "Models of Light Reflection for Computer Synthesized Pictures," ACM Computer Graphics (SIGGRAPH '77 Proceedings), vol. 11, no. 2, pp. 192-198, July 1977.http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.131.7741&rep=rep1&type=pdf

[16] Phong,BuiTuong, “Illumination for Computer Generated Pictures,” Communications of the ACM, vol. 18, no. 6, pp. 311–317, June 1975. Cited on p. 118, 340, 416 http://users.cs.northwestern.edu/\~ago820/cs395/Papers/Phong_1975.pdf

[17] Trowbridge, T. S., and K. P. Reitz, "Average Irregularity Representation of a Roughened Surface for Ray Reflection," Journal of the Optical Society of America, vol. 65, no. 5, pp. 531-536, May 1975.

[18] 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. https://www.cs.cornell.edu/\~srm/publications/EGSR07-btdf.pdf

[19] Church, Eugene L., Peter Z. Takacs, and Thomas A. Leonard. "The prediction of BRDFs from surface profile measurements." Scatter from Optical Components. Vol. 1165. International Society for Optics and Photonics, 1990.

[20] Bagher, Mahdi M., Cyril Soler, Nicolas Holzschuch, “Accurate Fitting of Measured Reflectances using a Shifted Gamma Microfacet Distribution,” Eurographics Symposium on Rendering (2012), 1509–1518, June 2012. http://hal.inria.fr/hal-00702304/en

[21] Burley, Brent, "Physically Based Shading at Disney," SIGGRAPH Practical Physically Based Shading in Film and Game Production course, Aug. 2012.https://blog.selfshadow.com/publications/s2012-shading-course/burley/s2012_pbs_disney_brdf_notes_v3.pdf

[22] https://www.arnoldrenderer.com/gallery/

[23] https://scicomp.stackexchange.com/questions/5253/cancellation-problem-in-float-point-numbers

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

[25] https://blender.stackexchange.com/questions/93790/is-the-roughness-setting-is-based-on-a-standard-measuring-unit

[26] https://learnopengl.com/PBR/Theory

[27] https://80.lv/articles/the-future-of-real-time-rendering-with-lumberyard/

[28] https://assetstore.unity.com/packages/vfx/shaders/ctaa-cinematic-temporal-anti-aliasing-pc-vr-106995

[29] http://advances.realtimerendering.com/s2014/epic/TemporalAA.pptx

[30] M. Toksvig. “Mipmapping Normal Maps”. In: Journal of Graphics, GPU, and Game Tools 10.3 (2005), pp. 65–71. doi: 10.1080/2151237X.2005.10129203. http://www.nvidia.com/object/mipmapping_normal_maps.html

[31] Olano, Marc, and Dan Baker, “LEAN Mapping,” in Proceedings of the 2010 ACM SIGGRAPH Symposium on Interactive 3D Graphics and Games, ACM, pp. 181–188, 2010. Cited on p. 370 http://www.csee.umbc.edu/\~olano/papers/lean/

[32] Baker, Dan, "Spectacular Specular--LEAN and CLEAN Specular Highlights," Game Developers Conference, Mar. 2011.http://twvideo01.ubm-us.net/o1/vault/gdc2011/slides/Dan_Baker_SpectacularSpecular.ppt

[33] 題圖來自《刺客信條:奧德賽》

 

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