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