Sdílet prostřednictvím


Mapování materiálu pro formáty modelů

Při převodu zdrojového prostředku jako modelu převaděč vytvoří materiály pro každou síť. Způsob vytváření materiálů lze přepsat. Ve výchozím nastavení však převod vytvoří materiály PBR. Vzhledem k tomu, že každý formát zdrojového souboru, jako je FBX, používá k definování materiálů vlastní konvence, musí být tyto konvence mapovány na parametry materiálu PBR služby Azure Remote Rendering.

Tento článek uvádí přesné mapování použité k převodu materiálů ze zdrojových prostředků na materiály modulu runtime.

glTF

Téměř vše od specifikace glTF 2.0 je podporováno ve službě Azure Remote Rendering s výjimkou EmissiveFactor a EmissiveTexture.

Následující tabulka ukazuje mapování:

glTF Azure Remote Rendering
baseColorFactor albedoColor
baseColorTexture albedoMap
metalFactor kovy
metalTexture metalnessMap
hrubostFactor Drsnost
hrubostTexture hrubostMap
occlusionFactor Okluze
OkluzeTexture Okluzní mapa
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 -

Každá textura v glTF může mít texCoord hodnotu, která je podporována také v materiálech Azure Remote Rendering.

Vložené textury

Podporují se textury vložené do souborů *.bin nebo *.glb .

Podporované rozšíření glTF

Kromě základní sady funkcí podporuje Azure Remote Rendering následující rozšíření glTF:

  • MSFT_packing_occlusionRoughnessMetallic
  • KHR_materials_unlit: Odpovídá barevným materiálům. Pro emissivní materiály se doporučuje použít toto rozšíření.
  • KHR_materials_pbrSpecularGlossiness: Místo textur kovových drsností můžete poskytnout difuzní specifika lesklé textury. Implementace Služby Azure Remote Rendering se přímo řídí vzorci převodu z rozšíření.

FBX

Formát FBX je uzavřený zdroj a materiály FBX nejsou obecně kompatibilní s materiály PBR. FBX používá komplexní popis povrchů s mnoha jedinečnými parametry a vlastnostmi, a ne všechny z nich jsou používány kanálem Azure Remote Rendering.

Důležité

Kanál převodu modelu Azure Remote Rendering podporuje pouze FBX 2011 a vyšší.

Formát FBX definuje konzervativní přístup k materiálům, existují pouze dva typy v oficiální specifikaci FBX:

  • Lambert – zatím se běžně nepoužívá, ale stále je podporován převodem na Phong v době převodu.
  • Phong - Téměř všechny materiály a většina nástrojů obsahu tento typ používají.

Model Phong je přesnější a používá se jako jediný model pro materiály FBX. Pod ním se bude označovat jako materiál FBX.

Maya používá dvě vlastní rozšíření pro FBX definováním vlastních vlastností pro PBR a Stingray typy materiálu. Tyto podrobnosti nejsou součástí specifikace FBX, takže azure Remote Rendering v současné době nepodporuje.

FBX Materiály používají koncept Difuzor-Specular-SpecularLevel, takže pro převod z difuzní textury na albedo mapu potřebujeme vypočítat ostatní parametry, aby se odečítaly od difuzní.

Všechny barvy a textury v FBX jsou v prostoru sRGB (označované také jako gama mezery), ale Azure Remote Rendering pracuje s lineárním prostorem během vizualizace a na konci rámce převede všechno zpět na prostor sRGB. Kanál assetu Azure Remote Rendering převede vše na lineární prostor a odešle ho jako připravená data do rendereru.

Tato tabulka ukazuje, jak se textury mapují z materiálů FBX na materiály Azure Remote Rendering. Některé z nich se přímo nepoužívají, ale v kombinaci s jinými texturami, které se účastní vzorců (například difuzní textura):

FBX Azure Remote Rendering
AmbientColor Mapa okluze
Difúzní barva používané pro Albedo, Metalness
Průhledná barva používá se pro alfa kanál Albedo
TransparencyFactor používá se pro alfa kanál Albedo
Krytí používá se pro alfa kanál Albedo
SpecularColor používané pro Albedo, Kovo, Hrubost
SpecularFactor používané pro Albedo, Kovo, Hrubost
ShininessExponent používané pro Albedo, Kovo, Hrubost
NormalMap NormalMap
Narazit převedeno na NormalMap
EmissiveColor -
EmissiveFactor -
Reflexe ionColor -
PřemísťováníColor -

Výše uvedené mapování je nejsložitější částí převodu materiálu, a to z důvodu mnoha předpokladů, které je třeba provést. Tyto předpoklady probereme níže.

Některé definice se používají níže:

  • Specular = SpecularColor * SpecularFactor
  • SpecularIntensity = Specular. Červená ∗ 0,2125 + Specular. Zelená ∗ 0,7154 + Specular. Modrá ∗ 0.0721
  • DiffuseBrightness = 0,299 * Diffuse. Červená2 + 0,587 * Diffuse. Zelená2 + 0,114 * Diffuse. Modrá2
  • SpecularBrightness = 0,299 * Specular. Červená2 + 0,587 * Specular. Zelená2 + 0,114 * Specular. Modrá2
  • SpecularStrength = max(Specular. Červená, Specular. Zelená, Specular. Modrá)

Zde je získán vzorec SpecularIntensity. Vzorec jasu je popsán v této specifikaci.

Drsnost

Roughnessse vypočítá z Specular tohoto vzorce a ShininessExponent použije ho. Vzorec je aproximace hrubosti z exponentu Phong:

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

Kovotnost

Metalnessse vypočítá z Diffuse a použije tento vzorec ze specifikace glTFSpecular.

Představa je, že rovnici řešíme: Ax2 + Bx + C = 0. V podstatě se dielektrické plochy odrážejí kolem 4% světla specularním způsobem a zbytek je difuzní. Kovové povrchy neodráží žádné světlo difuzním způsobem, ale všechny specularním způsobem. Tento vzorec má několik nevýhod, protože neexistuje způsob, jak rozlišovat mezi lesklým plastovým a lesklým kovovým povrchem. Předpokládáme, že většina času má povrch kovové vlastnosti, takže lesklé plastové/gumové povrchy nemusí vypadat podle očekávání.

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

Albedo se vypočítá z Diffuse, Speculara Metalness.

Jak je popsáno v části Metalness, dielektrické povrchy odrážejí kolem 4% světla.
Myšlenkou je lineární interpolace mezi Dielectric barvami a mezi barvami Metal pomocí Metalness hodnoty jako faktoru. Pokud je 0.0kovotnost , pak v závislosti na specifika bude buď tmavá barva (pokud je specular vysoká) nebo difuzní nezmění (pokud není k dispozici žádný specifika). Pokud je kovotnost velká hodnota, pak difuzní barva zmizí ve prospěch specifikární barvy.

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 byl vypočítána výše uvedeným vzorcem, ale alfa kanál vyžaduje více výpočtů. Formát FBX je nejasný o transparentnosti a má mnoho způsobů, jak ho definovat. Různé nástroje obsahu používají různé metody. Myšlenkou je sjednocení do jednoho vzorce. Některé prostředky se ale nesprávně vykreslují jako průhledné, pokud se nevytvořily běžným způsobem.

Vypočítá se z TransparentColor: TransparencyFactorOpacity

pokud Opacity je definováno, použijte ho přímo: AlbedoAlpha = Opacity
pokud TransparencyColor je definován, pak AlbedoAlpha = 1,0 - ((TransparentColor.BlueTransparentColor.Red + TransparentColor.Green + ) / 3,0) else
pokud TransparencyFactor, pak AlbedoAlpha = 1,0 - TransparencyFactor

Konečná Albedo barva má čtyři kanály, které kombinují AlbedoRGB AlbedoAlphas .

Shrnutí

Chcete-li se zde shrnout, Albedo bude velmi blízko původní Diffuse, pokud Specular je blízko nuly. V opačném případě bude povrch vypadat jako kovový povrch a ztratí difuzní barvu. Povrch bude vypadat leštěněji a reflexe, pokud ShininessExponent je dostatečně velký a Specular je jasný. V opačném případě bude povrch vypadat drsně a sotva odráží prostředí.

Známé problémy

  • Aktuální vzorec nefunguje dobře pro jednoduchou barevnou geometrii. Pokud Specular je dostatečně jasné, všechny geometrie se stanou reflexními kovovými povrchy bez jakékoli barvy. Alternativním řešením v tomto případě je snížit Specular na 30 % z původního nastavení nebo použít nastavení převodu fbxAssumeMetallic.
  • Materiály PBR byly nedávno přidány do nástrojů pro Maya vytváření obsahu a 3DS Max vytváření obsahu. K předání do FBX používají vlastní vlastnosti černého rámečku definované uživatelem. Azure Remote Rendering tyto vlastnosti nečte, protože nejsou zdokumentované a formát je uzavřený.

Další kroky