Condividi tramite


Mapping del materiale per i formati di modello

Quando un asset di origine viene convertito come modello, il convertitore crea materiali per ogni mesh. Il modo in cui vengono creati i materiali può essere sottoposto a override. Tuttavia, per impostazione predefinita, la conversione creerà materiali PBR. Poiché ogni formato di file di origine, come FBX, usa le proprie convenzioni per definire i materiali, tali convenzioni devono essere mappate ai parametri del materiale PBR di Azure Rendering remoto.

Questo articolo elenca i mapping esatti usati per convertire i materiali dagli asset di origine ai materiali di runtime.

glTF

Quasi tutti gli elementi della specifica glTF 2.0 sono supportati in Azure Rendering remoto, ad eccezione di EmissiveFactor e EmissiveTexture.

La tabella seguente illustra il mapping:

glTF Rendering remoto di Azure
baseColorFactor albedoColor
baseColorTexture albedoMap
metallicFactor metalness
metallicTexture metalnessMap
roughnessFactor Rugosità
rugositàTexture roughnessMap
occlusionFactor Occlusione
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 -

Ogni trama in glTF può avere un texCoord valore, supportato anche nei materiali Rendering remoto di Azure.

Trame incorporate

Le trame incorporate nei file *.bin o *.glb sono supportate.

Estensione glTF supportata

Inoltre, al set di funzionalità di base, Azure Rendering remoto supporta le estensioni glTF seguenti:

  • MSFT_packing_occlusionRoughnessMetallic
  • KHR_materials_unlit: corrisponde ai materiali a colori. Per i materiali emissivi , è consigliabile usare questa estensione.
  • KHR_materials_pbrSpecularGlossiness: invece di trame metalliche, è possibile fornire trame di glossario speculare diffuse. L'implementazione di Azure Rendering remoto segue direttamente le formule di conversione dall'estensione.

FBX

Il formato FBX è closed source e i materiali FBX non sono compatibili con i materiali PBR in generale. FBX usa una descrizione complessa delle superfici con molti parametri e proprietà univoci e non tutti vengono usati dalla pipeline di Azure Rendering remoto.

Importante

La pipeline di conversione del modello Rendering remoto di Azure supporta solo FBX 2011 e versioni successive.

Il formato FBX definisce un approccio conservativo per i materiali, esistono solo due tipi nella specifica FBX ufficiale:

  • Lambert - Non comunemente usato per un bel po 'di tempo, ma è ancora supportato convertendo in Phong in fase di conversione.
  • Phong : quasi tutti i materiali e la maggior parte degli strumenti di contenuto usano questo tipo.

Il modello Phong è più accurato ed è usato come unico modello per i materiali FBX. Di seguito verrà indicato come materiale FBX.

Maya usa due estensioni personalizzate per FBX definendo proprietà personalizzate per i tipi PBR e Stingray di un materiale. Questi dettagli non sono inclusi nella specifica FBX, quindi non è attualmente supportato da Azure Rendering remoto.

I materiali FBX usano il concetto Diffuse-Specular-SpecularLevel, quindi per convertire da una trama diffusa a una mappa albedo è necessario calcolare gli altri parametri per sottrarli dalla diffusione.

Tutti i colori e le trame in FBX si trovano nello spazio sRGB (noto anche come spazio Gamma), ma Azure Rendering remoto funziona con lo spazio lineare durante la visualizzazione e alla fine del frame converte tutto nello spazio sRGB. La pipeline di asset Rendering remoto di Azure converte tutto in spazio lineare per inviarli come dati preparati al renderer.

Questa tabella illustra il mapping delle trame dai materiali FBX ai materiali Rendering remoto di Azure. Alcuni di essi non vengono usati direttamente, ma in combinazione con altre trame che partecipano alle formule (ad esempio la trama diffusa):

FBX Rendering remoto di Azure
AmbientColor Mappa occlusione
DiffuseColor utilizzato per Albedo, Metalness
TransparentColor utilizzato per il canale alfa di Albedo
TransparencyFactor utilizzato per il canale alfa di Albedo
Opacità utilizzato per il canale alfa di Albedo
SpecularColor utilizzato per Albedo, Metalness, Roughness
SpecularFactor utilizzato per Albedo, Metalness, Roughness
ShininessExponent utilizzato per Albedo, Metalness, Roughness
NormalMap NormalMap
Urto convertito in NormalMap
EmissiveColor -
EmissiveFactor -
ReflectionColor -
SpostamentoColor -

Il mapping precedente è la parte più complessa della conversione del materiale, a causa di molti presupposti che devono essere fatti. Di seguito vengono illustrati questi presupposti.

Alcune definizioni usate di seguito:

  • Specular = SpecularColor * SpecularFactor
  • SpecularIntensity = Specular. Rosso ∗ 0.2125 + Specular. Verde ∗ 0,7154 + Specular. Blu ∗ 0.0721
  • DiffuseBrightness = 0,299 * Diffuse. Rosso2 + 0,587 * Diffuse. Verde2 + 0,114 * Diffuse. Blu2
  • SpecularBrightness = 0,299 * Specular. Rosso2 + 0,587 * Specular. Verde2 + 0,114 * Specular. Blu2
  • SpecularStrength = max(Specular. Rosso, Specular. Verde, Specular. Blu)

La formula SpecularIntensity viene ottenuta da qui. La formula di luminosità è descritta in questa specifica.

Ruvidità

Roughness viene calcolato da Specular e ShininessExponent utilizzando questa formula. La formula è un'approssimazione della rugosità dell'esponente speculare Phong:

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

Metalness

Metalness viene calcolato da Diffuse e Specular utilizzando questa formula dalla specifica glTF.

L'idea è che risolviamo l'equazione: Ax2 + Bx + C = 0. Fondamentalmente, le superfici disattive riflettono circa il 4% della luce in modo speculare, e il resto è diffuso. Le superfici metalliche non riflettono alcuna luce in modo diffuso, ma tutto in modo speculare. Questa formula presenta alcuni svantaggi, perché non c'è modo di distinguere tra la plastica lucida e le superfici metalliche lucide. Si presuppone che la maggior parte del tempo la superficie abbia proprietà metalliche, e quindi superfici di plastica/gomma lucide potrebbero non sembrare come previsto.

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 viene calcolato da Diffuse, Speculare Metalness.

Come descritto nella sezione Metalness, le superfici disogne riflettono circa il 4% della luce.
L'idea qui consiste nell'interpolare in modo lineare tra Dielectric i colori e Metal usando Metalness il valore come fattore. Se il metallo è 0.0, a seconda dello speculare sarà un colore scuro (se speculare è elevato) o la diffusione non cambierà (se non è presente alcuna speculare). Se il metallo è un valore elevato, il colore diffuso scomparirà a favore del colore speculare.

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 è stato calcolato dalla formula precedente, ma il canale alfa richiede più calcoli. Il formato FBX è vago sulla trasparenza e ha molti modi per definirlo. Diversi strumenti di contenuto usano metodi diversi. L'idea è di unificarle in una sola formula. Il rendering di alcuni asset viene eseguito in modo non corretto come trasparente, tuttavia, se non vengono creati in modo comune.

Viene calcolato da TransparentColor, TransparencyFactor, Opacity:

se Opacity è definito, usarlo direttamente: AlbedoAlpha = Opacity
se TransparencyColor è definito, quindi AlbedoAlpha = 1.0 - ((TransparentColor.BlueTransparentColor.Red + TransparentColor.Green + ) / 3.0) else
se TransparencyFactor, then AlbedoAlpha = 1.0 - TransparencyFactor

Il colore finale Albedo ha quattro canali, combinando con AlbedoRGB .AlbedoAlpha

Riepilogo

Per riepilogare qui, Albedo sarà molto vicino all'originale Diffuse, se Specular è vicino a zero. In caso contrario, la superficie sarà simile a una superficie metallica e perde il colore diffuso. La superficie sarà più lucidata e riflettente se ShininessExponent è abbastanza grande ed Specular è brillante. In caso contrario, la superficie avrà un aspetto approssimativo e rifletterà a malapena l'ambiente.

Problemi noti

  • La formula corrente non funziona correttamente per la geometria colorata semplice. Se Specular è abbastanza luminoso, tutte le geometrie diventano superfici metalliche riflettenti senza alcun colore. La soluzione alternativa in questo caso consiste nell'abbassare Specular al 30% rispetto all'originale o usare l'impostazione di conversione fbxAssumePartizioniic.
  • I materiali PBR sono stati recentemente aggiunti agli strumenti di Maya creazione del contenuto e 3DS Max . Usano proprietà black box personalizzate definite dall'utente per passarlo a FBX. Azure Rendering remoto non legge tali proprietà perché non sono documentate e il formato è closed source.

Passaggi successivi