本文轉(zhuǎn)自Unity Connect博主 北京琳云信息科技有限責(zé)任公司
淺析常常嘴邊的理論知識(shí) - PBR 技術(shù)
? ? ? ? 首先我們需要了解定義:( Physically Based Rendering )后來才發(fā)現(xiàn)這是一種新的渲染方式,萬(wàn)物皆以美為主,PBR 并不是“一項(xiàng)”技術(shù),它是由一系列技術(shù)的集合,基于物理的渲染過程。PBR 它也是一種著色和渲染技術(shù),用于更精確的描述光如何與物體表面互動(dòng)。
PBR的優(yōu)勢(shì):
(1)方法論和算法基于精確的計(jì)算公式,免除創(chuàng)作表面的猜想過程。
(2)在任何光照環(huán)境都能表現(xiàn)出正確的結(jié)果。
(3)為不同的藝術(shù)家,提供統(tǒng)一的工作流程。
? ? ? ? 我們來講一下 PBR 流程和傳統(tǒng)區(qū)別:其實(shí) PBR 就是不再使用 Specular Map ,在 PBR 里是 Glossness (光澤可以理解成高光粗糙度)和 Metallicity (金屬),后面兩張基本都是灰度圖,需要在游戲引擎中調(diào)節(jié)效果,據(jù)其他網(wǎng)上說法,一般公司會(huì)根據(jù)項(xiàng)目發(fā)一張材質(zhì)球的表,所有的 Albedo? , Glossness , Metallicity 的值的范圍都在上面,根據(jù)物品的物理屬性來調(diào)整就行。
? ? ? ? 從 Unity3D 5.x 開始有兩個(gè)標(biāo)準(zhǔn)著色器,一個(gè)名為Standard,我們稱它為標(biāo)準(zhǔn)著色器的標(biāo)準(zhǔn)版,另一個(gè)名為Standard(Specular Setup),我們稱它為標(biāo)準(zhǔn)著色器的高光版,它們共同組成了一個(gè)完整的PBS光照明模型,且非常易于使用。其實(shí)這兩個(gè) Shader 基本差不多,只是有細(xì)微的屬性參數(shù)上的區(qū)別。標(biāo)準(zhǔn)版這邊的 _Metallic(金屬性)、_MetallicGlossMap(金屬光澤貼圖),被高光版的 _SpecColor(高光顏色)、_SpecGlossMap(高光顏色法線貼圖)所代替。標(biāo)準(zhǔn)著色器主要是針對(duì)硬質(zhì)表面(也就是建筑材質(zhì))而設(shè)計(jì)的,可以處理大多數(shù)現(xiàn)實(shí)世界的材質(zhì),例如石頭、陶瓷、銅器、銀器或橡膠等。同時(shí),它也可以非常出色地處理一些非硬質(zhì)表面的材質(zhì),例如皮膚、頭發(fā)或布料等。
(附注:PBS細(xì)析:基于物理的著色(Physically Based Shading,簡(jiǎn)稱PBS)就是以某種方式模擬現(xiàn)實(shí)中材質(zhì)和光照的相互作用的一種著色方法。這種方法在需要光照和材質(zhì)更加直觀和逼真地協(xié)同工作的場(chǎng)合下優(yōu)勢(shì)非常明顯。基于物理的著色模擬了光線在現(xiàn)實(shí)中的行為,實(shí)現(xiàn)了在不同的光照條件下的逼真效果。為實(shí)現(xiàn)這種效果需要遵循各種物理原理,包括能量守恒(也就是物體反射出去的光量不可能超過所接收的光量),F(xiàn)resnel反射(所有表面反射在掠射角(grazing angles)處更加強(qiáng)烈),以及物體表面是如何自我遮擋等原理。)
官方標(biāo)準(zhǔn)材質(zhì)文檔鏈接:https://docs.unity3d.com/Manual/StandardShaderMaterialParameters.html? ? ? ??
接著,我們具體學(xué)習(xí)一下 Unity3D 引擎標(biāo)準(zhǔn)著色器的一些關(guān)鍵的屬性與流程。
1、金屬工作流:(不易出錯(cuò),省內(nèi)存,但是白邊現(xiàn)象更明顯),
? ? ? ? 1.1 Base Color :( RGB-sRGB ) 包含信息:絕緣體,反射顏色。金屬,反射率。最亮色不應(yīng)超越 240RGB ;最暗色應(yīng)在 30-50RBG 之間;Base Color 不要包含其他光照信息,比如 Amblient Occlusion ;金屬反射率應(yīng)該在 70%-100% 之間。也就是RGB 范圍在 180-255 。
? ? ? ? 1.2? Matallic Map :( Grayscale-Linear ):描述哪些區(qū)域是金屬,那些是絕緣體。1 表示純金屬,0 表示絕緣體。如果Matalic Map 的灰度值低于 235 ,那么對(duì)應(yīng)的 BaseColor 的反射率也應(yīng)該降低一些。
? ? ? ? 1.3 Roughness Map :( Grayscale-Linear ):描述表面引起光纖漫反射的不規(guī)則程度。這將改變光纖的方向,但是不會(huì)改變光線的強(qiáng)度。光滑表面會(huì)有小而亮的高光,而粗糙表面將會(huì)出現(xiàn)大而暗淡的高光。在這個(gè)灰度圖里面, 0 代表光滑表面,而 1 代表粗糙表面。Roughness Map 是一個(gè)“有故事”的貼圖,它會(huì)告訴你這個(gè)表面經(jīng)歷過那些嚴(yán)酷(或者平和)的環(huán)境。而公用的貼圖為環(huán)境光吸收,法線和高度貼圖。
2、Specular工作流:
? ? ? ? 下面會(huì)講述一下鏡面反射工作流,其實(shí)Specular包含了全部的絕緣體 F0 信息,1.0 的 Diffuse 和 1.0 的 Specular 將會(huì)使得反射折射能量大于輸入能量,這違背了能量守恒定律。也就是說在繪制貼圖時(shí),你無(wú)法預(yù)覽結(jié)果。
? ? ? ? 2.1 Diffuse :( RGB-sRGB ):包含 Albedo Color ,但是不包含任何反射率信息。純金屬為黑色,因?yàn)榧兘饘贈(zèng)]有顏色,油漆和銹跡是需要帶有顏色的。基礎(chǔ)顏色應(yīng)不包含光照信息,除了 Micro-Occlusion。黑色不應(yīng)低于 30-50sRGB ,亮色不應(yīng)高于 240sRGB。
? ? ? ? 2.2 Specular:( RGB-sRGB ):灰度值,表示非金屬 F0 。RGB 值,表示金屬吸收的不同波長(zhǎng)的光線這種貼圖允許使用不同的 F0 值來表現(xiàn)非金屬。
? ? ? ? 2.3 Glossiness:與 Roughness 相反, 0 代表粗糙表面,而 1 代表光滑表面。
3、Ambient Occlusion :表示有多少環(huán)境光,可以被表面上的一個(gè)點(diǎn)吸收。AO 應(yīng)該只影響 Diffuse 部分,而不應(yīng)該阻塞Specular部分。
4、Height Map:用于視差映射,通過增加可見的深度感來提高渲染的真實(shí)性。
5、Normal Map:不論P(yáng)BR還是非PBR,NormalMap都是用來模擬表面細(xì)節(jié),同時(shí)還會(huì)影響Roughness和Glossiness映射。 標(biāo)準(zhǔn)著色器源代碼的剖析:1) 兩個(gè)Shader源文件
Stardard.shader 著色器源文件 - 標(biāo)準(zhǔn)著色器的標(biāo)準(zhǔn)版
StardardSpecular.shader 著色器源文件 - 標(biāo)準(zhǔn)著色器的高光版
2) 七個(gè)CG頭文件
UnityStandardBRDF.cginc頭文件 - 用于存放標(biāo)準(zhǔn)著色器處理BRDF材質(zhì)屬性相關(guān)的函數(shù)與宏
UnityStandardConfig.cginc頭文件 - 用于存放標(biāo)準(zhǔn)著色器配置相關(guān)的代碼(其實(shí)里面就幾個(gè)宏)
UnityStandardCore.cginc頭文件 - 用于存放標(biāo)準(zhǔn)著色器的主要代碼(如頂點(diǎn)著色函數(shù)、片段著色函數(shù)等相關(guān)函數(shù))
UnityStandardInput.cginc頭文件 - 用于存放標(biāo)準(zhǔn)著色器輸入結(jié)構(gòu)相關(guān)的工具函數(shù)與宏
UnityStandardMeta.cginc頭文件 - 用于存放標(biāo)準(zhǔn)著色器meta通道中會(huì)用到的工具函數(shù)與宏
UnityStandardShadow.cginc頭文件 - 用于存放標(biāo)準(zhǔn)著色器陰影貼圖采樣相關(guān)的工具函數(shù)與宏
UnityStandardUtils.cginc頭文件 - 用于存放標(biāo)準(zhǔn)著色器共用的一些工具函數(shù)
StandardShaderGUI.cs腳本文件 - 定義了特定的自定義編輯器UI界面
? ? 其實(shí)在學(xué)習(xí)成長(zhǎng)路上,也不乏有各路大神精彩分享與學(xué)習(xí)。如果想深入學(xué)習(xí)的了解,下面的文章也可以很好的學(xué)習(xí)閱讀!
1、【基于物理的渲染(PBR)白皮書】(三)迪士尼原則的BRDF與BSDF相關(guān)總結(jié):https://zhuanlan.zhihu.com/p/60977923
2、理解PBR:從原理到實(shí)現(xiàn)(上)https://blog.csdn.net/Neil3D/article/details/83783638
3、理解PBR:從原理到實(shí)現(xiàn)(下)https://blog.csdn.net/Neil3D/article/details/84112481
原文鏈接:https://connect.unity.com/p/unity3d-qian-tan-mei-zhu-na-xie-shi-pbrji-zhu?app=true
歡迎戳上方原文鏈接,下載Unity官方技術(shù)社區(qū)app,在線技術(shù)答疑,發(fā)現(xiàn)更多資源干貨!