PBR-Materialien
PBR-Materialien sind einer der unterstützten Materialtypen in Azure Remote Rendering. Sie werden für Dreiecks-Gittermodelle verwendet, die eine realistische Beleuchtung erhalten sollen. Punktwolken hingegen sind nicht von dynamischer Beleuchtung betroffen.
PBR steht für Physically Based Rendering. Dies besagt, dass das Material die visuellen Eigenschaften einer Oberfläche auf physikalisch plausible Weise beschreibt, sodass realistische Ergebnisse unter allen Beleuchtungsbedingungen möglich sind. Die meisten modernen Spiele-Engines und Inhaltserstellungstools unterstützen PBR-Materialien, da sie als die beste Annäherung an realistische Szenarien für Echtzeitrendering angesehen werden.
Physically Based Rendering beinhaltet im Wesentlichen die Verwendung der Eigenschaften BaseColor, Metalness und Roughness zum Emulieren einer breite Palette realistischer Materialien. Eine ausführliche Beschreibung von PBR würde den Rahmen dieses Artikels sprengen. Ausführlichere Informationen zu PBR finden Sie in weiteren Quellen.
PBR-Materialien sind jedoch keine Universallösung. Es gibt Materialien, die Licht je nach Blickwinkel unterschiedlich reflektieren. Hierzu zählen einige Stoffarten und Autolacke. Diese Arten von Materialien werden vom standardmäßigen PBR-Modell nicht behandelt und von Azure Remote Rendering zurzeit nicht unterstützt. Diese Einschränkung gilt auch für PBR-Erweiterungen, z. B. Thin-Film (mehrschichtige Oberflächen) und Clear-Coat (für Autolacke).
PBR-Materialeigenschaften
Die folgenden Materialeigenschaften werden in der Laufzeit-API verfügbar gemacht, z. B. in der C#PbrMaterial-Klasse oder in der C++-PbrMaterial-Klasse.
PbrFlags
: Verschiedene Featurekennzeichnungen können in dieser Bitmaske kombiniert werden, um die folgenden Features zu aktivieren:TransparentMaterial
: Für PBR-Materialien gibt es nur eine Transparenzeinstellung: Sie ist aktiviert oder nicht. Die Deckkraft wird durch den Alphakanal der Albedo-Farbe definiert. Wenn diese Option aktiviert ist, wird eine komplexere Renderingmethode aufgerufen, um halbtransparente Oberflächen zu zeichnen. Azure Remote Rendering implementiert echte reihenfolgenunabhängige Transparenz (Order-Independent Transparency, OIT). Transparente Geometrie ist aufwendig zu Rendern. Wenn Sie nur Lücken in einer Oberfläche benötigen, z. B. für die Blätter eines Baums, empfiehlt es sich, stattdessen Alpha-Clipping zu verwenden.
Beachten Sie in der Abbildung oben, wie die rechtsste Kugel vollständig transparent ist, aber die Spiegelung ist immer noch sichtbar.
Wichtig
Wenn ein Material zur Laufzeit von undurchsichtig in transparent geändert werden soll, muss der Renderer den TileBasedComposition-Renderingmodus verwenden. Diese Einschränkung gilt nicht für Materialien, die zunächst als transparente Materialien konvertiert werden.
UseVertexColor
: Wenn das Gitter Farben enthält vertex und diese Option aktiviert ist, wird die Farbe der Gitter vertex in dieAlbedoColor
und dieAlbedoMap
Gitter multipliziert. Standardmäßig istUseVertexColor
deaktiviert.DoubleSided
: Wenn diese Eigenschaft auf „true“ festgelegt ist, werden Dreiecke mit diesem Material auch dann gerendert, wenn die Kamera auf ihre Rückseite gerichtet ist. Für die PBR-Materialien wird die Beleuchtung auch für die Rückseite korrekt berechnet. Diese Option ist standardmäßig deaktiviert. Siehe auch Single-sided rendering.SpecularHighlights
: Ermöglicht Glanzlichter für dieses Material. Standardmäßig ist dasSpecularHighlights
Flag aktiviert.AlphaClipped
: Ermöglicht harte Ausschnitte pro Pixel auf der Basis eines unter dem Wert vonAlphaClipThreshold
liegenden Alphawerts (siehe unten). Dies funktioniert auch bei opaken Materialien.FresnelEffect
: Dieses Materialflag ermöglicht den additiven Fresneleffekt für das jeweilige Material. Die Darstellung des Effekts wird durch die anderen FresnelparameterFresnelEffectColor
undFresnelEffectExponent
bestimmt, die im Folgenden erläutert werden.TransparencyWritesDepth
:Wenn dasTransparencyWritesDepth
-Flag für das Material festgelegt und das Material transparent ist, leisten Objekte, die dieses Material verwenden, einen Beitrag zum letzten Tiefenpuffer. Sehen Sie sich das PBR-Materialflag transparent im nächsten Abschnitt an. Es wird empfohlen, dieses Feature zu aktivieren, wenn Ihr Anwendungsfall einen plausibleren Farbverschiebungsausgleich für vollständig transparente Szenen erfordert. Bei Szenen, die teilweise transparent und teilweise nicht transparent sind, kann diese Einstellung zu nicht plausiblem Reprojektionsverhalten oder nicht plausiblen Reprojektionsartefakten führen. Aus diesem Grund wird dieses Flag für normale Anwendungsfälle standardmäßig deaktiviert. Diese Einstellung wird auch empfohlen. Die geschriebenen Tiefenwerte werden der pixelbasierten Tiefenebene des Objekts entnommen, das sich der Kamera am nächsten befindet.
AlbedoColor
: Diese Farbe wird mit anderen Farben multipliziert, z. B. mitAlbedoMap
- oder vertex-Farben. Wenn transparency für ein Material aktiviert ist, wird der Alphakanal verwendet, um die Deckkraft anzupassen, wobei1
vollständig undurchsichtig und0
vollständig transparent bedeutet. Die Standardalbedofarbe ist opakes Weiß.Hinweis
Wenn ein PBR-Material vollständig transparent ist, wie eine perfekt sauber Glasoberfläche, spiegelt es immer noch die Umgebung wider. Helle Stellen wie die Sonne sind in der Reflexion immer noch sichtbar. Dies ist bei Farbmaterialien anders.
AlbedoMap
: Eine 2D-Textur für Albedowerte pro Pixel.AlphaClipThreshold
: Wenn dieAlphaClipped
Kennzeichnung für diePbrFlags
Eigenschaft festgelegt ist, werden alle Pixel, in denen der Albedo-Alphawert niedriger ist, alsAlphaClipThreshold
nicht gezeichnet werden. Alphaclipping kann auch ohne Aktivierung der Transparenz verwendet werden, und es beschleunigt das Rendern. Materialien, auf die Alphaclipping angewendet wird, werden dennoch langsamer gerendert als vollständig undurchsichtige Materialien. Alphaclipping ist standardmäßig deaktiviert.TexCoordScale
undTexCoordOffset
: Die Skalierung wird mit den UV-Texturkoordinaten multipliziert, und der Offset wird addiert. Kann zum Strecken und Verschieben der Texturen verwendet werden. Die Standardskalierung ist (1, 1) und der Standardoffset ist (0, 0).FresnelEffectColor
: Die für dieses Material verwendete Fresnelfarbe. Nur wichtig, wenn das Fresneleffektflag für dieses Material festgelegt wurde (siehe oben). Diese Eigenschaft steuert die Basisfarbe des Fresnel-Glanzes (eine vollständige Erläuterung finden Sie unter Fresnel-Effekt). Gegenwärtig sind nur die RGB-Kanalwerte wichtig und der Alphawert wird ignoriert.FresnelEffectExponent
: Der für dieses Material verwendete Fresnelexponent. Nur wichtig, wenn das Fresneleffektflag für dieses Material festgelegt wurde (siehe oben). Diese Eigenschaft steuert die Verteilung des Fresnel-Glanzes. Der Mindestwert 0,01 bewirkt eine Verteilung über das gesamte Objekt. Der Maximalwert 10,0 schränkt den Glanz nur auf die am stärksten zierenden sichtbaren Kanten ein.PbrVertexAlphaMode
: Bestimmt, wie der Alphakanal von Vertexfarben verwendet wird. Die folgenden Modi werden bereitgestellt:Occlusion
: Der Alphawert stellt einen Umgebungsverknlusionswert dar und wirkt sich daher nur auf die indirekte Beleuchtung aus dem Himmelsfeld aus.LightMask
: Der Alphawert dient als Skalierungsfaktor für die gesamt angewendete Beleuchtungsmenge, was bedeutet, dass das Alpha verwendet werden kann, um Bereiche abzudunkeln. Dies wirkt sich sowohl auf die indirekte als auch auf die direkte Beleuchtung aus.Opacity
: Das Alpha stellt dar, wie undurchsichtig (1,0) oder transparent (0,0) das Material ist.
NormalMap
: Um feinkörnte Details zu simulieren, kann eine normale Karte bereitgestellt werden.NormalMapScale
: Ein skalarer Wert, der die normale Kartenstärke skaliert. Bei einem Wert von 1,0 wird die normale Karte unverändert verwendet, wobei der Wert 0 die Oberfläche flach erscheinen lässt. Werte, die größer als 1,0 sind, übertreiben die normale Kartenbeugung.Roughness
undRoughnessMap
: Rauheit definiert, wie rau oder glatt die Oberfläche ist. Raue Oberflächen streuen das Licht in mehr Richtungen als glatte Oberflächen, wodurch die Reflexionen unscharf werden. Der Wertebereich liegt zwischen0.0
und1.0
. WennRoughness
gleich0.0
ist, werden die Reflexionen scharf dargestellt. WennRoughness
gleich0.5
ist, werden die Reflexionen unscharf dargestellt. Wenn ein roughness-Wert und eine „roughnessMap“ angegeben werden, ist der endgültige Wert das Produkt der beiden.Metalness
undMetalnessMap
: In der Physik entspricht diese Eigenschaft dem, ob eine Oberfläche leitfähig oder dielektrische ist. Leitende Materialien verfügen über andere Reflexionseigenschaften und sind in der Regel ohne Albedo-Farbe reflektierend. In PBR-Materialien beeinflusst diese Eigenschaft den Grad, in dem eine Oberfläche die Umgebung reflektiert. Der Wertebereich liegt zwischen0.0
und1.0
. Wenn Metallität ist, ist0.0
die Albedofarbe vollständig sichtbar, und das Material sieht wie Kunststoff oder Keramik aus. Wenn „metalness“ den Wert0.5
hat, sieht das Material wie lackiertes Metall aus. Wenn Metall ist1.0
, verliert die Oberfläche fast vollständig ihre Albedofarbe und spiegelt nur die Umgebung wider. Wenn z. B.metalness
den Wert1.0
undroughness
den Wert0.0
aufweist, sieht die Oberfläche wie ein Spiegel aus. Wenn ein metalness-Wert und eine „metalnessMap“ angegeben werden, ist der endgültige Wert das Produkt der beiden.In der obigen Abbildung sieht die Kugel in der rechten unteren Ecke wie Metall und die Kugel in der linken unteren Ecke wie Keramik oder Kunststoff aus. Die Albedo-Farbe ändert sich auch gemäß den physischen Eigenschaften. Wenn sich die Rauheit erhöht, wird die Reflexion des Materials weniger scharf.
AOMap
undAOScale
: Ambient Occlusion macht Objekte mit Krevicen realistischer, indem Schatten zu verdeckten Bereichen hinzugefügt werden. Der Verdeckungswertebereich liegt zwischen0.0
und1.0
, wobei0.0
Dunkelheit (verdeckt) und1.0
keine Verdeckung bedeutet. Wenn eine 2D-Textur als Okklusionszuordnung bereitgestellt wird, wird der Effekt aktiviert undAOScale
fungiert als Multiplikator.
Farbmaterialüberschreibungen während der Konvertierung
Eine Teilmenge der Farbmaterialeigenschaften kann während der Modellkonvertierung mittels der Materialüberschreibungsdatei überschrieben werden. Die folgende Tabelle zeigt die Zuordnung zwischen den oben dokumentierten Laufzeiteigenschaften und dem entsprechenden Eigenschaftsnamen in der Überschreibungsdatei:
Materialeigenschaftsname | Eigenschaftsname in der Überschreibungsdatei |
---|---|
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 |
Technische Details
Azure Remote Rendering verwendet die auf dem Cook-Torrance-Modell basierende Mikrofacetten-BRDF. Diese beinhaltet GGX-NDF, die Schlick-Fresnel-Gleichung und eine mit GGX korrelierte Smith-Sichtbarkeitsfunktion mit einer Abschwächungsfunktion nach dem Lambert-Beer'schen Gesetz. Dieses Modell ist derzeit der Industriestandard. Ausführlichere Informationen finden Sie in diesem Artikel: Physisch basiertes Rendering – Cook Torrance
Eine Alternative zu dem in Azure Remote Rendering verwendeten Metalness-Roughness-PBR-Modell ist das Specular-Glossiness-PBR-Modell. Dieses Modell kann einen breiteren Bereich von Materialien darstellen. Es ist jedoch teurer und eignet sich in der Regel nicht gut für die Anwendung in Echtzeit. Eine Konvertierung von Specular-Glossiness in Metalness-Roughness ist nicht immer möglich, da (Diffuse, Specular)-Wertepaare vorhanden sind, die nicht in (BaseColor, Metalness) konvertiert werden können. Die Konvertierung in die andere Richtung ist einfacher und präziser, da alle (BaseColor, Metalness)-Paare wohldefinierten (Diffuse, Specular)-Paaren entsprechen.
API-Dokumentation
- C#-Klasse „PbrMaterial“
- C# RenderingConnection.CreateMaterial()
- C++-Klasse „PbrMaterial“
- C++ RenderingConnection::CreateMaterial()