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.

Helmet glTF sample model rendered by ARR

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.

    Spheres rendered with zero to full transparency 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 die AlbedoColor und die AlbedoMapGitter multipliziert. Standardmäßig ist UseVertexColor 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 das SpecularHighlights Flag aktiviert.
    • AlphaClipped: Ermöglicht harte Ausschnitte pro Pixel auf der Basis eines unter dem Wert von AlphaClipThreshold 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 Fresnelparameter FresnelEffectColor und FresnelEffectExponent bestimmt, die im Folgenden erläutert werden.
    • TransparencyWritesDepth:Wenn das TransparencyWritesDepth-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. mit AlbedoMap- oder vertex-Farben. Wenn transparency für ein Material aktiviert ist, wird der Alphakanal verwendet, um die Deckkraft anzupassen, wobei 1 vollständig undurchsichtig und 0 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 die AlphaClipped Kennzeichnung für die PbrFlags Eigenschaft festgelegt ist, werden alle Pixel, in denen der Albedo-Alphawert niedriger ist, als AlphaClipThreshold 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 und TexCoordOffset: 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 und RoughnessMap: 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 zwischen 0.0 und 1.0. Wenn Roughness gleich 0.0 ist, werden die Reflexionen scharf dargestellt. Wenn Roughness gleich 0.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 und MetalnessMap: 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 zwischen 0.0 und 1.0. Wenn Metallität ist, ist 0.0die Albedofarbe vollständig sichtbar, und das Material sieht wie Kunststoff oder Keramik aus. Wenn „metalness“ den Wert 0.5 hat, sieht das Material wie lackiertes Metall aus. Wenn Metall ist 1.0, verliert die Oberfläche fast vollständig ihre Albedofarbe und spiegelt nur die Umgebung wider. Wenn z. B. metalness den Wert 1.0 und roughness den Wert 0.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.

    Spheres rendered with different metalness and roughness values

    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 und AOScale: Ambient Occlusion macht Objekte mit Krevicen realistischer, indem Schatten zu verdeckten Bereichen hinzugefügt werden. Der Verdeckungswertebereich liegt zwischen 0.0 und 1.0, wobei 0.0 Dunkelheit (verdeckt) und 1.0 keine Verdeckung bedeutet. Wenn eine 2D-Textur als Okklusionszuordnung bereitgestellt wird, wird der Effekt aktiviert und AOScale fungiert als Multiplikator.

    An object rendered with and without ambient occlusion

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

Nächste Schritte