Grafiktools-Standard-Shader — MRTK3

Das Standard-Shadingsystem aus den Grafiktools verwendet einen flexiblen Shader, der eine ähnliche visuelle Darstellung wie der Standard-Shader (oder Lit-Shader) von Unity erreichen kann. Es implementiert Prinzipien des Fluent Design System und bietet auf Mixed Reality-Geräten eine hohe Leistung.

Materialkatalogbeispiel für Standard-Shader

Beispiel

Mehrere Demonstrationen von Grafiktools-/Standard-Shadervarianten finden Sie im Materialkatalog-Beispiel. Beispiele für Grafiktools-/Standard Canvas finden Sie im UnityUI-Beispiel

Aufbau

Das Grafiktools-/Standard-Shadingsystem ist ein „Über-Shader“, der die Variantenfunktion des Unity-Shaderprogramms verwendet, um ausgehend von Materialeigenschaften automatisch optimalen Shadercode zu generieren. Wenn ein Benutzer Materialeigenschaften im Materialinspektor auswählt, fallen Leistungskosten nur für die aktivierten Features an.

Zur besseren Unterstützung herkömmlicher Unity-Workflows und UnityUI-Workflows (Zeichenbereich-Workflows) weist das Grafiktools-/Standard-Shadingsystem zwei Shader-Einstiegspunkte auf:

Kontext Standard UnityUI
Name Grafiktools/Standard Grafiktools/Standard Zeichenbereich
Shader GraphicsToolsStandard GraphicsToolsStandardCanvas

Beide Shader sind großenteils identisch, da sie beide gängige Shadercode-Includedateien enthalten. Der Grafiktools-/Standard Canvas -Shader enthält zusätzliche Logik, die für UnityUI spezifisch ist.

Der folgende Shader beinhaltet das Grafiktools-/Standard-Shadingsystem:

Einschließen Zweck
GraphicsToolsStandardProgram Enthält die Einstiegspunktmethoden (die Kernimplementierung) der Vertex- und Fragment-Shader.
GraphicsToolsStandardMetaProgram Enthält die Einstiegspunktmethoden der Vertex- und Fragment-Shader, die von Unity für statische Beleuchtung verwendet werden (zur Laufzeit nicht verwendet).
GraphicsToolsStandardInput Definitionen für Vertexattribute, Vertexinterpolatoren, Texturen, Textursampler, materialbezogene Konstantenpuffer, globale Eigenschaften und Konstanten.
GraphicsToolsCommon Wiederverwendbare Methoden und Define-Anweisungen.

Renderpipelineunterstützung

Unity verfügt über eine Handvoll Renderpipelines, unter denen Entwickler wählen können. Das Standard-Shadersystem der Grafiktools ist für die automatische Zusammenarbeit mit der integrierten Renderpipeline von Unity oder der universellen Renderpipeline (URP) konzipiert. Es ist nicht erforderlich, Shader basierend auf der Pipeline zu wechseln. Unten sehen Sie eine Unterstützungsmatrix:

Pipeline Unterstützt Ausnahmen
Integrierte Renderpipeline „Weichzeichnermodi“ in Acryl werden nicht unterstützt.
Universelle Renderpipeline (URP)
High Definition Render Pipeline (HDRP)
Benutzerdefinierte Renderpipeline Die Unterstützung hängt davon ab, wie die Pipeline erstellt wird.

UnityUI-Unterstützung

Das Standard-Shadersystem der Grafiktools funktioniert mit dem integrierten UI-System von Unity, das den Namen UnityUI trägt. Der Graphics Tools/Standard Canvas sollte für alle Materialien innerhalb von UnityUI-Zeichenbereichen verwendet werden.

Ein Canvas oder CanvasRenderer in den Grafiktools fordert bei Bedarf einen ScaleMeshEffect.cs als Ergänzung an:

Prüfungswarnung für ScaleMeshEffect

Bei UnityUI-Komponenten ist die unity_ObjectToWorld-Matrix (oder UNITY_MATRIX_M in URP) nicht die Transformationsmatrix der lokalen Transformation, auf der sich die Grafikkomponente befindet, sondern die des übergeordneten Zeichenbereichs. Für viele Grafiktools/Standard-Canvas-Shadereffekte muss der Objektmaßstab bekannt sein. Zur Lösung dieses Problems speichert ScaleMeshEffect.cs während der Erstellung des UI-Gittermodells Skalierungsinformationen in den UV-Kanalattributen.

Tipp

Wenn Sie eine Unity Image-Komponente verwenden, empfiehlt es sich, „Ohne (Sprite)“ für das Quellimage anzugeben, um zu verhindern, dass Unity UI zusätzliche Scheitelpunkte generiert.

Materialinspektor

Für die Shader Grafiktools/Standard und Grafiktools/Standard Canvas ist ein Materialinspektor mit dem Namen StandardShaderGUI.cs vorhanden. Der Inspektor aktiviert/deaktiviert Shaderfeatures automatisch auf der Grundlage der Benutzerauswahl und hilft beim Einrichten des Renderzustands. Zum Anzeigen weiterer Informationen über die einzelnen Features zeigen Sie auf die einzelnen Eigenschaften im Unity-Editor, um eine QuickInfo anzuzeigen.

Hinweis

Die Benutzeroberfläche des Inspektors ist dynamisch. Teile der Benutzeroberfläche ändern sich, wenn Features aktiviert und deaktiviert werden.

Materialinspektor für Grafiktools/Standard

Der Inspektor kann in eine Handvoll Featurebereiche unterteilt werden, wie unten beschrieben.

Renderingmodus

Der erste Teil des Inspektors steuert den Renderzustand des Materials. Der Renderingmodus bestimmt, wann und wie ein Material gerendert wird. Das Ziel der Shader Graphics Tools/Standard und Graphics Tools/Standard Canvas ist es, die Renderingmodi aus den Unity-/Standard-Shadern zu spiegeln. Die Shader Grafiktools/Standard und Grafiktools/Standard Canvas umfassen außerdem einen additiven Renderingmodus und einen benutzerdefinierten Renderingmodus für vollständige Benutzerkontrolle.

Renderingmodus BESCHREIBUNG
Nicht transparent (Standard) Geeignet für normale Festkörperobjekte ohne transparente Bereiche.
Ausschnitt Ermöglicht die Erstellung von Transparenzeffekten mit harten Kanten zwischen den undurchsichtigen und transparenten Bereichen. In diesem Modus gibt es keine halbtransparenten Bereiche, die Textur ist entweder 100 % deckend oder unsichtbar. Dies ist nützlich, wenn Transparenz verwendet wird, um die Form von Materialien zu erstellen, z. B. Vegetation.
Einblenden Ermöglicht es den Transparenzwerten, ein Objekt vollständig auszublenden, einschließlich aller möglicherweise vorhandenen spiegelnden Glanzlichter oder Reflexionen. Dieser Modus ist nützlich, wenn Sie das Ein- oder Ausblenden eines Objekts animieren möchten. Er eignet sich nicht für das Rendern realistischer transparenter Materialien wie etwa durchsichtigem Kunststoff oder Glas, da die Reflexionen und Glanzlichter ebenfalls ausgeblendet werden.
Transparent Geeignet für das Rendern realistischer transparenter Materialien wie klarem Kunststoff oder Glas. In diesem Modus nimmt das Material selbst Transparenzwerte an (basierend auf dem Alphakanal der Textur und dem Alpha des Farbtons). Spiegelungen und Glanzlichter bleiben jedoch in voller Klarheit sichtbar, wie es bei echten transparenten Materialien der Fall ist.
Additiv Aktiviert einen additiven Verschmelzungsmodus, der die vorherige Pixelfarbe zur aktuellen Pixelfarbe summiert. Dies ist der bevorzugte Transparenzmodus zum Vermeiden von Transparenzsortierungsproblemen.
Benutzerdefiniert Ermöglicht die manuelle Steuerung jedes Aspekts des Renderingmodus. Nur zur fortgeschrittenen Verwendung.

Beispielauflistung der Renderingmodi

Auslesemodus

Auslesemodus BESCHREIBUNG
Aus Deaktiviert die Auslese von Flächen (Face Culling). Die Auslese sollte nur deaktiviert werden, wenn ein zweiseitiges Gittermodell erforderlich ist.
Front Ermöglicht die Auslese der Frontfläche.
Zurück (Standard) Aktiviert die Auslese der Rückfläche. Auslese der Rückfläche (Back Face Culling) sollte möglichst oft aktiviert werden, um die Renderingleistung zu verbessern.

Hauptkarten

Die primäre Funktion dieses Abschnitts besteht darin, die Albedo-Farbe und die physischen Renderingoptionen des Materials zu steuern.

Zum Verbessern der Parität mit dem Unity-Standard-Shader können die Werte für Metallisch, Glätte, Emissiv und Okklusion alle pixelweise durch Kanalpackung gesteuert werden.

Wenn Sie Kanalpackung verwenden, brauchen Sie nur eine Textur in den Arbeitsspeicher zu laden, anstelle von vier separaten. Wenn Sie Ihre Texturkarten in einem Programm wie Substance oder Photoshop schreiben, können Sie sie wie folgt manuell packen:

Kanal Eigenschaft
Red Metallisch
Grün Okklusion
Blau Emission (Grauskala)
Alpha Glätte

Der Hauptkartenabschnitt weist außerdem eine Option für die Triplanar-Zuordnung und Anti-Aliasing per Supersampling auf. Er enthält darüber hinaus die Option zum Hinzufügen farbiger Emissionstexturkarten, wenn das Kontrollkästchen „Emission“ aktiviert wird.

Triplanar-Zuordnung ist eine Technik, um ein Gittermodell programmgesteuert mit Textur zu versehen. Sie wird häufig für Gelände, Gittermodelle ohne UVs oder schwierig abzuwickelnde Formen verwendet. Diese Implementierung unterstützt die Welt- oder lokale Raumprojektion, die Festlegung der Glätte der Verschmelzung und die normale Kartenunterstützung. Beachten Sie, dass für jede verwendete Textur drei Texturbeispiele erforderlich sind, setzen Sie sie also in leistungskritischen Situationen sparsam ein.

Anti-Aliasing durch Supersampling sollte für alle Materialien verwendet werden, die ein Symbol oder Bild anzeigen, dessen Details auf Distanz kritisch sind.

Renderingoptionen

Renderingoptionen steuern hauptsächlich die Beleuchtungseinstellungen für ein Material. Dieser Materialabschnitt enthält außerdem eine Handvoll anderer Features, die die Farbe, Lichtdurchlässigkeit oder Position einer Fläche steuern. Weitere Details zur Beleuchtung finden Sie unten.

Beleuchtungsvergleich

Fluent-Optionen

Fluent ist ein Designframework, das in Microsoft-Produkten übergreifend für UI-Komponenten verwendet wird. Dieser Abschnitt enthält eine Handvoll Features, die das Emulieren von Prinzipien des Fluent-Designsystems auf beliebigen Oberflächen unterstützen. Wenn Sie nach maßgeschneiderten Fluent-Shadern suchen, finden Sie sie im Shader-Namespace Grafiktools/Canvas und Grafiktools/Non-Canvas.

Erweiterte Optionen

Ähnlich dem erweiterten Abschnitt in den integrierten Shadern von Unity. Dieser Abschnitt steuert die Renderingreihenfolge und wann Varianten der GPU-Instanziierung erstellt werden sollen. Darüber hinaus gibt es konfigurierbare Schablonentests, um eine breite Palette von Effekten zu erzielen. Wie z. B. Portale:

Portal-Beispiel

Beleuchtung

Die Shader Grafiktools/Standard und Grafiktools/Standard Canvas verwenden eine einfache Näherung für die Beleuchtung. Da die Shader keine Berechnung auf physische Korrektheit und Energieeinsparung durchführen, lassen sie sich schnell und effizient rendern. Blinn-Phong wird primär als Beleuchtungstechnik verwendet und mit Fresnel und bildbasierter Beleuchtung kombiniert, um eine Annäherung an eine physikalisch fundierte Beleuchtung zu liefern. Die Shader unterstützen die folgenden Beleuchtungstechniken:

Gerichtetes Licht

Der Shader berücksichtigt die Richtung, Farbe und Intensität des ersten gerichteten Unity-Lichts in der Szene (falls aktiviert).

Wichtig

Dynamische Punktlichter, Spotlights oder andere Unity-Lichtquellen werden bei der Beleuchtung in Echtzeit nicht berücksichtigt. Lichtmasken werden derzeit nicht unterstützt.

Kugelflächenfunktionen

Der Shader verwendet Lichtsonden, um Lichtquellen in der Szene mithilfe von Kugelflächenfunktionen näherungsweise wiederzugeben, wenn sie aktiviert sind.

Wichtig

Berechnungen von Kugelflächenfunktionen werden durch Scheitelberechnungen ausgeführt, und Lichtsonden werden nicht verschmolzen, um die Berechnungskosten zu verringern.

Lightmapping

Bei statischer Beleuchtung berücksichtigt der Shader Lightmaps, die vom Lightmapping-System von Unity erstellt wurden. Markieren Sie den Renderer als statisch (oder Lightmap-statisch), um Lightmaps zu verwenden.

Leistung

Einer der wichtigsten Vorteile bei der Verwendung des Standard-Shader-Systems der Grafiktools gegenüber dem Unity-Standard-Shader ist die Leistung. Die Shader Grafiktools/Standard und Grafiktools/Standard Canvas sind so ausgelegt, dass nur die aktivierten Features verwendet werden. Die Shader Grafiktools/Standard und Grafiktools/Standard Canvas wurden aber darüber hinaus so geschrieben, dass sie ästhetisch vergleichbare Ergebnisse liefern wie der Unity-Standard-Shader, jedoch zu weit geringeren Kosten. Ein einfaches Verfahren zum Vergleichen der Shaderleistung zieht die Anzahl der Vorgänge heran, die auf der GPU ausgeführt werden müssen. Der Umfang der Berechnungen kann aufgrund aktivierter Features und anderer Renderingkonfigurationen schwanken.

Tipp

Als Daumenregel sollten Sie auf mobilen Mixed Reality-Geräten den Grafiktools-Standard-Shader anstelle der integrierten Shader verwenden. Es ist trotzdem immer sinnvoll, mithilfe von Tools wie RenderDoc Profile für Ihr Szenario zu generieren.

Weitere Informationen