文章目錄
- 前言
- 一、渲染方程
- 二、什么是BxDF
- 1、BSSRDF
- 2、BRDF
- 3、BTDF
- 4、BSDF
- 三、迪士尼原則的BRDF
- 四、迪士尼原則的BRDF的參數
- 五、在Unity中看一下默認Shader的這些參數
- 六、在這里記錄一下使用 Blender 和 SubstancePainter 的流程
- 1、在Blender中導出模型為 .obj 格式
- 2、在SubstancePainter中導入(在SP中導入是使用新建)
前言
Unity中Shader雙向反射分布函數BRDF。在上一篇文章中,我們知道了PBR的核心是PBS。而PBS的核心就是 雙向反射發布函數(BRDF)
一、渲染方程
- 渲染方程描述了光能在場景中的流動,根據光的物理學原理,渲染方程可以完美的模擬出符合物理光學的結果。
該公式是根據現實物理推到得出的,實際渲染不用這個,而是在這個的基礎上簡化
- L0是當前點的出射光亮度(可以理解為輸出顏色)
- Le是當前點的自發光亮度
- ?r是當前點的入射方向到出射方向光的反射比例,為BxDF
- Li是當前點的入射光亮度
- (ωi*n)是入射角帶來的入射光衰減
- ?Ω…dωi是入射方向半球的積分,可以理解為無窮小的累加和
我們在渲染時,主要考慮的是 ?r ,BxDF
二、什么是BxDF
1、BSSRDF
- Bidirectional Surface Scattering Reflectance Distribution Function(雙向表面散射反射分布函數)
雙向:這個函數需要已知 入射光向量 和 視線向量
表面散射反射:這個函數幾乎完全模擬出了物理光照物體的效果
2、BRDF
- Bidirectional Reflectance Distribution Function(雙向反射分布函數)
雙向:這個函數需要已知 入射光向量 和 視線向量
反射:這個函數只模擬了光照到物體表面高光反射的效果
3、BTDF
- Bidirectional Transmittance Distribution Function(雙向透射分布函數)
雙向:這個函數需要已知 入射光向量 和 視線向量
透射:這個函數只模擬了光照到物體表面穿透 高光透射 的效果
4、BSDF
- Bidirectional Scattering Distribution Function(雙向散射分布函數)
雙向:這個函數需要已知 入射光向量 和 視線向量
散射:這個函數同時模擬了 高光反射 和 高光透射 的效果
- BSDF = BRDF + BTDF
我們在Unity中,主要使用的時BRDF(雙向反射分布函數),即只考慮物體表面的高光反射效果。
三、迪士尼原則的BRDF
BRDF有很多公式。但是,比較通用普及的是迪士尼原則的BRDF
迪士尼動畫工作室在 SIGGRAPH2012上進行了著名的 Physically based shading at Disney 演講,正式提出了 迪士尼原則的BRDF,由于其 高度的通用性 在電影界和游戲界都引起了不小的轟動。
迪士尼原則的BRDF的核心理念:
- 使用直觀的參數,而不是晦澀的物理類參數
- 參數盡可能的少
- 參數在其合理范圍內應該為 0 - 1
- 允許參數在有意義的情況下超出正常的范圍
- 所有參數組應盡可能的健壯與合理
四、迪士尼原則的BRDF的參數
-
BaseColor(固有色):表面的顏色,通常由紋理提供
-
Subsurface(次表面):使用次表面近似的控制漫反射形狀
-
Metallic(金屬度):0 = 非金屬,1 = 金屬,這是兩種不同類型之間的線性混合
-
Specular(鏡面反射強度):鏡面反射的強度
-
SpecularTint(鏡面反射顏色):對美術控制的讓步,用于對BaseColor的入鏡鏡面反射進行顏色控制
-
Roughness(粗糙度):表面粗糙度,控制漫反射和鏡面反射
-
Anisotropic(各向異性強度):用于控制鏡面反射高光的縱橫比,0 = 各向同性,1 = 各向異性(正常的物體一般是各向同性的)
-
Sheen(光澤度):一種額外的掠射分量。主要用于布料
-
SheenTint(光澤顏色):對Sheen的顏色控制
-
ClearCoat(清漆強度):特殊用途的第二個鏡面波瓣
-
ClearCoatGloss(清漆光澤度):控制透明圖層光澤度
標紅的參數是Unity中用到的
五、在Unity中看一下默認Shader的這些參數
首先,我們需要把顏色空間修改為線性的
(Edit->Project Setting->Player->Other Settings)
然后,我們在Unity中導入一個模型用于測試PBR的主要參數:
我們可以使用SubstancePainter軟件來輸出這下圖中需要的紋理
六、在這里記錄一下使用 Blender 和 SubstancePainter 的流程
1、在Blender中導出模型為 .obj 格式
2、在SubstancePainter中導入(在SP中導入是使用新建)
SubstancePainter中移動快捷鍵:
旋轉視圖:ALT+鼠標左鍵;移動視圖:ALT+鼠標中鍵
因為Unity中對于PBR的不同單通道效果使用多個紋理,比較浪費系統資源。
所以,我們可以在自己的Shader中改寫,對一張貼圖的RGB通道來分別采樣使用
這是在SP中,自定義的紋理輸出格式