[PDF] SpieleProgrammierung
[PDF] SpieleProgrammierung
[PDF] SpieleProgrammierung
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Spieleprogrammierung<br />
Ingo Schebesta
• MindMap<br />
Übersicht
Inhalt des Vortrags<br />
• Weder Programmierkurs<br />
• noch konkretes Programmieren eines<br />
Spiels<br />
sprengt den zeitlichen Rahmen<br />
Sie hören:<br />
• von und über Spieleprogrammierung
Was ist Spieleprogrammierung?<br />
Spieleprogrammierung ist<br />
• eine Untermenge der Spielentwicklung<br />
• Programmierung<br />
– eines Computers<br />
– einer Spielkonsole<br />
– tragbaren Gerätes<br />
• auch als Video-Spiel-Programmierung<br />
bezeichnet
Bedeutung<br />
• weltweiter Jahresumsatz von<br />
ca. 30 Mrd. US$<br />
• mehr Umsatz als Hollywoods Filmindustrie<br />
• starker Wachstumsmarkt<br />
• Spieleprogrammierung kaum in<br />
Deutschland (schlechter Ruf)
Deutschland<br />
• Beispiel: Electronic Arts<br />
Fußballmanager<br />
• Programmiert durch , Köln<br />
• EA mach einen Umsatz von 3 Mrd. EUR<br />
pro Jahr (ca. 1/10 des Weltmarkts)<br />
• Fusballmanager:<br />
– jährlich ca. 300.000 Stück<br />
– ca. mehr als 300.000 Raubkopien
• Film<br />
Besuch bei EA in Köln
• Action<br />
Klassifizierung<br />
–Echtzeit<br />
–Arcade<br />
– Ballspiele<br />
– Olympiade<br />
–Tetris<br />
– "Ballerspiele"<br />
– Ego Shooter<br />
– Rennen (Beispiel Need for Speed)
• Strategie<br />
–Schach<br />
– Civilization<br />
–...<br />
Klassifizierung
können beides sein:<br />
• Strategie<br />
• Action<br />
Beispiel:<br />
• SecondLife<br />
• ...<br />
Netzwerkspiele
•3D s.o.<br />
•2D<br />
– Brettspiele<br />
–Puzzle<br />
– Yetisports (Flash)<br />
Klassifizierung
Entwicklungsprozess<br />
• Pre-Production<br />
• Production<br />
• Postproduction
Entwicklungsprozess<br />
• Pre-Production<br />
–GameDesign<br />
– Prototyping<br />
–Design<br />
• Production<br />
• Postproduction
• Game Design<br />
– Spiel Entwicklung<br />
– Design-Dokument<br />
– Spielaufbau<br />
• Spieltheorie<br />
• Zielgruppe<br />
Pre-Production<br />
• Struktur und Zusammenspiel von<br />
– Medien (assets)<br />
– Programmierung<br />
– Nutzer (user)
• Prototyping<br />
Pre-Production<br />
– Experimentieren und Testen mit:<br />
• verschiedenen Algorithmen<br />
•Usability<br />
– Verändern des Design-Dokuments<br />
• Prototyping auch während des weiteren<br />
Produktionsprozesses<br />
• Testen neuer Ideen<br />
• Auslotung der Möglichkeiten
Entwicklungsprozess<br />
• Pre-Production<br />
• Production<br />
– Projektmanagement<br />
– GameProgrammierer<br />
– Source Code<br />
–Test<br />
–E3-Demo<br />
– Optimierung<br />
• Postproduction
• Projektmanagement<br />
Produktion<br />
– Meilensteine<br />
–Zeit<br />
– Ressourcen (Personal, Software, Hardware)<br />
–Geld
Produktion<br />
• Game Programmierer<br />
– auch künstlerischer Bereich: Game Artists<br />
– Konzeptkunst: Zeichner, Modellierer<br />
– 3D-Modelle<br />
– Animation<br />
– Sound-Design<br />
– Musik<br />
– Grafik, Typographie<br />
– Texturen (mapping...)<br />
– Level-Designer<br />
– Licht<br />
– Kamera<br />
– Umgebung, Landschaft, Requisiten<br />
– Charakter-Design<br />
– Kleidung
• Source Code<br />
Produktion<br />
– Medienerstellung und Einbindung der Medien<br />
in ein Level<br />
– Skript-Programmierung<br />
– Programmierung der Game Engine<br />
–C++<br />
–C<br />
– Assembler
•Test<br />
Produktion<br />
– Fehler<br />
– Cheats<br />
– Spielbarkeit (Schleifen, Attraktoren,<br />
Realitätsnähe, "Feel",...)<br />
– Vergleich mit Design Dokument
•E3-Demo<br />
Produktion<br />
– Electronic Entertainment Expo<br />
– wichtigste Spielemesse der Welt<br />
– Durchkreuzt meist das Projektmanagement
• Optimierung<br />
Produktion<br />
– Neuprogrammierung<br />
– Austausch von Medien<br />
–…
Postproduktion<br />
• Vervielfältigung<br />
• Marketing<br />
• Wartung (Maintenance): Patches als<br />
Download (früher Diskette)
Programmierung
Disziplinen<br />
• Spiel-Physik-Programmierung<br />
• Künstliche Intelligenz<br />
• Grafik<br />
• Sound<br />
• Gameplay<br />
• Scripting<br />
• UI-Programmierung<br />
• Input-Programmierung<br />
• Netzwerk-Programmierung<br />
• Game Tools Programmierung<br />
• Portierungs-Programmierung<br />
• Leitender Spielprogrammierer
Disziplinen<br />
• Spiel-Physik-Programmierung<br />
– Physics Engine<br />
– (Open Dynamics Engine)<br />
– Für Rollenspiele: nur 1 Programmierer<br />
– Für komplexe Kampfspiele (Battlefield 1942,<br />
Legend of Zelda): Team von mehreren<br />
Physik- programmierern
Disziplinen<br />
• Spiel-Physik-Programmierung<br />
– Kollisionserkennung<br />
–Physik
Disziplinen<br />
• Kollisionserkennung<br />
– a posteriori<br />
• Erkennung, nachdem eine Kollision stattgefunden hat<br />
• schneller, einfacher, ungenauer<br />
• keine unzähligen physikalischen Variablen (vgl. z.B. Billard)<br />
• einfache Liste der kollidierenden Körper<br />
• keine Reibung,<br />
• keine elastische Stöße,<br />
• keine deformierbaren Körper<br />
– a priori<br />
• Vorhersage der physikalischen Trajektorie<br />
• exakter: Ort, Zeit<br />
• algorithmisch stabiler
Disziplinen<br />
• Physik<br />
– Mechanik<br />
– Dynamik (Bewegungsgleichungen) F = m a (3-dim)<br />
numerische Integration zur Lösung der Bewegungsgleichung<br />
denn Beschleunigung a = zweifache Ableitung des Ortes x<br />
a = d²x/dt²<br />
– Simulation von Gravitation (Weltraum Spiel)<br />
– Wasser<br />
– Feuer<br />
–Staub<br />
– Rauch<br />
– Explosionen
Disziplinen<br />
• Künstliche Intelligenz (KI)<br />
– Illusion einer Intelligenz<br />
– unterscheidet sich daher vom wissenschaftlichen Gebiet der KI<br />
(Willkürliche Eingaben, Lernen, Entscheidungsfindung...)<br />
– Tricks sind erlaubt.<br />
– Oft Herunterregelung der "Intelligenz", damit der Spieler noch<br />
eine Chance hat (vgl. z.B. Ego- Shooter: Computer zielt immer<br />
schneller und genauer als Mensch...)<br />
– große Bandbreite an Algorithmen:<br />
– Kontrolltheorie<br />
– Robotik<br />
– Computergrafik<br />
– Informatik
Disziplinen<br />
• Künstliche Intelligenz (KI)<br />
– Verwendung fester (Bewegungs-)Muster:<br />
Gegenspieler (PacMan)<br />
– Endliche Automaten (Finite State Machine)<br />
– Modell des Verhaltens, bestehend aus<br />
• Zuständen<br />
• Zustandsübergängen<br />
• Aktionen
Disziplinen<br />
• Künstliche Intelligenz (KI)<br />
– Nichtdeterministische Algorithmen: u.a.<br />
• Endliche Automaten mit Zufallsentscheidungen<br />
• Neuronale Netze<br />
– Pathfinding (Wegsuche)<br />
• Finde den kürzesten Weg von A nach B
Disziplinen<br />
• Künstliche Intelligenz (KI)<br />
– Kontrolltheorie<br />
• Steuerung komplexer dynamischer Systeme<br />
• Anwendung: Variablen eines dynamischen<br />
Systems sollen bestimmte Werte (Referenz)<br />
annehmen<br />
• Ein "Controler" beeinflusst die Eingaben in das<br />
dynamische System, um die gewünschten<br />
Ausgabewerte zu erhalten.<br />
• Beispiel: Tempomat (Geschwindigkeitskontrolle<br />
eines Fahrzeugs, das bergauf und bergab fährt.)
Disziplinen<br />
• Künstliche Intelligenz (KI)<br />
– modernes Spiel: ca. 60% der Programmierer<br />
arbeiten an der Programmierung von KI<br />
– weniger technische Skriptsprachen für KI --><br />
Level Designer<br />
– Gegenspieler, Verfolgungsjagd
Disziplinen<br />
•Grafik<br />
graphic pipeline<br />
für Echtzeitanwendung<br />
auf neuster Grafikhardware (GPUs, Grafikkarten,<br />
Konsolen...)<br />
–3D<br />
– Modellierung<br />
– Rendering<br />
– Animation
Disziplinen<br />
•Grafik<br />
–3D<br />
• 3D-Vektorgrafiken<br />
• Lineare Algebra<br />
• Matritzen-Mathematik (Rotation, Skalierung,<br />
Translation, homogene Koordinaten)<br />
– Modellierung<br />
– Rendering<br />
– Animation
Disziplinen<br />
•Grafik<br />
–3D<br />
– Modellierung<br />
• Polygon-Gitter<br />
• NURBS<br />
• Subdivision-Surfaces<br />
• 3D-Scanning<br />
• Lightscribe<br />
– Rendering<br />
– Animation
Disziplinen<br />
• Grafik<br />
–3D<br />
– Modellierung<br />
– Rendering<br />
• Licht<br />
• Schatten<br />
• Texturen (Mapping)<br />
• Multitexturing (z.B. MipMapping)<br />
• Bump Mapping<br />
• Light Mapping<br />
• Oberflächen (Shader):<br />
–Animation
Disziplinen<br />
• Grafik<br />
–3D<br />
– Modellierung<br />
– Rendering<br />
• Raytracing<br />
• Radiosity (global illumination)<br />
• HDRI<br />
• gerenderte Szene auf Oberflächen als Textur mappen --><br />
kein weiteres Rendern<br />
• Bewegung der Kamera durch die Szene: einfaches Abbilden<br />
von 3D --> 2D<br />
• FH-Emden mit HalfLife (screen shots)<br />
–Animation
Disziplinen<br />
• Grafik<br />
–3D<br />
– Modellierung<br />
– Rendering<br />
–Animation<br />
• Inverse Kinematik<br />
– Hierarchie des Objektbaumes wird rückwärts (invers) bewegt<br />
• Motion Capturing<br />
– optisches Verfahren mit Infrarotkameras (Vicon)<br />
– mechanisch<br />
– magnetisch (selten, ungenau)<br />
– Image Metrics (Gesichtsaminationen: Need for Speed)
Disziplinen<br />
• Sound<br />
– Audio-Programmierung nicht trivial:<br />
• z.B. fortschrittliche Technik zur Positionierung des Klangs im<br />
3D-Raum<br />
• Aber auch Programmierung der "Sound Engine" durch<br />
Scriptsprachen:<br />
– z.B. Sound Zuordnung an<br />
– Figuren<br />
– Handlungen<br />
– Objekte<br />
– Ereignisse<br />
• Klangatmosphäre für Spielumgebung<br />
• Programmierung von Variablen wie Hall (Umgebung,<br />
Raum...)
Disziplinen<br />
• Gameplay<br />
– Spielstrategie<br />
– "Feel" des Spiels<br />
– Strategietabellen<br />
– Anpassung von Parametern, die das Spiel<br />
verändern (-->KI)
Disziplinen<br />
• Scripting<br />
– Level Editor:<br />
– Spiel Medien werden über Skripte<br />
eingebunden<br />
– Skriptsprache meist leichter zu handhaben als<br />
C++<br />
– (vgl. Leveleditor (Mod-File) für HalfLife)
Disziplinen<br />
• UI-Programmierung<br />
– UI sieht wie 2D aus,<br />
– verwendet aber die selbe 3D-Technik, wie<br />
das restliche Spiel<br />
– Skripting von Special Effects:<br />
• Transparenz<br />
•Animation<br />
•Partikel
Disziplinen<br />
• Input-Programmierung<br />
– Keyboard, Joystik, Game-Pad, Mouse, ...<br />
– Input mit niedriger Latenz bei komplexen<br />
Echtzeitspielen:<br />
• z.B. Ego-Shooter (Quake)<br />
– Bei Strategiespielen eher irrelevant
Disziplinen<br />
• Netzwerk-Programmierung<br />
– Sehr schwierige Aufgabe:<br />
– Netzwerk-Latenzen<br />
– Packet-Kompression<br />
– Packet-Verluste<br />
– unterbrochene Leitungen<br />
– unglücklicherweise meist am Ende des<br />
Projekts
Disziplinen<br />
• Game Tools-Programmierung<br />
– Programmierung von Werkzeugen für spielespezifische<br />
Aufgaben:<br />
• skripting<br />
• importieren<br />
• konvertieren<br />
• modifizieren<br />
• für Levels<br />
– Aber auch:<br />
• IDE (Integrated Development Environment)<br />
• Photoshop<br />
• 3D-Programme (Maya, 3DMax,...)<br />
• Soudeditoren
Disziplinen<br />
• Portierungs-Programmierung<br />
– speziealisiert auf Code-Konvertierung für<br />
unterschiedliche Betriebssysteme oder Plattformen<br />
–z.B.<br />
• Spiel auf Mobiltelefone portieren<br />
• C++ --> Java<br />
• Konvertierung von Medien (assets)<br />
– Telefone und PDAs haben<br />
• wenig Speicher,<br />
• geringere Rechenleistung<br />
• andere GPUs
Disziplinen<br />
• Leitender-Programmierer<br />
– Übersicht über alle Programmierarbeiten<br />
– Abstimmung zwischen den einzelnen<br />
Modulen und Programmierarbeiten<br />
– "technical director"
Programmiertechnik<br />
• Game Loop<br />
• Ereignisorientiert<br />
• Hyperthreading
Programmiertechnik<br />
• Game Loop<br />
– Grundlage von fast jedem Spiel:<br />
while( user doesn't exit )<br />
check for user input<br />
run AI<br />
move enemies<br />
resolve collisions<br />
draw graphics<br />
play sounds<br />
end while<br />
• Ereignisorientiert<br />
• Hyperthreading
Programmiertechnik<br />
• Game Loop<br />
• Ereignisorientiert<br />
– Vorteile:<br />
– Leichtere Eingabe-Verarbeitung, jenseits von<br />
Nutzereingaben (Maus etc)<br />
– Leichtere Kommunikation zwischen Klassen:<br />
Jede Klasse hört auf die für sie relevanten<br />
Ereignisse.<br />
• Hyperthreading
Programmiertechnik<br />
• Game Loop<br />
• Ereignisorientiert<br />
• Hyperthreading<br />
– Hyper-Threading Technology (HTT)<br />
– simultanes multi threading<br />
– Multithreading: Der Prozessor kann jeden Zyklus<br />
einen anderen Threads ausführen<br />
–HTT: ...jeden Zyklus mehrere Threads ausführen<br />
(nicht jeder Thread benötigt Rechenleistung...)<br />
– Eingeführt von Intel (Pentium 4)
Programmiersprachen<br />
• C++<br />
• C<br />
• Assembler<br />
• Java für Web-Anwendungen, Mobil-Telefone und PDAs<br />
• Adobe Flash (mit ActionScript) sehr populärer<br />
Konkurrent zu Java<br />
• compilierter Code für zeitkritische Anwendungen<br />
(rendering, physikalische Effekte)<br />
• Skripte werden daher meist compiliert<br />
• Im Optimierungsprozess werden manche Skripte durch<br />
Programmierung in C/C++ ersetzt
Programmiersprachen<br />
• Assembler<br />
– am schnellsten, spricht direkt Hardware an<br />
– lange Entwicklungszeit, schwierig zu erlernen, nicht<br />
portabel<br />
• C<br />
– extrem schnell, viele Werkzeuge, weit verbreitet<br />
– nicht objektorientiert, keine Garbage Collection<br />
(automatisches Speicher Management)<br />
• C++<br />
– sehr schnell, objektorientiert, viele Werkzeuge, weit<br />
verbreitet<br />
– keine Garbage Collection
Programmiersprachen<br />
• C#<br />
– sehr objektorientiert, RAD-Sprache (Rapid Application<br />
Development), leichte Verwendbarkeit<br />
– langsam: JIT-Compiler (interpreter)<br />
• Java<br />
– sehr objektorientiert, leicht zu verwenden, portierbar<br />
– kann sehr langsam sein (JIT), nicht für<br />
Konsolenspiele<br />
• Python<br />
– Oft bei Spieleprogrammierung als Skriptsprache<br />
verwendet.
Programmiersprachen<br />
• Middleware:<br />
– high level Funktionalität<br />
– jenseits low level APIs wie DirectX und OpenGL<br />
– komplexe Technologien<br />
– Plattformunabhängigkeit angestrebt<br />
– Reduzierung von Redundanz (z.B. für jedes Spiel ein<br />
neues Animationssystem programmieren)<br />
– ==> Programmierer können sich auf neue Inhalte<br />
konzentrieren
APIs<br />
API (Application Programming Interface)<br />
• OpenGL<br />
•DirectX<br />
• Java3D
APIs<br />
• OpenGL<br />
– ursprünglich von SGI entwickelt<br />
– plattformunabhängig<br />
– ca. 250 Befehle zur Darstellung komplexer<br />
3D-Szenen in Echtzeit<br />
– Erweiterungen sind definierbar (meist durch<br />
Grafikkartenhersteller: ATI, NVIDIA,<br />
3DLabs…)<br />
– Erweiterungen können später als OpenGL-<br />
Standard vom OpenGL ARB (Architecture<br />
Review Board) festgelegt werden.
APIs<br />
•DirectX<br />
– Zu OpenGL konkurierende API von Microsoft<br />
– betriebssystemabhängig !<br />
– Direkter Zugriff auf Grafikhardware, umgeht<br />
GDI (Graphics Device Interface):<br />
– Low-level API: Direct3D<br />
– High-Level API: Direct3DX (setzt auf Direct3D<br />
auf, vereinfacht den Programmieraufwand bei<br />
3D-Spielen)<br />
– kostenlos<br />
– sehr aktuell
APIs<br />
• Java3D<br />
– Bibliothek von Java-Klassen<br />
– von Sun entwickelt<br />
– Entwicklung von Sun eingestellt<br />
– Seit 2004 OpenSource<br />
– In unterschiedlichen Versionen verfügbar:<br />
• Kapselt OpenGL-Schnittstelle oder<br />
• Kapselt Direct3D-Schnittstelle<br />
– Mit einem objektorientierten Programmkonzept<br />
– Prinzipiell könnten ähnlich hohe Rendergeschwindigkeiten wie<br />
bei C, OpenGL oder Direct3D möglich sein<br />
– Aber: kein direkter Zugriff auf OpenGL- oder Direct3D-Funktion<br />
– Weiterentwicklungen der Grafikkarten stehen nicht zur<br />
Verfügung. Günstigstenfalls verzögert (auch das ist selten).
IDE<br />
(Integrated Development Environment)<br />
• sehr häufig:<br />
– Microsoft Visual Studio<br />
– CodeWarrior
Game Engines<br />
• Free (Open Source) z.B.:<br />
– Allegro<br />
• C++<br />
• DOS, Unix, Windows, BeOS, QNX, MacOS<br />
• Free (Open Source)<br />
• 2D and 3D<br />
• Sound<br />
• No Networking<br />
• No Scripting<br />
– ClanLib<br />
• C++<br />
• Windows, Linux, MacOSX<br />
• Free (Open Source)<br />
• Accelerated 2D<br />
• Sound<br />
• Networking<br />
• No Scripting
Game Engines<br />
• komerziell (10.000 bis zu 3.750.000 US$):<br />
– Unreal Engine<br />
•C++<br />
• Windows, Linux, MacOS X, PS2, Xbox, PS3,<br />
XBOX 360<br />
• 3D, Sound, Networking,<br />
• UnrealScript,<br />
• Physics,<br />
•HDR (UE3)<br />
• teuer
Game Engines<br />
– Steam (Valve)<br />
• Python<br />
• Windows/Linux<br />
• 2D/3D via DirectX and OpenGL<br />
• Sound<br />
• Networking (demnächst)<br />
• Python scripting with 3DCW helpers<br />
• Viele andere features<br />
– Gamebryo, NetImmerse<br />
– RenderWare<br />
– Build<br />
– Warcraft III (teuerste Engine 3 Mio US$)
Plattformen<br />
• Meist sind Programmierer auf<br />
– eine Disziplin und<br />
– eine Platform spezialisiert:<br />
• z.B. 3D-Grafik Programmierer für Xbox<br />
• Xbox 360<br />
• PlayStation 3<br />
• Wii<br />
• Apple Mac OS X<br />
• Microsoft Windows Vista
Namhafte Game-Programmierer<br />
• Spiele Programmierer != Spiel Designer<br />
– obgleich viele Spiel Designer auch<br />
programmieren können<br />
• Ken Silverman: Schöpfer der "Build<br />
Engine" (verwendet von vielen populären<br />
Spielen)<br />
• Tim Sweeney: Schöpfer der "Unreal<br />
Engine"
Namhafte Game-Programmierer<br />
• Sid Meier: Entwickler vieler erfolgreicher<br />
Spiele (Civilization, Pirates)<br />
• John Carmack: Wolfenstein, Doom,<br />
Quake<br />
• Michael Abrash: Optimierung von<br />
Grafikroutinen<br />
• Will Wright: SimCity, The Sims, Spore
Weitere Quellen<br />
Literatur<br />
• deutsch<br />
– Heiko Kalista: C++ für Spieleprogrammierer. Hanser Fachbuchverlag;<br />
Auflage: 2., erw. A. (August 2005)<br />
– Lennart Steinke: Spieleprogrammierung. Konzeption, Entwicklung,<br />
Programmierung. Vmi Buch; Auflage: 1 (Oktober 2003)<br />
• englisch<br />
– Kenneth C Finney: 3D Game Programming All in One, Second Edition.<br />
Course Technology PTR; 2 edition (November 6, 2006)<br />
– Mike Dickheiser: Game Programming Gems 6. Charles River Media; 1<br />
edition (March 7, 2006)<br />
– Frank Luna: Introduction to 3D Game Programming with Direct X 9.0c:<br />
A Shader Approach. Wordware Publishing, Inc. (June 25, 2006)<br />
– Christer Ericson: Real-Time Collision Detection. Morgan Kaufmann;<br />
Har/Cdr edition (December 22, 2004)<br />
– David H. Eberly: 3D Game Engine Architecture: Engineering Real-Time<br />
Applications with Wild Magic. Morgan Kaufmann; Har/Cdr edition<br />
(December 17, 2004)
Weitere Quellen<br />
Internet<br />
• Game Programming Wiki: http://gpwiki.org<br />
• UnrealEngine:<br />
http://www.unrealtechnology.com/html/technology/ue30.shtml<br />
• Bright Future GmbH: http://www.brightfuture.de<br />
• EA Fußballmanager: http://www.fm07.de/de<br />
• Graphics Programming Black Book:<br />
http://www.byte.com/abrash (free pdf download)<br />
• YetiSports:<br />
http://www.yetisports.org/de/download_games.php