モデル形式の素材マッピングMaterial mapping for model formats

ソース資産がモデルとして変換されると、コンバーターによってメッシュごとに素材が作成されます。When a source asset is converted as a model, the converter creates materials for each mesh. 素材の作成方法は、オーバーライドできます。The way materials are created can be overridden. しかし、既定では、変換によって PBR 素材が作成されます。However by default the conversion will create PBR materials. FBX のようなソース ファイル形式ではすべて、素材を定義するために独自の規則が使用されるため、それらの規則を Azure Remote Rendering の PBR 素材パラメーターにマップする必要があります。Since every source file format, like FBX, uses its own conventions to define materials, those conventions must be mapped to the PBR material parameters of Azure Remote Rendering.

この記事では、ソース資産の素材を実行時の素材に変換するために使用される正確なマッピングを一覧表示します。This article lists the exact mappings used to convert materials from source assets to runtime materials.

glTFglTF

glTF 2.0 仕様のほぼすべてのものは、EmissiveFactorEmissiveTexture を除き、Azure Remote Rendering でサポートされています。Almost everything from the glTF 2.0 spec is supported in Azure Remote Rendering, except EmissiveFactor and EmissiveTexture.

そのマッピングを次の表に示します。The following table shows the mapping:

glTFglTF Azure Remote RenderingAzure Remote Rendering
baseColorFactorbaseColorFactor albedoColoralbedoColor
baseColorTexturebaseColorTexture albedoMapalbedoMap
metallicFactormetallicFactor metalnessmetalness
metallicTexturemetallicTexture metalnessMapmetalnessMap
roughnessFactorroughnessFactor roughnessroughness
roughnessTextureroughnessTexture roughnessMaproughnessMap
occlusionFactorocclusionFactor occlusionocclusion
occlusionTextureocclusionTexture occlusionMapocclusionMap
normalTexturenormalTexture normalMapnormalMap
alphaCutoffalphaCutoff alphaClipThresholdalphaClipThreshold
alphaMode.OPAQUEalphaMode.OPAQUE alphaClipEnabled = false、isTransparent = falsealphaClipEnabled = false, isTransparent = false
alphaMode.MASKalphaMode.MASK alphaClipEnabled = true、isTransparent = falsealphaClipEnabled = true, isTransparent = false
alphaMode.BLENDalphaMode.BLEND isTransparent = trueisTransparent = true
doubleSideddoubleSided isDoubleSidedisDoubleSided
emissiveFactoremissiveFactor -
emissiveTextureemissiveTexture -

glTF の各テクスチャには texCoord 値を指定することができます。これは、Azure Remote Rendering の素材でもサポートされます。Each texture in glTF can have a texCoord value, which is also supported in the Azure Remote Rendering materials.

埋め込みテクスチャEmbedded textures

*.bin または *.glb ファイルに埋め込まれているテクスチャがサポートされます。Textures embedded in *.bin or *.glb files are supported.

サポートされている glTF の拡張機能Supported glTF extension

基本機能セットに加え、Azure Remote Rendering では次の glTF 拡張機能がサポートされます。Additionally to the base feature set, Azure Remote Rendering supports the following glTF extensions:

FBXFBX

FBX 形式はクローズドソースであり、FBX 素材は一般に PBR 素材と互換性がありません。The FBX format is closed-source and FBX materials are not compatible with PBR materials in general. FBX では、一意のパラメーターとプロパティを多く用いた表面の複雑な説明が使用されます。Azure Remote Rendering パイプラインでは、これらのすべてが使用されるわけではありませんFBX uses a complex description of surfaces with many unique parameters and properties and not all of them are used by the Azure Remote Rendering pipeline.

重要

Azure Remote Rendering モデル変換パイプラインでサポートされるのは、FBX 2011 以降のみです。The Azure Remote Rendering model conversion pipeline only supports FBX 2011 and higher.

FBX 形式では、素材の保守的なアプローチが定義されます。公式の FBX 仕様には次の 2 種類しかありません。The FBX format defines a conservative approach for materials, there are only two types in the official FBX specification:

  • Lambert - 既にかなり長い間一般的に使用されていませんが、変換時に Phong に変換することでまだサポートされています。Lambert - Not commonly used for quite some time already, but it is still supported by converting to Phong at conversion time.
  • Phong - ほとんどすべての素材とほとんどのコンテンツ ツールで、この種類が使用されます。Phong - Almost all materials and most content tools use this type.

この Phong モデルの方が正確であり、FBX 素材の "唯一" のモデルとして使用されます。The Phong model is more accurate and it is used as the only model for FBX materials. 以下、"FBX 素材" と呼びます。Below it will be referred as the FBX Material.

Maya では、PBR および Stingray という種類の素材に対してカスタム プロパティを定義することで、FBX で 2 つのカスタム拡張機能が使用されます。Maya uses two custom extensions for FBX by defining custom properties for PBR and Stingray types of a material. これらの詳細は FBX 仕様には含まれていないため、現在、Azure Remote Rendering ではサポートされていません。These details are not included in the FBX specification, so it's not supported by Azure Remote Rendering currently.

FBX 素材では Diffuse-Specular-SpecularLevel 概念が使用されます。したがって、拡散テクスチャから albedo マップに変換するには、拡散から減算するために他のパラメーターを計算する必要があります。FBX Materials use the Diffuse-Specular-SpecularLevel concept, so to convert from a diffuse texture to an albedo map we need to calculate the other parameters to subtract them from diffuse.

FBX のすべての色とテクスチャは、sRGB 空間 (ガンマ空間ともいう) にありますが、Azure Remote Rendering は視覚化時に線形空間で動作し、フレームの最後にすべてのものが sRGB 空間に戻されます。All colors and textures in FBX are in sRGB space (also known as Gamma space) but Azure Remote Rendering works with linear space during visualization and at the end of the frame converts everything back to sRGB space. Azure Remote Rendering 資産パイプラインでは、すべてを線形空間に変換し、準備されたデータとしてレンダラーに送信します。The Azure Remote Rendering asset pipeline converts everything to linear space to send it as prepared data to the renderer.

次の表には、テクスチャが FBX 素材から Azure Remote Rendering 素材にどのようにマップされるかが示されています。This table shows how textures are mapped from FBX Materials to Azure Remote Rendering materials. これらの一部は直接使用されませんが、式に関与する他のテクスチャ (拡散テクスチャなど) と組み合わせて使用されます。Some of them are not directly used but in combination with other textures participating in the formulas (for instance the diffuse texture):

FBXFBX Azure Remote RenderingAzure Remote Rendering
AmbientColorAmbientColor オクルージョン マップOcclusion Map
DiffuseColorDiffuseColor Albedo、Metalness に使用used for Albedo, Metalness
TransparentColorTransparentColor Albedo のアルファ チャネルに使用used for alpha channel of Albedo
TransparencyFactorTransparencyFactor Albedo のアルファ チャネルに使用used for alpha channel of Albedo
OpacityOpacity Albedo のアルファ チャネルに使用used for alpha channel of Albedo
SpecularColorSpecularColor Albedo、Metalness、Roughness に使用used for Albedo, Metalness, Roughness
SpecularFactorSpecularFactor Albedo、Metalness、Roughness に使用used for Albedo, Metalness, Roughness
ShininessExponentShininessExponent Albedo、Metalness、Roughness に使用used for Albedo, Metalness, Roughness
NormalMapNormalMap NormalMapNormalMap
BumpBump NormalMap に変換converted to NormalMap
EmissiveColorEmissiveColor -
EmissiveFactorEmissiveFactor -
ReflectionColorReflectionColor -
DisplacementColorDisplacementColor -

上記のマッピングは、多くの想定が必要であるため、素材変換の最も複雑な部分です。The mapping above is the most complex part of the material conversion, due to many assumptions that have to be made. 以下では、これらの想定について説明します。We discuss these assumptions below.

以下のいくつかの定義が使用されます。Some definitions used below:

  • Specular = SpecularColor * SpecularFactor
  • SpecularIntensity = Specular.Red ∗ 0.2125 + Specular.Green ∗ 0.7154 + Specular.Blue ∗ 0.0721SpecularIntensity = Specular.Red ∗ 0.2125 + Specular.Green ∗ 0.7154 + Specular.Blue ∗ 0.0721
  • DiffuseBrightness = 0.299 * Diffuse.Red2 + 0.587 * Diffuse.Green2 + 0.114 * Diffuse.Blue2DiffuseBrightness = 0.299 * Diffuse.Red2 + 0.587 * Diffuse.Green2 + 0.114 * Diffuse.Blue2
  • SpecularBrightness = 0.299 * Specular.Red2 + 0.587 * Specular.Green2 + 0.114 * Specular.Blue2SpecularBrightness = 0.299 * Specular.Red2 + 0.587 * Specular.Green2 + 0.114 * Specular.Blue2
  • SpecularStrength = max(Specular.Red, Specular.Green, Specular.Blue)SpecularStrength = max(Specular.Red, Specular.Green, Specular.Blue)

SpecularIntensity 式は、ここから取得したものです。The SpecularIntensity formula is obtained from here. 明るさの式については、この仕様で説明されています。The brightness formula is described in this specification.

RoughnessRoughness

Roughness は、この数式を使用して、SpecularShininessExponent から計算されます。Roughness is calculated from Specular and ShininessExponent using this formula. この数式は、Phong 反射指数からの粗さの近似値です。The formula is an approximation of roughness from the Phong specular exponent:

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

MetalnessMetalness

Metalness は、この glTF 仕様の式を使用して、DiffuseSpecular から計算されます。Metalness is calculated from Diffuse and Specular using this formula from the glTF specification.

ここでの考え方は、次の式を解くことです: Ax2 + Bx + C = 0。The idea here is that we solve the equation: Ax2 + Bx + C = 0. 基本的に、誘電体表面では、反射方向に約 4% の光を反射し、残りは拡散となります。Basically, dielectric surfaces reflect around 4% of light in a specular way, and the rest is diffuse. 金属表面では拡散方向に光を反射しませんが、すべて反射方向に反射します。Metallic surfaces reflect no light in a diffuse way, but all in a specular way. この数式にはいくつかの欠点があります。光沢のあるプラスチックと光沢のある金属の表面を区別する方法がないためです。This formula has a few drawbacks, because there is no way to distinguish between glossy plastic and glossy metallic surfaces. ほとんどの場合、表面には金属プロパティがあり、その結果、光沢のあるプラスチックやゴムの表面は予期したとおりに見えない場合があると想定しています。We assume most of the time the surface has metallic properties, and consequently glossy plastic/rubber surfaces may not look as expected.

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);

AlbedoAlbedo

Albedo は、DiffuseSpecular、および Metalness から計算されます。Albedo is computed from Diffuse, Specular, and Metalness.

「Metalness」セクションで説明したように、誘電体表面では約 4% の光を反射します。As described in the Metalness section, dielectric surfaces reflect around 4% of light.
ここでの考え方は、Metalness 値を因子として使用し、DielectricMetal の色の間を線形補間することです。The idea here is to linearly interpolate between Dielectric and Metal colors using Metalness value as a factor. metalness が 0.0 の場合、反射に応じて、濃い色になるか (反射が高い場合)、拡散が変化しません (反射がない場合)。If metalness is 0.0, then depending on specular it will be either a dark color (if specular is high) or diffuse will not change (if no specular is present). metalness が大きな値の場合、反射色が優先されるため、拡散色は消えます。If metalness is a large value, then the diffuse color will disappear in favor of specular color.

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 は、上記の数式で計算されていますが、アルファ チャネルには追加の計算が必要です。AlbedoRGB has been computed by the formula above, but the alpha channel requires additional computations. FBX 形式は透明度についてはあいまいであり、多くの定義方法があります。The FBX format is vague about transparency and has many ways to define it. コンテンツ ツールによって、使用する方法が異なります。Different content tools use different methods. ここでの考え方は、1 つの数式に統合することです。The idea here is to unify them into one formula. 一般的な方法で作成されていない場合でも、一部の資産が誤って透明として表示されるようになります。It makes some assets incorrectly shown as transparent, though, if they are not created in a common way.

これは TransparentColorTransparencyFactorOpacity から計算されます。This is computed from TransparentColor, TransparencyFactor, Opacity:

Opacity が定義されている場合、AlbedoAlpha = Opacity を直接使用します。または、if Opacity is defined, then use it directly: AlbedoAlpha = Opacity else
TransparencyColor が定義されている場合は、AlbedoAlpha = 1.0 - ((TransparentColor.Red + TransparentColor.Green + TransparentColor.Blue) / 3.0)。あるいは、if TransparencyColor is defined, then AlbedoAlpha = 1.0 - ((TransparentColor.Red + TransparentColor.Green + TransparentColor.Blue) / 3.0) else
TransparencyFactor の場合は、AlbedoAlpha = 1.0 - TransparencyFactorif TransparencyFactor, then AlbedoAlpha = 1.0 - TransparencyFactor

最終的な Albedo の色のチャネルは 4 つとなり、AlbedoRGBAlbedoAlpha が組み合わされます。The final Albedo color has four channels, combining the AlbedoRGB with the AlbedoAlpha.

まとめSummary

まとめると、Specular がゼロに近い場合、Albedo は元の Diffuse に非常に近くなります。To summarize here, Albedo will be very close to the original Diffuse, if Specular is close to zero. それ以外の場合、表面は金属表面のように見え、拡散色は失われます。Otherwise the surface will look like a metallic surface and loses the diffuse color. ShininessExponent が十分に大きく、Specular が明るい場合、表面はより滑らかに見え、反射性が増します。The surface will look more polished and reflective if ShininessExponent is large enough and Specular is bright. それ以外の場合、表面は粗く見え、環境をほとんど反射しません。Otherwise the surface will look rough and barely reflect the environment.

既知の問題Known issues

  • 現在の数式は、シンプルな色付きジオメトリに対しては適切に機能しません。The current formula does not work well for simple colored geometry. Specular が十分明るい場合、すべてのジオメトリが色なしの反射する金属表面になります。If Specular is bright enough, then all geometries become reflective metallic surfaces without any color. これを回避するには、Specular を元のものから 30% に下げるか、変換設定の fbxAssumeMetallic を使用します。The workaround here is to lower Specular to 30% from the original or to use the conversion setting fbxAssumeMetallic.
  • Maya および 3DS Max のコンテンツ作成ツールには、最近、PBR 素材が追加されました。PBR materials were recently added to Maya and 3DS Max content creation tools. ユーザー定義のカスタム ブラックボックス プロパティを使用して、FBX に渡されます。They use custom user-defined black-box properties to pass it to FBX. Azure Remote Rendering ではこれらの追加のプロパティが読み取られません。これらはドキュメント化されておらず、形式がクローズドソースであるためです。Azure Remote Rendering does not read those additional properties because they are not documented and the format is closed-source.

次のステップNext steps