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