Materiali PBR

I materiali PBR sono uno dei tipi di materiali supportati nel Rendering remoto di Azure. Vengono usati come mesh triangolari per ricevere un'illuminazione realistica. Le nuvole di punti, invece, 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, affinché 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 del mondo reale per il rendering in tempo reale.

Modello campione del casco glTF sottoposto a rendering da ARR

L'idea principale del rendering fisico consiste nell'usare le proprietà Colore di base, Metallicità e Ruvidità per emulare un'ampia gamma di materiali reali. Una descrizione dettagliata dei PBR esula dall'ambito di questo articolo. Per ulteriori informazioni sui PBR, vedere altre origini.

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

Proprietà dei materiali PBR

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

  • PbrFlags: i flag di differenti funzionalità 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 no. L'opacità è definita dal canale alfa del colore albedo. Se abilitato, viene richiamato un metodo di rendering più complesso per disegnare superfici semitrasparenti. Rendering remoto di Azure implementa la trasparenza indipendente dall'ordine reale (OIT). 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 da zero alla trasparenza completa Si noti che nell'immagine precedente la sfera più a destra è completamente trasparente, ma il riflesso è ancora visibile.

    Importante

    Se un materiale deve essere portato 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 con cui iniziare.

    • UseVertexColor: se la mesh contiene vertex colori e questa opzione è abilitata, il colore delle mesh vertex viene moltiplicato in AlbedoColor e AlbedoMap. L'opzione è disabilitata per impostazione predefinita UseVertexColor.
    • DoubleSided: se il doppio lato è impostato su true, viene eseguito il rendering dei triangoli con questo materiale anche se la fotocamera è rivolta verso le facce posteriori. Per i materiali PBR, l’illuminazione viene calcolata correttamente anche per le facce posteriori. L'opzione è disabilitata per impostazione predefinita. Vedere anche Single-sided rendering.
    • SpecularHighlights: abilita i riflessi speculari per questo materiale. Per impostazione predefinita, il SpecularHighlights flag è abilitato.
    • AlphaClipped: abilita i ritagli rigidi in base ai pixel, in base al valore alfa inferiore al valore di AlphaClipThreshold (vedere di seguito). Questo funziona anche per i materiali opachi.
    • FresnelEffect: questo flag di materiale abilita l'effetto fresnel aggiuntivo sul rispettivo materiale. L'aspetto dell'effetto è regolato dagli altri parametri fresnel FresnelEffectColor e FresnelEffectExponent illustrato di seguito.
    • TransparencyWritesDepth: se il flag TransparencyWritesDepth è impostato su di un materiale e il materiale è trasparente, gli oggetti che usano questo materiale contribuiranno anche al buffer di intensità finale. Vedere il flag materiali PBR trasparenti nella sezione successiva. L'abilitazione di questa funzionalità è consigliata se il caso d'uso richiede una riproiezione in fase avanzata più plausibile di scene completamente trasparenti. Per le scene opache o trasparenti miste, questa impostazione può introdurre una riproiezione o riprogettazione degli artefatti non plausibile. 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 AlbedoMapcolori o vertex. Se la trasparenza è abilitata su un materiale, il canale alfa viene usato per regolare l'opacità, con 1 significato completamente opaco e con 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 l'ambiente esterno. Macchie luminose come il sole sono ancora visibili nel riflesso. Questo è diverso per i materiali a colori.

  • AlbedoMap: una 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 AlphaClipThreshold, non verrà disegnato. Il ritaglio alfa può essere usato anche senza abilitare la trasparenza ed è molto più veloce per il rendering. Sui materiali con ritaglio alfa il rendering viene comunque eseguito in modo ancora più lento rispetto ai materiali completamente opachi. Il ritaglio alfa è disabilitato per impostazione predefinita.

  • 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 l’offset è (0, 0).

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

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

  • 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 del riquadro 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 se il materiale è opaco (1,0) o trasparente (0,0).
  • NormalMap: per simulare dettagli a grana fine, è possibile fornire una mappa normale.

  • NormalMapScale: valore scalare che scala la forza della mappa normale. Un valore pari a 1,0 accetta la mappa normale così com'è, un valore pari a 0 rende l’aspetto della superficie piatto. I valori superiori a 1,0 esagerano la normale perturbazione della mappa.

  • Roughness e RoughnessMap: la Ruvidezza definisce quanto sia ruvida o liscia la superficie. Le superfici grezze riflettono la luce in più direzioni rispetto alle superfici uniformi, rendendo i riflessi sfuocati anziché nitidi. L'intervallo di valori è compreso tra 0.0 e 1.0. Quando Roughness è uguale 0.0, i riflessi saranno nitidi. Quando Roughness è uguale 0.5, i riflessi diventeranno sfuocati. 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 dielettrica. 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. La gamma di valori va da 0.0 a 1.0. Quando il metallo è 0.0, il colore albedo è completamente visibile e il materiale sembra plastica o ceramica. Quando la metallicità è 0.5, sembra metallo dipinto. Quando la metallicità è 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, la superficie è simile a uno specchio reale. Se vengono forniti sia un valore di metallicità che una mappa di metallicità, il valore finale sarà il prodotto dei due.

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

    Nell'immagine precedente, la sfera nell'angolo in basso a destra sembra un materiale in metallo reale mentre 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 fessure più realistiche aggiungendo ombre ad aree occluse. Il valore dell'occlusione va da 0.0 a 1.0, dove 0.0significa oscurità (occlusioni) e 1.0 significa zero occlusioni. 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

Sostituzione del materiale del colore durante la conversione

È possibile eseguire la sostituzione di un subset di proprietà del materiale colore durante la conversione del modello tramite il file di sostituzione 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 sostituzione
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

Rendering remoto di Azure 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 ulteriori dettagli, vedere questo articolo: Rendering su base fisica - Torrance Cook

Un'alternativa al modello PBR Metallicità-Ruvidezza usato nel Rendering remoto di Azure è il modello PBR Specularità-Brillantezza. Questo modello può rappresentare una gamma più ampia di materiali. Tuttavia, è più costoso e in genere non si adatta bene ai casi in tempo reale. Non è sempre possibile eseguire la conversione da Specularità-Brillantezza a Metallicità-Ruvidezza perché sono presenti coppie di valori (diffuse, speculari) che non possono essere convertite in (Colore di base, Metallicità). La conversione nell'altra direzione è più semplice e più precisa, poiché tutte le coppie (Color di base, Metallicità) corrispondono a coppie ben definite (Diffuso, Speculare).

Documentazione sull'API

Passaggi successivi