MRTK2-Standard-Shader

Standard-Shaderbeispiele

Das MRTK2 Standard-Schattierungssystem verwendet einen einzelnen, flexiblen Shader, der Visuals ähnlich dem Standard-Shader von Unity erreichen kann, Fluent Design System Prinzipien implementiert und auf Mixed Reality-Geräten leistungsfähig bleibt.

Beispielszenen

Die Shadermaterialbeispiele finden Sie in der MaterialGallery-Szene unter MRTK/Examples/Demos/StandardShader/Scenes/. Alle Materialien in dieser Szene verwenden den MRTK/Standard-Shader.

Materialkatalog

Eine Vergleichsszene zum Vergleichen und Testen des MRTK/Standard-Shaders mit dem Unity/Standard-Shaderbeispiel finden Sie in der StandardMaterialComparison-Szene unter MRTK/Examples/Demos/StandardShader/Scenes/.

Materialvergleich

Aufbau

Das MRTK/Standard-Schattierungssystem ist ein "Uber-Shader", der das Shader-Programmvariantenfeature von Unity verwendet, um automatisch optimalen Shadercode basierend auf Materialeigenschaften zu generieren. Wenn ein Benutzer Materialeigenschaften im Materialinspektor auswählt, fallen nur Leistungskosten für features an, die er aktiviert hat.

Materialinspektor

Für den MRTK/Standard-Shader ist ein benutzerdefinierter Materialinspektor mit dem Namen MixedRealityStandardShaderGUI.csvorhanden. Der Inspektor aktiviert/deaktiviert Shaderfeatures automatisch auf der Grundlage der Benutzerauswahl und hilft beim Einrichten des Renderzustands. Weitere Informationen zu den einzelnen Features finden Sie im Unity-Editor, um eine QuickInfo zu finden.

Materialinspektor

Der erste Teil des Inspektors steuert den Renderzustand des Materials. Der Renderingmodus bestimmt, wann und wie ein Material gerendert wird. Das Ziel des MRTK/Standard-Shaders ist es, die im Unity/Standard-Shader gefundenen Renderingmodi zu Spiegel. Der MRTK/Standard-Shader enthält auch einen additiven Renderingmodus und einen benutzerdefinierten Renderingmodus für die vollständige Benutzersteuerung.

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 glanzlichen Hervorhebungen oder Reflexionen, die es aufweisen kann. Dieser Modus ist nützlich, wenn Sie ein Objekt animieren möchten, das ein- oder ausgehend wird. Es eignet sich nicht für die Darstellung realistischer transparenter Materialien wie klarsichtigem Kunststoff oder Glas, da die Reflexionen und Hervorhebungen ebenfalls ausgeblendet werden.
Transparent Geeignet für das Rendern realistischer transparenter Materialien wie klarem Kunststoff oder Glas. In diesem Modus übernimmt das Material selbst Transparenzwerte (basierend auf dem Alphakanal der Textur und dem Alpha der Farbfarbe). 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.

Renderingmodi

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.

Leistung

Einer der Hauptvorteile der Verwendung des MRTK Standard-Shaders gegenüber dem Unity-Standard-Shader ist die Leistung. Der MRTK Standard-Shader ist erweiterbar, um nur die aktivierten Features zu verwenden. Der MRTK Standard-Shader wurde jedoch auch geschrieben, um vergleichbare ästhetische Ergebnisse wie der Unity Standard-Shader zu liefern, aber zu deutlich 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. Natürlich kann das Ausmaß der Berechnungen durch aktivierte Features und andere Renderingkonfigurationen schwanken. Im Allgemeinen führt der MRTK Standard-Shader jedoch deutlich weniger Berechnungen durch als der Unity Standard-Shader.

Beispiel für Unity Standard-Shaderstatistiken

Unity Standard-Shaderstatistik

Beispiel für MRTK Standard-Shaderstatistiken

MRTK-Standard-Shaderstatistik

Hinweis

Diese Ergebnisse können generiert werden, indem Sie ein Shaderobjekt im Unity-Inspektor auswählen und anzeigen und dann auf die Schaltfläche Code kompilieren und anzeigen klicken.

Beleuchtung

Das MRTK/Standard verwendet eine einfache Näherung für die Beleuchtung. Da dieser Shader keine physikalische Korrektheit und Energieeinsparung berechnet, rendert er schnell und effizient. Blinn-Phong ist die primäre Beleuchtungstechnik, die mit Fresnel und bildbasierter Beleuchtung kombiniert wird, um die physische Beleuchtung zu nähern. Der Shader unterstützt 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). Dynamische Punktlichter, Spotlichter oder andere Unity-Leuchten werden in Echtzeitbeleuchtung nicht berücksichtigt.

Kugelflächenfunktionen

Der Shader verwendet Lichttests, um Licht in der Szene mithilfe von sphärischen Oberschwingungen anzunähern, sofern aktiviert. Sphärische Oberschwingungsberechnungen werden pro Scheitelpunkt durchgeführt, um die Berechnungskosten zu reduzieren.

Lightmapping

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

Schwebelicht

Näherungslicht

Unterstützung für einfache skriptfähige Renderpipelines

Das MRTK enthält einen Upgradepfad, damit Entwickler die Lightweight Scriptable Render Pipeline (LWRP) von Unity mit MRTK-Shadern nutzen können. Getestet im Paket Unity 2019.1.1f1 und Lightweight RP 5.7.2. Anweisungen zu den ersten Schritten mit dem LWRP finden Sie auf dieser Seite.

Wählen Sie zum Durchführen des MRTK-Upgrades Folgendes aus: Mixed Reality Toolkit –> Hilfsprogramme –> MrTK-Standard-Shader für Lightweight Render-Pipeline aktualisieren

lwrp-Upgrade

Nach dem Upgrade wird der MRTK/Standard-Shader geändert, und alle Magenta-Materialien (Shaderfehler) sollten behoben werden. Um zu überprüfen, ob das Upgrade erfolgreich durchgeführt wurde, überprüfen Sie die Konsole auf: Aktualisierte Assets/MixedRealityToolkit/StandardAssets/Shaders/MixedRealityStandard.shader für die Verwendung mit der Lightweight-Renderpipeline.

UGUI-Unterstützung

Das MRTK Standard-Schattierungssystem funktioniert mit dem integrierten Ui-System von Unity. Bei Unity-UI-Komponenten ist die unity_ObjectToWorld-Matrix nicht die Transformationsmatrix der lokalen Transformation, auf der die Grafikkomponente lebt, sondern die des übergeordneten Canvas-Elements. Für viele MRTK-/Standard-Shadereffekte muss die Objektskalierung bekannt sein. Zur Lösung dieses Problems speichert ScaleMeshEffect.cs während der Erstellung des UI-Gittermodells Skalierungsinformationen in den UV-Kanalattributen.

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

Eine Canvas innerhalb von MRTK fordert zum Hinzufügen eines auf ScaleMeshEffect.cs , wenn eine erforderlich ist:

Skalierungsgittereffekt

Textur-Kombinierer

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

Beispiel für die Kanalzuordnung

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

Alternativ können Sie das MRTK-Textur-Kombinationstool verwenden. Wählen Sie zum Öffnen des Tools Folgendes aus: Mixed Reality Toolkit –> Hilfsprogramme –> Texturkomprimierender, wodurch das folgende Fenster geöffnet wird:

Beispiel für Texturkomprimieren

Dieses Fenster kann automatisch ausgefüllt werden, indem Sie einen Unity Standard-Shader auswählen und auf "Aus Standardmaterial automatisch auffüllen" klicken. Sie können auch manuell eine Textur (oder einen konstanten Wert) pro roter, grüner, blauer oder Alphakanal angeben. Die Texturkombination ist GPU-beschleunigt und erfordert nicht, dass die Eingabetextur cpu-zugänglich ist.

Zusätzliche Featuredokumentation

Im Folgenden finden Sie zusätzliche Details zu einigen Features, die mit dem MRTK/Standard-Shader verfügbar sind.

Primitives Clipping

primitives Clipping

Gitterumrisse

Viele Techniken für Gitterkonturen werden mithilfe einer Nachverarbeitungstechnik realisiert. Die Nachbearbeitung bietet qualitativ hochwertige Gliederungen, kann aber auf vielen Mixed Reality-Geräten unerschwinglich teuer sein. Sie finden eine Szene, die die Verwendung von Gittergliederungen veranschaulicht, in der OutlineExamples-Szene unter MRTK/Examples/Demos/StandardShader/Scenes/.

Netzgliederung

MeshOutline.cs und MeshOutlineHierarchy.cs können verwendet werden, um eine Kontur um einen Gitterrenderer zu rendern. Wenn Sie diese Komponente aktivieren, wird ein zusätzlicher Renderdurchlauf des dargestellten Objekts eingeführt. Es ist jedoch für die ausführungsfähige Ausführung auf mobilen Mixed Reality Geräten konzipiert und verwendet keine Postprozesse. Zu den Einschränkungen dieses Effekts zählt, dass er nicht gut bei nicht wasserdichten Objekten (oder Objekten, die zweiseitig sein müssen) funktioniert, und bei überlappenden Objekten Probleme mit der Tiefensortierung auftreten können.

Das Gliederungsverhalten ist für die Verwendung in Verbindung mit dem MRTK/Standard-Shader konzipiert. Gliederungsmaterialien sind in der Regel eine durchgehende, unbeleuchtete Farbe, können jedoch so konfiguriert werden, dass eine breite Palette von Effekten erzielt wird. Die Standardkonfiguration eines Gliederungsmaterials lautet wie folgt:

Netzgliederungsmaterial
  1. Tiefenschreibvorgänge: Sollte für Gliederungsmaterialien deaktiviert werden, um sicherzustellen, dass die Gliederung nicht das Rendern anderer Objekte verhindert.
  2. Vertex-Extrusion: muss aktiviert sein, um die Kontur zu rendern.
  3. Use Smooth Normals (Glatte Normale verwenden): Diese Einstellung ist für einige Gittermodelle optional. Die Extrusion erfolgt durch Verschieben eines Vertex entlang eines Vertex-Normals. Bei einigen Gittermodellen führt die Extrusion entlang der Standardnormalen zu Unterbrechungen in der Kontur. Um diese Diskontinuitäten zu beheben, können Sie dieses Kontrollkästchen aktivieren, um einen weiteren Satz geglätteter Normals zu verwenden, die von generiert werden. MeshSmoother.cs

MeshSmoother.cs ist eine Komponente, die verwendet werden kann, um automatisch geglättete Normale auf einem Gitter zu generieren. Diese Methode gruppiert Scheitelpunkte in einem Gitter, die denselben Ort im Raum teilen, und mittelt dann die Normale dieser Scheitelpunkte. Dieser Prozess erstellt eine Kopie des zugrunde liegenden Gitters und sollte nur bei Bedarf verwendet werden.

Smooth Normals Outline
  1. Smooth Normals, die über MeshSmoother.csgeneriert werden.
  2. Standardnormale, die verwendet werden, beachten Sie die Artefakte um die Würfelecke.

Schablonentests

Integrierte Unterstützung für konfigurierbare Schablonentests, um eine breite Palette von Effekten zu erzielen. Wie z. B. Portale:

Schablonentest

Unterstützung für instanzierte Farben

Unterstützung für instanzierte Farben, um Tausenden von Gittern mit GPU-Instanz eindeutige Materialeigenschaften zu geben:

instanzierte Eigenschaften

Triplanar-Zuordnung

Triplanar-Zuordnung ist eine Technik, um ein Gittermodell programmgesteuert mit Textur zu versehen. Wird häufig im Gelände verwendet, Gitter ohne UVs oder schwer zu entpackende Formen. Diese Implementierung unterstützt die Welt- oder lokale Raumprojektion, die Festlegung der Glätte der Verschmelzung und die normale Kartenunterstützung. Beachten Sie, dass jede verwendete Textur 3 Texturbeispiele erfordert, sodass Sie in leistungskritischen Situationen sparsam verwenden.

triplanar

Vertexextrusion

Vertexextrusion im Weltraum. Nützlich zum Visualisieren von extrudierten begrenzungsenden Volumes oder Übergängen in/aus Gitternetzen.

normaler Kartenmaßstab 1

Sonstiges

Ein Kontrollkästchen zum Steuern von Albedo-Optimierungen. Als Optimierung werden Albedo-Vorgänge deaktiviert, wenn keine Albedotextur angegeben wird. Dies ist nützlich, um das Laden von Remotetexturen zu steuern.

Aktivieren Sie einfach dieses Kontrollkästchen:

albedo-Zuweisung

Pro Pixel clipping Texturen, lokales edgebasiertes Antialiasing und normale Kartenskalierung werden unterstützt.

normaler Kartenmaßstab 2

Weitere Informationen