基於物理的渲染(PBR)白皮書(一):PBR核心知識體系總結與概覽
先放出PBR知識體系的架構圖:
這張架構圖是這個系列文章的內容框架,而且會隨著內容的深入,不斷更新。目前是1.0版。(原圖下載)
系列文章前言
基於物理的渲染(Physically Based Rendering,PBR)技術,自迪士尼在SIGGRAPH 2012上提出了著名的“迪士尼原則的BRDF(Disney Principled BRDF)”之後,由於其高度的易用性以及方便的工作流,已經被電影和遊戲業界廣泛使用。
個人瞭解和研究基於物理的渲染,也已經有一段時間了。
期間看了大量的資料,基本刷完了《SIGGRAPH Course:Physically Based Shading in Theory and Practice》系列2010年到2017年的幾十篇talk和note(可惜這個course 2018年沒有開設),這邊是整理好的連結,包含了PPT和note的下載:
•【SIGGRAPH 2010 Course】Physically-Based Shading Models in Film and Game Production http://renderwonk.com/publications/s2010-shading-course/
•【SIGGRAPH 2012 Course】Practical Physically Based Shading in Film and Game Production https://blog.selfshadow.com/publications/s2012-shading-course/
•【SIGGRAPH 2013 Course】Physically Based Shading in Theory and Practice https://blog.selfshadow.com/publications/s2013-shading-course/
•【SIGGRAPH 2014 Course】Physically Based Shading in Theory and Practice https://blog.selfshadow.com/publications/s2014-shading-course/
•【SIGGRAPH 2015 Course】Physically Based Shading in Theory and Practice https://blog.selfshadow.com/publications/s2015-shading-course/
•【SIGGRAPH 2016 Course】Physically Based Shading in Theory and Practice https://blog.selfshadow.com/publications/s2016-shading-course/
•【SIGGRAPH 2017 Course】Physically Based Shading in Theory and Practice https://blog.selfshadow.com/publications/s2017-shading-course/
也看了一些相關的著作。目前瞭解到的PBR相關的著作,主要有三本:
•《Physically Based Rendering:From Theory to Implementation,Third Edition》這本書主要專注離線渲染,實時渲染只能用到裡面很少的一部分。PBRT現已開放Web版全文閱讀:http://www.pbr-book.org/3ed-2018/contents.html,非常良心。
•《Real-Time Rendering 4th》中PBR的相關章節,個人認為是非常不錯的資料。
•《Physically Based Shader Development for Unity》,主要是PBR在Unity引擎中的使用,而且是以Surface Shader的方式,准入門級,比較淺。
期間也記過一些筆記,已經有不少的篇幅,但內容始終比較零散。所以有了萌生將這些筆記整理成更系統的系列文章的念頭。
通過將零散的筆記進行總結,集結成文章,併發布出來,既對想更系統而深入地瞭解PBR和實時渲染相關技術的朋友們所有幫助,對我自己而言,在總結的過程中,也應該會收穫頗豐。正如已經完結的【《Real-Time Rendering 3rd》提煉總結】系列,以及還未完結的【GPU精粹】系列一樣(GPU精粹系列目前暫停,稍後會繼續填完)。
而目前,國內似乎確實缺少一個較為系統、全面、深入介紹基於物理的實時渲染的系列文章。
另外,類似之前【《Real-Time Rendering 3rd》提煉總結】的方式,在這個系列完結後,會進行整理,集結成冊,成為一本電子書,暫定書名為《基於物理的渲染(PBR)白皮書》。所以此係列目前便直接命名為了【基於物理的渲染(PBR)白皮書】,便於整體認知的延續。
總之,希望這個新的系列,能對大家有所幫助。
PBR知識體系概覽
這篇文章接下來的部分,是這個系列文章PBR知識體系的精華濃縮版。涉及八個部分的內容:
- 一、核心PBR理論
- 二、渲染方程與BxDF
- 三、迪士尼原則的BxDF(Disney Principled BxDF)
- 四、漫反射BRDF模型(Diffuse BRDF)
- 五、鏡面反射BRDF模型(Specular BRDF)
- 六、基於物理的環境光照(Physically Based Environment Lighting)
- 七、離線渲染相關(Offline Rendering Related)
- 八、進階渲染主題(Advanced Rendering Topics)
通過接下來的概覽,希望能在後續的具體章節展開前,讓大家對PBR的整體知識體系,有一個全面的認知,所謂的大局觀的建立。
一、PBR核心理論與渲染原理
PBR核心知識體系的第一部分自然是PBR的核心理論以及相關的渲染原理。比較老生常談,但作為基礎理論,是入門級知識,還是需要仔細交代。
基於物理的渲染(Physically Based Rendering,PBR)是指使用基於物理原理和微平面理論建模的著色/光照模型,以及使用從現實中測量的表面引數來準確表示真實世界材質的渲染理念。
以下是對PBR基礎理念的概括:
- 微平面理論(Microfacet Theory)。微平面理論是將物體表面建模成做無數微觀尺度上有隨機朝向的理想鏡面反射的小平面(microfacet)的理論。在實際的PBR工作流中,這種物體表面的不規則性用粗糙度貼圖或者高光度貼圖來表示。
- 能量守恆(Energy Conservation)。出射光線的能量永遠不能超過入射光線的能量。隨著粗糙度的上升鏡面反射區域的面積會增加,作為平衡,鏡面反射區域的平均亮度則會下降。
- 菲涅爾反射(Fresnel Reflectance)。光線以不同角度入射會有不同的反射率。相同的入射角度,不同的物質也會有不同的反射率。萬物皆有菲涅爾反射。F0是即0度角入射的菲涅爾反射值。大多數非金屬的F0範圍是0.02~0.04,大多數金屬的F0範圍是0.7~1.0。
- 線性空間(Linear Space)。光照計算必須線上性空間完成,shader中輸入的gamma空間的貼圖比如漫反射貼圖需要被轉成線性空間,在具體操作時需要根據不同引擎和渲染器的不同做不同的操作。而描述物體表面屬性的貼圖如粗糙度,高光貼圖,金屬貼圖等必須保證是線性空間。
- 色調對映(Tone Mapping)。也稱色調複製(tone reproduction),是將寬範圍的照明級別擬合到螢幕有限色域內的過程。因為基於HDR渲染出來的亮度值會超過顯示器能夠顯示最大亮度,所以需要使用色調對映,將光照結果從HDR轉換為顯示器能夠正常顯示的LDR。
- 物質的光學特性(Substance Optical Properties)。現實世界中有不同型別的物質可分為三大類:絕緣體(Insulators),半導體(semi-conductors)和導體(conductors)。在渲染和遊戲領域,我們一般只對其中的兩個感興趣:導體(金屬)和絕緣體(電解質,非金屬)。其中非金屬具有單色/灰色鏡面反射顏色。而金屬具有彩色的鏡面反射顏色。即非金屬的F0是一個float。而金屬的F0是一個float3,如下圖。
圖金屬和非金屬材質的F0範圍
除了PBR的基礎理論,光與非光學平坦表面的互動對理解微平面理論(Microfacet Theory)至關重要。下面進行一些說明。
1.1光與非光學平坦表面的互動原理
光在與非光學平坦表面(Non-Optically-Flat Surfaces)的互動時,非光學平坦表面表現得像一個微小的光學平面表面的大集合。表面上的每個點都會以略微不同的方向對入射光反射,而最終的表面外觀是許多具有不同表面取向的點的聚合結果。
圖來自非光學平坦表面的可見光反射是來自具有不同方向的許多表麵點的反射的總體結果
在微觀尺度上,表面越粗糙,反射越模糊,因為表面取向與整個巨集觀表面取向的偏離更強。
圖片頂部所示的表面,表面相對光滑;表面取向僅略有變化,導致反射光方向的微小變化,從而產生更清晰的反射。圖片底部所示的的表面較粗糙;表面上的不同點具有廣泛變化的方向取向,導致反射光方向的高度變化,並因此導致模糊的反射。注意,兩個表面在肉眼可見尺度下看起來都是光滑的,粗糙度差異僅在微觀尺度上。
出於著色的目的,我們通常會去用統計方法處理這種微觀幾何現象,並將表面視為在每個點處在多個方向上反射(和折射)光。
圖從巨集觀上看,非光學平面可以被視為在多個方向上反射(和折射)光
從表面反射出的光的行為很好理解,那麼,從表面折射的光會發生什麼變化?這取決於物件本身的特性:
- 對於金屬,折射光會立刻被吸收-能量被自由電子立即吸收。
- 對於非金屬(也稱為電介質或絕緣體),一旦光在其內部折射,就表現為常規的參與介質,表現出吸收和散射兩種行為。
圖在金屬中,所有折射的光能立即被自由電子吸收
圖在非金屬中,折射的光會進行散射,直到從表面重新射出,而這通常會在經過部分吸收之後
1.2漫反射和次表面散射本質相同
另外,漫反射和次表面散射其實是相同物理現象,本質都是折射光的次表面散射的結果。唯一的區別是相對於觀察尺度的散射距離。散射距離相較於畫素來說微不足道,次表面散射便可以近似為漫反射。也就是說,光的折射現象,建模為漫反射還是次表面散射,取決於觀察的尺度,如下圖。
圖在左上角,畫素(帶有紅色邊框的綠色圓形)大於光線離開表面之前所經過的距離。在這種情況下,可以假設出射光從入口點(右上)射出,可以當做漫反射,用區域性著色模型處理。在底部,畫素小於散射距離;如果需要更真實的著色效果,則不能忽略這些距離的存在,需當做次表面散射現象進行處理。
1.3 PBR的範疇(Scope of PBR)
寒霜(Frostbite)引擎在SIGGRAPH 2014的分享《Moving Frostbite to PBR》中提出,基於物理的渲染的範疇,由三部分組成:
- 基於物理的材質(Material)
- 基於物理的光照(Lighting)
- 基於物理適配的攝像機(Camera)
完整的這三者,才是真正完整的基於物理的渲染系統。而很多同學一提到PBR,就說PBR就是鏡面反射採用微平面Cook-Torrance模型,其實是不太嚴謹的。
二、渲染方程與BxDF
PBR核心知識體系的第二部分是渲染方程與BxDF。渲染方程作為渲染領域中的重要理論,將BxDF代入渲染方程是求解渲染問題的一般方法。
2.1渲染方程與反射方程
渲染方程(The Rendering Equation)作為渲染領域中的重要理論,其描述了光能在場景中的流動,是渲染中不可感知方面的最抽象的正式表示。根據光學的物理學原理,渲染方程在理論上給出了一個完美的結果,而各種各樣的渲染技術,只是這個理想結果的一個近似。
渲染方程的物理基礎是能量守恆定律。在一個特定的位置和方向,出射光Lo是自發光Le與反射光線之和,反射光線本身是各個方向的入射光Li之和乘以表面反射率及入射角。
這個方程經過交叉點將出射光線與入射光線聯絡在一起,它代表了場景中全部的'光線傳輸。所有更加完善的演算法都可以看作是這個方程的特殊形式的解。
某一點p的渲染方程,可以表示為:
其中:
- 是p點的出射光亮度。
- 是p點發出的光亮度。
- 是p點入射方向到出射方向光的反射比例,即BxDF,一般為BRDF。
- 是p點入射光亮度。
- 是入射角帶來的入射光衰減
-
是入射方向半球的積分(可以理解為無窮小的累加和)。
而在實時渲染中,我們常用的反射方程(The Reflectance Equation),則是渲染方程的簡化的版本,或者說是一個特例:
同樣,其中:
- 是p點的出射光亮度。
- 是p點入射方向到出射方向光的反射比例,即BxDF,一般為BRDF。
- 是p點入射光亮度。
- 是入射角帶來的入射光衰減
-
是入射方向半球的積分(可以理解為無窮小的累加和)。
2.2 BxDF
BxDF一般而言是對BRDF、BTDF、BSDF、BSSRDF等幾種雙向分佈函式的一個統一的表示。
其中,BSDF可以看做BRDF和BTDF更一般的形式,而且BSDF=BRDF+BTDF。
而BSSRDF和BRDF的不同之處在於,BSSRDF可以指定不同的光線入射位置和出射位置。
在上述這些BxDF中,BRDF最為簡單,也最為常用。因為遊戲和電影中的大多數物體都是不透明的,用BRDF就完全足夠。而BSDF、BTDF、BSSRDF往往更多用於半透明材質和次表面散射材質。
圖BSDF:BRDF+BTDF
我們時常討論的PBR中的BxDF,一般都為BRDF,對於進階的一些材質的渲染,才會討論BSDF等其他三種BxDF。
另外,BxDF即上文所示渲染方程以及反射方程中的 項。
2.3 BRDF的分類
圖BRDF的分類,來自[Montes R,Ureña C.An overview of BRDF models[J].2012]
三、迪士尼原則的BxDF(Disney Principled BxDF)
PBR核心知識體系的第三部分是迪士尼原則的BxDF。迪士尼動畫工作室在SIGGRAPH 2012上著名的talk《Physically-based shading at Disney》中提出了迪士尼原則的BRDF(Disney Principled BRDF),奠定了後續遊戲行業和電影行業PBR的方向和標準。瞭解Disney Principled BxDF,是深入理解PBR的重要一環。
基於物理的渲染,其實早在20世紀就已經在圖形學業界有了一些討論,2010年在SIGGRAPH上就已經有公開討論的Course《SIGGRAPH 2010 Course:Physically-Based Shading Models in Film and Game Production》,而直到2012~2013年,才正式進入大眾的視野,漸漸被電影和遊戲業界廣泛使用。
迪士尼動畫工作室則是這次PBR革命的重要推動者。迪士尼的Brent Burley於SIGGRAPH 2012上進行了著名的talk《Physically-based shading at Disney》,提出了迪士尼原則的BRDF(Disney Principled BRDF),由於其高度的通用性,將材質複雜的物理屬性,用非常直觀的少量變數表達了出來(如金屬度metallic和粗糙度roughness),在電影業界和遊戲業界引起了不小的轟動。從此,基於物理的渲染正式進入大眾的視野。
圖SIGGRAPH 2012《Physically-based shading at Disney》
在2012年受到Disney的啟發後,以下是主流遊戲引擎從傳統渲染轉移到基於物理的渲染時間節點:
- [SIGGRAPH 2013]UE4:[Real shading in unreal engine 4]
- [SIGGRAPH 2014]Frostbite(寒霜):[Moving Frostbite to PBR]
- [GDC 2014]Unity:[Physically Based Shading in Unity]
3.1迪士尼原則的BRDF(Disney Principled BRDF)
3.1.1 Disney Principled BRDF核心理念
在2012年迪士尼原則的BRDF被提出之前,基於物理的渲染都需要大量複雜而不直觀的引數,此時PBR的優勢,並沒有那麼明顯。
在2012年迪士尼提出,他們的著色模型是藝術導向(Art Directable)的,而不一定要是完全物理正確(physically correct)的,並且對微平面BRDF的各項都進行了嚴謹的調查,並提出了清晰明確而簡單的解決方案。
迪士尼的理念是開發一種“原則性”的易用模型,而不是嚴格的物理模型。正因為這種藝術導向的易用性,能讓美術同學用非常直觀的少量引數,以及非常標準化的工作流,就能快速實現涉及大量不同材質的真實感的渲染工作。而這對於傳統的著色模型來說,是不可能完成的任務。
迪士尼原則的BRDF(Disney Principled BRDF)核心理念如下:
1.應使用直觀的引數,而不是物理類的晦澀引數。
2.引數應儘可能少。
3.引數在其合理範圍內應該為0到1。
4.允許引數在有意義時超出正常的合理範圍。
5.所有引數組合應儘可能健壯和合理。
以上五條原則,很好地保證了迪士尼原則的BRDF的易用性。
3.1.2 Disney Principled BRDF引數
以上述理念為基礎,迪士尼動畫工作室對每個引數的新增進行了把關,最終得到了一個顏色引數(baseColor)和下面描述的十個標量引數:
- baseColor(基礎色):表面顏色,通常由紋理貼圖提供。
- subsurface(次表面):使用次表面近似控制漫反射形狀。
- metallic(金屬度):金屬(0=電介質,1=金屬)。這是兩種不同模型之間的線性混合。金屬模型沒有漫反射成分,並且還具有等於基礎色的著色入射鏡面反射。
- specular(鏡面反射強度):入射鏡面反射量。用於取代折射率。
- specularTint(鏡面反射顏色):對美術控制的讓步,用於對基礎色(base color)的入射鏡面反射進行顏色控制。掠射鏡面反射仍然是非彩色的。
- roughness(粗糙度):表面粗糙度,控制漫反射和鏡面反射。
- anisotropic(各向異性強度):各向異性程度。用於控制鏡面反射高光的縱橫比。(0=各向同性,1=最大各向異性)
- sheen(光澤度):一種額外的掠射分量(grazing component),主要用於布料。
- sheenTint(光澤顏色):對sheen(光澤度)的顏色控制。
- clearcoat(清漆強度):有特殊用途的第二個鏡面波瓣(specular lobe)。
- clearcoatGloss(清漆光澤度):控制透明塗層光澤度,0=“緞面(satin)”外觀,1=“光澤(gloss)”外觀。
每個引數的效果的渲染示例如下圖所示。
圖Disney Principled BRDF。每行的引數從0到1變化,其他引數保持不變
3.2迪士尼原則的BSDF(Disney Principled BSDF)
隨後的2015年,迪士尼動畫工作室在Disney Principled BRDF的基礎上進行了修訂,提出了Disney Principled BSDF[Extending the Disney BRDF to a BSDF with Integrated Subsurface Scattering,2015]。
以下是開源三維動畫軟體Blender實現的Disney Principled BSDF的圖示:
圖Disney Principled BSDF
四、漫反射BRDF模型(Diffuse BRDF)
為了求解渲染方程,需要分別求解Diffuse BRDF和Specular BRDF。所以PBR核心知識體系的第四部分是Diffuse BRDF。
Diffuse BRDF可以分為傳統型和基於物理型兩大類。其中,傳統型主要是眾所周知的Lambert。
而基於物理型,從1994年的Oren Nayar開始,這裡一直統計到今年(2018年)。
其中較新的有GDC 2017上提出的適用於GGX+Smith的基於物理的漫反射模型(PBR diffuse for GGX+Smith),也包含了最近在SIGGRAPH2018上提出的,來自《使命召喚:二戰》的多散射漫反射BRDF(MultiScattrering Diffuse BRDF):
- Oren Nayar[1994]
- Simplified Oren-Nayar[2012]
- Disney Diffuse[2012]
- Renormalized Disney Diffuse[2014]
- Gotanda Diffuse[2014]
- PBR diffuse for GGX+Smith[2017]
- MultiScattrering Diffuse BRDF[2018]
五、鏡面反射BRDF模型(Specular BRDF)
PBR核心知識體系的第五部分是Specular BRDF。這也是基於物理的渲染領域中最活躍,最主要的部分。
上圖加粗部分為目前業界較為主流的模型。
遊戲業界目前最主流的基於物理的鏡面反射BRDF模型是基於微平面理論(microfacet theory)的Microfacet Cook-Torrance BRDF。
而微平面理論(microfacet theory)源自將微觀幾何(microgeometry)建模為微平面(microfacets)的集合的思想,一般用於描述來自非光學平坦(non-optically flat)表面的表面反射。
微平面理論的基本假設是微觀幾何(microgeometry)的存在,微觀幾何的尺度小於觀察尺度(例如著色解析度),但大於可見光波長的尺度(因此應用幾何光學和如衍射一樣的波效應等可以忽略)。且微平面理論在2013年和以前時僅用於推導單反射(single-bounce)表面反射的表示式;而隨著領域的深入,最近幾年也出現了使用microfacet理論對多次反彈表面反射的一些探討。
由於假設微觀幾何尺度明顯大於可見光波長,因此可以將每個表面點視為光學平坦的。如上文所述,光學平坦表面將光線分成兩個方向:反射和折射。
每個表面點將來自給定進入方向的光反射到單個出射方向,該方向取決於微觀幾何法線(microgeometry normal)m的方向。在計算BRDF項時,指定光方向l和檢視方向v。這意味著所有表面點,只有那些恰好正確朝向可以將l反射到v的那些小平面可能有助於BRDF值(其他方向有正有負,積分之後,相互抵消)。
在下圖中,我們可以看到這些“正確朝向”的表面點的表面法線m正好位於l和v之間的中間位置。l和v之間的向量稱為半向量(half-vector)或半形向量(half-angle vector);我們將其表示為h。
圖僅m=h的表面點的朝向才會將光線l反射到視線v的方向,其他表面點對BRDF沒有貢獻。
並非所有m=h的表面點都會積極地對反射做出貢獻;一些被l方向(陰影shadowing),v方向(掩蔽masking)或兩者的其他表面區域阻擋。Microfacet理論假設所有被遮蔽的光(shadowed light)都從鏡面反射項中消失;實際上,由於多次表面反射,其中一些最終將是可見的,但這在目前常見的微平面理論中一般並未去考慮,各種型別的光表面相互作用如下圖所示。
圖在左側,我們看到一些表面點從l的方向被遮擋,因此它們被遮擋並且不接收光(因此它們不能反射任何)。在中間,我們看到從檢視方向v看不到一些表面點,因此當然不會看到從它們反射的任何光。在這兩種情況下,這些表面點對BRDF沒有貢獻。實際上,雖然陰影區域沒有從l接收任何直射光,但它們確實接收(並因此反射)從其他表面區域反射的光(如右圖所示)。microfacet理論忽略了這些相互反射。
5.1從物理現象到BRDF
利用這些假設(區域性光學平坦表面,沒有相互反射),可以很容易推匯出一個被稱為Microfacet Cook-Torrance BRDF的一般形式的Specular BRDF項。此Specular BRDF具有以下形式:
其中:
- D(h):法線分佈函式(Normal Distribution Function),描述微面元法線分佈的概率,即正確朝向的法線的濃度。即具有正確朝向,能夠將來自l的光反射到v的表面點的相對於表面面積的濃度。
- F(l,h):菲涅爾方程(Fresnel Equation),描述不同的表面角下表面所反射的光線所佔的比率。
- G(l,v,h):幾何函式(Geometry Function),描述微平面自成陰影的屬性,即m=h的未被遮蔽的表面點的百分比。
- 分母4(n·l)(n·v):校正因子(correctionfactor),作為微觀幾何的區域性空間和整個巨集觀表面的區域性空間之間變換的微平面量的校正。
關於Cook-Torrance BRDF,需要強調的兩點注意事項:
- 對於分母中的點積,僅僅避免負值是不夠的,也必須避免零值。通常通過在常規的clamp或絕對值操作之後新增非常小的正值來完成。
- Microfacet Cook-Torrance BRDF是實踐中使用最廣泛的模型,實際上也是人們可以想到的最簡單的微平面模型。它僅對幾何光學系統中的單層微表面上的單個散射進行建模,沒有考慮多次散射,分層材質,以及衍射。Microfacet模型,實際上還有很長的路要走。
下面對Microfacet Cook-Torrance BRDF中的D、F、G項分別進行簡要說明。
5.2 Specular D
法線分佈函式(Normal Distribution Function,NDF)D的常見模型可以總結如下:
- Beckmann[1963]
- Blinn-Phong[1977]
- GGX[2007]/Trowbridge-Reitz[1975]
- Generalized-Trowbridge-Reitz(GTR)[2012]
- Anisotropic Beckmann[2012]
- Anisotropic GGX[2015]
其中,業界較為主流的法線分佈函式是GGX(Trowbridge-Reitz),因為具有更好的高光長尾:
另外,需要強調一點。Normal Distribution Function正確的翻譯是法線分佈函式,而不是正態分佈函式。google翻譯等翻譯軟體會將Normal Distribution Function翻譯成正態分佈函式,而不少中文資料就跟著翻譯成了正態分佈函式,這是錯誤的。
其實,一些參考文獻會使用術語“法線分佈(distribution of normals)”來避免與高斯正態分佈(Gaussian normal distribution)混淆。
5.3 Specular F
對於菲涅爾(Fresnel)項,業界方案一般都採用Schlick的Fresnel近似,因為計算成本低廉,而且精度足夠:
菲涅爾項的常見模型可以總結如下:
- Cook-Torrance[1982]
- Schlick[1994]
- Gotanta[2014]
5.4 Specular G
幾何項G的常見模型可以總結如下:
- Smith[1967]
- Cook-Torrance[1982]
- Neumann[1999]
- Kelemen[2001]
- Implicit[2013]
另外,Eric Heitz在[Heitz14]中展示了Smith幾何陰影函式是正確且更準確的G項,並將其擴充為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)
目前較為常用的是其中最為簡單的形式,分離遮蔽陰影(Separable Masking and Shadowing Function)。
該形式將幾何項G分為兩個獨立的部分:光線方向(light)和視線方向(view),並對兩者用相同的分佈函式來描述。根據這種思想,結合法線分佈函式(NDF)與Smith幾何陰影函式,於是有了以下新的Smith幾何項:
- Smith-GGX
- Smith-Beckmann
- Smith-Schlick
- Schlick-Beckmann
- Schlick-GGX
其中UE4的方案是上面列舉中的“Schlick-GGX”,即基於Schlick近似,將k對映為 ,去匹配GGX Smith方程:
六、基於物理的環境光照(Physically Based Environment Lighting)
有了直接光部分,我們也需要環境光。所以PBR核心知識體系的第六部分是基於物理的環境光照,一般大家也直接預設環境光照的技術方案是基於影像的光照(Image Based Lighting,IBL)。這也是真正讓基於物理的渲染畫質提升的主要貢獻者。
漫反射環境光照部分一般採用傳統IBL中輝度環境對映(Irradiance Environment Mapping)技術,並不是基於物理的特有方案,這裡暫不討論。
而基於物理的鏡面反射(Specular)環境光照,業界中一般會採用基於影像的光照(IBL)的方案。要將基於物理的BRDF模型與基於影像的光照(IBL)一起使用,需要求解光亮度積分(Radiance Integral),而求解光亮度積分通常會使用重要性取樣(Importance Sample)。
重要性取樣(Importance Sample)即通過現有的一些已知條件(分佈函式),想辦法集中於被積函式分佈可能性較高的區域(重要的區域)進行取樣,進而可高效地計算準確的估算結果的的一種策略。
6.1分解求和近似(Split Sum Approximation)
基於重要性取樣的思路,將蒙特卡洛積分公式代入渲染方程可得:
上式的直接求解較為複雜,進行完全的實時渲染不太現實。
目前遊戲業界的主流做法是,是基於分解求和近似(Split Sum Approximation)的思路,將上式中的 拆分為光亮度的均值 和環境BRDF 兩項。即:
完成拆分後,分別對兩項進行離線預計算,去匹配離線渲染參考值的渲染結果。
而在實時渲染中,分別計算分解求和近似(Split Sum Approximation)方案中幾乎已經預計算好的兩項,再進行組合,作為實時的IBL物理環境光照部分的渲染結果。下面分別對兩項進行簡單概括。
6.2第一項預過濾環境貼圖(Pre-filtered environment map)
第一項為 ,可以理解為對光亮度 求均值。經過n=v=r的假設,僅取決於表面粗糙度(surface roughness)和反射向量(reflection vector)。這一項,業界的做法比較統一(包括UE4和COD:Black Ops 2等),採用的方案主要藉助預過濾環境貼圖,用多級模糊的mipmap來儲存模糊的環境高光:
也就是說,第一項直接使用cubemap的mip級別取樣輸入即可。
6.3第二項環境BRDF(Environment BRDF)
第二項為 ,即鏡面反射項的半球方向反射率(hemispherical-directional reflectance),可以理解為環境BRDF(Environment BRDF)。其取決於仰角θ,粗糙度α和菲涅耳項F。通常使用Schlick近似來近似F,其僅在單個值F0上引數化,從而使Rspec成為三個引數(仰角θ(NdotV),粗糙度α、F0)的函式。
這一項的主要流派有兩個,UE4的2D LUT,以及COD:OP2的解析擬合。
6.3.1流派1:2D LUT
UE4在[Real Shading in Unreal Engine 4,2013]中提出,第二個求和項,使用Schlick近似後,F0可以從積分中分出來:
上式留下了兩個輸入(Roughness和cosθv)和兩個輸出(縮放和向F0的偏差(a scale and bias to F0)),即把上述方程看成是F0*Scale+Offset的形式。我們預先計算此函式的結果並將其儲存在2D查詢紋理(LUT,look-up texture)中。
這張紅綠色的貼圖,輸入roughness、cosθ,輸出環境BRDF鏡面反射的強度。是關於roughness、cosθ與環境BRDF鏡面反射強度的固有對映關係。可以離線預計算。
具體的取出方式為:
即UE4是通過把Fresnel公式的F0提出來,組成F0*Scale+Offset的方式,再將Scale和Offset的索引存到一張2D LUT上。靠roughness和NdotV進行查詢。
6.3.2流派2:解析擬合
COD:Black Ops 2的做法,是通過數學工具Mathematica(http://www.wolfram.com/mathematica/)中的數值積分擬合出曲線,即將UE4離線計算的這張2D LUT用如下函式進行了擬合:
- float3 EnvironmentBRDF( float g, float NoV, float3 rf0 )
- {
- float4 t = float4( 1/0.96, 0.475, (0.0275 - 0.25 \* 0.04)/0.96, 0.25 );
- t *= float4( g, g, g, g );
- t += float4( 0, 0, (0.015 - 0.75 * 0.04)/0.96, 0.75 );
- float a0 = t.x * min( t.y, exp2( -9.28 * NoV ) ) + t.z; float a1 = t.w;
- return saturate( a0 + rf0 * ( a1 - a0 ) );
- }
需要注意的是,上面的方程是基於Blinn-Phong分佈的結果,https://knarkowicz.wordpress.com/2014/12/27/analytical-dfg-term-for-ibl/一文中提出了基於GGX分佈的EnvironmentBRDF解析版本:
- float3 EnvDFGLazarov( float3 specularColor, float gloss, float ndotv )
- {
- float4 p0 = float4( 0.5745, 1.548, -0.02397, 1.301 );
- float4 p1 = float4( 0.5753, -0.2511, -0.02066, 0.4755 );
- float4 t = gloss * p0 + p1;
- float bias = saturate( t.x * min( t.y, exp2( -7.672 * ndotv ) ) + t.z );
- float delta = saturate( t.w );
- float scale = delta - bias;
- bias *= saturate( 50.0 * specularColor.y );
- return specularColor * scale + bias;
- }
上式中的specularColor即F0。
EnvironmentBRDF函式的輸入引數分別為光澤度gloss,NdotV,F0。和UE4的做法有異曲同工之妙,但COD:Black Ops 2的做法不需要額外的貼圖取樣,這在進行移動端優化時,是不錯的選擇。
6.3.3其他方案
Gotanda在SIGGRAPH 2010提出使用3D LUT[Practical Implementation of Physically-Based Shading Models at tri-Ace,2010]來存放環境BRDF,之後Drobot將其優化為2D LUT[Lighting Killzone:Shadow Fall,2013]。
七、離線渲染相關(Offline Rendering Related)
雖然我們目前主要關注的是實時渲染(實時光柵圖形學相關,暫時不關注實時光線追蹤)領域,但很多時候,實時渲染也需要涉及到預計算,尤其是IBL相關的預計算,所以或多或少會用到離線渲染相關的知識。所以PBR核心知識體系的第七部分是離線渲染相關的主題。
以下是與實時渲染結合相對緊密的離線渲染相關的核心主題以及概括總結(主要是統計學與概率相關):
- 重要性取樣(Importance Sample):蒙特卡洛積分的一種取樣策略。思路是基於分佈函式,儘量對被積函式分佈可能性較高的區域進行取樣。
- 多重要性取樣(Muti Importance Sampling,MIS):估算某一積分時,基於多個分佈函式獲取取樣,並期望至少某一分佈與被積函式形狀適配。即根據各種技術對取樣進行加權計算,進而消除源自被積函式值與取樣密度不匹配造成的較大反差。
- 大數定律(Law of Large Numbers):在試驗不變的條件下,重複試驗多次,隨機事件的頻率近似於它的概率。即偶然中包含著某種必然。
- 蒙特卡洛方法(Monte Carlo Methods):一種以概率統計理論為指導的數值計算方法。是指使用隨機數(或更常見的偽隨機數)來解決很多計算問題的方法。
- 低偏差序列(Low-discrepancy sequence):一種確定生成的超均勻分佈列,也稱為擬隨機列、次隨機列,常見低偏差序列有Hammersley,Halton等。
- 擬蒙特卡羅方法(Quasi-Monte Carlo Method):使用低差異列來進行數值積分和研究其它一些數值問題的方法。
- 等
與實時渲染結合相對緊密的離線渲染相關的內容,後續文章會以專題的形式詳細探討。
八、進階渲染主題(Advanced Rendering Topics)
前面的核心PBR主題都討論完成後,會有更多進階的內容浮出水面,他們共同組成了PBR核心知識體系的第八部分。
以下是一個列舉:
- 進階著色模型
o布料BRDF(Cloth BRDF)
o清漆著色模型(Clear Coat Model)
o次表面散射BRDF模型(Subsurface Scattering BRDF Model)
- 進階材質功能
o全能材質(Uber Shader)
o分層材質(Layered Materials)
o分層全能材質(Layered Uber Shader)
o混合材質(Blending Materials)
o過濾材質(Filtering Materials)
- 進階理論
o物理光學(Physics of Light)
o波動光學(Wave Optics)
o基於物理的攝像機(Physical Based Camera)
o基於物理的光源(Physical Based Light)
o白爐測試(White Furnace Test)
- 進階BxDF
o BSDF
o BTDF
o BSSRDF
- 進階材質渲染
o皮膚渲染(Skin Rendering)
o布料渲染(Cloth Rendering)
o半透明表面渲染(Translucent Surfaces Rendering)
o頭髮渲染(Hair Rendering)
o毛髮渲染(Fur Rendering)
o車漆渲染(Car Paint Rendering)
o水體渲染(Water Rendering)
o溼潤表面渲染(Wet Surface Rendering)
o天空與大氣渲染(Sky and Atmosphere Rendering)
o薄表面材質渲染(Thin Surface Rendering)
o體積渲染(Volumetric Rendering)
o等
以上這些內容,作為進階的主題,隨便選取其中的一個展開來討論,幾乎都會有不小的篇幅。目前的計劃是,是在前七章基礎PBR內容討論完成後,再在這些主題中選取新的內容,進行更深入的討論。
系列文章的GitHub Repo
另外,和這篇文章一起釋出的還有一個GitHub的倉庫【PBR-White-Paper】,作為這個系列文章的合集,後續整理好的PDF也會發布至此Repo中
這裡是本文的GitHub版:
QianMo/PBR-White-Paper/Part1github.com
結語
OK,這篇文章作為這個系列的開篇,是對PBR知識體系的一個概覽,相當於開了一個頭,給全新的篇章描繪出了大致的輪廓。
後續的文章,會對PBR知識體系的各個章節,進行更系統深入的論述。
敬請期待。
Reference
[1]Burley B,Studios W D A.Physically-based shading at disney[C]//ACM SIGGRAPH.2012
[2]Montes R,Ureña C.An overview of BRDF models[J].2012.
[3]https://graphicrants.blogspot.com/2013/08/specular-brdf-reference.html
[4]Karis B,Games E.Real shading in unreal engine 4[J].Proc.Physically Based Shading Theory Practice,2013
[5]Lazarov D.Getting more physical in call of duty:Black ops ii[J].SIGGRAPH Course Notes:Physically Based Shading in Theory and Practice,2013.
[6]Hoffman N.Background:physics and math of shading[J].Physically Based Shading in Theory and Practice,2013
[7]Neubelt D,Pettineo M,Studios R A D.Crafting a Next-Gen Material Pipeline for The Order:1886[J].Physically Based Shading in Theory and Practice,SIGGRAPH,2013.
[8]Pharr M,Jakob W,Humphreys G.Physically based rendering:From theory to implementation[M].Morgan Kaufmann,2016.
[9]Akenine-Moller T,Haines E,Hoffman N.Real-time rendering[M].AK Peters/CRC Press,2018.
[10]Heitz E.Understanding the masking-shadowing function in microfacet-based BRDFs[J].Journal of Computer Graphics Techniques,2014,3(2):32-91.
[11]Gotanda Y.Designing Reflectance Models for New Consoles[J],2014
[12]Lagarde S,De Rousiers C.Moving Frostbite to PBR[J].Proc.Physically Based Shading Theory Practice,2014.
[13]Langlands A.Physically based shader design in arnold[J].Physically Based Shading in Theory and Practice-SIGGRAPH Courses,2014.
[14]Burley B.Extending the Disney BRDF to a BSDF with integrated subsurface scattering[J].Physically Based Shading in Theory and Practice'SIGGRAPH Course,2015.
[15]Drobot M.Practical Multilayered Materials in Call of Duty:Infinite Warfare[J].Physically Based Shading Theory Practice-SIGGRAPH Courses,2017.
[16]Oren M,Nayar S K.Generalization of Lambert's reflectance model[C],1994
[17]Gotanda Y.Beyond a simple physically based Blinn-Phong model in real-time[M]//SIGGRAPH 2012 course.2012.
[18]Gotanda Y.Practical Implementation of Physically-Based Shading Models at tri-Ace[J].part of“Physically Based Shading Models in Film and Game Production,”SIGGRAPH,2010.
[19]Hammon Jr E.PBR Diffuse Lighting for GGX+Smith Microsurfaces[J].2017.
[20]https://knarkowicz.wordpress.com/2014/12/27/analytical-dfg-term-for-ibl/
[21]Drobot M.Lighting of Killzone:Shadow Fall[J].Digital Dragons European Games Festival,2013.
[22]Material Advances in Call of Duty:WWII,Activision Community,Advances in Real-Time Rendering,SIGGRAPH 2018
[23]題圖來自《Assassin's Creed Odyssey》
作者:淺墨_毛星雲
原地址:https://zhuanlan.zhihu.com/p/53086060
相關文章
- 基於物理的渲染(PBR)白皮書(二) PBR核心理論與渲染光學原理總結
- PBR(基於物理的渲染)學習筆記2筆記
- AI生成遊戲中基於物理的渲染(PBR)貼圖探索AI遊戲
- 渲染中的光照著色方式:PBR(Physically Based Rendering,物理基礎渲染)與 傳統經驗渲染
- 騰訊遊戲學院專家:PBR渲染模型的理論及具體應用遊戲模型
- 徹底看懂 PBR/BRDF
- Node基礎之總體概覽
- MySQL體系結構概覽MySql
- oracle體系結構概覽Oracle
- Oracle物理體系總結Oracle
- 安裝win10系統bootmgr pbr黃燈怎麼辦_安裝win10系統bootmgr pbr黃燈如何處理Win10boot
- Texture+PBR兩種工作流程
- Unity5 PBR如何實現天氣系統的雪景效果Unity
- ES6核心知識總結
- GPU精粹與Shader程式設計(一):關於基礎物理渲染GPU程式設計
- 【轉載】《天諭》全新PBR技術曝光
- PBR Metallic/Roughness工作流中Albedo與F0的計算方法
- 《戰錘》武器設計:手繪風格的PBR流程
- 關於圖演算法 & 圖分析的基礎知識概覽演算法
- 5萬字、97 張圖總結作業系統核心知識點作業系統
- 儲存基礎知識白皮書
- [Redis知識體系] 一文全面總結Redis知識體系Redis
- [MongoDB知識體系] 一文全面總結MongoDB知識體系MongoDB
- 騰訊遊戲學院專家帶你快速瞭解PBR遊戲
- SAP SD基礎知識之流程概覽
- 6月書訊 // 新書概覽新書
- 架構知識體系總結架構
- Java核心知識體系6:集合框架詳解Java框架
- 計算機網路知識點總結(一)-物理層計算機網路
- 「BUAA OO Pre」 Pre 2總結回顧概覽
- 【設計模式——全書概覽】設計模式
- 基於雙核的雙系統製作
- 探索Redis設計與實現1:Redis 的基礎資料結構概覽Redis資料結構
- mysql資料庫整體技術體系及框架概覽之一MySql資料庫框架
- 自己總結的web前端知識體系大全Web前端
- Java併發程式設計知識概覽(一)Java程式設計
- Android資源知識(一)之Resources概覽Android
- Python 基礎概覽Python