PBR渲染在FreeXRender中的應用實例
基于物理的渲染(PBR)技術現在被廣泛應用在高質量的實時渲染中,在圖形學最重要的分支就是真實感渲染,而PBR則是真實感實時渲染的基礎。
在實時渲染領域沒有PBR制作流程之前是怎么做的?在沒有標準統一的PBR Shading方法之前,每種材質都有一套自己的BRDF實現,Shading各走各的,于是早期Forward流程里會大量出現Uber Shader,Defered流程中會大量運用GLSL subroutine或HLSL Dynamic Link等Feature,來實現Shading切換。
本文將為大家介紹一種傳統光照著色方式與PBR著色的區別及在場景渲染中的應用:
01
傳統光照-Phong Lighting Model著色
計算光照最常用的模型就是大名鼎鼎的Phong模型,該模型其實是經驗模型,參數信息都是經驗得到的,并沒有實際的物理意義,所以利用Phong模型會出現違背物理規則的時候。Phong模型將物體光照分為3個部分進行計算:環境光(Ambient)、漫反射光(Diffuse)和鏡面光(Specular)。
* 顏色相乘是的結果的意義是正片疊加,以一個顏色為玻璃,拿另一個顏色照其上;
① 環境光:環境光是指全局的無處不在的光源;
* 環境光和入射向量、觀察方向、物體表面法向量都沒有關系;
② 漫反射光:模擬光源位置對光照的影響,比如正常的電燈、手電等;
* 漫反射光和物體表面法向量以及燈的入射向量有關,與觀察向量無關;
③ 鏡面光:模擬光滑物體反射的高光效果。
* 鏡面光與法向量、入射向量、觀察向量都有關系。
02
基于物理的渲染-PBR著色
PBR是基于真實世界光照物理模型的渲染技術合集,是一套完整的符合物理計算的系統,它使用了一種更符合物理學規律的方式來模擬光線,且可調試內容非常直觀,以此來達到更真實的渲染效果。
滿足以下條件的光照模型才能稱之為PBR光照模型:
l 基于微平面(Microfacet)的表面模型;
l 能量守恒;
l 應用基于物理的BRDF。
(1)微平面理論
大多數PBR技術都是基于微平面理論。在此理論下,認為在微觀上所有材質表面都是由很多朝向不一的微小平面組成,有的材質表面光滑一些,有的粗糙一些。
* 任何平面放大的足夠大都是由無數個小平面構成的,其小無內;
當光線射入這些微平面后,通常會產生鏡面反射。對于越粗糙的表面,由于其朝向更無序,反射的光線更雜亂,反之,平滑的微平面,反射的光線更平齊。
從微觀角度來說,沒有任何表面是完全光滑的。由于這些微平面已經微小到無法逐像素地繼續對其進行細分,因此我們只有假設一個粗糙度(Roughness)參數,然后用統計學的方法來概略的估算微平面的粗糙程度。
我們可以基于一個平面的粗糙度來計算出某個向量的方向與微平面平均取向方向一致的概率。這個向量便是位于光線向量l和視線向量v之間的中間向量,被稱為半角向量(Halfway Vector)。
* 半角向量h是視線v和入射光l的中間單位向量;
半角向量計算公式如下:
越多的微平面取向與其半角向量一致,材質鏡面反射越強越銳利。加上引入取值0~1的粗糙度,可以大致模擬微平面的整體取向。
* 粗糙度從0.1~1.0的變化圖。粗糙度越小,鏡面反射越亮范圍越??;粗糙度越大,鏡面反射越弱。
(2)能量守恒
在微平面理論中,采用近似的能量守恒:出射光的總能量不超過入射光的總能量(發光體除外)。那么PBR是如何實現近似的能量守恒呢?
首先我們要弄清楚鏡面反射(specular)和漫反射(diffuse)的區別。
一束光照到材質表面上,通常會分成反射(reflection)部分和折射(refraction)部分。反射部分直接從表面反射出去,而不進入物體內部,由此產生了鏡面反射光;折射部分會進入物體內部,被吸收或者散射產生漫反射。
折射進物體內部的光如果沒有被立即吸收,將會持續前進,與物體內部的微粒產生碰撞,每次碰撞有一部分能量損耗轉化成熱能,直至光線能量全部消耗。
* 照射在平面的光被分成鏡面反射和折射光,折射光在跟物體微粒發生若干次碰撞之后,有可能發射出表面,成為漫反射。
通常情況下,PBR會簡化折射光,將平面上所有折射光都視為被完全吸收而不會散開。反射光與折射光它們二者之間是互斥的,被表面反射出去的光無法再被材質吸收。故而,進入材質內部的折射光就是入射光減去反射光后余下的能量。
根據上面的能量守恒關系,可以先計算鏡面反射部分,此部分等于入射光線被反射的能量所占的百分比,而折射部分可以由鏡面反射部分計算得出。
通過以上代碼可以看出,鏡面反射部分與漫反射部分的和肯定不會超過1.0,從而近似達到能量守恒的目的。
(3)基于物理的BRDF
BRDF,或者說雙向反射分布函數,它接受入射(光)方向Wi,出射(觀察)方向W0,平面法線n以及一個用來表示微平面粗糙程度的參數a作為函數的輸入參數。
BRDF可以近似的求出每束光線對一個給定了材質屬性的平面上最終在某個方向上的反射出來的光線所作出的貢獻程度。
BRDF有好幾種模擬表面光照的算法,然而,基本上所有的實時渲染管線使用的都是Cook-Torrance BRDF。Cook-Torrance BRDF分為漫反射和鏡面反射兩個部分:
其中kd是入射光中被折射的比例,ks是另外一部分被鏡面反射的入射光。BRDF等式左邊的flambert表示的是漫反射部分,這部分叫做倫勃朗漫反射(Lambertian Diffuse)。
03
傳統光照與物理光照的對比
傳統光照-Phong模型 | 物理光照-PBR | |
缺點 | 1、效果細節不夠豐富; 2、與現實有差距; 3、設計師與程度之間沒有統一的標準。 | 1、消耗性能、存儲、GPU計算; 2、設計工作量大。 |
優點 | 1、速度快; 2、效果上也能夠滿足大多數要求。 | 1、寫實的,客觀的,設計師有客觀設計標準,設計與程序實現解耦; 2、效果與現實一致,細節豐富。 |
04
利用BRDF來建立光照模型
1967年Torrance-Sparrow在Theory for Off-Specular Reflection From Roughened Surfaces中使用輻射度學和微表面理論建立了模擬真實光照的BRDF模型,1981年Cook-Torrance在A Reflectance Model for Computer Graphics中把這個模型引入到計算機圖形學領域,現在這個模型已經成為基于物理著色的標準,被稱為Cook-Torrance模型。
* 法線分布函數模擬的是有多少面朝向你關注的方向;
法線分布函數(Normal Distribution Function,簡寫為NDF)D(h)來描述組成表面一點的所有法線的分布概率??梢越七@么理解:向NDF輸入一個朝向h,NDF會返回朝向是h的微表面數占微表面總數的比例,比如有1%的微表面朝向是h,那么就有1%的微表面可能將光線反射到v方向。
幾何衰減因子(Geometrical Attenuation Factor)G(l,v)來建模,輸入入射和觀察光線方向,輸出值表示光線未被遮蔽而能從l反射到v方向的比例。
* 幾何衰減因子模擬的是朝你方向的面有多少是被各種檔住的;
菲涅爾方程(Fresnel Equations)F(l,h),表示光學平面并不會將所有光線都反射掉,而是一部分被反射,一部分被折射,反射比例符合菲涅爾方程(Fresnel Equations)F(l,h) 。
* 菲涅爾方程模擬的是即便光未被檔住,也有部分是反射有部分是折射,計算出這個比例,只有反射才可能入眼。
Torrance-Sparrow基于微表面理論,用上述三個函數建立了高光BRDF模型:
05
應用實例
近年來,圖形學的技術蓬勃發展,圍繞著PBR為中心的新興技術和理論百花齊放,PBR廣泛應用于各行各業,例如,沉浸式4D影院、虛擬與現實混合的游戲和教學互動、投影真實人像的幻影會議、電影畫質的移動端游戲、甚至是智慧城市等可視化項目。
恒歌科技長期深耕于可視化技術的產品與解決方案應用領域,基于多年業務的積累沉淀以及廣泛客戶需求的收集,我們啟動了“爆品計劃”,其定位在于以輕量化的產品專注且高效地解決行業內的難題。本月發布的“FreeXRender—三維模型實時渲染大師”即是公司采用PBR技術研發的一款三維模型實時渲染工具,它能夠幫助場景模型呈現更豐富的材質細節,包括油漆表面的斑駁顆粒感、凸起的文字、金屬表面的凹凸感以及拉絲效果等。
如想進一步了解PBR及FreeXRender,請下載產品資料以及Demo進行試用:https://pan.baidu.com/s/1sgFsUemJ7U7bZqyXncOumg
提取碼:p5cn(復制這段內容后打開百度網盤,操作更方便哦);您還可以留言或直接聯系我們的銷售人員,我們將會在第一時間與您聯系!
特別說明:
文中大部分圖片來自參考文獻及網絡,侵刪;感謝并致敬所有參考文獻的作者。
參考文獻
1、由淺入深學習PBR的原理和實現(https://www.cnblogs.com/timlly/p/10631718.html?from=timeline&isappinstalled=0#211-pbr%E6%A6%82%E5%BF%B5)
2、PBR理論體系整理(一):基礎理論(http://www.sztemple.cc/articles/pbr1)
3、細說圖形學渲染管線