Vortrag - WordPress.com

Transcrição

Vortrag - WordPress.com
Altes Gymnasium
Referat
Grundlagen von Aufbau und Grafik einer
Echtzeit-3D-Welt
GK Informatik 13/1
September 2006
von Alexander Erlich
Informatik GK 13/1
Altes Gymnasium
1. 3D-Szene.................................................................................................................................2
1.1 3D-Engine......................................................................................................................... 3
1.2 3D-Welt............................................................................................................................. 3
1.2 Offline-Renderer und Realtime-Renderer......................................................................... 5
2. Das Polygon........................................................................................................................... 6
2.1 Definition.......................................................................................................................... 6
2.2 Eigenschaften.................................................................................................................... 7
2.3 Das Dreieck - Basisprimitiv der 3D-Welt ........................................................................ 8
2.4 LOD - Level of Detail....................................................................................................... 9
3. Die Textur............................................................................................................................ 10
3.1 Allgemein ....................................................................................................................... 10
3.2 Bumpmapping ................................................................................................................ 11
4. Licht und Schatten.............................................................................................................. 12
4.1 Beleuchtung ................................................................................................................... 12
4.1.1 Gerichtetes Licht (Directional Light) ...................................................................... 12
4.1.2 Punkt- oder Omnidirektionales Licht (Point / Omnidirectional Light) ...................13
4.1.2 Ambient Light.......................................................................................................... 13
4.2 Schattierungsverfahren: Gouraud-Shading .................................................................... 14
5. Quellenverzeichnis.............................................................................................................. 15
2
Informatik GK 13/1
Altes Gymnasium
1. 3D-Szene
Die 3D-Computergrafik teilt sich in zwei große Bereiche: die Modellierung und das
Rendern. Modellierung bezeichnet das Erstellen einer sogenannten Szene, die
Objekte, Lichtquellen und Materialien des zu erzeugenden Bildes enthält. Beim
Rendern (auch: Bildsynthese) wird aus einer Szene ein Bild erstellt.
1.1 3D-Engine
Die 3D-Engine (oft auch: 3D-Render-Engine, 3D-Renderer) generiert aus einer 3DSzene ein zweidimensionales Bild. Sie ist sozusagen unser „Bulls Eye“, unsere
„Brille“ in die 3D Welt. Sie stellt fest, welcher Ausschnitt der 3D-Welt angezeigt
werden soll, fragt ab, welche Objekte sich in diesem Bereich befinden, entscheidet,
wie die Objekte geschichtet sind (sprich: welches Objekt im Vordergrund, welches im
Hintergrund ist). Kurzum: Die Engine verarbeitet sämtliche Daten, die notwendig
sind, um etwas auf dem Bildschirm zu sehen.
Die Engine lässt sich grob in weitere Engines unterteilen, die für spezifische
Teilbereiche eines Computerspiels zuständig sind. Eine mögliche Konfiguration
zwischen Teilgebiet und Engine, welche auf der beliebten Open-Source-Engine
OGRE basiert, sei hier vorgeschlagen:
•
•
•
Graphik-Engine - Ogre
Eingabeverarbeitung (Tastatur, Joystick, Gamepad) - OIS
Netzwerk-Engine - RakNet
Kollisionsabfrage/Physik - OgreNewt mit NxOgre
Sound-Engine - OpenAl
3D-Engines werden meist in meist in C,C# oder C++ entwickelt.
1.2 3D-Welt
Die Engine an sich bildet Objekte ab, macht es also möglich, dass man die 3D-Welt
sehen kann. Sie ist allerdings nicht die 3D-Welt. Demnach ist die Grafik oder RenderEngine nur eine Komponente innerhalb einer 3D-Szene. Der Aufbau der 3D-Welt und
ihr Zusammenhang zur Engine sollen anhand eines der folgenden 3D-Szene
erläutert werden:
3
Informatik GK 13/1
Altes Gymnasium
Modell einer 3D-Szene
Die Engine bildet den Rahmen der Szene. Sie erzeugt aus der Szene ein
zweidimensionales Bild und zeigt es uns an.
Die 3D-Szene an sich lässt sich in Teile gliedern, die jeweils einzeln entwickelt
werden müssen: eine Architektur (das Level) und feinere 3D-Objekte (Models oder
Meshes), die in dieser Platz finden.
Für die Entwicklung der Architektur verwendet man einen Welten-Editor (World
Editor oder Level Editor). Feinere Objekte werden mit Modelliertools (Modeler)
gearbeitet.
Das Modelliertool MED von Conitec
Der Level-Editor: WED von Conitec
4
Informatik GK 13/1
Altes Gymnasium
Sehr wichtige Elemente der 3D-Szene sind auch Lichter sowie die Kamera. Diese
werden grundsätzlich im Level-Editor eingestellt, können aber auch dynamisch sein.
Die Kamera ist grundsätzlich dynamisch, da sie im Spiel ständig ihre Position und
Orientierung ändert. Alle Objekte in der 3D-Szene haben grundsätzlich die
Eigenschaften Position und Orientierung.
1.2 Offline-Renderer und Realtime-Renderer
Schaut man einen 3D-Animationsfilm im Fernsehen z.B. auf DVD an, so sieht man
3D-Szenen, die Bild für Bild gerendert wurden und schließlich so auf DVD
abgespeichert wurden. Die hohe Qualität der 3D-Darstellungen ist darauf
zurückzuführen, dass sie unter enormem Rechenaufwand auf professionellen HighTech-Computern gerendert wurden.
Bei Computerspielen ist es aber nicht möglich, Szenen „vorzurendern“: die Engine
muss auf die Eingabe des Spielers reagieren, so dass das nächste Bild immer
jeweils direkt nach der Eingabe berechnet werden kann. Wenn man also die Qualität
eines Animationsfilms auf DVD für Spiele erhalten wollte, müsste man jedes
mögliche Bild im Spiel „vorrendern“: dies ist natürlich unmöglich. Daher muss in
Computerspielen jedes Bild direkt nach der Spielereingabe gerendert werden, diese
Art des Renderns bezeichnet man als Realtime- oder Echtzeit-Rendering.
Um Echtzeit-Rendering zu gewährleisten, muss die Render-Engine in der Lage sein,
die Bilder in Sekundenbruchteilen zu generieren. Die Rate, mit der die Bilder
(Frames) gerendert, beziehungsweise dargestellt werden, wird in Bildern pro
Sekunde (Frames Per Second - FPS) angegeben. Erst, wenn ein System in der Lage
ist, 15 FPS zu erzeugen, lässt sich von Echtzeit sprechen.
Der Unterschied zwischen Offline- und Realtime-Rendering soll anhand der
folgenden Gegenüberstellung verdeutlicht werden:
Offline-Rendering versus Realtime-Rendering
Der Vergleich zwischen einem Foto (Rhona Mitra, Fotomodell; links), einer Szene
des 3D-Films „Final Fantasy“ (2001, Mitte) und einer Spielfigur aus dem
5
Informatik GK 13/1
Altes Gymnasium
Computerspiel „Tomb Raider:Legend“ (Lara Croft, rechts) macht die Unterschiede
der Render-Typen deutlich: Selbst mit neusten Grafik-Effekten wirkt das Modell aus
„Tomb Raider Legend“ im Vergleich zum fünf Jahre älteren Film kantig und weniger
detailliert in Haut, Augen, Lippen und Schatten.
2. Das Polygon
Ein 3D-Objekt im Raum ist durch Raumpunkte definiert. Diese sind mit Flächen
verbunden. Ein Würfel hat bekanntlich sechs Seitenflächen und acht Ecken; im 3DRaum kann man sich einen Würfel auch definiert denken durch acht Raumpunkte,
die mit sechs Seitenflächen verbunden sind. Allgemein bezeichnet man die
Flächenelemente eines 3D-Objekts als Polygone.
Die Anzahl der Polygone, aus welchen 3D-Objekte in modernen Computerspielen
bestehen, kann - in Abhängigkeit von der Komplexität des Objekts - sehr hoch sein.
Hatte Lara Croft, die Spielfigur aus der Computerspielserie „Tomb Raider“, im ersten
Teil der Serie (1996) noch 500 Polygone, so besteht die Spielfigur im siebten Teil der
Serie „Tomb Raider: Legend“ aus mittlerweile über 10.000 Polygonen.
An dieser Stelle kann der Unterschied zwischen Offline-Rendering und RealtimeRendering wieder deutlich gemacht werden: in dem offline-gerenderten 3D-Film
„Final Fantasy: The Spirits Within", welcher fünf Jahre älter ist als das Echtzeit-3DSpiel „Tomb Raider:Legend“, bestand allein das Haar der Hauptfigur Aki aus 60.000
einzeln animierten Haaren, welche sich zu Millionen von Polygonen summierten.
Aki aus "Final Fantasy: The Spirits Within"
Echtzeit-Szene aus “Tomb Raider: Legend”
2.1 Definition
Polygon steht griechisch für „Vieleck“. Genauer spezifiziert ist „ein reguläres,
geschlossenes Polygon P eine zweidimensionale Struktur, die durch einen
geschlossenen, sich nicht schneidenden Kantenzug mit den Kanten K = {k 1, k 2,..., kn}
begrenzt wird (...). Eine Kante ki besitzt zwei Eckpunkte“ (Tönnies).
Diese, sich im Raum befindenden Punkte, werden auch als Vertices (Einzahl Vertex) bezeichnet.
6
Informatik GK 13/1
Altes Gymnasium
2.2 Eigenschaften
Ein polygonales Objekt setzt sich aus 3 wesentlichen Komponenten zusammen:
• Punkte
• Kanten und
• Facetten, auch Faces genannt
Die Komponenten eines polygonalen Würfels
Wenn man benachbarte Vertices durch Linien miteinander verbindet, ergibt sich das
so genannte Drahtgittermodell oder Wireframe. Drahtgittermodelle haben die
Funktion, komplexe 3D-Objekte auf eine schnelle und wenig rechenintensive Art und
Weise darzustellen. Man spricht allerdings auch dann vom Wireframe, wenn die
Vertices mit gleichfarbigen Polygonen verbunden werden (hier ist der
Rechenaufwand gegenüber dem texturierten Model immer noch viel geringer).
Deshalb verwenden Modelierer beim Arbeiten meistens die Wireframe-Ansicht, da
somit Licht, Schatten, Reflexion u.a. nicht berechnet werden müssen, während die
Umrisse des Objektes immer noch zu erkennen sind. Polygonale Objekte werden
zudem auch als Polygongitter (Polygonmeshes) oder Mesh bezeichnet.
Eine polygonarme („low-poly“) Variante von Lara Croft in der Wireframe-Ansicht
7
Informatik GK 13/1
Altes Gymnasium
Faces besitzen eine Orientierung, d.h. ein Polygon kann dem Betrachter zu- oder
abgewandt sein. Deshalb wird hier von Front- und Back-Faces gesprochen. Jedem
Polygon ist ein Normalenvektor zugeordnet, dessen Orientierung darüber
entscheidet, in welche Richtung das Polygon zeigt (Vertices hingegen sind
Ortsvektoren). Polygonnormalen sind für die Berechnung der Beleuchtung von
großer Bedeutung (z.B. beim Gouraud-Verfahren).
Polygon (hier: Dreikeck) mit Normalenvektor
Bei einem polygonalen Objekt ist es möglich, dass sich benachbarte Polygone
Punkte teilen (Shared Vertices). Dies ist besonders wichtig beim Manipulieren von
Vertices (Vertex Manipulation), da damit ein Vertex den Eckpunkt beliebig vieler
Polygone bildet und die Flächen dem verschobenen („manipulierten“) Vertex folgen.
2.3 Das Dreieck - Basisprimitiv der 3D-Welt
Das kleinstmögliche Polygon ist ein Dreieck. Da Dreiecke sehr leicht zu handhaben
sind und sich außerdem jedes Polygon durch Dreiecke beschreiben lässt, werden
Models grundsätzlich aus Dreiecken modelliert. Oft (in der Presse: ausschließlich)
wird der Begriff Polygon verwendet, obwohl ein Dreieck gemeint ist. Moderne
Grafikkarten sind für die Verarbeitung von Dreiecken optimiert, und mit
Polygonzahlen meint man grundsätzlich die Zahl der Dreiecke, nicht die Zahl der
Flächen.
Wireframe eines Würfels
8
Informatik GK 13/1
Altes Gymnasium
2.4 LOD - Level of Detail
Wenn man in der 3D-Welt arbeitet, ist es zwangsläufig so, dass einige Objekte näher
zum Betrachter stehen als andere. Die weiter entfernten Objekte werden kleiner
dargestellt, und somit kann man sie nicht mehr so detailliert sehen. Es wäre eine
Verschwendung, trotz dieser Tatsache die volle Polygonanzahl des Objektes zu
berechnen, da der Spieler wenig von diesen Details sehen würde. Um dies zu
vermeiden, benutzt man das Verfahren Level of Detail (kurz LOD).
Beim LOD unterteilt man 3D-Objekte in verschiedene Detailstufen, die LODs. Im
Allgemeinen unterscheidet man fünf LOD-Stufen, LOD 0 bis LOD 4. Möchte man z.B.
LOD bei Gebäuden anwenden, so würde LOD 0 der Darstellung der texturlosen
Grundflächen des Gebäudeblocks entsprechen, während LOD 4 das Gebäude mit
Etagen, Innenräumen und Texturen darstellt.
In heutigen 3D-Spielen verlaufen die LOD-Stufen absolut fließend und sind kaum
merkbar. Man kann LOD besonders eindrucksvoll in älteren Rennspielen
beobachten, wo sich die Landschaft Schritt für Schritt aufbaut, je näher das Auto
kommt.
Verschiedene LODs eines 3D-Objekts
Auch bei Texturen entsteht das Problem, dass weit entfernte Texturen, wenn sie in
voller Genauigkeit angezeigt werden, störend sind. Sie ihre Ordnung verschwindet
und sie flimmern bei Bewegung sehr stark, so dass es auch da lohnt, den Detailgrad
zu verringern. Diese Technik bezeichnet man als Mipmapping.
Mipmapping (rechts) verbessert die Qualität des Bildes
9
Informatik GK 13/1
Altes Gymnasium
3. Die Textur
3.1 Allgemein
Polygone sind die Flächen von Dreiecken, welche in den Vertices ihre Eckpunkte
haben. Allerdings wäre eine 3D-Grafik sehr arm an Farbe, wenn alle Polygone
dieselbe Farbe hätten. Andererseits wäre es äußerst aufwendige, jedem einzelnen
Polygon eine Farbe zuzuordnen. Darüber hinaus wäre bei polygonarmen Modellen
der „Überzug“ sehr grobkörnig, ein Model würde wie ein Mosaik aussehen.
Um diesen Problemen Abhilfe zu schaffen, verwendet man so genannte Texturen.
Texturen sind die (zweidimensionalen) Bilder, welche auf der Oberfläche der
Polygone abgelegt werden. So wie das kleinste Element eines gewöhnlichen Bildes
das Pixel (Picture Element) ist, ist bei Texturen das Texel (Texture Element) das
kleinste Element.
Ein Lara-Model ohne und mit Texturen
Der Vorteil von Texturen im Vergleich mit Modellen liegt darin, dass das Modellieren
von Details sehr aufwendig ist. Darüberhinaus braucht die Darstellung von Modellen
mehr Zeit und belegt Speicherplatz. Texturen schaffen dabei Abhilfe, sprich Textur
ersetzt Modellierung. Allerdings verändern Texturen nicht die Geometrie, sodass sie
nur zur Darstellung „flacher“ (außer beim Bumpmapping) Objekte geeignet sind.
Beispiel für eine Pattern-Textur
10
Informatik GK 13/1
Altes Gymnasium
Im Leveldesign kommen auch sogenannte Pattern-Texturen zum Einsatz, d.h.
Texturen, die sich nahtlos an sich sebst anfügen können. Sie werden im Leveldesign
benutzt, um beispielsweise Wände mit der gleichen Textur realistisch aneinander
schieben zu können, ohne dass man einen Übergang erkennen kann. So kann man
große Flächen leicht einheitlich texturieren, ohne ein großes Bild verwenden (und
somit in den Grafikspeicher schreiben) zu müssen.
3.2 Bumpmapping
Wie bereits beschrieben, kann man jedem Polygon eine Normale zuordnen. Somit
wird auch der Textur, welche in der Polygonebene liegt, eine Textur zugeordnet.
Bumpmapping ist eine Technik, bei der jedem Texel eine Normale zugeordnet wird,
die von der Normalen des Polygons abweicht (Per-Pixel-Lighting). Die Informationen
über die Abweichung werden aus einer so genannten Texture Map abgelesen. Die
Erstellung von Texture Maps ist ein mathematisch kompliziertes Verfahren, das hier
nicht besprochen werden soll; es ist damit allerdings möglich, Texture Maps zu
erzeugen, die den Verlauf der „Räumlichkeit“ der Textur gut annähren können.
Textur mit Normalen
Textur, deren Normalen sich nach der
Texture Map richten
Der große Vorteil von Bumpmapping besteht darin, dass eine neue Berechnung der
Textur in Abhängigkeit von einer Lichtquelle immer ein neues Bild ergibt. Über die
Position der Lichtquelle und der Kamera kann eine Engine, die Bumpmapping
unterstützt, eine realistisch aussehende Reflexion des Lichtes auf die Textur setzen.
Für die Berechnung braucht sie den Lichtvektor, den Kameravektor sowie die
Normalenvektoren der Texture Map.
Originale textur
Textur mit Bumpmapping
11
Informatik GK 13/1
Altes Gymnasium
Bumpmapping ist somit nur ein Darstellungs-„Trick“, der Oberflächenunebenheiten
simuliert, die in der Geometrie des Modells gar nicht vorhanden sind. Die nötigen
Informationen werden in eine Textur gepackt werden, mit deren Hilfe Schattierungen
auf eine Oberfläche gezeichnet werden. Dies gibt ein den Texturen in den Rillen
einen 3D-Effekt, welcher besonders bei Materialien wie Wasser, Kleidung, Wänden
oder auch der Textur eines Monsters verwendet wird.
Das Rollenspiel „The Elder Scrolls IV: Oblivion“ (2006) ist wohl das eindruckvollste
Beispiel für Bumpmapping. Flackerndes Licht, das die Textur der Wände Bild für Bild
(Frame by Frame) verändert, erweckt den Eindruck, jeder Stein in der Wand wäre
einzeln modelliert. Ebenso beeindruckend ist das Bumpmapping auf der Haut von
den zahlreichen Monstern im Spiel.
Zwei Screenshots aus dem Rollenspiel „The Elder Scrolls IV: Oblivion“
4. Licht und Schatten
Ohne Licht würde sich eine 3D-Szene für den Betrachter als schwarzes Bild
darstellen. Wie Licht in eine Szene gelangt, soll im folgenden Abschnitt erklärt
werden.
4.1 Beleuchtung
In der Natur ist Licht ein äußerst kompliziertes Phänomen, welches mit mehreren
Modellen beschrieben wurde. Auch Engines benutzen verschiedene Annäherungen
an die Darstellung von Licht. Beispielsweise werden sowohl Strahlenoptik als auch
Wellenoptik in der Physik benutzt, um das Licht zu beschreiben. Ähnliche Ansätze
werden auch von Engines verwendet. Im Wesentlichen werden folgende Typen
unterschieden:
4.1.1 Gerichtetes Licht (Directional Light)
In der Strahlenoptik wird das Licht als aus Lichtstrahlen zusammengesetzt
betrachtet. Gerichtetes Licht kommt aus einer bestimmten Richtung. Diese Art von
Licht breitet sich über die gesamte Szene aus. Die Lichtstrahlen sind parallel, d.h.
12
Informatik GK 13/1
Altes Gymnasium
dass jedes Objekt in der Szene aus der gleichen Richtung beleuchtet wird - ähnlich
wie bei Sonnenstrahlen, die auf die Erde fallen. Die Lichtstärke verringert sich nicht,
und es kann auch keine Reichweite festgelegt werden.
Gerichtetes Licht
Eine 3D-Szene mit gerichtetem Licht
4.1.2 Punkt- oder Omnidirektionales Licht (Point / Omnidirectional Light)
Ein Punktlicht streut sein abgestrahltes Licht, wie eine Glühlampe, in sämtliche
Richtungen. Es besitzt sowohl Farbe, Intensität als auch eine Position innerhalb der
Szene. Ein Punktlicht kann wie gerichtetes Licht unendlich weit strahlen, aber auch in
seiner Reichweite begrenzt werden.
Omnidirektionales Licht
Eine 3D-Szene mit omnidirektionaler
Lichtquelle
4.1.2 Ambient Light
Diese Form des Lichtes stellt eine Art Grundbeleuchtung (engl. Ambient –
Umgebung) dar, „die sich in der gesamten 3D-Szene befindet und durch seine Farbe
und Intensität sämtliche Objektflächen in gleicher Weise beeinflusst, wodurch keine
Differenzierung der Objektoberfläche erkennbar ist“ (…).
Diese Lichtmodelle sind nur Annäherung an das wirkliche Licht. Sie bedienen sich
natürlichen Erscheinungsformen des Lichts (z.B. Sonne, Glühbirne, große
Lichtquellen).
13
Informatik GK 13/1
Altes Gymnasium
Szene aus „Quake II“ mit starkem (rot-gelbem) Ambient-Light
4.2 Schattierungsverfahren: Gouraud-Shading
Problematisch ist die Darstellung des Schattens. Denn wenn für jedes einzelne
Polygon ein Schattenwert berechnet wird, ist die Darstellung sehr kachelhaft und
unrealistisch. Es gibt mehrere Schattierungsverfahren, welche in der Lage sind,
Schattenverläufe realistischer zu gestalten. Das bekannteste und schnellste
Schattierungsverfahren ist das Gouraud Shading, benannt nach dem französischen
Mathematiker Henri Gouraud.
Beim Gouraud-Shading werden die Farbwerte an jeder Ecke eines Poygons
berechnet. Die Vertices werden dann auf die Bildebene projiziert, und erst dann
beginnt das Verfahren seine Arbeit. Es liest das Bild Zeile für Zeile aus und
interpoliert die Intensitätswerte. Das Interpolationspolynom ist dann eine
mathematische Funktion, aus der die Intensitätswerte abgelesen werden können. So
werden sie dann auch auf der Zeile abgetragen.
Polygon mit Gouraud-Shading
Glanzlicht-Effekt bei Gouraud-ShadingKugel wirkt unnatürlich
Wichitg ist, dass beim Gouraud-Shading die Geometrie des Objektes (und damit die
Anzahl der Polygone) nicht berändert wird, dass also die Silhouette des Objekts
kantig bleibt. Ein weiterer Kritikpunkt ist, dass bei niedrigen Polygonanzahlen die
Belichtung des Körpers zu stark vom Normalenvektor desjenigen Polygons abhängt,
das im rechten Winkel zur Lichtquelle steht. Somit entsteht ein unnatürlicher Eindruck
vom beleuchteten Objekt. Ein Verfahren, das besser mit dieser Problematik umgeht,
ist das Phong-Shading.
14
Informatik GK 13/1
Altes Gymnasium
5. Quellenverzeichnis
•
•
•
•
•
•
•
•
•
Christian Rousselle: Jetzt lerne ich Spieleprogrammierung mit DirectX und
Visual C++. Markt und Technik, 2001
Tobias A. Runde: Spieleentwicklung mit 3D GameStudio 6. Sybex, 2003
Rene Meyer: Jetzt lerne ich Spiele programmieren mit Blitz Basic. Markt und
Technik, 2003
Stefan Schubert: Diplomarbeit - "Untersuchung von Techniken beim Levelund Characterdesign zur Laufzeitoptimierung von 3D-Echtzeitanwendungen
am Beispiel eines Computerspiels"
Joe Strout’s 3D FAQ: http://www.strout.net/files/rb/3dfaq.sit.hqx
3D Gamestuio C-Script Workshop: http://server.conitec.net/down/cscript.zip
AUM - ACKNEX User Magazine: http://www.3dgamestudio.de/
3D Fighting Game Tutotrial: http://s91902847.onlinehome.us/GEN/fightws.zip
Agent Yellow Tutorial: http://s91902847.onlinehome.us/NEW2/misc_tut.zip
15