Megosztás a következőn keresztül:


Anyagleképzés a modellformátumokhoz

Amikor egy forráseszközt modellként konvertál, a konverter minden hálóhoz létrehoz anyagokat. Az anyagok létrehozásának módja felülírható. Alapértelmezés szerint azonban az átalakítás PBR-anyagokat hoz létre. Mivel minden forrásfájlformátum, például az FBX, saját konvenciókat használ az anyagok meghatározásához, ezeket a konvenciókat le kell képezni az Azure Remote Rendering PBR-anyagparamétereihez.

Ez a cikk felsorolja azokat a pontos leképezéseket, amelyeket az anyagok forrásegységekből futtatókörnyezeti anyagokká alakításához használnak.

glTF

A glTF 2.0 specifikáció szinte minden elemét támogatja az Azure Remote Rendering, az EmissiveFactor és az EmissiveTexture kivételével.

Az alábbi táblázat a leképezést mutatja be:

glTF Azure Remote Rendering
baseColorFactor albedoColor
baseColorTexture albedoMap
metallicFactor fémesség
metallicTexture metalnessMap
roughnessFactor Érdesség
érdességTexture érdességtérkép
occlusionFactor Elzáródás
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 -

A glTF minden textúrája rendelkezhet értékkel texCoord , amelyet az Azure Remote Rendering-anyagok is támogatnak.

Beágyazott textúrák

A *.bin vagy *.glb fájlokba beágyazott textúrák támogatottak.

Támogatott glTF-bővítmény

Az alapfunkció-készlet mellett az Azure Remote Rendering a következő glTF-bővítményeket támogatja:

  • MSFT_packing_occlusionRoughnessMetallic
  • KHR_materials_unlit: Színanyagoknak felel meg. A megengedő anyagok esetében ajánlott ezt a bővítményt használni.
  • KHR_materials_pbrSpecularGlossiness: Fémes érdességű textúrák helyett diffúz-specular-glossiness textúrákat biztosíthat. Az Azure Remote Rendering implementációja közvetlenül követi a bővítmény konverziós képleteit.

FBX

Az FBX formátum zárt forráskódú, és az FBX-anyagok általában nem kompatibilisek a PBR-anyagokkal. Az FBX a felületek összetett leírását használja számos egyedi paraméterrel és tulajdonságokkal, és nem mindegyiket használja az Azure Remote Rendering folyamat.

Fontos

Az Azure Remote Rendering modellkonvertálási folyamata csak az FBX 2011-et és újabb verziót támogatja.

Az FBX formátum az anyagok konzervatív megközelítését határozza meg, a hivatalos FBX specifikációban csak két típus létezik:

  • Lambert - Nem gyakran használják már jó ideje, de továbbra is támogatott átalakítás Phong az átalakításkor.
  • Phong – Szinte minden anyag és a legtöbb tartalomeszköz ezt a típust használja.

A Phong modell pontosabb, és az FBX-anyagok egyetlen modellje. Az alábbiakban FBX-anyagnak nevezzük.

Maya két egyéni bővítményt használ az FBX-hez az anyag PBR- és Stingray-típusainak egyéni tulajdonságainak meghatározásával. Ezek a részletek nem szerepelnek az FBX-specifikációban, ezért az Azure Remote Rendering jelenleg nem támogatja.

Az FBX-anyagok a Diffúz-Specular-SpecularLevel koncepciót használják, így a diffúz anyagmintából albedo térképpé alakításához ki kell számítanunk a többi paramétert, hogy kivonjuk őket a diffúzból.

Az FBX-ben minden szín és anyag sRGB-térben (más néven Gamma-térben) található, de az Azure Remote Rendering lineáris térrel működik a vizualizáció során, és a keret végén mindent visszaalakít sRGB-térzé. Az Azure Remote Rendering objektumfolyamat mindent lineáris térzé alakít át, hogy előkészített adatokként küldje el azokat a renderelőnek.

Ez a táblázat bemutatja, hogyan vannak leképezve a textúrák az FBX-anyagoktól az Azure Remote Rendering-anyagokig. Néhányat közvetlenül nem használnak, de más, a képletekben részt vevő textúrákkal (például a diffúz anyagmintával) kombinálva:

FBX Azure Remote Rendering
AmbientColor Occlusion Map
Diffúziós szín albedo, metalness
Transzparensszín albedo alfa csatornához használatos
TransparencyFactor albedo alfa csatornához használatos
Opacitás albedo alfa csatornához használatos
SpecularColor Albedo, Metalness, Roughness
SpecularFactor Albedo, Metalness, Roughness
ShininessExponent Albedo, Metalness, Roughness
NormalMap NormalMap
Bump normalmap-ra konvertálva
EmissiveColor -
EmissiveFactor -
Önkifejezés ionColor -
DisplacementColor -

A fenti leképezés az anyagátalakítás legösszetettebb része, számos feltételezés miatt, amelyeket el kell készíteni. Ezeket a feltételezéseket az alábbiakban tárgyaljuk.

Az alábbiakban használt definíciók némelyike:

  • Specular = SpecularColor * SpecularFactor
  • SpecularIntensity = Specular. Piros ∗ 0,2125 + Specular. Zöld ∗ 0,7154 + Specular. Kék ∗ 0,0721
  • DiffuseBrightness = 0,299 * Diffuse. Piros2 + 0,587 * Diffuse. Zöld2 + 0,114 * Diffuse. Kék2
  • SpecularBrightness = 0,299 * Specular. Piros2 + 0,587 * Specular. Zöld2 + 0,114 * Specular. Kék2
  • SpecularStrength = max(Specular. Piros, Specular. Zöld, Specular. Kék)

A SpecularIntensity képlet innen származik. A fényerő képletét ebben a specifikációban ismertetjük.

Érdesség

Roughnessképletből Specular számítjuk ki és ShininessExponent használjuk. A képlet a Phong spekuláris kitevő érdességének közelítése:

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

Fémesség

Metalnessezt a képletet a glTF-specifikációból Diffuseszámítja ki és Specular használja.

Az elképzelés az, hogy megoldjuk az egyenletet: Ax2 + Bx + C = 0. Alapvetően a dielektromos felületek a fény körülbelül 4% -át tükrözik specular módon, a többi pedig diffúz. A fémes felületek diffúz módon nem tükrözik a fényt, de mind spekuláns módon. Ennek a képletnek van néhány hátránya, mivel nem lehet különbséget tenni a fényes műanyag és a fényes fémes felületek között. Feltételezzük, hogy a felület legtöbbször fémes tulajdonságokkal rendelkezik, ezért a fényes műanyag/gumi felületek nem feltétlenül a várt módon néznek ki.

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

Albedoaz , Specularés Metalnessa Diffuse.

A Fémesség szakaszban leírtak szerint a dielektromos felületek a fény körülbelül 4%-át tükrözik.
Itt az a cél, hogy lineárisan interpoláljuk a színeket és a színeket Dielectric az érték mint tényező használatávalMetalness.Metal Ha a fémesség, 0.0akkor a spekulánstól függően sötét színű lesz (ha a spekuláns magas), vagy a diffúz nem változik (ha nincs spekuláns). Ha a fémesség nagy érték, akkor a diffúz szín eltűnik a spekuláris szín javára.

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 a fenti képlet kiszámította, de az alfa csatornához több számításra van szükség. Az FBX formátum homályos az átláthatóságról, és számos módon definiálható. A különböző tartalomeszközök különböző módszereket használnak. Itt az a cél, hogy egyesítsük őket egy képletben. Néhány objektumot azonban helytelenül transzparensként jelenít meg, ha nem közösen jönnek létre.

Ezt a következőből TransparentColorTransparencyFactorOpacityszámítjuk ki:

ha Opacity definiálva van, akkor használja közvetlenül: AlbedoAlpha = Opacity más
ha TransparencyColor definiálva van, akkor AlbedoAlpha = 1,0 - ((TransparentColor.BlueTransparentColor.Red + TransparentColor.Green + ) / 3,0) egyéb
if TransparencyFactor, akkor AlbedoAlpha = 1,0 - TransparencyFactor

Az utolsó Albedo szín négy csatornával rendelkezik, és kombinálja a AlbedoRGB AlbedoAlpha.

Summary

Itt Albedo összefoglalva nagyon közel lesz az eredetihez Diffuse, ha Specular közel van a nullához. Ellenkező esetben a felület fémes felületnek fog kinézni, és elveszíti a diffúz színt. A felület polírozottabb és fényvisszaverőbb lesz, ha ShininessExponent elég nagy és Specular fényes. Ellenkező esetben a felület durva lesz, és alig tükrözi a környezetet.

Ismert problémák

  • Az aktuális képlet nem működik jól az egyszerű színes geometriához. Ha Specular elég fényes, akkor minden geometria szín nélkül reflektív fémfelületté válik. Ebben az esetben a kerülő megoldás az, hogy az eredetitől 30%-ra csökkenSpecular, vagy az fbxAssumeMetallic konverziós beállítást használja.
  • A közelmúltban PBR-anyagokat adtak hozzá a Maya 3DS Max tartalomkészítő eszközökhöz. Egyéni, felhasználó által definiált feketedoboz-tulajdonságokat használnak az FBX-nek való átadáshoz. Az Azure Remote Rendering nem olvassa be ezeket a tulajdonságokat, mert nincsenek dokumentálva, és a formátum zárt forráskódú.

Következő lépések