PBR 材質
PBR 材質是其中一種 Azure 遠端轉譯中支援的材質類型。 用於應該接收實際光源的三角形網格。 另一方面,點雲不會受到動態光源的影響。
PBR 代表 Physically Based Rendering (以物理為基礎的轉譯),表示材質會以實際可行的方式描述表面的視覺屬性,如此一來,在所有光源條件下都可能得到逼真的結果。 大部分的新式遊戲引擎和內容建立工具都支援 PBR 材質,因為其被視為即時轉譯中最佳的現實情境近似值。
物理轉譯的核心概念是使用 BaseColor、Metalness 和 Roughness 屬性來模擬各種現實材質。 PBR 的詳細描述已超出本文範圍。 如需 PBR 的詳細資訊,請參閱其他來源。
不過,PBR 材質不是通用解決方案。 根據檢視角度,有些材質會以不同的方式反射色彩。 例如,某些織物或汽車彩繪。 這些種類的材質無法由標準 PBR 模型處理,Azure 遠端轉譯目前也不支援。 此限制包括 PBR 延伸項目,例如薄膜 (多層表面) 和清漆 (用於汽車彩繪)。
PBR 材質屬性
下列材質屬性會在執行階段 API 中公開,例如,分別在 C# PbrMaterial 類別 或 C++ PbrMaterial 類別 上。
PbrFlags
:雜項功能旗標可在此位元遮罩中合併,以啟用下列功能:TransparentMaterial
:針對 PBR 材質,只有一個透明度設定:已啟用或未啟用。 不透明度是由 albedo 色彩的 Alpha 色板所定義。 啟用時,就會叫用更複雜的轉譯方法來繪製半透明表面。 Azure 遠端轉譯會實作真正的無關順序透明度 (OIT)。 透明幾何的轉譯成本很高。 如果您只需要表面有幾個洞 (例如樹葉),最好改用 Alpha 裁剪。
請注意,上圖中最右邊的球體雖然幾乎完全透明,但反射仍然可見。
重要
如果任何材質應該在執行階段從不透明切換為透明,則轉譯器必須使用 TileBasedComposition 轉譯模式。 此限制不適用於轉換成透明材質來開始的材質。
UseVertexColor
:如果網格包含 vertex 色彩且已啟用此選項,網格的 vertex 色彩會相乘為AlbedoColor
和AlbedoMap
。 根據預設,會停用UseVertexColor
。DoubleSided
:如果雙面設為 true,則即使攝影機面向其背面,也會轉譯具有此材質的三角形。 針對 PBR 材質,背面光源也可正確計算。 預設會停用此選項。 請參閱 Single-sided rendering。SpecularHighlights
:啟用此材質的鏡面反射高光。 根據預設,會啟用SpecularHighlights
旗標。AlphaClipped
:根據低於AlphaClipThreshold
值的 alpha 值,在每個像素基礎上啟用硬式剪切 (請參閱下文)。 這也適用於不透明的材質。FresnelEffect
:此材質旗標會啟用個別材質的加法 Fresnel 效果。 效果的外觀是由其他 Fresnel 參數FresnelEffectColor
和FresnelEffectExponent
控管,這兩個參數會在下面加以說明。TransparencyWritesDepth
:如果在材質上設定TransparencyWritesDepth
旗標且材質為透明,則使用此材質的物件也會包含於最終深度緩衝區。 請參閱下一節中的 PBR 材質旗標:透明。 如果您的使用案例需要更合理完全透明場景的後期重新投影,建議您啟用此功能。 對於混合不透明/透明場景,此設定可能會導致不合理的重新投影行為或重新投影成品。 基於此原因,停用此旗標是一般使用案例的預設和建議設定。 寫入的深度值會取自最靠近攝影機物件的每個像素深度層。
AlbedoColor
:此色彩會與其他色彩相乘,例如AlbedoMap
或 vertex 色彩。 如果在材質上啟用透明度,Alpha 色板會用來以調整不透明度,1
表示完全不透明和0
表示完全透明。 預設反照率色彩是不透明的白色。注意
當 PBR 材質完全透明時 (就像是完全乾淨的玻璃表面一樣),其仍然會反射環境。 像是太陽之類的亮點仍會顯示在反射中。 這與色彩材質不同。
AlbedoMap
:每個像素反照率值的 2D 紋理。AlphaClipThreshold
:如果在PbrFlags
屬性上設定AlphaClipped
旗標,則不會繪製反照率 Alpha 值低於AlphaClipThreshold
的所有像素。 即使未啟用透明度,也可使用 Alpha 裁剪,而且轉譯速度會更快。 然而,Alpha 裁剪材質的轉譯速度仍會比完全不透明材質還慢。 預設會停用 Alpha 裁剪。TexCoordScale
和TexCoordOffset
:比例會相乘為 UV 紋理座標,而位移會新增至其中。 可用來縮放和移位紋理。 預設比例為 (1, 1),位移為 (0, 0)。FresnelEffectColor
:用於此材質的 Fresnel 色彩。 僅當此材質上已設定 Fresnel 效果旗標時才重要 (請參閱上文)。 此屬性會控制 Fresnel 光亮的基底色彩 (如需完整說明,請參閱 Fresnel 效果)。 目前僅 RGB 色板值重要,並將忽略 Alpha 值。FresnelEffectExponent
:用於此材質的 Fresnel 指數。 僅當此材質上已設定 Fresnel 效果旗標時才重要 (請參閱上文)。 此屬性會控制 Fresnel 光亮的散射。 最小值 0.01 會導致散射到整個物件。 最大值 10.0 會將光亮限制為僅可在大部分的掠過邊緣上看見。PbrVertexAlphaMode
:決定如何使用頂點色彩的 Alpha 色板。 提供下列模式:Occlusion
:Alpha 值代表環境光遮蔽值,因此只會影響來自天空盒的間接光源。LightMask
:Alpha 值可作為應用整體光源數量的縮放因數,這表示 Alpha 可以用來將區域變暗。 這會同時影響間接和直接光源。Opacity
:Alpha 表示材質不透明 (1.0) 或透明 (0.0) 程度。
NormalMap
:若要模擬精細的詳細資料,可以提供法線貼圖。NormalMapScale
:縮放法線貼圖強度的純量值。 值為 1.0 時依原狀採用法線貼圖的法線,值為 0 時使表面顯得平坦。 大於 1.0 的值會誇大法線貼圖擾動。Roughness
和RoughnessMap
:粗糙度會定義表面的粗糙或平滑程度。 粗糙表面會將光線分散到比平滑表面更多的方向,讓反射變得模糊,而不是清晰。 值的範圍從0.0
到1.0
。Roughness
等於0.0
時,反射會變清晰。Roughness
等於0.5
時,反射會變模糊。 如果同時提供 roughness 值和 roughness map,最終值將會是兩者的乘積。Metalness
和MetalnessMap
:在物理學中,此屬性會對應到導電性或非導電性的表面。 導電材質具有不同的反射屬性,而且通常在沒有 albedo 色彩的情況下反射。 在 PBR 材質中,此屬性會影響表面反射周圍環境的程度。 值的範圍是從0.0
到1.0
。 當 metalness 為0.0
時,反照率色彩會完全可見,而且材質看起來像是塑膠或陶瓷。 當 metalness 為0.5
時,看起來會像是彩繪金屬。 當 metalness 為1.0
時,表面幾乎完全失去其反照率色彩,只會反射周圍環境。 例如,如果metalness
是1.0
,且roughness
是0.0
,則表面看起來會像是現實的鏡子。 如果同時提供 metalness 值和 metalness map,最終值將會是兩者的乘積。在上圖中,右下角的球體看起來像是實際金屬材質,左下角看起來像是陶瓷或塑膠。 albedo 色彩也會根據物理屬性而變更。 隨著粗糙度增加,材質會失去反射清晰度。
AOMap
和AOScale
:環境光遮蔽可藉由將陰影新增至遮蔽區域,讓有裂縫的物件看起來更逼真。 遮蔽值範圍從0.0
到1.0
,其中0.0
表示暗色 (遮蔽),1.0
表示沒有遮蔽。 如果 2D 紋理是以遮蔽貼圖的形式提供,則會啟用效果,而AOScale
會作為乘數。
轉換期間色彩材質覆寫
在模型轉換期間,可以透過材質覆寫檔案覆寫色彩材質屬性的子集。 下表顯示上述執行階段屬性與覆寫檔案中對應屬性名稱之間的對應:
材質屬性名稱 | 覆寫檔案中的屬性名稱 |
---|---|
PbrFlags.TransparentMaterial |
transparent |
PbrFlags.AlphaClipped |
alphaClipEnabled |
PbrFlags.UseVertexColor |
useVertexColor |
PbrFlags.DoubleSided |
isDoubleSided |
PbrFlags.TransparencyWritesDepth |
transparencyWritesDepth |
AlbedoColor |
albedoColor |
TexCoordScale |
textureCoordinateScale |
TexCoordOffset |
textureCoordinateOffset |
NormalmapScale |
normalMapScale |
Metalness |
metalness |
Roughness |
roughness |
AlphaClipThreshold |
alphaClipThreshold |
技術詳細資料
Azure 遠端轉譯會使用 Cook-Torrance 微面 (micro-facet) BRDF 搭配 GGX NDF、Schlick Fresnel 和 GGX Smith 相互關聯的可見度字詞與 Lambert 擴散字詞。 此模型目前是事實上的業界標準。 如需更深入的詳細資料,請參閱這篇文章:以物理為基礎的轉譯 - Cook Torrance
若要替代 Azure 遠端轉譯中使用的 Metalness-Roughness 模型,可使用 Specular-Glossiness PBR 模型。 此模型可以代表更廣泛的材質。 不過,成本較高,而且通常不適用於即時案例。 不一定都能夠從 Specular-Glossiness 轉換為 Metalness-Roughness,因為 (Diffuse, Specular) 值組無法轉換成 (BaseColor, Metalness)。 另一個方向的轉換更為簡單且更精確,因為所有 (BaseColor, Metalness) 組合都會對應到定義完善的 (Diffuse, Specular) 組合。
API 文件
- C# PbrMaterial 類別
- C# RenderingConnection.CreateMaterial()
- C++ PbrMaterial 類別
- C++ RenderingConnection::CreateMaterial()