本文轉自Unity Connect博主 北京琳云信息科技有限責任公司
淺析常常嘴邊的理論知識 - PBR 技術
? ? ? ? 首先我們需要了解定義:( Physically Based Rendering )后來才發(fā)現(xiàn)這是一種新的渲染方式母怜,萬物皆以美為主,PBR 并不是“一項”技術屿储,它是由一系列技術的集合廉赔,基于物理的渲染過程铁瞒。PBR 它也是一種著色和渲染技術,用于更精確的描述光如何與物體表面互動。
PBR的優(yōu)勢:
(1)方法論和算法基于精確的計算公式液荸,免除創(chuàng)作表面的猜想過程蘸泻。
(2)在任何光照環(huán)境都能表現(xiàn)出正確的結果琉苇。
(3)為不同的藝術家,提供統(tǒng)一的工作流程悦施。
? ? ? ? 我們來講一下 PBR 流程和傳統(tǒng)區(qū)別:其實 PBR 就是不再使用 Specular Map 并扇,在 PBR 里是 Glossness (光澤可以理解成高光粗糙度)和 Metallicity (金屬),后面兩張基本都是灰度圖抡诞,需要在游戲引擎中調(diào)節(jié)效果穷蛹,據(jù)其他網(wǎng)上說法,一般公司會根據(jù)項目發(fā)一張材質球的表昼汗,所有的 Albedo? , Glossness , Metallicity 的值的范圍都在上面肴熏,根據(jù)物品的物理屬性來調(diào)整就行。
? ? ? ? 從 Unity3D 5.x 開始有兩個標準著色器顷窒,一個名為Standard蛙吏,我們稱它為標準著色器的標準版,另一個名為Standard(Specular Setup)蹋肮,我們稱它為標準著色器的高光版出刷,它們共同組成了一個完整的PBS光照明模型,且非常易于使用坯辩。其實這兩個 Shader 基本差不多馁龟,只是有細微的屬性參數(shù)上的區(qū)別。標準版這邊的 _Metallic(金屬性)漆魔、_MetallicGlossMap(金屬光澤貼圖)坷檩,被高光版的 _SpecColor(高光顏色)、_SpecGlossMap(高光顏色法線貼圖)所代替改抡。標準著色器主要是針對硬質表面(也就是建筑材質)而設計的矢炼,可以處理大多數(shù)現(xiàn)實世界的材質,例如石頭阿纤、陶瓷句灌、銅器、銀器或橡膠等。同時胰锌,它也可以非常出色地處理一些非硬質表面的材質骗绕,例如皮膚、頭發(fā)或布料等资昧。
(附注:PBS細析:基于物理的著色(Physically Based Shading酬土,簡稱PBS)就是以某種方式模擬現(xiàn)實中材質和光照的相互作用的一種著色方法。這種方法在需要光照和材質更加直觀和逼真地協(xié)同工作的場合下優(yōu)勢非常明顯格带〕方桑基于物理的著色模擬了光線在現(xiàn)實中的行為,實現(xiàn)了在不同的光照條件下的逼真效果叽唱。為實現(xiàn)這種效果需要遵循各種物理原理屈呕,包括能量守恒(也就是物體反射出去的光量不可能超過所接收的光量),F(xiàn)resnel反射(所有表面反射在掠射角(grazing angles)處更加強烈)尔觉,以及物體表面是如何自我遮擋等原理凉袱。)
官方標準材質文檔鏈接:https://docs.unity3d.com/Manual/StandardShaderMaterialParameters.html? ? ? ??
接著,我們具體學習一下 Unity3D 引擎標準著色器的一些關鍵的屬性與流程侦铜。
1、金屬工作流:(不易出錯钟鸵,省內(nèi)存钉稍,但是白邊現(xiàn)象更明顯),
? ? ? ? 1.1 Base Color :( RGB-sRGB ) 包含信息:絕緣體棺耍,反射顏色贡未。金屬,反射率蒙袍。最亮色不應超越 240RGB 俊卤;最暗色應在 30-50RBG 之間;Base Color 不要包含其他光照信息害幅,比如 Amblient Occlusion 消恍;金屬反射率應該在 70%-100% 之間。也就是RGB 范圍在 180-255 以现。
? ? ? ? 1.2? Matallic Map :( Grayscale-Linear ):描述哪些區(qū)域是金屬狠怨,那些是絕緣體。1 表示純金屬邑遏,0 表示絕緣體佣赖。如果Matalic Map 的灰度值低于 235 ,那么對應的 BaseColor 的反射率也應該降低一些记盒。
? ? ? ? 1.3 Roughness Map :( Grayscale-Linear ):描述表面引起光纖漫反射的不規(guī)則程度憎蛤。這將改變光纖的方向,但是不會改變光線的強度纪吮。光滑表面會有小而亮的高光俩檬,而粗糙表面將會出現(xiàn)大而暗淡的高光萎胰。在這個灰度圖里面, 0 代表光滑表面豆胸,而 1 代表粗糙表面奥洼。Roughness Map 是一個“有故事”的貼圖,它會告訴你這個表面經(jīng)歷過那些嚴酷(或者平和)的環(huán)境晚胡。而公用的貼圖為環(huán)境光吸收灵奖,法線和高度貼圖。
2估盘、Specular工作流:
? ? ? ? 下面會講述一下鏡面反射工作流瓷患,其實Specular包含了全部的絕緣體 F0 信息,1.0 的 Diffuse 和 1.0 的 Specular 將會使得反射折射能量大于輸入能量遣妥,這違背了能量守恒定律擅编。也就是說在繪制貼圖時,你無法預覽結果箫踩。
? ? ? ? 2.1 Diffuse :( RGB-sRGB ):包含 Albedo Color 爱态,但是不包含任何反射率信息。純金屬為黑色境钟,因為純金屬沒有顏色锦担,油漆和銹跡是需要帶有顏色的】鳎基礎顏色應不包含光照信息洞渔,除了 Micro-Occlusion。黑色不應低于 30-50sRGB 缚态,亮色不應高于 240sRGB磁椒。
? ? ? ? 2.2 Specular:( RGB-sRGB ):灰度值,表示非金屬 F0 玫芦。RGB 值浆熔,表示金屬吸收的不同波長的光線這種貼圖允許使用不同的 F0 值來表現(xiàn)非金屬。
? ? ? ? 2.3 Glossiness:與 Roughness 相反姨俩, 0 代表粗糙表面蘸拔,而 1 代表光滑表面。
3环葵、Ambient Occlusion :表示有多少環(huán)境光调窍,可以被表面上的一個點吸收。AO 應該只影響 Diffuse 部分张遭,而不應該阻塞Specular部分邓萨。
4、Height Map:用于視差映射,通過增加可見的深度感來提高渲染的真實性缔恳。
5宝剖、Normal Map:不論PBR還是非PBR,NormalMap都是用來模擬表面細節(jié)歉甚,同時還會影響Roughness和Glossiness映射万细。 標準著色器源代碼的剖析:1) 兩個Shader源文件
Stardard.shader 著色器源文件 - 標準著色器的標準版
StardardSpecular.shader 著色器源文件 - 標準著色器的高光版
2) 七個CG頭文件
UnityStandardBRDF.cginc頭文件 - 用于存放標準著色器處理BRDF材質屬性相關的函數(shù)與宏
UnityStandardConfig.cginc頭文件 - 用于存放標準著色器配置相關的代碼(其實里面就幾個宏)
UnityStandardCore.cginc頭文件 - 用于存放標準著色器的主要代碼(如頂點著色函數(shù)、片段著色函數(shù)等相關函數(shù))
UnityStandardInput.cginc頭文件 - 用于存放標準著色器輸入結構相關的工具函數(shù)與宏
UnityStandardMeta.cginc頭文件 - 用于存放標準著色器meta通道中會用到的工具函數(shù)與宏
UnityStandardShadow.cginc頭文件 - 用于存放標準著色器陰影貼圖采樣相關的工具函數(shù)與宏
UnityStandardUtils.cginc頭文件 - 用于存放標準著色器共用的一些工具函數(shù)
StandardShaderGUI.cs腳本文件 - 定義了特定的自定義編輯器UI界面
? ? 其實在學習成長路上纸泄,也不乏有各路大神精彩分享與學習赖钞。如果想深入學習的了解,下面的文章也可以很好的學習閱讀聘裁!
1雪营、【基于物理的渲染(PBR)白皮書】(三)迪士尼原則的BRDF與BSDF相關總結:https://zhuanlan.zhihu.com/p/60977923
2、理解PBR:從原理到實現(xiàn)(上)https://blog.csdn.net/Neil3D/article/details/83783638
3衡便、理解PBR:從原理到實現(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官方技術社區(qū)app,在線技術答疑镣陕,發(fā)現(xiàn)更多資源干貨谴餐!