28.12.2012 Aufrufe

[PDF] SpieleProgrammierung

[PDF] SpieleProgrammierung

[PDF] SpieleProgrammierung

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!