Udostępnij za pośrednictwem


Mapowanie materiałów dla formatów modelu

Gdy zasób źródłowy jest konwertowany jako model, konwerter tworzy materiały dla każdej siatki. Sposób tworzenia materiałów można zastąpić. Jednak domyślnie konwersja tworzy materiały PBR. Ponieważ każdy format pliku źródłowego, taki jak FBX, używa własnych konwencji do definiowania materiałów, te konwencje muszą być mapowane na parametry materiału PBR usługi Azure Remote Rendering.

W tym artykule wymieniono dokładne mapowania używane do konwertowania materiałów z zasobów źródłowych na materiały uruchomieniowe.

glTF

Prawie wszystko, od specyfikacji glTF 2.0 jest obsługiwane w usłudze Azure Remote Rendering, z wyjątkiem EmissiveFactor i EmissiveTexture.

W poniższej tabeli przedstawiono mapowanie:

glTF Azure Remote Rendering
baseColorFactor albedoColor
baseColorTexture albedoMap
metalFactor metalowość
metalTexture metalnessMap
roughnessFactor Chropowatości
roughnessTexture roughnessMap
occlusionFactor Okluzji
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 -

Każda tekstura w pliku glTF może mieć texCoord wartość, która jest również obsługiwana w materiałach usługi Azure Remote Rendering.

Osadzone tekstury

Obsługiwane są tekstury osadzone w plikach *.bin lub *.glb .

Obsługiwane rozszerzenie glTF

Ponadto w podstawowym zestawie funkcji usługa Azure Remote Rendering obsługuje następujące rozszerzenia glTF:

  • MSFT_packing_occlusionRoughnessMetallic
  • KHR_materials_unlit: odpowiada materiałom kolorowym. W przypadku materiałów emisistycznych zaleca się użycie tego rozszerzenia.
  • KHR_materials_pbrSpecularGlossiness: Zamiast tekstur metalicznych szorstkości można zapewnić tekstury dyfuzyjno-błyszczące. Implementacja usługi Azure Remote Rendering bezpośrednio jest zgodna z formułami konwersji z rozszerzenia.

FBX

Format FBX jest zamknięty, a materiały FBX nie są ogólnie zgodne z materiałami PBR. FBX używa złożonego opisu powierzchni z wieloma unikatowymi parametrami i właściwościami, a nie wszystkie z nich są używane przez potok usługi Azure Remote Rendering.

Ważne

Potok konwersji modelu usługi Azure Remote Rendering obsługuje tylko oprogramowanie FBX 2011 i nowsze.

Format FBX definiuje konserwatywne podejście do materiałów, istnieją tylko dwa typy w oficjalnej specyfikacji FBX:

  • Lambert - Nie jest już używany przez sporo czasu, ale nadal jest obsługiwany przez konwersję na Stringi w czasie konwersji.
  • Phong - Prawie wszystkie materiały i większość narzędzi zawartości używają tego typu.

Model Phong jest dokładniejszy i jest używany jako jedyny model materiałów FBX. Poniżej będzie on określany jako materiał FBX.

Program Maya używa dwóch niestandardowych rozszerzeń dla FBX, definiując właściwości niestandardowe dla typów PBR i Stingray materiału. Te szczegóły nie są uwzględnione w specyfikacji FBX, więc obecnie nie są obsługiwane przez usługę Azure Remote Rendering.

Materiały FBX używają koncepcji Dyfuzor-Specular-SpecularLevel, więc w celu konwersji z tekstury rozproszonej na mapę albedo musimy obliczyć inne parametry, aby odjąć je od dyfuzoru.

Wszystkie kolory i tekstury w FBX znajdują się w przestrzeni sRGB (znanej również jako przestrzeń Gamma), ale usługa Azure Remote Rendering współpracuje z przestrzenią liniową podczas wizualizacji, a na końcu ramki konwertuje wszystko z powrotem na przestrzeń sRGB. Potok zasobu usługi Azure Remote Rendering konwertuje wszystko na przestrzeń liniową w celu wysłania go jako przygotowanych danych do modułu renderowania.

W tej tabeli pokazano, jak tekstury są mapowane z materiałów FBX do materiałów usługi Azure Remote Rendering. Niektóre z nich nie są bezpośrednio używane, ale w połączeniu z innymi teksturami uczestniczącymi w formułach (na przykład teksturą rozproszoną):

FBX Azure Remote Rendering
AmbientColor Mapa okluzji
Dyfuzorcolor używany dla Albedo, Metalness
TransparentColor używany do kanału alfa Albedo
TransparencyFactor używany do kanału alfa Albedo
Krycie używany do kanału alfa Albedo
SpecularColor używany do Albedo, Metalness, Chropowatość
SpecularFactor używany do Albedo, Metalness, Chropowatość
ShininessExponent używany do Albedo, Metalness, Chropowatość
NormalMap NormalMap
Bump przekonwertowany na NormalMap
EmissiveColor -
EmissiveFactor -
Emocje ionColor -
Kolor przesiedlenia -

Powyższe mapowanie jest najbardziej złożoną częścią konwersji materiału ze względu na wiele założeń, które należy wykonać. Poniżej omówiono te założenia.

Poniżej użyto niektórych definicji:

  • Specular = SpecularColor * SpecularFactor
  • SpecularIntensity = Specular. Czerwony ∗ 0.2125 + Specular. Zielony ∗ 0,7154 + Specular. Niebieski ∗ 0.0721
  • DiffuseBrightness = 0,299 * Diffuse. Czerwony2 + 0,587 * Diffuse. Zielony2 + 0,114 * Diffuse. Niebieski2
  • SpecularBrightness = 0,299 * Specular. Czerwony2 + 0,587 * Specular. Zielony2 + 0,114 * Specular. Niebieski2
  • SpecularStrength = max(Specular. Czerwony, Specular. Zielony, Specular. Niebieski)

Formuła specularIntensity jest uzyskiwana z tego miejsca. Formuła jasności została opisana w tej specyfikacji.

Chropowatości

Roughness jest obliczany na podstawie Specular tej formuły i ShininessExponent przy użyciu tej formuły. Formuła jest przybliżeniem szorstkości z wykładnika widmowego Phong:

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

Metalność

Metalness jest obliczany na podstawie Diffuse i Specular przy użyciu tej formuły ze specyfikacji glTF.

Chodzi o to, że rozwiązujemy równanie: Ax2 + Bx + C = 0. Zasadniczo powierzchnie dielektryczne odzwierciedlają około 4% światła w sposób widmowy, a reszta jest rozproszona. Powierzchnie metaliczne nie odzwierciedlają światła w sposób rozproszony, ale wszystko w sposób widmowy. Ta formuła ma kilka wad, ponieważ nie ma możliwości odróżnienia błyszczących tworzyw sztucznych i błyszczących powierzchni metalicznych. Zakładamy, że większość czasu powierzchnia ma właściwości metaliczne, a więc błyszczące powierzchnie z tworzyw sztucznych/gumowych mogą nie wyglądać zgodnie z oczekiwaniami.

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 program jest obliczany na podstawie Diffuseparametrów , Speculari Metalness.

Zgodnie z opisem w sekcji Metalness powierzchnie dielektryczne odzwierciedlają około 4% światła.
Chodzi o to, aby interpolować liniowo między kolorami Dielectric i Metal używając Metalness wartości jako czynnika. Jeśli metalność to 0.0, to w zależności od widma będzie to ciemny kolor (jeśli widmo jest wysoki) lub dyfuzor nie zmieni się (jeśli nie ma widma). Jeśli metalność jest dużą wartością, kolor rozproszony zniknie na rzecz koloru widmowego.

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 został obliczony przez formułę powyżej, ale kanał alfa wymaga większej liczby obliczeń. Format FBX jest niejasny na temat przejrzystości i ma wiele sposobów, aby go zdefiniować. Różne narzędzia zawartości używają różnych metod. Chodzi o to, aby zjednoczyć je w jedną formułę. Powoduje to, że niektóre zasoby są niepoprawnie renderowane jako przezroczyste, jeśli jednak nie są one tworzone w typowy sposób.

Jest to obliczane na podstawie TransparentColorwartości , , TransparencyFactorOpacity:

jeśli Opacity jest zdefiniowany, użyj go bezpośrednio: = AlbedoAlphaOpacity inne
jeśli TransparencyColor jest zdefiniowany, to AlbedoAlpha = 1.0 - ((TransparentColor.BlueTransparentColor.Red + TransparentColor.Green + ) / 3.0) inne
if TransparencyFactor, then AlbedoAlpha = 1.0 - TransparencyFactor

Albedo Końcowy kolor ma cztery kanały, łącząc AlbedoRGB element z elementem AlbedoAlpha.

Podsumowanie

Podsumowując tutaj, Albedo będzie bardzo blisko oryginalnego Diffuseelementu , jeśli Specular jest blisko zera. W przeciwnym razie powierzchnia będzie wyglądać jak metaliczne powierzchnie i traci rozproszony kolor. Powierzchnia będzie wyglądać bardziej polerowane i odbijające, jeśli ShininessExponent jest wystarczająco duża i Specular jest jasna. W przeciwnym razie powierzchnia będzie wyglądać szorstko i ledwo odzwierciedla środowisko.

Znane problemy

  • Bieżąca formuła nie działa dobrze w przypadku prostej geometrii kolorowej. Jeśli Specular jest wystarczająco jasny, wszystkie geometrie stają się odbijające metaliczne powierzchnie bez żadnego koloru. Obejściem w tym przypadku jest obniżenie Specular do 30% z oryginału lub użycie ustawienia konwersji fbxAssumeMetallic.
  • Materiały PBR zostały ostatnio dodane do narzędzi do Maya tworzenia zawartości i 3DS Max . Używają niestandardowych właściwości czarnej skrzynki zdefiniowanej przez użytkownika, aby przekazać je do FBX. Usługa Azure Remote Rendering nie odczytuje tych właściwości, ponieważ nie są udokumentowane, a format jest zamknięty.

Następne kroki