Standard-Shader für Grafiktools – MRTK3

Die Grafiktools Standard Schattierungssystem verwendet einen flexiblen Shader, der Visuals ähnlich dem Standard (oder Lit)-Shader von Unity erreichen kann. Es implementiert Fluent Design System Prinzipien und bleibt auf Mixed Reality-Geräten leistungsfähig.

Beispiel für Standard Shadermaterialkatalog

Beispiel

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

Architektur

Das Grafiktools/Standard Schattierungssystem ist ein "Uber-Shader", der das Shaderprogrammvariantenfeature von Unity verwendet, um automatisch optimalen Shadercode basierend auf Materialeigenschaften zu generieren. Wenn ein Benutzer Materialeigenschaften im Materialinspektor auswählt, fallen nur für aktivierte Features Leistungskosten an.

Zur besseren Unterstützung herkömmlicher Unity-Workflows und UnityUI-Workflows (Canvas) verfügt das Grafiktools-/Standard-Schattierungssystem über zwei Shadereinstiegspunkte:

Kontext Default UnityUI
Name Grafiktools/Standard Grafiktools/Standard Canvas
Shader GraphicsToolsStandard GraphicsToolsStandardCanvas

Beide Shader sind größtenteils identisch, da sie gemeinsame Shadercode-Elemente verwenden. Die Grafiktools/Standard Canvas enthält zusätzliche Logik, die für UnityUI spezifisch ist.

Der folgende Shader umfasst die Stromversorgung des Grafiktools/Standard Schattierungssystems:

Include Zweck
GraphicsToolsStandardProgram Enthält die Vertex- und Fragment-Shader-Einstiegspunktmethoden (die Kernimplementierung).
GraphicsToolsStandardMetaProgram Enthält die Vertex- und Fragment-Shader-Einstiegspunktmethoden, die von Unity für statische Beleuchtung verwendet werden (nicht zur Laufzeit verwendet).
GraphicsToolsStandardInput Definitionen für Vertexattribute, Vertexinterpolatoren, Texturen, Textursampler, Konstantenpuffer pro Material, globale Eigenschaften und Konstanten.
GraphicsToolsCommon Wiederverwendbare Methoden und Definierten.

Renderpipelineunterstützung

Unity verfügt über eine Handvoll Renderpipelines , aus der Entwickler auswählen können. Die Grafiktools Standard Schattierungssystem sind so konzipiert, dass sie automatisch mit der integrierten Renderpipeline von Unity oder der Universal Render Pipeline (URP) zusammenarbeiten. Es ist nicht erforderlich, Shader basierend auf der Pipeline zu wechseln. Im Folgenden finden Sie eine Unterstützungsmatrix:

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

UnityUI-Unterstützung

Die Grafiktools Standard Schattierungssystem funktioniert mit dem integrierten Benutzeroberflächessystem von Unity namens UnityUI. Sollte Graphics Tools/Standard Canvas für alle Materialien in UnityUI-Canvases verwendet werden.

Ein Canvas - oder CanvasRenderer in Grafiktools fordert zum Hinzufügen eines auf ScaleMeshEffect.cs , wenn eine erforderlich ist:

Warnung des Scale Mesh Effect Inspector

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 Canvas-Elements. Für viele Grafiktools/Standard Canvas-Shadereffekte muss die Objektskalierung bekannt sein. Um dieses Problem zu beheben, speichert skalierungsinformationen während der ScaleMeshEffect.cs Erstellung von UI-Gittern in UV-Kanalattribute.

Tipp

Wenn Sie eine Unity Image-Komponente verwenden, wird empfohlen, "None (Sprite)" für das Quellimage anzugeben, um zu verhindern, dass die Unity-Benutzeroberfläche zusätzliche Scheitelpunkte generiert.

Materialprüfung

Für die Shader Grafiktools/Standard und Grafiktools/Standard Canvas mit dem Namen StandardShaderGUI.cs ist ein benutzerdefinierter Materialinspektor vorhanden. Der Inspektor aktiviert/deaktiviert automatisch Shaderfeatures, basierend auf der Benutzerauswahl und hilfen beim Einrichten des Renderzustands. Weitere Informationen zu den einzelnen Features , die im Unity-Editor auf jede Eigenschaft zeigen, finden Sie eine QuickInfo.

Hinweis

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

Materialprüfung für Grafiktools/Standard

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

Renderingmodus

Der erste Teil des Inspektors steuert den Renderzustand des Materials. Der Renderingmodus bestimmt, wann und wie ein Material gerendert wird. Das Ziel der Graphics Tools/Standard Shader und Graphics Tools/Standard Canvas besteht darin, die Im Unity/Standard-Shader gefundenen Renderingmodi zu Spiegel. Die Shader Grafiktools/Standard und Grafiktools/Standard Canvas enthalten auch einen additiven Renderingmodus und einen benutzerdefinierten Renderingmodus für die vollständige Benutzersteuerung.

Renderingmodus Beschreibung
Undurchsichtig (Standard) Geeignet für normale vollfarbige Objekte ohne transparente Bereiche.
Ausschnitt Ermöglicht die Erstellung von transparenten Effekten mit harten Kanten zwischen den undurchsichtigen und transparenten Bereichen. In diesem Modus gibt es keine halbtransparenten Bereiche, die Textur ist entweder zu 100 % undurchsichtig oder unsichtbar. Dies ist nützlich, wenn Transparenz verwendet wird, um die Form von Materialien wie Vegetation zu erstellen.
Verblassen Ermöglicht es den Transparenzwerten, ein Objekt vollständig auszublenden, einschließlich aller Glanzlichter oder Reflexionen, die es haben kann. Dieser Modus ist nützlich, wenn Sie ein Objekt animieren möchten, das ein- oder ausgehend wird. Es ist nicht geeignet, realistische transparente Materialien wie klares Kunststoff oder Glas zu rendern, da die Reflexionen und Hervorhebungen ebenfalls ausgeblendet werden.
Transparent Geeignet zum 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 der Farbtonfarbe). Reflektionen und Lichthighlights bleiben jedoch bei voller Klarheit sichtbar, wie es bei echten transparenten Materialien der Fall ist.
Additive Aktiviert einen additiven Mischmodus, der die vorherige Pixelfarbe mit der aktuellen Pixelfarbe addiert. Dies ist der bevorzugte Transparenzmodus, um Transparenzsortierungsprobleme zu vermeiden.
Benutzerdefiniert Ermöglicht die manuelle Steuerung jedes Aspekts des Renderingmodus. Nur für die erweiterte Verwendung.

Beispiel für die Beispielauffolge für Renderingmodi

Cull-Modus

Cull-Modus Beschreibung
Aus Deaktiviert die Gesichtserkennung. Culling sollte nur auf Aus festgelegt werden, wenn ein zweiseitiges Gitter erforderlich ist.
Vorder- Ermöglicht das Culling der Vorderseite.
Zurück (Standard) Aktiviert das Rückgeflechten. Rückwand-Culling sollte so oft wie möglich aktiviert werden, um die Renderingleistung zu verbessern.

Hauptkarten

Die primäre Funktion dieses Abschnitts besteht darin, die Albedofarbe des Materials und die physisch basierten Renderingoptionen zu steuern.

Um die Parität mit dem Unity Standard Shader pro Pixel metallic, Glätte, Emissive und Okklusionswerte über kanalverpackt zu steuern.

Wenn Sie channel packing verwenden, müssen Sie nur eine Textur testen und in den Arbeitsspeicher laden, anstatt vier separate Texturen. Wenn Sie Ihre Texturkarten in einem Programm wie Substance oder Photoshop schreiben, können Sie sie wie folgt von Hand packen:

Kanal Eigenschaft
Rot Metallischen
Grün Okklusion
Blau Emission (Graustufen)
Alpha Glätte

Der Hauptkartenabschnitt enthält auch eine Option für triplanare Zuordnung und Super-Sample-Antialiasing. Es enthält auch die Option zum Hinzufügen farbiger Emissionstexturkarten, sobald das Kontrollkästchen Emission aktiviert ist.

Triplanar mapping ist eine Technik zum programmgesteuerten Strukturieren eines Gitters. Es wird häufig in Gelände, Gittern ohne UVs oder schwer zu entpackenden Formen verwendet. Diese Implementierung unterstützt die Welt- oder lokale Raumprojektion, die Spezifikation der Überblendungsglättung und die normale Kartenunterstützung. Beachten Sie, dass für jede verwendete Textur drei Texturbeispiele erforderlich sind. Verwenden Sie daher in leistungskritischen Situationen sparsam.

Superbeispiel-Antialiasing sollte für alle Materialien verwendet werden, die ein Symbol oder Bild anzeigen, bei denen Details aus der Entfernung wichtig sind.

Renderingoptionen

Renderingoptionen steuern hauptsächlich die Beleuchtungseinstellungen für ein Material. Dieser Materialabschnitt enthält auch eine Handvoll anderer Features, die die Farbe, Durchsichtigkeit oder Position einer Oberfläche steuern. Weitere Informationen zur Beleuchtung finden Sie unten.

Beleuchtungsvergleiche

Fluent-Optionen

Fluent ist ein Designframework, das über Benutzeroberflächenkomponenten in Microsoft-Produkten hinweg verwendet wird. Dieser Abschnitt enthält eine Reihe von Features, mit denen Fluent-Entwurfssystemprinzipien auf beliebigen Oberflächen emuliert werden können. Wenn Sie auf der Suche nach maßgeschneiderten Fluent-Shadern sind, finden Sie diese im Namespace Grafiktools/Canvas und Grafiktools/Shader-Namespace ohne Canvas .

Erweiterte Optionen

Ähnlich wie im erweiterten Abschnitt in den integrierten Shadern von Unity. Dieser Abschnitt steuert die Renderingreihenfolge und ob GPU-Instanziierungsvarianten erstellt werden sollen. Darüber hinaus gibt es konfigurierbare Schablonentest-Unterstützungen, um eine vielzahl von Effekten zu erzielen. z. B. Portale:

Portalbeispiel

Beleuchtung

Die Shader Grafiktools/Standard und Grafiktools/Standard Canvas verwenden eine einfache Näherung für die Beleuchtung. Da die Shader nicht auf physische Korrektheit und Energieeinsparung berechnen, werden sie schnell und effizient gerendert. Blinn-Phong ist die primäre Beleuchtungstechnik, die mit Fresnel und bildbasierter Beleuchtung kombiniert wird, um eine annähernde physische Beleuchtung zu erzeugen. Die Shader unterstützen die folgenden Beleuchtungstechniken:

Direktionales Licht

Der Shader berücksichtigt die Richtung, Farbe und Intensität des ersten Unity Directional Light in der Szene (sofern aktiviert).

Wichtig

Dynamische Punktlichter, Scheinwerfer oder ein anderes Unity-Licht werden bei der Echtzeitbeleuchtung nicht berücksichtigt. Lichtmasken werden derzeit nicht unterstützt.

Sphärische Harmonischen

Der Shader verwendet Lichtsonden, um die Beleuchtung in der Szene mithilfe von sphärischen Harmonischen anzunähern, sofern aktiviert.

Wichtig

Sphärische Oberschwingungsberechnungen werden pro Vertex durchgeführt, und Lichtsonden werden nicht gemischt, um die Berechnungskosten zu senken.

Lichtmapping

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 Hauptvorteile der Verwendung des Standardschattierungssystems der Grafiktools gegenüber dem Unity Standard Shader ist die Leistung. Die Shader Grafiktools/Standard und Grafiktools/Standard Canvas sind so entworfen, dass sie nur die aktivierten Features verwenden. Die Shader Grafiktools/Standard und Grafiktools/Standard Canvas wurden jedoch auch geschrieben, um vergleichbare ästhetische Ergebnisse wie der Unity-Standard-Shader zu liefern, aber zu wesentlich geringeren Kosten. Eine einfache Möglichkeit zum Vergleichen der Shaderleistung ist die Anzahl von Vorgängen, die für die GPU ausgeführt werden müssen. Die Größe der Berechnungen kann durch aktivierte Features und andere Renderingkonfigurationen schwanken.

Tipp

Als Faustregel sollten Sie die Grafiktools Standard Shader über integrierte Shader auf mobilen Mixed Reality-Geräten verwenden. Es ist jedoch immer ratsam, ein Profil für Ihr Szenario mit Tools wie RenderDoc zu erstellen.

Siehe auch