Material-Instanzierung in der 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 Material-Instanz-Editor geöffnete Material-Instanz. Sie können die unter Parametergruppen aufgelisteten Attribute von diesem Interface 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.
Materialvererbung
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 Material-Instanzen 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 Parent-Material, wie in M_Chair.
Das Präfix MI_ bezeichnet eine Material-Instanz, 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 Material-Instanzen besteht darin, dass Sie sie im Material-Instanz-Editor sehr schnell anpassen können, ohne jemals das Knoten-Diagramm 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 Parametrisieren 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 ein Constant-Ausdruck 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 Details-Panel 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 Basisfarbe-Input verbunden, während Skalarparameter mit Metallisch und Rauheit verbunden sind.
Um die Idee der Parametrisierung weiter zu veranschaulichen, wird auch ein konstanter Wert von 0,5 an den Glänzend-Input ü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, Metallisch und Rauheit können im Material-Instanz-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-Ausdrücke finden Sie hier.
Skalar-Parameter
Ein Skalarparameter 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. Zum 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 in der Materialausdruck-Referenz.
Statische Parameter
Statische Parameter werden zur Kompilierzeit angewendet, sodass sie im Material-Instanz-Editor, jedoch nicht vom Script 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.
Siehe Statischer Switch-Parameter und Statischer Komponentenmasken-Parameter für weitere Informationen zu den spezifischen statischen Parametern.
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:
Material-Instanz Konstant – Wird nur vor der Laufzeit berechnet.
Material-Instanz Dynamisch – Kann zur Laufzeit berechnet (und bearbeitet) werden.
Material-Instanz Konstant
Eine Material-Instanz Konstant ist ein instanziertes 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 Material-Instanz-Konstanten, 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.
Material-Instanz-Konstanten werden im Inhaltsbrowser erstellt und im Material-Instanz-Editor bearbeitet.
Material-Instanz Dynamisch
Eine Material-Instanz Dynamisch (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 Material-Instanz erstellen-Knoten führen. Das Ergebnis dieses Knotens wird dann mit einem Material festlegen-Knoten auf das betreffende Objekt angewendet. Dadurch entsteht ein neues Material, das während des Spiels geändert werden kann.
Erstellen und Verwenden von Material-Instanzen
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 Material-Instanz verwenden, lesen Sie hier nach: Erstellen und Verwenden von Material-Instanzen.