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.0721DiffuseBrightness
= 0,299 *Diffuse
. Červená2 + 0,587 *Diffuse
. Zelená2 + 0,114 *Diffuse
. Modrá2SpecularBrightness
= 0,299 *Specular
. Červená2 + 0,587 *Specular
. Zelená2 + 0,114 *Specular
. Modrá2SpecularStrength
= max(Specular
. Červená,Specular
. Zelená,Specular
. Modrá)
Zde je získán vzorec SpecularIntensity. Vzorec jasu je popsán v této specifikaci.
Drsnost
Roughness
se 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
Metalness
se 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
, Specular
a 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.0
kovotnost , 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
: TransparencyFactor
Opacity
pokud Opacity
je definováno, použijte ho přímo: AlbedoAlpha
= Opacity
pokud TransparencyColor
je definován, pak AlbedoAlpha
= 1,0 - ((TransparentColor.Blue
TransparentColor.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
AlbedoAlpha
s .
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ížitSpecular
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 a3DS 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ý.