Materials in der Unreal Engine
Transcription
Materials in der Unreal Engine
HTW AALEN Seminararbeit Materials in der Unreal Engine Lukas Schneider Benjamin Engel Michael Papp Anja Dannenberg Betreuer: Prof. Dr. Carsten Lecon 14. Juni 2016 Inhaltsverzeichnis 1 Einleitung 2 2 Die Unreal Engine 2 3 Materials in der Unreal Engine und ihre Verwendung 3 4 Material-Editor 5 5 Aufbau von Materials 6 6 Material Expressions 6.1 Math . . . . . . . . . 6.2 Constants . . . . . . 6.3 Function Expressions 6.4 Custom Expression . 7 Layered Materials 7.1 Beispiel . . . . . 7.1.1 Zustand0 7.1.2 Zustand1 7.1.3 Zustand2 7.1.4 Zustand3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 11 12 14 15 . . . . . 16 17 17 17 19 19 8 Animated Materials 20 8.1 Texturen animieren . . . . . . . . . . . . . . . . . . . . . . . . 20 8.2 Objekt animieren . . . . . . . . . . . . . . . . . . . . . . . . . 22 9 Instanced Materials 23 10 Zusammenfassung 23 1 1 Einleitung In dieser Seminararbeit wird das Thema ”Materials in der Unreal Engine”behandelt. In der Unreal Engine werden Materials benötigt, um Objekte zu texturieren und deren Oberflächeneigenschaften wie Lichtbrechung, Rauheit und Aussehen festzulegen. Da den Materials die Unreal Engine zugrunde liegt, wird zu allererst auf die Unreal Engine eingegangen. In den Kapiteln 3, 4 und 5 werden die Grundlagen der Materials erläutert. Danach wird auf vier größere Aspekte von Materials eingegangen. 2 Die Unreal Engine Die Unreal Engine ist eine von der Firma Epic Games entwickelte SpieleEngine. Sie wird zur Erstellung von Spielen auf Konsolen, PC und Mobile Devices eingesetzt. Die Spiele-Engine wird seit 1998 in der Entwicklung von zahlreichen Spielen verwendet. Unreal Engine 4, die 4. Generation der Unreal Engine, auf welche sich diese Seminararbeit bezieht, existiert erst seit März 2014. Eines der wichtigsten Ziele der Unreal Engine war es schon immer, das Grafikniveau in Spielen auf ein neues Level zu heben. Dies gelang insbesondere mit der 3. Generation, mit welcher die Unreal Engine die bis dahin renommierteste Doom-3-Engine ablöste. Zusätzlich zu dieser stellte sie aufwändige Shader-Effekte zur Verfügung, sowie die Fähigkeit, nebenläufig und unterbrechungsfrei Teile der Spielwelt nachzuladen. Damit eröffnete sich die Möglichkeit, größere Spielwelten und aufwändigere Level-Designs zu gestalten. Die heute aktuelle Version der Unreal Engine gehört mit zu den grafikstärksten Engines auf dem Markt und ist seit dem 2. März 2015 bis zu einem Umsatz von 3000 Dollar komplett kostenfrei verfügbar. Zu den bekanntesten Beispielen für Spiele, die mit der Unreal Engine entwickelt wurden, gehören unter anderem Unreal Tournament, Tom Clancy’s Splinter Cell, das Bioshock Franchise, Gears of War, Mass Effect und einige aktuelle Titel wie Rocket League und ARK. Außer der Grafik-Engine sind auch die Scriptsprache UnrealScript, ein Level-Editor, der Matinee-Editor und der Material-Editor wichtige Bestandteile der Unreal Engine. Die Grafik-Engine stellt einen Programmcode dar, ” der parallel zum eigentlichen Spiel für die Berechnung der Grafikschnittstelle zuständig ist.”[Wik16] 2 [UnrealScript ist eine Java-ähnliche Skriptsprache, welche benutzt wird, ” um die Spiellogik von Spielen auf Basis der Engine zu erstellen.]”[Epi16c] Der Level Editor stellt eine grafische Arbeitsfläche dar, mit welcher der Benutzer Schritt für Schritt das Spiel-Level erstellen und editieren kann. Dabei unterstützt der Editor den Benutzer mit einer Live-Ansicht des Levels und seiner Objekte. Im Matinee-Editor ist es möglich, Zwischensequenzen oder geskriptete Ereignisse zu erzeugen und in das Spiel einzubinden. Hierzu steht eine frei positionierbare und bewegliche Kamera zur Verfügung, welche sich besonders gut eignet, um Trailer oder Animationsfilme zu produzieren. Mit der eingebauten Renderfunktion ist es möglich, Videos mit beliebiger Bildwiederholrate und Auflösung zu exportieren. Somit sind auch Zeitlupeneinstellungen und Zeitrafferaufnahmen leicht zu realisieren. Der Material-Editor wird benötigt, um Materials anzufertigen. Wie dieser funktioniert und was Materials überhaupt sind, wird im Folgenden genauer erläutert. 3 Materials in der Unreal Engine und ihre Verwendung Materials übernehmen in Spielen eine wichtige Funktion. Sei es, um eine Spielwelt realistischer zu gestalten oder Objekten darin Farbe und Textur zu verleihen - Materials sind die Lösung. So wie es in der realen Welt Gegenstände aus verschiedenen Materialien gibt, werden in der virtuellen Welt entsprechende Materials auf die einzelnen Objekte gelegt. Um ein Spiel zu erschaffen, das sich an der Realität orientiert, wird man zum Beispiel versuchen, ein Material zu erstellen, dass das reale Objekt möglichst detailgetreu und realistisch imitiert. Rein technisch gesehen handelt es sich bei den Materials um HLSLProgrammcode(High-Level Shading Language), der die Eigenschaften eines Objektes beschreibt. Möchte man in der Unreal Engine beispielsweise eine Steinmauer erzeugen, muss man zunächst ein Objekt erstellen. Dieses besitzt standardmäßig eine graue und glatte Oberfläche. Abbildung 1 Um die Optik einer Steinmauer zu erzeugen, muss ein Bild, eine sogenannte Textur, auf das Objekt projiziert werden. Damit kommen wir dem 3 Abbildung 1: Graue Wand angestrebten Ergebnis schon näher. Abbildung 2 Jedoch hat die Mauer immer noch keine räumliche Wirkung. Um sie realistischer zu gestalten, muss die zweidimensionale Ebene verlassen werden. Hier kommen die Materials zum Einsatz. Mit diesen kann man durch Beeinflussung bestimmter Parameter den gewünschten dreidimensionalen Effekt erzeugen. In unserem Beispiel haben wir die Mauer plastischer gemacht durch Eigenschaften wie Tiefenwirkung und Lichtreflexionen. Abbildung 3 Zu erwähnen ist, dass das Material ausschließlich das Aussehen eines Objektes beeinflusst, in der Regel ohne das eigentliche Objekt zu verändern. Auch das Bewegen oder Animieren von Objekten ist möglich. Dabei wird meistens die eigentliche Position des Objektes nicht verändert, sondern durch Veränderung der Textur eine scheinbare Bewegung vorgegaukelt. Möchte man über die bloße Verwendung eines Bildes als Textur hinausgehen, benötigt man die Funktionen der Materials. Durch die Kombination vieler verschiedener Effekte lassen sich auch komplexe Strukturen wie zum Beispiel bewegtes Wasser oder schwingende Ketten realisieren. 4 Abbildung 2: Texturierte Wand 4 Material-Editor Möchte man kein vorgefertigtes Material benutzen, bietet die Unreal Engine die Möglichkeit, Materials im Material-Editor selbst anzufertigen. Die Materials werden nicht durch manuelles Schreiben von Code erzeugt, sondern mit Hilfe eines Network of Visual Scripting Nodes”(Material Expressions) ” realisiert. Im Editor werden die einzelnen Funktionen durch sogenannte No” des”(Knoten) dargestellt, die miteinander über Kanten zu einem Graphen verbunden werden. Der Editor besteht aus mehreren Bereichen Abbildung 4. Die wichtigsten sind im Folgenden aufgeführt. • Arbeitsfläche Die Arbeitsfläche (Nr.1) erlaubt es dem Benutzer, neue Knoten zu erzeugen und miteinander zu verbinden. Der entstehende Graph wird ebenfalls auf der Arbeitsfläche angezeigt. • Palette In der Palette (Nr 2) befinden sich alle verfügbaren Knoten, welche per Drag-and-Drop in die Arbeitsfläche gezogen werden können. Sie kann auch durch selbst erstellte Knoten ergänzt werden. 5 Abbildung 3: Plastische Wand • Details Im Fenster Details (Nr 3) können die Eigenschaften des aktiven Knotens bearbeitet werden. • Vorschau Im Vorschaufenster (Nr.4) wird das Material live in seinem aktuellen Zustand angezeigt. Hier besteht die Möglichkeit, das Material auf verschiedenen geometrischen Oberflächenformen und aus unterschiedlichen Blickwinkeln zu betrachten. 5 Aufbau von Materials Die Grundlage jedes Materials ist der zentrale Knoten Main Material No” de”. An diesem Hauptknoten laufen alle anderen Knoten zusammen. Erst wenn ein Teilgraph mit dem Hauptknoten verbunden ist, hat er Einfluss auf die Eigenschaften des Materials. Der Hauptknoten besteht aus mehreren Eingängen, die jeweils eine Eigenschaft des Materials repräsentieren. Im Folgenden werden die Eigenschaften aufgelistet und kurz beschrieben. 6 Abbildung 4: Aufbau des Material Editors • Base Color Anhand des Base-Color-Eingangs wird die Grundfarbe des Materials festgelegt. Als Eingabe ist ein dreidimensionaler Vektor erforderlich, welcher den RGB-Wert enthält. • Metallic Der Metallic-Eingang reguliert, wie metallisch”die Oberfläche erscheint. ” Als Eingabe dient eine Zahl zwischen 0 und 1, wobei 1 für metallisch und 0 für nichtmetallisch steht. • Specular Der Specular-Eingang wird nur bei nichtmetallischen Oberflächen genutzt und regelt den Grad des Oberflächenglanzes. • Roughness Der Roughness-Eingang bestimmt die Rauheit der Oberfläche beziehungsweise die Intensität der Lichtstreuung an derselben. Der Eingabewert liegt zwischen 0 und 1, wobei 0 für eine spiegelartige und 1 für eine diffuse Reflexion steht. • Emissive Color 7 Abbildung 5: Main Materials Node Der Eingang Emissive Color legt fest, an welcher Stelle die Oberfläche leuchten soll. Als Eingabe empfiehlt sich hier eine Textur als Maske. • Opacity Der Opacity-Eingang regelt die Transparenz der Oberfläche eines Objektes. • Opacity Mask Der Opacity-Mask-Eingang regelt ebenfalls die Transparenz der Oberfläche eines Objektes. Jedoch werden hier ausschließlich Masken verwendet, um Transparente von Opaken Bereichen abzugrenzen. • Normal Der Normal-Eingang bestimmt die räumliche Ausrichtung jedes einzelnen Bildpunktes. Als Eingabe wird eine Normal Map”verwendet. ” Abbildung 6 8 Abbildung 6: Normal Map einer Mauer. • World Position Offset Der World-Position-Offset-Eingang manipuliert die Position des Objektes in der Spielwelt, ohne es jedoch wirklich zu verschieben. • World Displacement Ähnlich wie der World-Position-Offset-Eingang manipuliert der WorldDisplacement-Eingang die Position des Objektes. Allerdings benutzt er dafür Tessellationspunkte anstelle der eigentlichen Punkte des Objekts. Dazu muss der Tessellationswert des Materials gesetzt sein. Unter Tessellation versteht man die Aufteilung einer unregelmäßigen Oberfläche in eine Vielzahl kleiner, regelmäßiger Flächenelemente( Mo” saiksteinchen”). Der Tessellationswert bestimmt die Größe und somit auch die Anzahl dieser Elemente. • Tessellation Multiplier Der Tessellation-Multiplier-Eingang funktioniert ebenfalls nur, wenn der Tessellationswert gesetzt ist und erhöht oder verringert diesen. • Subsurface Color Der Subsurface-Color-Eingang erlaubt es, eine Farbe hinzuzufügen, welche scheinbar unter der Oberfläche liegt und beim Durchleuchten sichtbar wird. Dies erlaubt zum Beispiel eine realistischere Darstellung von Haut. • Clear Coat Der Clear-Coat-Eingang ermöglicht eine bessere Simulation von mehrschichtigen Materials. Ist der Eingang belegt, wird ein Farbfilm über die Oberfläche des Objektes gelegt. • Clear Coat Roughness 9 Der Clear-Coat-Roughness Eingang ändert die Rauheit des Effekts des Clear Coat Eingangs. • Ambient Occlusion Der Ambient-Occlusion-Eingang regelt den Schatten, der vom Material auf sich selbst geworfen wird. Dafür wird als Eingabe eine AO ” Map”benötigt. • Refraction Der Refraction-Eingang bestimmt den Grad der Lichtbrechung des Objekts. Allgemein können verschiedene Modi eingestellt werden, welche einige der oben genannten Eigenschaften ausschließen oder verfügbar machen. 6 Material Expressions Material Expressions sind die Bausteine, mit denen man voll funktionsfähige Materials in der Unreal Engine herstellt. Sie bilden außerdem die Knoten des Graphen. Jede Expression steht für sich und kann mehrere Ein- und Ausgänge besitzen oder eine Operation auf einem oder mehreren Eingängen ausführen. Abbildung 7 Abbildung 7: Standardaufbau einer Material Expression [Epi16b] 10 1. Beschreibung Die Kurzbeschreibung der Expression wird im Editor über dem Knoten angezeigt. 2. Titelbar In der Titelbar wird die Art des Knotens angezeigt. 3. Eingang Mit diesem Eingang verbundene Knoten werden als Eingabe zur Bearbeitung innerhalb der Expression verwendet. 4. Vorschau Hier wird eine Vorschau der im Ausgang ausgegebenen Werte angezeigt. 5. Ausgang Diese Verbindungspunkte sind die Ausgabe der Expression. Der Aufbau der Knoten kann je nach Typ der Expression variieren. In einigen gibt es zum Beispiel keine Vorschau, dafür aber mehr Eingänge. Es gibt viele verschiedene Arten von Expressions. Mit einigen solcher Expression setzen wir uns nun genauer auseinander. 6.1 Math Die Expressions in der Kategorie Math stellen grundsätzliche mathematische Operationen und Funktionen zur Verfügung. So wird dem Benutzer ermöglicht, Zahlenwerte miteinander zu verrechnen oder logische Verknüpfungen zwischen Knoten zu bilden. Zu den wichtigsten gehören: • Die vier Grundrechenarten: Addition (Add), Subtraktion (Subtract), Multiplikation (Multiply), Division (Divide). Diese benötigen mindestens zwei Eingabewerte und liefern ein Ergebnis als Ausgabe zurück. Abbildung 8 • Maximum und Minimum: Diese Funktionen nehmen zwei Eingabewerte auf und liefern entweder den größeren (Max) oder den kleineren (Min) dieser beiden Werte als Ausgabe. Abbildung 9 11 Abbildung 8: Abbildung der oben erklärten mathematischen Expressions Abbildung 9: Abbildung der Minimum- und Maximum-Expressions • Logische Verknüpfungen: Die If-Expression realisiert einen Vergleich zweier Werte. Sie besitzt fünf Eingänge, die Werte A und B sowie die Werte, die im Falle A >= B, A < B oder A=B ausgegeben werden. Abbildung 10 • Komplexere mathematische Funktionen: Dazu gehören der Betrag (Abs) und die Wurzel (Sqrt) eines Wertes sowie die Sinus- (Sine) und Cosinusfunktion (Cosine). Abbildung 11 • Matrixoperationen: Das Kreuzprodukt (Cross) benötigt als Eingabe zwei Vektoren und gibt den Ergebnisvektor aus. Dies bietet sich zum Beispiel bei der Vermischung zweier RGB-Werte an. Abbildung 12 6.2 Constants Benötigt man einen konstanten Wert, so werden die Constant Expressions genutzt. Diese können beliebig gesetzt werden Abbildung 13. Zu den wich12 Abbildung 10: Abbildung der If-Expression Abbildung 11: Abbildung der oben beschriebenen Expressions tigsten gehören: • Einfache Konstante: Die einfache Konstante (Const) gibt eine einzelne Fließkommazahl aus. • Zweidimensionale Konstante: Die zweidimensionale Konstante (Const2Vector) gibt einen zweidimensionalen Vektor aus. • Dreidimensionale Konstante: Die dreidimensionale Konstante (Const3Vector) gibt einen dreidimensionalen Vektor aus, in der Regel wird er für RGB-Werte eingesetzt. • Vierdimensionale Konstante: Die vierdimensionale Konstante (Const4Vector) gibt einen vierdimensionalen Vektor aus, häufig RGB-Werte und einen Alpha-Wert. 13 Abbildung 12: Abbildung des Kreuzproduktes als Material Expression • Zeitkonstante: Der Zeitknoten (Time) fügt dem Material einen Zeitablauf hinzu. Abbildung 13: Abbildung der oben erklärten Konstanten als Material Expressions 6.3 Function Expressions Mit den Function Expressions lassen sich kompliziertere Graphen, bestehend aus vielen Knoten, in einem Knoten zusammenfassen. Dieser erlaubt eine mehrfache Nutzung des Inhalts der Function Expression innerhalb des Materials sowie außerhalb. Grundsätzlich haben Funktionen einen Namen, eine Beschreibung, beliebig viele Eingabewerte und eine optionale Vorschau. Jeder Ausgabewert besitzt ebenfalls einen Namen, eine Beschreibung und eine Priorität. Mit dem MaterialFunctionCall-Knoten lassen sich die Funktionen aufrufen und verwenden. Die Function Expressions arbeiten nach einem ähnlichen Prinzip wie Funktionen in gängigen Programmiersprachen. 14 In Abbildung 14 sieht man den komplexen Aufbaus eine Materials. Möchte man dieses Material nun erneut verwenden, so muss man den kompletten Graphen reproduzieren. Um dies zu vermeiden wird aus dem Graph eine Material Function Expression erstellt und an der entsprechenden Stelle mit einem Material Function Call aufgerufen. Abbildung 15 Abbildung 14: Copper Material Expression Graph 6.4 Custom Expression Falls die zahlreichen Möglichkeiten mit den vorhandenen Expressions doch einmal nicht ausreichen sollten, gibt es die Custom Expressions. Diese können mit beliebigem HLSL-Programmcode ausgestattet werden. Somit ist man mit der Custom Expression in der Lage, falls eine Funktion nicht mit anderen Expressions oder einer Kombination anderer Expressions (Function Expression) dargestellt werden kann, diese zu implementieren. Es besteht auch die 15 Abbildung 15: Copper Material Function Call Möglichkeit, bereits existierende Funktionen neu zu schreiben. Davon ist in den meisten Fällen aber abzusehen, da die Unreal Engine mit ihren vorgegebenen Expressions sehr performant arbeitet. Dies beruht oft auf dem Wissen über die einzelne Expression, welches bei einer Custom Expression nicht vorhanden ist. Beispielsweise ist die Engine in der Lage Teilgraphen eines Materials zusammen zu fassen, wenn diese auf alle Pixel einer Textur gleichzeitig angewendet werden. Custom Expressions haben analog zu den anderen Expressions Ein- und Ausgänge. Allerdings sind diese frei konfigurierbar und auch ihre Anzahl, Namen und Funktion lässt sich manuell bestimmen. 7 Layered Materials Layered Materials bestehen aus mehreren Schichten einzelner Materials, die übereinander gelegt werden. [Man kann sich Layered Materials als Ma” terials innerhalb Materials vorstellen. [...] Sie bieten die Möglichkeit, mit Per-Pixel Operationen’, wie zum Beispiel Masken, Materials auf Teile des ’ Objekts zu platzieren. Layered Materials werden dazu verwendet, um den Wechsel zwischen komplexen Oberflächentypen auf einem Objekt darzustellen.] ”[Epi16a] Es bietet sich hierzu an, die einzelnen Materials in Material Functions auszulagern und in dem eigentlichen Layered Material Graph über MaterialFunctionCall-Knoten einzubinden. Diese werden mit Hilfe einer Funktion, die zwischen zwei Materials überblendet (MatLayerBlend), übereinander gelegt. Folgendes Beispiel erläutert das Vorgehen genauer: 16 7.1 Beispiel Begonnen wird mit einem nicht texturierten Objekt. Beispielshalber wird hier eine Rakete verwendet. Das Ziel ist es, die zunächst untexturierte Rakete mit einem einzigen Material zu versehen. Dieses weist verschiedenen Teilen der Rakete wie der Spitze, dem Triebwerk oder auch einzelnen Nieten unterschiedliche Materials zu. Das heißt, jedes dieser Elemente erhält nicht nur eine Textur, sondern ein vollwertiges Material mit all seinen Eigenschaften. Abbildung 16 Abbildung 16: Links die graue Rakete, rechts die fertige Rakete 7.1.1 Zustand0 Es wird ein neues Material ( Zustand0”) erstellt. Dieses besteht aus dem ” MaterialFunctionCall-Knoten des Materials Copper”, dem eine Textur als ” Input gegeben wird. Danach werden mit einer MatLayerBlend-Funktion und einer Maske Normalen hinzugefügt, um weitere Details in der Textur hervorzuheben. Das nun entstandene Material bildet die unterste Schicht in dem Layered Material”. Abbildung 17 ” 7.1.2 Zustand1 Um eine zweite Schicht hinzuzufügen, wird ein zweites Material (Aluminium) wiederum mit einem MaterialFunctionCall-Knoten eingefügt. Dieses wird 17 Abbildung 17: Material Zustand0”: Links der Graph des Materials, rechts ” die Vorschau des Materials am Objekt mit einem weiteren MatLayerBlend über das erste gelegt. Hierbei kommt eine weitere Maske zum Einsatz, welche bewirkt, dass das neue Material nur an den Stabilisierungsflossen über der ersten Schicht liegt. Die Standard MatLayerBlend-Funktion bekommt als Input das Base Material”Copper, ” das Top Material“Aluminium, welches über das Base Material gelegt wird, ” und einen Alpha-Kanal, der die Koordinaten der Überblendung festlegt. Die an den Alpha-Kanal angeschlossene Maske besteht aus einem Bild, welches in die Grundfarben RGB (Rot, Grün, Blau) aufgeteilt ist. Die einzelnen Farbbereiche sind an die Form des Objektes angepasst, so dass jede Farbe einen bestimmten Teil der Rakete repräsentiert. Hier wird der Blau-Kanal, welcher die Stabilisierungsflossen der Rakete darstellt, an den Alpha-Kanal der MatLayerBlend-Funktion übergeben. Abbildung 18 Abbildung 18: Material Zustand1”: Links der Graph des Materials, rechts ” die Vorschau des Materials am Objekt 18 7.1.3 Zustand2 Als nächstes wird ein Material für den Raketenantrieb und die Nieten eingebaut. Dieses bekommt ebenfalls die gleiche Textur wie die anderen als Input. Zusätzlich jedoch auch noch einen Farbwert als Eingabeparameter, da das Material an sich keine Farbe besitzt. Anschließend wird ein neuer MatLayerBlend-Knoten eingebunden, welcher als Base Material Input”die ” überblendete Version der ersten beiden Materials ( Copper“und Alumini” ” um”) bekommt. Als ”Top Material Input”wird das neu eingefügte Colored” Plastic”Material verwendet. Der Alpha-Kanal wird mit einer Verbindung aus dem Grün- und Alpha-Kanal der Maske belegt, um die gewünschten Bereiche abzugrenzen und einzufärben. Im Beispiel sind das der Raketenantrieb und die Nieten an der Hülle der Rakete.Abbildung 19 Abbildung 19: Material Zustand2”: Links der Graph des Materials, rechts ” die Vorschau des Materials am Objekt 7.1.4 Zustand3 Um der Rakete den letzten Schliff“zu geben, wird nun noch die Raketen” spitze in glänzendes Chrom getaucht. Dazu wird analog zu Zustand1”das ” Material MetalChrome“in den Materialgraph eingesetzt.Abbildung 20 ” Das jetzt entstandene Layered Material”besitzt 4 Schichten. Die Grund” schicht Copper“ist hauptsächlich am Rumpf der Rakete sichtbar. Sie wird ” an den Stabilisierungsflossen von der Aluminium“-Schicht und am Trieb” werk und den Nieten von der ColoredPlastic“-Schicht überlagert. Die Spitze ” 19 Abbildung 20: Material Zustand3”: Links der Graph des Materials, rechts ” die Vorschau des Materials am Objekt ist mit der MetalChrome“-Schicht beschichtet. Alle diese Schichten werden ” durch eigenständige, komplexe Materials realisiert. 8 Animated Materials Die Unreal Engine bietet zwei verschiedene Arten, Materials zu animieren. Eine Möglichkeit besteht darin, die Textur des Objektes, welchem das Material zugewiesen ist, zu animieren. Die andere Möglichkeit ist, das Objekt selbst zu animieren. 8.1 Texturen animieren Um die Textur eines Objekts zu animieren, wird zunächst ein simples Material mit einem Bild als Base Color Input erstellt. Um diese Textur zu bewegen, müssen die UVs, d.h. die X- und Y-Koordinaten der Textur, verändert werden. Dazu bekommt der Texture-Sample-Knoten als Input die Ausgabekoordinaten eines Panner-Knotens. Der Panner-Knoten bekommt Koordinaten und einen Zeitwert als Eingabe, der bestimmt, wie weit sich die Koordinaten verschieben. Der Knoten besitzt die Eigenschaft, die x- und yKoordinaten der Eingabekoordinaten zu verändern. Um dies zu erreichen, besitzt er zwei Eigenschaftswerte, die festlegen, wie schnell sich die x- oder 20 y-Werte verändern. Abbildung 21 Weist man das soeben erstellte Material Abbildung 21: Der Graph des animierten Materials. nun einem Objekt zu, bewegt sich die Textur entlang der X-Achse. Verlässt die verwendete Textur den Objektrand, wird sie auf der anderen Seite wieder fortgesetzt. Abbildung 22 Abbildung 22: Die animierte Textur auf dem Objekt. Eine weitere Möglichkeit die Textur eines Materials zu animieren, ist der Rotator-Knoten. Dieser bekommt als Eingabe ebenfalls Koordinaten und einen Zeitwert. Der Knoten bewirkt, dass sich die Koordinaten rotierend bewegen. Er besitzt als Eigenschaftswerte einen Speed-Wert, der bestimmt, wie schnell die Koordinaten rotieren, und einen Punkt, bestehend aus einer Xund Y-Koordinate, der angibt, um welchen Punkt die Rotation stattfindet. Die Koordinaten des Rotationszentrums werden in Prozent(der Objektgröße) angegeben. Das heißt, (0,0) ist die linke obere Ecke, (0.5,0.5) ist exakt die Mitte und (1,1) ist die rechte untere Ecke. Abbildung 23 21 Abbildung 23: Graph des rotierenden Materials. Abbildung 24: Rotation um die linke obere Ecke. 8.2 Objekt animieren Um mit Hilfe eines Materials das Objekt zu animieren, wird der WorldPosition-Offset-Eingang des Main-Material-Knotens verwendet. Dieser bekommt als Eingabe einen dreidimensionalen Vektor, der den Bewegungsvektor des Objekts repräsentiert. Ein solcher Vektor kann mit Hilfe eines Ma” keFloate3“-Knotens erstellt werden. Dieser erzeugt aus einem X-, einem Yund einem Z-Wert einen dreidimensionalen Vektor. Ein nicht belegter Eingang wird als Null interpretiert. Damit sich das Objekt auch stetig bewegt, wird ein Time-Input benötigt. Dieser wird mit 10 multipliziert, damit sich das Objekt nicht zu langsam bewegt. Abbildung 26 Ein auf diese Weise bewegtes Objekt wird allerdings nur optisch verschoben. Die tatsächliche Position des Objektes in der Spielwelt verändert sich nicht. Das bedeutet, dass Schatten und Kollision nicht neu berechnet werden. 22 Abbildung 25: Rotation um den Mittelpunkt. 9 Instanced Materials Instanced Materials sind eine Möglichkeit, konstante Werte eines Materials zur Laufzeit zu verändern. Dafür muss ein Instanced Material erstellt und diesem ein anderes Material hinzugefügt werden. Die Konstanten, welche verändert werden sollen, müssen in dem Material als Parameter-Knoten erstellt werden, da sie ansonsten nicht auf dieser Ebene verändert werden können. Diesen Parameter-Knoten können Namen gegeben werden, damit man sie in dem Instanced Material identifizieren kann. Abbildung 28 Diese Parameter lassen sich zur Laufzeit verändern und die Änderungen werden ohne Verzögerung übernommen. In den folgenden Abbildungen Abbildung 29 und Abbildung 30 sieht man eine Kombination der in Kapitel Animated Materials vorgestellten Animationsmöglichkeiten, wobei 3 Werte als Parameter angegeben sind. Der obere Teil der Abbildung 29 lässt die Textur von rechts nach links wandern. Der Speed-Parameter reguliert hierbei die Bewegungsgeschwindigkeit. Der untere Teil, der an dem World-Position-Offset-Eingang angeschlossen ist, lässt das Objekt im Kreis schweben. Der RotationSpeed-Parameter reguliert hierbei die Rotationsgeschwindigkeit und der Faktor-Parameter ändert den Radius, um den sich das Objekt bewegt. In diesem Instanced Material lassen sich die Parameter nun beliebig verändern. Abbildung 30 10 Zusammenfassung Ohne Materials wäre die Welt der Computerspiele um vieles langweiliger. Sei es, um der Spielumgebung eine realistische Gestalt zu verleihen oder auch nur 23 Abbildung 26: Graph des Materials, das ein Objekt bewegt. Abbildung 27: Das Objekt bewegt sich nach rechts. um Farbe hineinzubringen. Wer ein Computerspiel erschaffen will, kommt um die Verwendung von Materials fast nie herum. Mit Hilfe der richtigen Materialeinstellungen lassen sich graue Wände in detaillierte Steinmauern verwandeln oder vielschichtige Oberflächen, wie die einer Rakete, in allen Facetten nachahmen. Doch Materials müssen nicht statisch bleiben. Durch den gezielten Einsatz von Material Expressions in Verknüpfung mit dem World-Position-Offset-Eingang ist es sogar möglich, die Oberfläche von sich kräuselndem Wasser zu imitieren. Mit ihrem benutzerfreundlichen Material-Editor und dem Konzept von Materials als visuelle Graphen eröffnet die Unreal Engine den Benutzern nahezu unbegrenzte Möglichkeiten. Die in dieser Seminararbeit vorgestellten Beispiele erlauben bereits einen kleinen Einblick in die Welt der Ma24 Abbildung 28: Materialgraph mit einem Speed-Parameter. Abbildung 29: Material Graph mit 3 Parametern. terials. Wer sich jedoch mit den Material Expressions und deren Einstellungsmöglichkeiten weiter auseinandersetzt, entdeckt schnell, dass dies nur einen kleinen Ausschnitt von dem darstellt, was sich in dem Material-Editor der Unreal Engine tatsächlich erreichen lässt. Auch für Benutzer mit Programmiererfahrung hat der Material-Editor der Unreal Engine etwas zu bieten. Die Math Kategorie zum Beispiel ermöglicht es ihm, sowohl Grundrechenarten als auch logische Verknüpfungen und komplizierte mathematische Funktionen anzuwenden. Je komplexer das Geflecht aus Knoten und Kanten, desto erstaunlicher sind oftmals die Ergebnisse. Große Spielentwickler streben danach, die Welten, welche sie erschaffen, so realitätsnah wie nur möglich zu machen. Mittlerweile besitzen Materials 25 Abbildung 30: Instanced Material Parameter. eine derartige Komplexität, dass sie ihrem Ziel gerecht werden, der Realität beinahe zu entsprechen. Auch die Filmindustrie hat Interesse daran, im Computer erzeugte Szenen so authentisch zu gestalten, dass sie optisch nicht von der Realität zu unterscheiden sind. Zahlreiche Filmbeispiele zeigen, dass dies möglich geworden ist. 26 Literatur [Epi16a] EpicGames: Layered Materials. https://docs. unrealengine.com/latest/INT/Engine/Rendering/Materials/ LayeredMaterials/. Version: Mai 2016 [Epi16b] EpicGames: Material Expression Reference. https: //docs.unrealengine.com/latest/INT/Engine/Rendering/ Materials/ExpressionReference/index.html. Version: Mai 2016 [Epi16c] EpicGames: UnrealScript. https://de.wikipedia. org/w/index.php?title=UnrealScript&oldid=143443012. Version: Mai 2016 [Wik16] Wikipedia: Grafik-Engine. https://de.wikipedia. org/w/index.php?title=Grafik-Engine&oldid=154494870. Version: Mai 2016 27 Abbildungsverzeichnis 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Graue Wand . . . . . . . . . . . . . . . . . . . . . . . . . . . Texturierte Wand . . . . . . . . . . . . . . . . . . . . . . . . Plastische Wand . . . . . . . . . . . . . . . . . . . . . . . . . Aufbau des Material Editors . . . . . . . . . . . . . . . . . . Main Materials Node . . . . . . . . . . . . . . . . . . . . . . Normal Map einer Mauer. . . . . . . . . . . . . . . . . . . . Standardaufbau einer Material Expression [Epi16b] . . . . . Abbildung der oben erklärten mathematischen Expressions . Abbildung der Minimum- und Maximum-Expressions . . . . Abbildung der If-Expression . . . . . . . . . . . . . . . . . . Abbildung der oben beschriebenen Expressions . . . . . . . . Abbildung des Kreuzproduktes als Material Expression . . . Abbildung der oben erklärten Konstanten als Material Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Copper Material Expression Graph . . . . . . . . . . . . . . Copper Material Function Call . . . . . . . . . . . . . . . . . Links die graue Rakete, rechts die fertige Rakete . . . . . . . Material Zustand0”: Links der Graph des Materials, rechts ” die Vorschau des Materials am Objekt . . . . . . . . . . . . Material Zustand1”: Links der Graph des Materials, rechts ” die Vorschau des Materials am Objekt . . . . . . . . . . . . Material Zustand2”: Links der Graph des Materials, rechts ” die Vorschau des Materials am Objekt . . . . . . . . . . . . Material Zustand3”: Links der Graph des Materials, rechts ” die Vorschau des Materials am Objekt . . . . . . . . . . . . Der Graph des animierten Materials. . . . . . . . . . . . . . Die animierte Textur auf dem Objekt. . . . . . . . . . . . . Graph des rotierenden Materials. . . . . . . . . . . . . . . . Rotation um die linke obere Ecke. . . . . . . . . . . . . . . . Rotation um den Mittelpunkt. . . . . . . . . . . . . . . . . . Graph des Materials, das ein Objekt bewegt. . . . . . . . . . Das Objekt bewegt sich nach rechts. . . . . . . . . . . . . . Materialgraph mit einem Speed-Parameter. . . . . . . . . . . Material Graph mit 3 Parametern. . . . . . . . . . . . . . . Instanced Material Parameter. . . . . . . . . . . . . . . . . . 28 . . . . . . . . . . . . 4 5 6 7 8 9 10 12 12 13 13 14 . . . . 14 15 16 17 . 18 . 18 . 19 . . . . . . . . . . . 20 21 21 22 22 23 24 24 25 25 26