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.
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.
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 inAlbedoColor
eAlbedoMap
. L'opzione è disabilitata per impostazione predefinitaUseVertexColor
.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, ilSpecularHighlights
flag è abilitato.AlphaClipped
: abilita i ritagli rigidi in base ai pixel, in base al valore alfa inferiore al valore diAlphaClipThreshold
(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 fresnelFresnelEffectColor
eFresnelEffectExponent
illustrato di seguito.TransparencyWritesDepth
: se il flagTransparencyWritesDepth
è 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 iAlbedoMap
colori o vertex. Se la trasparenza è abilitata su un materiale, il canale alfa viene usato per regolare l'opacità, con1
significato completamente opaco e con0
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 ilAlphaClipped
flag è impostato sullaPbrFlags
proprietà, tutti i pixel in cui il valore alfa albedo è inferiore aAlphaClipThreshold
, 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
eTexCoordOffset
: 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
eRoughnessMap
: 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 tra0.0
e1.0
. QuandoRoughness
è uguale0.0
, i riflessi saranno nitidi. QuandoRoughness
è uguale0.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
eMetalnessMap
: 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 da0.0
a1.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, semetalness
è1.0
eroughness
è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.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
eAOScale
: l’occlusione ambientale rende gli oggetti con fessure più realistiche aggiungendo ombre ad aree occluse. Il valore dell'occlusione va da0.0
a1.0
, dove0.0
significa oscurità (occlusioni) e1.0
significa zero occlusioni. Se una trama 2D viene fornita come mappa di occlusione, l'effetto viene abilitato eAOScale
funge da moltiplicatore.
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
- Classe C# PbrMaterial
- C# RenderingConnection.CreateMaterial()
- Classe PbrMaterial C++
- RenderingConnection C++::CreateMaterial()