Materialinstanzierung in Unreal Engine wird verwendet, um das Erscheinungsbild eines Materials zu ändern, ohne dass eine teure Neukompilierung des Materials erforderlich ist.
Während ein typisches Material nicht ohne Neukompilierung geändert werden kann (was vor dem Spielen geschehen muss), kann ein parametrisiertes Material in einer Materialinstanz ohne eine solche Neukompilierung bearbeitet werden. Dies bringt zahlreiche Vorteile beim Arbeitsablauf mit sich und kann die Materialleistung verbessern.

Eine im Materialinstanz-Editor geöffnete Materialinstanz. Sie können die unter Parametergruppen aufgelisteten Attribute von dieser Schnittstelle aus anpassen.
Bestimmte Arten von instanzierten Materialien können sich sogar während des Spiels als Reaktion auf Ereignisse im Spiel ändern (z. B. ein Baum, dessen Material schwarz wird und verkohlt, während es brennt). Dies ermöglicht eine enorme visuelle Flexibilität in Ihren künstlerischen Elementen.
Material-Erbe
Die Beziehung zwischen Materialien und Materialinstanzen ist eine hierarchische Beziehung aus über- und untergeordneten Objekten. Eine Materialinstanz erbt alle ihre Attribute vom übergeordneten (oder Master-) Material. Das kann beispielsweise das Materialdiagramm für eine der Stuhlrequisiten sein, die im Starterinhalt zu finden sind:

Alle aus M_Chair erstellten Materialinstanzen erben alle Attribute aus dem oben gezeigten Diagramm.

Beachten Sie die oben verwendeten Namenskonventionen. Dies ist eine bewährte Vorgehensweise, damit Sie übergeordnete Materialien und Materialinstanzen im Inhaltsbrowser leicht identifizieren können.
- Das Präfix M_ bezeichnet ein übergeordnetes Material, wie in M_Chair.
- Das Präfix MI_ bezeichnet eine Materialinstanz, wie in den beiden rechts abgebildeten Beispielen.
Da sie ihre Attribute vom übergeordneten Material erben, erscheinen neu erstellte Materialinstanzen identisch mit dem übergeordneten Material, wenn sie in der Ebene auf Objekte angewendet werden. In der nachstehenden Abbildung wird auf den Stuhl ganz links das übergeordnete Material angewendet, während der mittlere und der rechte Stuhl unveränderte Materialinstanzen verwenden.

Der wichtigste Workflow-Vorteil von Materialinstanzen besteht darin, dass Sie sie im Materialinstanz-Editor sehr schnell anpassen können, ohne jemals das Knotendiagramm bearbeiten oder das Material neu kompilieren zu müssen.
Im folgenden Video werden die beiden Materialinstanzen aus dem Inhaltsbrowser geöffnet und im Materialinstanz-Editor bearbeitet. Änderungen werden sofort im Hauptansichtsfenster angezeigt, während die Neukompilierung eines Standardmaterials je nach Komplexität bis zu einer Minute dauern kann.
Materialparametrierung
Es ist wichtig zu wissen, dass Sie nicht jedes einzelne Merkmal einer Materialinstanz standardmäßig bearbeiten können. Um Materialattribute innerhalb einer Instanz bearbeitbar zu machen, müssen Sie sie als Parameter im übergeordneten Material festlegen. Dies wird als Parametrieren Ihres Materials bezeichnet.
Ein Parameter wird wie jeder andere Datenknoten im Material-Editor erstellt und enthält dieselben Informationen wie sein nicht parametrisiertes Gegenstück.
Beispielsweise enthält der Ausdruck Konstante einen einzelnen Gleitkommawert und wird häufig verwendet, um Material-Inputs wie Rauheit und Metallisch zu steuern. Die parametrisierte Version dieses Knotens wird als Skalarparameter bezeichnet.

Konstanter Materialausdruck (1) und Skalarparameter (2).
Beachten Sie, dass der Skalarparameter auch zu einem benannten Wert wird, der als Kanal zum Senden von Datenwerten an eine Materialinstanz dient. Es ist wichtig, dass Sie jedem Parameter im Detailbereich einen eindeutigen, aussagekräftigen Namen geben. Wählen Sie den Knoten im Materialdiagramm aus, um auf seine Eigenschaften im Bereich Details zuzugreifen.

Im obigen Beispiel lautet der Name des Parameters Rauheit und hat einen Standardwert von 0,25.
In dem unten gezeigten einfachen parametrisierten Material ist ein Vektorparameter mit dem Input Basisfarbe verbunden, während Skalarparameter mit Metallic und Rauheit verbunden sind.

Um die Idee der Parametrisierung weiter zu veranschaulichen, wird auch ein konstanter Wert von 0,5 an den Input Specular übergeben.
Beim Öffnen im Materialexemplar-Editor sind die drei Parameter sichtbar und können bearbeitet werden, die Konstante hingegen nicht. Die Werte, die Sie Künstlern offenlegen möchten, sollten Parameter sein, und Werte, die nicht verändert werden sollen, sollten als Konstanten bestehen bleiben.

Die Parameter für Basisfarbe, Metallic und Rauheit können im Materialinstanz-Editor bearbeitet werden, während der konstante Wert Künstlern nicht angezeigt wird.
Parametertypen
Parameter können überall in Ihrem Materialdiagramm verwendet werden, um eine Vielzahl von Materialeffekten zu steuern.
Einige der wichtigsten Parametertypen sind unten dokumentiert, und eine vollständige Liste der Parameter Expressions finden Sie hier.
Skalarparameter
Ein Skalaparameter ist ein Parameter, der einen einzelnen Gleitkommawert enthält. Skalarparameter können jeden Effekt steuern, der auf einzelnen Werten basiert, wie in den obigen Beispielen für Rauheit und Metallic zu sehen ist.
Skalarparameter werden auch häufig verwendet, um den Multiplikationsfaktor eines Attributs zu steuern.

In diesem Diagramm wird ein Skalarparameter mit einer Volltonfarbe multipliziert, und das Ergebnis wird mit dem Input „Emissionsfarbe" verbunden. Der Wert im Skalarparameter steuert die Stärke des Emissionseffekts. Höhere Werte erhöhen die Emissionshelligkeit.
Vektorparameter
Ein Vektorparameter ist ein Parameter, der einen 4-Kanal-Vektorwert oder vier Fließkommawerte enthält.

Diese werden im Allgemeinen verwendet, um konfigurierbare Farben bereitzustellen, könnten aber auch dazu verwendet werden, Positionsdaten darzustellen oder einen Effekt zu steuern, der mehrere Werte erfordert.
Texturparameter
Der am häufigsten verwendete Texturparameter ist TextureSampleParameter2D, mit dem Sie Texturen innerhalb einer Materialinstanz ändern können.

Es sind mehrere zusätzliche Arten von Texturparametern verfügbar. Jede ist spezifisch für die Art der Textur, die sie akzeptiert, oder für die Art und Weise, in der sie verwendet wird. Beispiel:
- TextureSampleParameterCube akzeptiert einen TextureCube oder eine Cubemap.
- TextureSampleParameterFlipbook akzeptiert eine FlipbookTexture.
- TextureSampleParameterMeshSubUV akzeptiert ein Texture2D, das für Sub-UV-Effekte mit einem Mesh-Emitter verwendet wird.
- TextureSampleParameterMeshSubUV akzeptiert ein Texture2D, das für Sub-UV-Mischeffekte mit einem Mesh-Emitter verwendet wird.
Eine vollständige Liste der Texturparameter finden Sie unter Material Expression Reference
Statische Parameter
Statische Parameter werden zur Kompilierzeit angewendet, sodass sie im Materialinstanz-Editor, jedoch nicht vom Skript oder zur Laufzeit, bearbeitet werden können.
Sie können verwendet werden, um Zweige eines Materials auszublenden. Ein StaticSwitch-Parameter erfordert beispielsweise zwei Inputs. Er gibt den ersten Wert aus, wenn der Parameterwert wahr ist, und den zweiten, wenn er falsch ist. Dadurch entsteht ein optimalerer Code, da die durch einen statischen Parameter maskierte Verzweigung zur Laufzeit nicht ausgeführt wird.

Weitere Informationen zu den spezifischen statischen Parametertypen finden Sie unter Static Switch Parameter und Static Component Mask Parameter.
Für jede Kombination von statischen Parametern im Basismaterial, die von Instanzen verwendet werden, wird ein neues Material kompiliert.
Dies kann zu einer übermäßigen Anzahl von Shadern führen, die kompiliert werden müssen. Versuchen Sie, die Anzahl der statischen Parameter im Material und die Anzahl der Permutationen dieser statischen Parameter, die tatsächlich verwendet werden, zu minimieren.
Konstante und dynamische Instanzen
In Unreal Engine sind zwei Arten von Materialinstanzen verfügbar:
- Materialinstanzkonstante – Wird nur vor der Laufzeit berechnet.
- Dynamische Materialinstanz – Kann zur Laufzeit berechnet (und bearbeitet) werden.
Materialinstanzkonstante
Eine Materialinstanzkonstante ist ein instanziiertes Material, das nur einmal vor der Laufzeit berechnet wird. Dies bedeutet, dass sie sich während des Spiels nicht ändern kann. Obwohl sie während des gesamten Spiels konstant bleiben, haben sie dennoch den Leistungsvorteil, dass keine Kompilierung erforderlich ist.
Wenn in Ihrem Spiel beispielsweise eine Vielzahl von Autos mit unterschiedlichen Lackierungen vorhanden sind, deren Farben sich während des Spiels nicht ändern, erstellen Sie am besten ein Mastermaterial, das die grundlegenden Aspekte einer generischen Autolackierung darstellt. Erstellen Sie dann Materialinstanzkonstanten, um die Variationen für verschiedene Fahrzeugtypen, z. B. unterschiedliche Farben, unterschiedliche Rauheitsgrade usw. darzustellen. Dieser Ansatz wurde mit dem Stuhlbeispiel weiter oben auf dieser Seite demonstriert.
Materialinstanzkonstanten werden im Material Instance Constants are created within the Content Browser erstellt und im Material Instance Editor bearbeitet.
Dynamische Materialinstanz
Eine dynamische Materialinstanz (MID) ist ein instanziertes Material, das während des Spiels (zur Laufzeit) berechnet werden kann. Das bedeutet, dass Sie während des Spiels ein Skript (entweder einen kompilierten Code oder ein visuelles Blueprint-Skript) verwenden können, um die Parameter Ihres Materials zu ändern, wodurch Ihr Material während des gesamten Spiels geändert wird. Die möglichen Anwendungen dafür sind endlos und reichen von der Anzeige unterschiedlicher Schadensgrade bis hin zu wechselnden Farbtönen in einer Architekturvisualisierung.
MIDs werden im entweder aus einem parametrisierten Material oder einer Materialinstanzkonstante im Skript erstellt. In Blueprint würde man ein bestimmtes Material mit parametrisierten Eigenschaften nehmen und es über einen Knoten Dynamische Materialinstanz erstellen zuteilen. Das Ergebnis dieses Knotens wird dann mit einem Knoten Material festlegen auf das betreffende Objekt angewendet. Dadurch entsteht ein neues Material, das während des Spiels geändert werden kann.

Erstellen und Verwenden von Materialinstanzen
Das Erstellen und Verwenden von Materialexemplaren ist ein zweistufiger Prozess. Zuerst müssen Sie ein übergeordnetes Material erstellen, um Parameterausdrücke für die Eigenschaften zu verwenden, die Sie in einer Materialinstanz überschreiben können möchten. Anschließend können Sie eine Materialinstanz erstellen und die Eigenschaften im Materialinstanz-Editor anpassen.
Um zu erfahren, wie Sie ein parametrisiertes Material erstellen und es in einer Materialinstanz verwenden, lesen Sie hier nach: Creating and Using Material Instances.