Condividi tramite


Materiali PBR

I materiali PBR sono uno dei tipi di materiali supportati in Azure Rendering remoto. Vengono usati per mesh triangolari che devono ricevere un'illuminazione realistica. Le nuvole di punti, d'altra parte, non sono interessate dall'illuminazione dinamica.

PBR è l'acronimo di Physically Based Rendering e significa che il materiale descrive le proprietà visive di una superficie in modo fisicamente plausibile, in modo che i risultati realistici siano possibili in tutte le condizioni di illuminazione. La maggior parte dei motori di gioco moderni e gli strumenti di creazione di contenuti supportano materiali PBR perché sono considerati la migliore approssimazione degli scenari reali per il rendering in tempo reale.

Modello di esempio glTF del casco sottoposto a rendering da ARR

L'idea principale del rendering basato su fisico consiste nell'usare le proprietà BaseColor, Metalness e Roughness per emulare un'ampia gamma di materiali reali. Una descrizione dettagliata di PBR esula dall'ambito di questo articolo. Per altre informazioni su PBR, vedere altre origini.

I materiali PBR non sono però una soluzione universale. Ci sono materiali che riflettono il colore in modo diverso a seconda dell'angolo di visualizzazione. Ad esempio, alcuni tessuti o vernici per auto. Questi tipi di materiali non vengono gestiti dal modello PBR standard e non sono attualmente supportati da Azure Rendering remoto. Questa limitazione include estensioni PBR, ad esempio Thin-Film (superfici multi-layer) e Clear-Coat (per le vernici per auto).

Proprietà del materiale PBR

Le proprietà materiali seguenti vengono esposte nell'API di runtime, ad esempio nella classe PbrMaterial C# o nella classe PbrMaterial C++, rispettivamente.

  • PbrFlags: i flag di funzionalità misc possono essere combinati in questa maschera di bit per abilitare le funzionalità seguenti:

    • TransparentMaterial: per i materiali PBR, è presente una sola impostazione di trasparenza: è abilitata o meno. L'opacità è definita dal canale alfa del colore albedo. Se abilitato, viene richiamato un metodo di rendering più complesso per disegnare superfici semitrasparenti. Azure Rendering remoto implementa la trasparenza indipendente dall'ordine (OIT) vera. Il rendering della geometria trasparente è costoso. Se sono necessari solo fori in una superficie, ad esempio per le foglie di un albero, è preferibile usare il ritaglio alfa.

    Sfere di cui è stato eseguito il rendering con zero alla trasparenza completa Si noti nell'immagine precedente il modo in cui la sfera più a destra è completamente trasparente, ma la reflection è ancora visibile.

    Importante

    Se un materiale deve essere passato da opaco a trasparente in fase di esecuzione, il renderer deve usare la modalità di rendering TileBasedComposition. Questa limitazione non si applica ai materiali convertiti come materiali trasparenti da iniziare.

    • UseVertexColor: se la mesh contiene vertex colori e questa opzione è abilitata, il colore delle mesh vertex viene moltiplicato in AlbedoColor e AlbedoMap. Per impostazione predefinita, è disabilitato UseVertexColor .
    • DoubleSided: se il doppio lato è impostato su true, viene eseguito il rendering dei triangoli con questo materiale anche se la fotocamera guarda le facce posteriore. Per l'illuminazione dei materiali PBR viene calcolata correttamente anche per i volti posteriore. Per impostazione predefinita, questa opzione è disabilitata. Vedere anche Single-sided rendering.
    • SpecularHighlights: abilita le evidenziazioni speculari per questo materiale. Per impostazione predefinita, il SpecularHighlights flag è abilitato.
    • AlphaClipped: abilita i ritagli rigidi su base per pixel, in base al valore alfa inferiore al valore di AlphaClipThreshold (vedere di seguito). Questo funziona anche per materiali opachi.
    • FresnelEffect: questo flag di materiale abilita l'effetto di fresnel aggiuntivo sul rispettivo materiale. L'aspetto dell'effetto è regolato dagli altri parametri FresnelEffectColor fresnel e FresnelEffectExponent spiegati di seguito.
    • TransparencyWritesDepth: se il TransparencyWritesDepth flag è impostato sul materiale e il materiale è trasparente, gli oggetti che usano questo materiale contribuiranno anche al buffer di profondità finale. Vedere il flag materiale PBR trasparente nella sezione successiva. L'abilitazione di questa funzionalità è consigliata se il caso d'uso richiede una riprogettazione in ritardo più plausibile di scene completamente trasparenti. Per le scene opache o trasparenti miste, questa impostazione può introdurre un comportamento di riprogettazione implausibile o riprogettazione degli artefatti. Per questo motivo, l'impostazione predefinita e consigliata per il caso d'uso generale consiste nel disabilitare questo flag. I valori di profondità scritti vengono acquisiti dal livello di profondità per pixel dell'oggetto più vicino alla fotocamera.
  • AlbedoColor: questo colore viene moltiplicato con altri colori, ad esempio i AlbedoMap colori o vertex . Se la trasparenza è abilitata su un materiale, il canale alfa viene usato per regolare l'opacità, con 1 significato completamente opaco e 0 significato completamente trasparente. Il colore albedo predefinito è bianco opaco.

    Nota

    Quando un materiale PBR è completamente trasparente, come una superficie di vetro perfettamente pulita, riflette ancora l'ambiente. Macchie luminose come il sole sono ancora visibili nel riflesso. Questo è diverso per i materiali a colori.

  • AlbedoMap: trama 2D per valori di albedo per pixel.

  • AlphaClipThreshold: se il AlphaClipped flag è impostato sulla PbrFlags proprietà , tutti i pixel in cui il valore alfa albedo è inferiore a quello AlphaClipThreshold che non verrà disegnato. Il ritaglio alfa può essere usato anche senza abilitare la trasparenza ed è molto più veloce per il rendering. I materiali troncato alfa sono ancora più lenti a eseguire il rendering rispetto ai materiali completamente opachi, anche se. Per impostazione predefinita, il ritaglio alfa è disabilitato.

  • TexCoordScale e TexCoordOffset: la scala viene moltiplicata nelle coordinate della trama UV, l'offset viene aggiunto. Può essere usato per estendere e spostare le trame. La scala predefinita è (1, 1) e offset è (0, 0).

  • FresnelEffectColor: colore a imbuto utilizzato per questo materiale. È importante solo quando il flag di effetto fresnel è stato impostato su questo materiale (vedere sopra). Questa proprietà controlla il colore di base dell'effetto fresnel (vedere effetto fresnel per una spiegazione completa). Attualmente solo i valori del canale RGB sono importanti e il valore alfa verrà ignorato.

  • FresnelEffectExponent: esponente fresnel usato per questo materiale. È importante solo quando il flag di effetto fresnel è stato impostato su questo materiale (vedere sopra). Questa proprietà controlla la diffusione della brillare fresnel. Il valore minimo 0,01 causa una distribuzione nell'intero oggetto. Il valore massimo 10,0 costriziona l'effetto brilla solo ai bordi più visibile.

  • PbrVertexAlphaMode: determina la modalità di utilizzo del canale alfa dei colori dei vertici. Vengono fornite le modalità seguenti:

    • Occlusion: il valore alfa rappresenta un valore di occlusione ambientale e pertanto influisce solo sull'illuminazione indiretta dalla scatola del cielo.
    • LightMask: il valore alfa funge da fattore di scala per la quantità complessiva di illuminazione applicata, ovvero l'alfa può essere usato per scurire le aree. Ciò influisce sia sull'illuminazione indiretta che diretta.
    • Opacity: l'alfa rappresenta il materiale opaco (1,0) o trasparente (0,0).
  • NormalMap: per simulare dettagli con granularità fine, è possibile specificare una mappa normale.

  • NormalMapScale: valore scalare che ridimensiona l'attendibilità normale della mappa. Un valore pari a 1,0 accetta la normale mappa così com'è, un valore pari a 0 rende la superficie piatta. I valori maggiori di 1,0 esagerano la normale perturbazione della mappa.

  • Roughness e RoughnessMap: la rugosità definisce quanto sia ruvida o liscia la superficie. Le superfici grezze sparsi la luce in più direzioni rispetto alle superfici uniformi, che rendono i riflessi sfocati anziché nitidi. L'intervallo di valori è compreso tra 0.0 e 1.0. Quando Roughness è uguale 0.0a , i riflessi saranno nitidi. Quando Roughness è uguale 0.5a , i riflessi diventeranno sfocati. Se vengono forniti sia un valore di rugosità che una mappa di rugosità, il valore finale sarà il prodotto dei due.

  • Metalness e MetalnessMap: in fisica, questa proprietà corrisponde al fatto che una superficie sia conduttiva o disostruente. I materiali conduttivi hanno proprietà riflettenti diverse e tendono a riflettersi senza colore albedo. Nei materiali PBR questa proprietà influisce sulla quantità di superficie che riflette l'ambiente circostante. I valori sono compresi tra 0.0 e 1.0. Quando il metallo è 0.0, il colore albedo è completamente visibile e il materiale sembra plastica o ceramica. Quando il metallo è 0.5, sembra metallo dipinto. Quando il metallo è 1.0, la superficie perde quasi completamente il suo colore albedo e riflette solo l'ambiente circostante. Ad esempio, se metalness è 1.0 e roughness è 0.0 una superficie è simile a uno specchio reale. Se vengono forniti sia un valore di metallo che una mappa di metallo, il valore finale sarà il prodotto dei due.

    Sfere di cui è stato eseguito il rendering con diversi valori di metallo e rugosità

    Nell'immagine precedente, la sfera nell'angolo in basso a destra sembra un materiale in metallo reale, l'aspetto in basso a sinistra è simile alla ceramica o alla plastica. Il colore albedo cambia anche in base alle proprietà fisiche. Con un aumento della rugosità, il materiale perde la nitidezza del riflesso.

  • AOMap e AOScale: l'occlusione ambientale rende gli oggetti con crevici più realistici aggiungendo ombre ad aree occluse. Il valore dell'occlusione va da 0.0 a , dove 0.0 significa oscurità (occlusioni) e 1.0 non significa occlusioni1.0. Se una trama 2D viene fornita come mappa di occlusione, l'effetto viene abilitato e AOScale funge da moltiplicatore.

    Rendering di un oggetto con e senza occlusione ambientale

Override del materiale colore durante la conversione

È possibile eseguire l'override di un subset di proprietà del materiale colore durante la conversione del modello tramite il file di override del materiale. La tabella seguente illustra il mapping tra le proprietà di runtime documentate in precedenza e il nome della proprietà corrispondente nel file di override:

Nome proprietà materiale Nome della proprietà nel file di override
PbrFlags.TransparentMaterial transparent
PbrFlags.AlphaClipped alphaClipEnabled
PbrFlags.UseVertexColor useVertexColor
PbrFlags.DoubleSided isDoubleSided
PbrFlags.TransparencyWritesDepth transparencyWritesDepth
AlbedoColor albedoColor
TexCoordScale textureCoordinateScale
TexCoordOffset textureCoordinateOffset
NormalmapScale normalMapScale
Metalness metalness
Roughness roughness
AlphaClipThreshold alphaClipThreshold

Dettagli tecnici

Azure Rendering remoto usa il micro-facet COOK-Torrance BRDF con GGX NDF, Schlick Fresnel e un termine di visibilità correlato a GGX Smith con un termine diffuso Lambert. Questo modello è lo standard del settore di fatto al momento. Per altri dettagli, vedere questo articolo: Rendering basato su fisico - Torrance cook

Un'alternativa al modello PBR Metalness-Roughness usato in Azure Rendering remoto è il modello PBR Specular-Glossiness. Questo modello può rappresentare una gamma più ampia di materiali. Tuttavia, è più costoso e in genere non funziona bene per i casi in tempo reale. Non è sempre possibile eseguire la conversione da glossario speculare a Metalness-Roughness perché sono presenti coppie di valori (diffuse, speculari) che non possono essere convertite in (BaseColor, Metalness). La conversione nell'altra direzione è più semplice e più precisa, poiché tutte le coppie (BaseColor, Metalness) corrispondono a coppie ben definite (Diffuse, Specular).

Documentazione sull'API

Passaggi successivi