共用方式為


PBR 材質

PBR 材質是其中一種 Azure 遠端轉譯中支援的材質類型。 用於應該接收實際光源的三角形網格。 另一方面,點雲不會受到動態光源的影響。

PBR 代表 Physically Based Rendering (以物理為基礎的轉譯),表示材質會以實際可行的方式描述表面的視覺屬性,如此一來,在所有光源條件下都可能得到逼真的結果。 大部分的新式遊戲引擎和內容建立工具都支援 PBR 材質,因為其被視為即時轉譯中最佳的現實情境近似值。

ARR 所轉譯的頭盔 glTF 範例模型

物理轉譯的核心概念是使用 BaseColorMetalnessRoughness 屬性來模擬各種現實材質。 PBR 的詳細描述已超出本文範圍。 如需 PBR 的詳細資訊,請參閱其他來源

不過,PBR 材質不是通用解決方案。 根據檢視角度,有些材質會以不同的方式反射色彩。 例如,某些織物或汽車彩繪。 這些種類的材質無法由標準 PBR 模型處理,Azure 遠端轉譯目前也不支援。 此限制包括 PBR 延伸項目,例如薄膜 (多層表面) 和清漆 (用於汽車彩繪)。

PBR 材質屬性

下列材質屬性會在執行階段 API 中公開,例如,分別在 C# PbrMaterial 類別C++ PbrMaterial 類別 上。

  • PbrFlags:雜項功能旗標可在此位元遮罩中合併,以啟用下列功能:

    • TransparentMaterial:針對 PBR 材質,只有一個透明度設定:已啟用或未啟用。 不透明度是由 albedo 色彩的 Alpha 色板所定義。 啟用時,就會叫用更複雜的轉譯方法來繪製半透明表面。 Azure 遠端轉譯會實作真正的無關順序透明度 (OIT)。 透明幾何的轉譯成本很高。 如果您只需要表面有幾個洞 (例如樹葉),最好改用 Alpha 裁剪。

    以零到完全透明度轉譯的球體 請注意,上圖中最右邊的球體雖然幾乎完全透明,但反射仍然可見。

    重要

    如果任何材質應該在執行階段從不透明切換為透明,則轉譯器必須使用 TileBasedComposition 轉譯模式。 此限制不適用於轉換成透明材質來開始的材質。

    • UseVertexColor:如果網格包含 vertex 色彩且已啟用此選項,網格的 vertex 色彩會相乘為 AlbedoColorAlbedoMap。 根據預設,會停用 UseVertexColor
    • DoubleSided:如果雙面設為 true,則即使攝影機面向其背面,也會轉譯具有此材質的三角形。 針對 PBR 材質,背面光源也可正確計算。 預設會停用此選項。 請參閱 Single-sided rendering
    • SpecularHighlights:啟用此材質的鏡面反射高光。 根據預設,會啟用 SpecularHighlights 旗標。
    • AlphaClipped:根據低於 AlphaClipThreshold 值的 alpha 值,在每個像素基礎上啟用硬式剪切 (請參閱下文)。 這也適用於不透明的材質。
    • FresnelEffect:此材質旗標會啟用個別材質的加法 Fresnel 效果。 效果的外觀是由其他 Fresnel 參數 FresnelEffectColorFresnelEffectExponent 控管,這兩個參數會在下面加以說明。
    • TransparencyWritesDepth:如果在材質上設定 TransparencyWritesDepth 旗標且材質為透明,則使用此材質的物件也會包含於最終深度緩衝區。 請參閱下一節中的 PBR 材質旗標:透明。 如果您的使用案例需要更合理完全透明場景的後期重新投影,建議您啟用此功能。 對於混合不透明/透明場景,此設定可能會導致不合理的重新投影行為或重新投影成品。 基於此原因,停用此旗標是一般使用案例的預設和建議設定。 寫入的深度值會取自最靠近攝影機物件的每個像素深度層。
  • AlbedoColor:此色彩會與其他色彩相乘,例如 AlbedoMapvertex 色彩。 如果在材質上啟用透明度,Alpha 色板會用來以調整不透明度,1 表示完全不透明和 0 表示完全透明。 預設反照率色彩是不透明的白色。

    注意

    當 PBR 材質完全透明時 (就像是完全乾淨的玻璃表面一樣),其仍然會反射環境。 像是太陽之類的亮點仍會顯示在反射中。 這與色彩材質不同。

  • AlbedoMap:每個像素反照率值的 2D 紋理

  • AlphaClipThreshold:如果在 PbrFlags 屬性上設定 AlphaClipped 旗標,則不會繪製反照率 Alpha 值低於 AlphaClipThreshold 的所有像素。 即使未啟用透明度,也可使用 Alpha 裁剪,而且轉譯速度會更快。 然而,Alpha 裁剪材質的轉譯速度仍會比完全不透明材質還慢。 預設會停用 Alpha 裁剪。

  • TexCoordScaleTexCoordOffset :比例會相乘為 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 的值會誇大法線貼圖擾動。

  • RoughnessRoughnessMap:粗糙度會定義表面的粗糙或平滑程度。 粗糙表面會將光線分散到比平滑表面更多的方向,讓反射變得模糊,而不是清晰。 值的範圍從 0.01.0Roughness 等於 0.0 時,反射會變清晰。 Roughness 等於 0.5 時,反射會變模糊。 如果同時提供 roughness 值和 roughness map,最終值將會是兩者的乘積。

  • MetalnessMetalnessMap:在物理學中,此屬性會對應到導電性或非導電性的表面。 導電材質具有不同的反射屬性,而且通常在沒有 albedo 色彩的情況下反射。 在 PBR 材質中,此屬性會影響表面反射周圍環境的程度。 值的範圍是從 0.01.0。 當 metalness 為 0.0 時,反照率色彩會完全可見,而且材質看起來像是塑膠或陶瓷。 當 metalness 為 0.5 時,看起來會像是彩繪金屬。 當 metalness 為 1.0 時,表面幾乎完全失去其反照率色彩,只會反射周圍環境。 例如,如果 metalness1.0,且 roughness0.0,則表面看起來會像是現實的鏡子。 如果同時提供 metalness 值和 metalness map,最終值將會是兩者的乘積。

    以不同 metalness 和 roughness 值呈現的球體

    在上圖中,右下角的球體看起來像是實際金屬材質,左下角看起來像是陶瓷或塑膠。 albedo 色彩也會根據物理屬性而變更。 隨著粗糙度增加,材質會失去反射清晰度。

  • AOMapAOScale環境光遮蔽可藉由將陰影新增至遮蔽區域,讓有裂縫的物件看起來更逼真。 遮蔽值範圍從 0.01.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 文件

下一步