Freigeben über


MRTK2-Standard-Shader

Beispiele für Standard Shader

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

Beispielszenen

Die Beispiele für Shadermaterial 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

Architektur

Das MRTK/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.

Materialprüfung

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

Materialprüfung

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 besteht darin, 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
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 glanzlichen Hervorhebungen 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 Farbfarbe). 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.

Renderingmodi

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.

Leistung

Einer der Hauptvorteile bei der Verwendung des MRTK Standard Shader gegenüber dem Unity-Standard-Shader ist die Leistung. Der MRTK Standard Shader ist erweiterbar, um nur die aktivierten Features zu nutzen. Der MRTK-Standard-Shader wurde 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 auf der 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.

Unity Standard Beispiel für Shaderstatistiken

Unity Standard Shader Statistics

Beispiel für eine MRTK-Standard-Shaderstatistik

MRTK-Standard-Shaderstatistik

Hinweis

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

Beleuchtung

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

Sphärische Harmonischen

Der Shader verwendet Lichttests, um die Beleuchtung in der Szene mithilfe von sphärischen Oberschwingungen anzunähern, sofern aktiviert. Sphärische Oberschwingungsberechnungen werden pro Vertex durchgeführt, 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 einfach als statisch (oder lightmap static), um Lightmaps zu verwenden.

Hover-Licht

Näherungslicht

Einfache Skriptfähige Renderpipeline-Unterstützung

Das MRTK enthält einen Upgradepfad, damit Entwickler die Lightweight Scriptable Render Pipeline (LWRP) von Unity mit MRTK-Shadern verwenden 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 Ausführen des MRTK-Upgrades Folgendes aus: Mixed Reality Toolkit –> Hilfsprogramme –> Upgraden von MRTK Standard Shader für Lightweight Render Pipeline

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 für Folgendes: Aktualisierte Ressourcen/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. In Unity-Ui-Komponenten ist die unity_ObjectToWorld-Matrix nicht die Transformationsmatrix der lokalen Transformation, auf der sich die Grafikkomponente befindet, sondern die des übergeordneten Canvas-Elements. Für viele MRTK-/Standard-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.

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.

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

Skalierungsgittereffekt

Textur-Kombinierer

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

Beispiel für eine Kanalzuordnung

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

Alternativ können Sie auch das MRTK-Texturkomprimieren-Tool verwenden. Wählen Sie zum Öffnen des Tools Folgendes aus: Mixed Reality Toolkit –> Hilfsprogramme –> Textur-Kombinierer. Daraufhin wird das folgende Fenster geöffnet:

Beispiel für den Texturkomprimieren

Dieses Fenster kann automatisch ausgefüllt werden, indem Sie einen Unity Standard Shader auswählen und auf "Autopopulate from Standard Material" klicken. Sie können auch manuell eine Textur (oder einen konstanten Wert) pro Rot-, Grün-, Blau- oder Alphakanal angeben. Die Texturkombination ist GPU-beschleunigt und erfordert nicht, dass auf die Eingabetextur von der CPU zugegriffen werden kann.

Dokumentation zu zusätzlichen Features

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

Primitives Clipping

primitives Clipping

Gitterumrisse

Viele Gitterkonturtechniken werden mithilfe einer Nachbearbeitungstechnik durchgeführt. Die Nachbearbeitung bietet qualitativ hochwertige Gliederungen, kann aber auf vielen Mixed Reality Geräten unerschwinglich teuer sein. Eine Szene, die die Verwendung von Gitterkonturen veranschaulicht, finden Sie in der Szene OutlineExamples unter MRTK/Examples/Demos/StandardShader/Scenes/.

Gitterkontur

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 es werden keine Postprozesse verwendet. Zu den Einschränkungen dieses Effekts gehören, dass sie bei Objekten, die nicht wasserdicht sind (oder zweiseitig sein müssen) nicht gut funktioniert, und Tiefensortierungsprobleme können bei überlappenden Objekten auftreten.

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

Gitterkonturmaterial
  1. Tiefenschreibvorgänge sollten für Gliederungsmaterialien deaktiviert werden, um sicherzustellen, dass die Gliederung nicht das Rendern anderer Objekte verhindert.
  2. Vertexextrusion : Muss aktiviert werden, um die Gliederung zu rendern.
  3. Verwenden Sie Smooth Normals (Smooth Normals) – diese Einstellung ist für einige Gitter optional. Die Extrusion erfolgt durch Verschieben eines Scheitelpunkts entlang einer Vertexnormal. Bei einigen Gittern, die entlang der Standardnormalen extrudiert werden, führt dies zu Diskontinuitäten in der Kontur. Um diese Diskontinuitäten zu beheben, können Sie dieses Kontrollkästchen aktivieren, um einen weiteren Satz geglätteter Normalitäten zu verwenden, die von generiert werden. MeshSmoother.cs

MeshSmoother.cs ist eine Komponente, mit der automatisch geglättete Normaldaten in einem Gitter generiert werden können. Diese Methode gruppiert Scheitelpunkte in einem Gitter, die dieselbe Position im Raum teilen, und durchschnittlich dann die Normalwerte 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. 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:

Instanzeigenschaften

Triplanar-Zuordnung

Triplanar mapping ist eine Technik zum programmgesteuerten Strukturieren eines Gitters. 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 3 Texturbeispiele erforderlich sind. Verwenden Sie daher in leistungskritischen Situationen sparsam.

triplanar

Vertexextrusion

Vertexextrusion im Weltall. Nützlich zum Visualisieren von extrudierten Begrenzungsvolumen oder Übergängen in/ausgehenden Gitternetzen.

normaler Kartenmaßstab 1

Sonstiges

Ein Kontrollkästchen zum Steuern von Albedo-Optimierungen. Als Optimierungs-Albedo-Vorgänge werden deaktiviert, wenn keine Albedo-Textur angegeben ist. Dies ist nützlich für die Steuerung des Remotetexturladevorgangs.

Aktivieren Sie einfach dieses Kontrollkästchen:

Albedo-Zuweisung

Beschneidungstexturen pro Pixel, lokales Edge-basiertes Antialiasing und normale Kartenskalierung werden unterstützt.

normaler Kartenmaßstab 2

Siehe auch