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.
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:
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.
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. |
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.
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:
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.