共用方式為


模型格式的資料對應

當來源資產 轉換成模型 時,轉換器會 為每個 網格 建立材質 。 建立材質的方式可以 寫。 不過,根據預設,轉換將會建立 PBR 材質 。 由於每個來源檔案格式,例如 FBX,都會使用自己的慣例來定義資料,因此這些慣例必須對應至 Azure 遠端轉譯 的 PBR 材質參數。

本文列出用來將材質從來源資產轉換為執行時間材質的確切對應。

glTF

除了 EmissiveFactor EmissiveTexture 之外, Azure 遠端轉譯支援 glTF 2.0 規格中的所有專案。

下表顯示對應:

glTF Azure 遠端轉譯
baseColorFactor albedoColor
baseColorTexture albedoMap
metallicFactor 金屬性
metallicTexture metalnessMap
roughnessFactor 粗糙 度
roughnessTexture 粗糙度Map
occlusionFactor 閉塞
occlusionTexture occlusionMap
normalTexture normalMap
normalTextureInfo.scale normalMapScale
AlphaCutoff AlphaClipThreshold
AlphaMode.OPAQUE AlphaClipEnabled = false,isTransparent = false
AlphaMode.MASK AlphaClipEnabled = true,isTransparent = false
AlphaMode.BLEND isTransparent = true
doubleSided isDoubleSided
emissiveFactor -
emissiveTexture -

glTF 中的每個紋理都可以有一個 texCoord 值,Azure 遠端轉譯材質也支援此值。

內嵌紋理

支援內嵌在 *.bin *.glb 檔案中的 紋理。

支援的 glTF 擴充功能

除了基底功能集外,Azure 遠端轉譯還支援下列 glTF 擴充功能:

  • MSFT_packing_occlusionRoughnessMetallic
  • KHR_materials_unlit:對應至 色彩材質 。 對於 Emissive 材料,建議使用此延伸模組。
  • KHR_materials_pbrSpecularGlossiness:您可以提供擴散反射光澤紋理,而不是金屬粗糙度紋理。 Azure 遠端轉譯實作會直接遵循延伸模組的轉換公式。

FBX

FBX 格式是封閉式來源,FBX 材質通常與 PBR 材質不相容。 FBX 使用具有許多唯一參數和屬性 之介面的複雜描述,而不是 Azure 遠端轉譯 管線 會使用這些介面。

重要

Azure 遠端轉譯模型轉換管線僅支援 FBX 2011 和更新版本

FBX 格式會定義材料保守的方法,官方 FBX 規格中只有兩種類型:

  • Lambert - 在轉換時,通常尚未使用相當長的時間,但在轉換時仍支援轉換成 Phong。
  • Phong - 幾乎所有的材料和大部分的內容工具都使用此類型。

Phong 模型更精確,它用作 FBX 材質的唯 模型。 以下稱為 FBX 材質

Maya 會定義材質 PBR 和 Stingray 類型的自訂屬性,以針對 FBX 使用兩個自訂延伸模組。 這些詳細資料不會包含在 FBX 規格中,因此 Azure 遠端轉譯目前不支援此詳細資料。

FBX 材質使用 Diffuse-Specular-SpecularLevel 概念,因此若要從擴散紋理轉換成 albedo 地圖,我們需要計算其他參數以從擴散減去它們。

FBX 中的所有色彩和紋理都位於 sRGB 空間中(也稱為 Gamma 空間),但 Azure 遠端轉譯在視覺效果期間使用線性空間,而且框架結尾會將所有專案轉換成 sRGB 空間。 Azure 遠端轉譯資產管線會將所有專案轉換成線性空間,以將備妥的資料傳送給轉譯器。

下表顯示紋理如何從 FBX 材質對應至 Azure 遠端轉譯材質。 其中有些不是直接使用,而是與其他參與公式的紋理結合在一起(例如擴散紋理):

FBX Azure 遠端轉譯
AmbientColor 遮蔽圖
DiffuseColor 用於 Albedo、金屬
TransparentColor 用於 Albedo 的 Alpha 色板
TransparencyFactor 用於 Albedo 的 Alpha 色板
不透明度 用於 Albedo 的 Alpha 色板
SpecularColor 用於 Albedo、金屬性、粗糙度
SpecularFactor 用於 Albedo、金屬性、粗糙度
ShininessExponent 用於 Albedo、金屬性、粗糙度
NormalMap NormalMap
已轉換為 NormalMap
EmissiveColor -
EmissiveFactor -
反思ionColor -
DisplacementColor -

上述對應是材料轉換中最複雜的部分,因為必須進行許多假設。 我們會在下面討論這些假設。

以下使用的一些定義:

  • Specular = SpecularColor * SpecularFactor
  • SpecularIntensity = Specular.紅色∗ 0.2125 + Specular 。綠色∗ 0.7154 + Specular 。Blue ∗ 0.0721
  • DiffuseBrightness = 0.299 * Diffuse 。紅色 2 + 0.587 * Diffuse 。綠色 2 + 0.114 * Diffuse 。藍色 2
  • SpecularBrightness = 0.299 * Specular 。紅色 2 + 0.587 * Specular 。綠色 2 + 0.114 * Specular 。藍色 2
  • SpecularStrength = max( Specular .紅色, Specular 。綠色、 Specular 。藍色)

SpecularIntensity 公式從這裡 取得。 此規格 說明亮度公式。

粗糙 度

Roughness是從 和 ShininessExponent 使用此 公式 來計算 Specular 。 公式是 Phong 反射指數的粗糙度近似值:

Roughness = sqrt(2 / (ShininessExponent * SpecularIntensity + 2))

金屬性

Metalness是從 glTF 規格使用這個 公式來計算。 Diffuse Specular

這裡的想法是,我們解決方程式:Ax 2 + Bx + C = 0。 基本上,表面以反射方式反射約4%的光線,其餘部分則是擴散。 金屬表面以擴散方式沒有光線反射,但全部以反射方式反射。 此公式有一些缺點,因為無法區分光澤塑膠和光澤金屬表面。 我們假設表面大部分時間都有金屬特性,因此光澤的塑膠/橡膠表面看起來可能不如預期。

dielectricSpecularReflectance = 0.04
oneMinusSpecularStrength = 1 - SpecularStrength

A = dielectricSpecularReflectance
B = (DiffuseBrightness * (oneMinusSpecularStrength / (1 - A)) + SpecularBrightness) - 2 * A
C = A - SpecularBrightness
squareRoot = sqrt(max(0.0, B * B - 4 * A * C))
value = (-B + squareRoot) / (2 * A)
Metalness = clamp(value, 0.0, 1.0);

反照 率

Albedo 是從 DiffuseSpecularMetalness 計算而來。

如金屬性一節所述,表面會反射約 4% 的光線。
這裡的想法是使用 Metalness 值作為因素,以線性方式插 Dielectric 補和 Metal 色彩。 如果金屬性為 0.0 ,則視反射而定,它可能是深色(如果反射很高),或者擴散不會改變(如果沒有反射存在)。 如果金屬是較大的值,則擴散色彩會消失,以偏向反射色彩。

dielectricSpecularReflectance = 0.04
oneMinusSpecularStrength = 1 - SpecularStrength

dielectricColor = diffuseColor * (oneMinusSpecularStrength / (1.0f - dielectricSpecularReflectance) / max(1e-4, 1.0 - metalness))
metalColor = (Specular - dielectricSpecularReflectance * (1.0 - metalness)) * (1.0 / max(1e-4, metalness))
albedoRawColor = lerpColors(dielectricColor, metalColor, metalness * metalness)
AlbedoRGB = clamp(albedoRawColor, 0.0, 1.0);

AlbedoRGB 已由上述公式計算,但 Alpha 色板需要更多計算。 FBX 格式對透明度含糊不清,而且有許多定義方式。 不同的內容工具使用不同的方法。 這裡的想法是將它們統一成一個公式。 不過,如果某些資產不是以一般方式建立,則會讓某些資產不正確地轉譯為透明。

這是從 TransparentColorTransparencyFactor Opacity 、 計算:

如果 Opacity 已定義,則直接使用它: AlbedoAlpha = Opacity
如果 TransparencyColor 已定義,則 AlbedoAlpha = 1.0 - (( TransparentColor.Blue TransparentColor.Red + TransparentColor.Green + ) / 3.0) else
如果 TransparencyFactor 為 ,則 AlbedoAlpha = 1.0 - TransparencyFactor

最終 Albedo 色彩有四個色板,結合 AlbedoRGBAlbedoAlpha

摘要

為了總結這裡,如果 接近零, Albedo 將會非常接近原始 Diffuse Specular 。 否則,表面看起來會像金屬表面,並失去擴散色彩。 如果 ShininessExponent 足夠大且明亮,表面看起來會更加拋光和 Specular 反射。 否則,表面看起來會很粗糙,而且幾乎沒有反映環境。

已知問題

  • 目前公式不適用於簡單的彩色幾何。 如果 Specular 足夠明亮,則所有幾何都會變成反射金屬表面,沒有任何顏色。 在此情況下,因應措施是從原始版本降低 Specular 到 30%,或使用轉換設定 fbxAssumeMetallic
  • PBR 資料最近已新增至 Maya 內容 3DS Max 建立工具。 他們會使用自訂使用者定義黑箱屬性將它傳遞至 FBX。 Azure 遠端轉譯不會讀取這些屬性,因為它們並未記載,而且格式為封閉式來源。

下一步