什么是PBR?
一. 預(yù)備知識
PBR就是Physically-Based Rendering的縮寫,意為基于物理的渲染。它提供了一種光照和渲染方法,能夠更精確的描繪光和表面之間的作用。以前是模擬燈光的外觀,現(xiàn)在是模仿光的實際行為。
使用PBR有以下幾個優(yōu)點(diǎn):
第一,PBR提供了一種穩(wěn)定的美術(shù)工作流程
第二,材質(zhì)在所有光照條件下看起來都是沒有明顯的錯誤。
第三,用PBR方法創(chuàng)建材質(zhì)更容易,創(chuàng)建材質(zhì)屬性時不再僅僅依靠經(jīng)驗依靠直覺,而是根據(jù)真實數(shù)據(jù)設(shè)置。
二、PBR組成部分

燈光屬性:直接照明、間接照明、直接高光、間接高光、陰影、環(huán)境光閉塞
表面屬性:基礎(chǔ)色、法線、高光、粗糙度、金屬度
1). 燈光屬性
I.? 光線類型?

入射光? ? ? ? ? ? ??
直接照明:直接從光源發(fā)射陰影物體表面的光
?間接照明:環(huán)境光和直接光經(jīng)過反彈第二次進(jìn)入的光
反射光
鏡面光:在經(jīng)過表面反射聚焦在同一方向上進(jìn)入人眼的高亮光
漫發(fā)射:光被散射并沿著各個方向離開表面
II.? 光與表面相互作用類型

直接漫反射:從源頭到四面八方散發(fā)出來的直接高光
直接高光:直接來自光源并被集中反射的光
間接漫反射:來自環(huán)境的光被表面散射的光
間接高光:來自環(huán)境光并被集中反射的光
a. 直接漫反射

直接來自光源的光
撞擊表面后散落在各個方向
在著色器中使用簡單的數(shù)學(xué)計算
b. 直接高光

直接來自光源的光
反射在一個更集中的方向上
在著色器中使用簡單的數(shù)學(xué)計算
直接鏡面反射的計算成本比漫反射低很多
c. 間接漫反射

來自環(huán)境中各個方向的光
撞擊表面后散落在各個方向
因為計算昂貴,所以引擎的全局照明解決方案通常會離線渲染,并被烘培成燈光地圖
d. 鏡面反射

來自環(huán)境中各個方向的光
反射在一個更集中的方向上
引擎中使用反射探頭,平面反射,SSR,或射線追蹤計算
2) 表面屬性
(1)基礎(chǔ)色

定義表面的漫反射顏色
真實世界的材料不會比20暗或比240 sRGB亮
粗糙表面具有更高的最低~ 50srgb
超出范圍的值不能正確發(fā)光,所以保持在范圍內(nèi)是至關(guān)重要的

基礎(chǔ)色貼圖制作注意點(diǎn):
不包括任何照明或陰影
基本顏色紋理看起來應(yīng)該非常平坦
使用真實世界的度量或獲取最佳結(jié)果的數(shù)據(jù)
(2)法線

定義曲面的形狀每個像素代表一個矢量
該矢量指示表面所面對的方向即使網(wǎng)格是完全平坦的
法線貼圖會使表面顯得凹凸不平
用于添加表面形狀的細(xì)節(jié),這里三角形是實現(xiàn)不了的
因為它們表示矢量數(shù)據(jù),所以法線貼圖是無法手工繪制的
(3)鏡面

用于直接和間接鏡面照明的疊加
當(dāng)直視表面時,定義反射率
非金屬表面反射約4%的光
0.5代表4%的反射
1.0代表8%的反射但對于大多數(shù)物體來說太高了
在掠射角下,所有表面都是100%反射的,內(nèi)置于引擎中的菲涅耳項

鏡面貼圖制作注意點(diǎn):
高光貼圖應(yīng)該大多在0.5
使用深色的陰影來遮蓋不應(yīng)該反光的裂縫
一個裂縫貼圖乘以0.5就是一個很好的高光貼圖
(4)粗糙度

表面在微觀尺度上的粗糙度
白色是粗糙的
黑色是光滑的
控制反射的“焦點(diǎn)”
平滑=強(qiáng)烈的反射
粗糙=模糊的,漫反射

粗糙度貼圖制作注意點(diǎn):
沒有技術(shù)限制-完全藝術(shù)的選擇
藝術(shù)家可以使用這張地圖來定義表面的“特征”,并展示它的歷史
考慮一下被打磨光滑、磨損或老化的表面
(5)金屬度

兩個不同的著色器通過金屬度混合他們
基本色變成高光色而不是漫反射顏色
金屬漫反射是黑色的
在底色下,鏡面范圍可達(dá)100%
大多數(shù)金屬的反光性在60%到100%之間
確保對金屬顏色值使用真實世界的測量值,并保持它們明亮
當(dāng)金屬為1時,鏡面輸入將被忽略

金屬度貼圖制作注意點(diǎn):
將著色器切換到金屬模式
灰度值會很奇怪,最好使用純白色或黑色
當(dāng)金屬色為白色時,請確保使用正確的金屬底色值
沒有黑暗金屬這回事
所有金屬均為180srgb或更亮
3). 金屬度與非金屬單對比

非金屬
基礎(chǔ)顏色=漫反射
鏡面反射=0-8%
金屬
基礎(chǔ)顏色=0-100%的鏡面反射
鏡面=0%
漫反射總是黑色的
三. PBR的兩種工作流程
Metallic/Roughness(金屬值/粗糙度);
Specular/Glossiness(鏡面反射/光澤度)

1.Albedo
可以理解為物體的基礎(chǔ)色Base Color,即該物體本身顏色,也是漫反射光的顏色。
其實該顏是色光的折射被物質(zhì)吸收并形成漫反射后,成為不同波長的光,這就賦予了物體顏色。比如說物體呈現(xiàn)藍(lán)色,是因為其把除了藍(lán)色的光都吸收了,散射出來的光的波長是在藍(lán)色所在范圍內(nèi)。
2.Metallic
即金屬度,表示了反射時發(fā)生鏡面反射和漫反射的光線的占比。
Metallic度越大,發(fā)生鏡面反射的占比越大,漫反射diffuse占比越小,一般金屬物體的金屬度比較大:70% ~ 100%之間;
Metallic越小,發(fā)生鏡面反射的占比越小,漫反射diffuse占比越大,一般非金屬物質(zhì)金屬度比較??;2% ~ 5%之間,寶石的大概8%;
金屬是沒有漫反射的,折射進(jìn)表面的光照全部被吸收。但是一些腐蝕性的金屬,其腐蝕的部分具有漫反射。
3.Specular
這個沒什么好說的,就是鏡面反射,對于非金屬物質(zhì),其鏡面反射的sRBG范圍在40 ~ 75;對于金屬物質(zhì),其sRGB范圍在155 ~ 255
其也是表示0度時的菲涅爾系數(shù)RF(0°)。
4.Roughness
即粗糙度,其與Smoothness(光滑度,也稱為Glossiness光澤度)相反。其表示了物體表面的不規(guī)則程度,決定了在發(fā)生鏡面反射時入射光線與法線的夾角大小。
粗糙度roughness越大,鏡面反射的出射光線分散的角度就越大,光照越模糊;
粗糙度roughness越小,鏡面反射的出射光線分散的角度就越小,光照越尖銳;
5.Metal-Roughness
在Metal-Rougnness流程中,分別對應(yīng)BaseColor,Roughness,Metallic這三個參數(shù);
在Metal-Roughness流程中,只要按照流程,分別設(shè)置好BaseColor,Roughness,Metallic,就可以基本確定物體材質(zhì)的視覺效果;
6.Specular-Glossiness
在Specular-Glossiness流程中,參數(shù)發(fā)生了變化,分別為Diffuse,Glossiness,Specular三個參數(shù);
在Specular-Glossiness流程中,Diffuse和Specular共同決定了物體的basecolor,和表面鏡面反射和漫反射的比例,與第一種流程的區(qū)別在于,此流程直接指定確定的占比值,第一種是根據(jù)Metallic屬性,自動匹配相應(yīng)的占比值;
通過上面的介紹,我們可以只知道,在真實的生活中,視覺效果的呈現(xiàn),主要取決于:
自然光照下,物體呈現(xiàn)的顏色(BasedColor/Albedo);
物體表面對光線的鏡面反射角度(Roughness);
物體表面對光線鏡面反射和漫反射的比例(Metallic/Specular);
兩個流程的共同貼圖
最右側(cè)三張貼圖 AO,normal,height都是為了增加材質(zhì)貼圖的細(xì)節(jié),使得其看起來更真實。
AO貼圖 (ambient occlusion map)AO貼圖會根據(jù)模型某一部分相對于其他組成部分或者其他模型之間的幾何距離,模擬模型的光影效果,比如一些夾角會更暗或者更亮,某一些面因為其他模型部分的影響,可能光照更少。
法線貼圖(normal map)normal貼圖會根據(jù)光照環(huán)境,優(yōu)化模型表面的光影效果,比如一些凸起凹陷等細(xì)節(jié);
高度貼圖(height map)height貼圖會給模型本身根據(jù)實際需要增加凸起或者凹陷的幾何效果。比如木質(zhì)模型,某處被敲打而導(dǎo)致的凹陷效果。
四、各自的優(yōu)劣
1、Metal/Roughness工作流:
優(yōu)勢:
非導(dǎo)體的F0都是固定的,所以美術(shù)在使用時不容易出錯。
紋理緩存壓力小,因為Metallic和Roughness都是灰度貼圖。
是目前兼容性最好的工作流。
劣勢:
非導(dǎo)體的F0固定為0.04,但其實想要改動也是可以的。
白色邊緣問題明顯,尤其是低分辨率下。
2、Specular/Glossiness工作流
優(yōu)勢:
產(chǎn)生的黑邊較于M/R工作流的白邊更能接受,沒有那么明顯。
可以在鏡面反射貼圖中對F0自由調(diào)整。
劣勢:
因為F0可以自由調(diào)整,所以可能會導(dǎo)致美術(shù)輸入錯誤的值從而打破能量守恒。
因為有兩張RGB貼圖,對性能要求更大。
需要美術(shù)對PBR的理解更高,才能正確制作各種貼圖。

linear模式
在PBR流程中,環(huán)境光線效果需要使用linear模式,原來的gamma模式不再適用。因為gamma模式本身是為了使其他技術(shù)渲染出來的模型具有更真實而效果,對環(huán)境光進(jìn)行了修正。但是在pbr中,貼圖在設(shè)計的時候,完全是按照真實的環(huán)境中的光照去計算的,所以此處不再需要修正。
這里補(bǔ)充一些色彩空間的知識:
linear(線性色彩空間)和srgb,HDR區(qū)別
人眼有光線自適應(yīng)的特性,這樣也是能讓人在暗的場景里看到更多東西,在亮的場景里能分辨更多東西,這種效果一般從電影院這樣昏暗的場所里走出來更能體會,眼睛會有一個慢慢適應(yīng)的過程?,F(xiàn)在攝像頭一般也會自適應(yīng)曝光度,但是工業(yè)需求的有些還是需要不自動的,三維渲染之中,如果把這種真實完全模擬的圖像給人眼看到,會感覺比我們?nèi)搜劭吹交野档亩?,所以一般會在硬件方面做一個反曲線最后變成srgb的色彩空間讓人看到。
游戲引擎里面最終效果給人看到,當(dāng)然是這種強(qiáng)化過的適應(yīng)人眼的色彩空間,但是我做光照計算和貼圖就不行,因為會由于多次的色彩強(qiáng)化導(dǎo)致最終畫面強(qiáng)烈失真,這時候就是需要linear的色彩空間,計算時候用真實色彩,直到輸出這一步把色彩強(qiáng)化一遍以適合人眼。unity很早就是linear的色彩空間,但是由于后期最后一部的矯正方面很多從業(yè)人士的素養(yǎng)不足,或者完全沒有這個意識,做出來的效果完全是不正確,或者缺乏調(diào)整彈性的。而unreal則在工作流上面幾乎是整合和后期的色表,去解決這個問題。
而HDR是模擬人眼的過程,能看到更廣范圍的光(就是亮的時候能更亮瞎),HDR圖像的一般色域也超過普通的RGB色域(但也可以不超過)。HDR在unity中需要勾選攝像機(jī)上的HDR選項和使用延遲渲染deferred才能(否則會有濾鏡提示The camera is not HDR enabled 這是沒使用延遲渲染),要看出效果還要加個bloom之類的

Unity中的PBS
先來看看PBR和PBS的關(guān)系:
PBR(Physically Based Rendering)是一種渲染方式,它使用的材質(zhì)是PBS(Physically Based Shader),中文名:基于物理的渲染技術(shù)??梢詫夂筒馁|(zhì)之間的行為進(jìn)行更加真實的建模。(之前我們已經(jīng)聊過一種簡單的建模,標(biāo)準(zhǔn)光照模型)PBS只考慮材質(zhì)在真實物理環(huán)境下應(yīng)該有的效果。PBR包括的范圍會更廣一些,比如GI/AO/SUN等復(fù)雜情況,這些東西加上PBS,才是PBR。
Unity中的PBS即是把PBR算法(具體算法實現(xiàn)請等待下回分解)封裝起來,只用修改PBS的參數(shù)就能達(dá)到PBR的效果。
在Unity中,PBS分為兩類,一個叫做Standard,一個叫做Standard(Specular Setup),我們把它稱為標(biāo)準(zhǔn)著色器的高光版,它們共同組成了一個完整的PBS光照明模型,而且非常易于使用。
Standard(Specular Setup)
其使用流程為:


可以發(fā)現(xiàn)Standard(Specular setup)對應(yīng)的即是我們上面講的Specular-Glossiness流程。
其中Albedo貼圖即是物體的BaseColor,Specular貼圖反映了物體的Specular值,Smoothness反映了物體的光滑度(即Roughness)。
Standard
其使用的流程為:


可以發(fā)現(xiàn)其與Standard(Specular Setup)不同的是Specular貼圖替換成了Metallic貼圖。Metallic貼圖對應(yīng)的是材質(zhì)的金屬度,Standard所對應(yīng)的即是我們上面提到的Metal-Roughness流程。
Standard與Standard(Specular setup)比較

下面借用UWA的一張圖,綜述一下Unity中PBS的工作流程。如果把standard shader想成一個黑盒子,想要計算材質(zhì)球在不同光照情況下的顏色。PBS最核心是BRDF函數(shù),輸入分為兩類:第一類是材質(zhì)的屬性(幾何信息、位置、法線等),材質(zhì)的顏色信息(不管用金屬工作流還是高光工作流,本質(zhì)上都是為了得到漫反射顏色和高光顏色)。這樣材質(zhì)信息就準(zhǔn)備好了。第二類輸入是光照部分,光照部分分為兩類,直接光照(平行光/點(diǎn)光/聚光燈的顏色和方向),間接光照。間接光照又分為兩類,一類是漫反射光源(Unity的光照探針和lightmap),第二類是高光光源(Unity的反射探針)。
技術(shù)引用:
?pbr: http://richbabe.top/2018/06/25/%E6%8E%A2%E7%A9%B6PBR%E7%9A%84%E4%B8%A4%E7%A7%8D%E6%B5%81%E7%A8%8B%E4%BB%A5%E5%8F%8AUnity%E4%B8%AD%E7%9A%84PBS/
PBRUE4理論:
https://zhuanlan.zhihu.com/p/342484575
BRDF算法:?
https://zhuanlan.zhihu.com/p/307858836