Eine Game-Engine bildet das Grundgerüst der meisten Computerspiele. Sie besteht aus
einer
Programmbibliothek, die
Entwicklern von Computerspielen häufig benutzte Werkzeuge zur
Verfügung stellt.
Bestandteile
Sie besteht, je nach Spiel, unter anderem aus folgenden Bereichen:
Basisfunktionalitäten
Grafik-Engine
Die sogenannte
Grafik-Engine ist für die grafische Darstellung auf dem Bildschirm
verantwortlich. Heutige Spiele benutzen meistens eine 3D-Darstellung. In
diesem Fall wird die Grafik-Engine auch oft 3D-Engine genannt.
Eine Grafik-Engine beinhaltet meistens folgende Werkzeuge:
- Funktionen zum Laden, Verwalten und Anzeigen von
Texturen bzw.
Sprites
- Kollisionsabfragen
- Textausgabe
Im Falle einer 3D-Engine kommen meistens noch unter anderem folgende
Werkzeuge hinzu:
- Funktionen zum Laden, Verwalten, Darstellen und Animieren von
3D-Modellen
- Schnelle, optimierte
Klassen für
Vektoren,
Matrizen,
Ebenen,
Strahlen,
Farben (inklusive
Operatoren und
Hilfsfunktionen)
- Shader-System
zur möglichst realistischen Darstellung der Wirkung von Licht und
Schatten auf verschiedene Materialien (Metall, Holz, Haut)
- Effekte wie Feuer, Explosionen, Wasser, Schnee, Nebel
Physiksystem
Aktuelle Spiele werden mit zusehends realistischeren Physiksystemen (Physikengine)
ausgestattet. Neben höherem visuellen Realismus kann das Physiksystem auch
Auswirkung auf das Spielgeschehen haben, wenn beispielsweise ein fallendes
Objekt ( z.B.: eine geworfene
Handgranate ) einen Hügel herunterkullert, anstatt darauf liegen zu
bleiben. Man kann zwischen verschiedenen Arten von Physik unterscheiden:
- Weit verbreitet ist
Rigid-Body-Physik, das heißt die Simulation der
Newton'schen Mechanik für feste Körper.
- Ein Teilaspekt von
Rigid-Body-Physik ist Ragdoll-Physik:
Virtuelle Charaktere können physikalisch korrekt fallen, und können
dabei mit den Gliedmaßen an anderen Gegenständen anstoßen.
- Manche Spiele simulieren auch das realistische Verhalten von z.B.
Fahnen (etwa in
Prince of Persia), Kleidung oder Wasser.
Physikengines bekamen im Jahr 2005 auch eine
Hardwareunterstützung spendiert, sogenannte
Physikbeschleuniger, um physikalische Effekte genauer und in größerem
Ausmaß berechnen zu können. Prinzipiell gilt: Je besser die Gesetze der
Physik dargestellt werden, desto höher ist der Realismusgrad bei der
Interaktion mit Gegenständen in virtuellen Welten.
Soundsystem
Der Sound kommt in aktuellen Spielen auch nicht zu kurz. Aktuelle Spiele
wie z.B. Far
Cry oder
Half-Life
2 unterstützen 5.1-,
teilweise sogar
7.1-Surroundsound
und EAX,
entsprechende PC-Hardware und Boxen vorausgesetzt. Dadurch wird der
räumliche Eindruck der Spielwelt verstärkt, indem ein differenzierter
Raumklang entsteht und man auch die Position von Gegnern erhören kann.
Die Game-Engine sollte das Abspielen von Musik und
3D-Sounds vereinfachen.
Künstliche Intelligenz
Bei der
künstlichen Intelligenz (KI) der computergesteuerten Mitspieler und
Gegner wurden ebenfalls große Fortschritte erzielt. Mittlerweile
verständigen sich Teams untereinander, suchen Deckung, kreisen Spielfiguren
ein etc. Besonders knifflige KIs sind zudem lernfähig und passen sich an die
Spielweise der Spieler an.
Ein klassischer Bestandteil von KI ist die
Pfadsuche. Etwa bei
Strategiespielen und auch bei
Ego-Shootern müssen Figuren im Spiel selbstständig einen Weg von A nach
B finden. In dem Computerspiel
Die
Siedler beispielsweise laufen zahlreiche Figuren selbstständig von ihrer
Wohnstätte zur Arbeit und umlaufen dabei Hindernisse wie Berge oder andere
Figuren.
Zustandsspeicherung
Um den aktuelle Spielstand abzuspeichern und wieder zu laden gibt es zwei
Ansätze:
-
Serialisierung des Objektbaums: Alle Objekte, deren Zustände und
Beziehungen werden mehr oder weniger automatisch komplett gespeichert.
Die Zustände aller betroffenen Objekte der Game-Engine werden in eine
Bytefolge (Stream)
umgewandelt und können daraus auch wieder hergestellt werden. Dieses
erzeugt typischerweise größere Dateien, es wird aber auch wirklich der
gesamte Spielzustand gespeichert.
- Nur bestimmte Daten werden gespeichert. Vorteil sind kleine Dateien,
und die Spielzustände können etwa auch auf Speicher-Modulen von Konsolen
gespeichert werden. Nachteil ist ein größerer Programmieraufwand, weil
die Programmierer genau programmieren müssen, was abgespeichert wird.
Aufgrund dieser Komplexität greifen Game-Engines daher oft auf
einfachere Verfahren zurück, etwa dass man den Spielzustand nur an
bestimmten Stellen im Spiel abspeichern kann.
Steuerung
Die Steuerung ist nicht zu unterschätzen. Unpräzise Steuerung führt
schnell zu Frustration. Haben die Entwickler früherer PC-Spiele noch auf die
Pfeiltasten der
Tastatur
gesetzt, so gibt es heute für verschiedene Genres andere, besser geeignete
Lösungen. In der Sparte Rennspielen ist dies das Lenkrad, eventuell mit
Force Feedback-Unterstützung.. Bei Sportspielen, z.B. der
FIFA-Reihe,
greifen viele Spieler zum
Gamepad.
Strategie- und Aufbauspiele werden normalerweise per
Maus gesteuert. Bei
Ego-Shootern hat sich eine Kombination aus
Maus und
Tastatur
durchgesetzt.
Dazu beinhaltet eine gute Engine Werkzeuge zum Zugriff auf
Eingabegeräte wie
Tastatur,
Maus und
Joystick
Netzwerk-Code
Der Netzwerk-Code bestimmt die Voraussetzungen für den
Multiplayerteil eines Spiels, z.B. wieviele Spieler gleichzeitig am
Spiel teilnehmen können oder ob ein 56k-Modem
ausreichend ist oder
DSL benötigt wird.
Datenmanagement
Zum Laden und Speichern von Spielständen, Benutzer- und Leveldaten sowie
zur absturzsicheren Speicherverwaltung ist ein gutes Datenmanagement nötig.
Deshalb verfügen viele Game-Engines über folgende Funktionen:
- Laden von Dateien aus größeren
Datenpaketen (z.B. verschlüsselte
ZIP-Dateien)
-
Speichermanagement (um
Speicherlecks zu verhindern)
Skripting
Skriptsprachen dienen der Programmierung der Spielabläufe. Hierfür
könnte man auch
Programmiersprachen wie
C++ nutzen,
allerdings haben
Skriptsprachen folgende wesentlichen Vorteile bei der Spieleentwicklung:
- Skriptsprachen sind meistens robuster und verursachen weniger
Abstürze. Änderungen am Spielablauf bedeuten daher weniger Risiko für
den Entwicklungsprozess.
- Spieledesigner, welche den Inhalt der Spiele bestimmen, sind in
aller Regel keine professionellen Programmierer. Skriptsprachen sind
auch für Nicht-Programmierer schnell zu erlernen.
- Am Inhalt des Spiels werden meistens viele Änderungen vorgenommen.
Skript-Sprachen machen es einfach, die Programmierung zur
Laufzeit interaktiv zu ändern, ohne das Spiel neu starten zu müssen.
Eine Scriptsprache ist meistens langsamer als andere Programmiersprachen
wie etwa C++. Die Game-Engine selbst ist daher meistens nicht in einer
Scriptsprache programmiert, sondern in aller Regel in C++. Die Game-Engine
stellt aber meistens eine Script-Sprache zur Verfügung. Insbesondere für
größere Spieleproduktionen hat sich daher eine Zwei-Schichten-Architektur
etabliert: Das eigentliche Spiel wird in der Script-Sprache entwickelt,
welche von der zugrundeliegenden Game-Engine zur Verfügung gestellt wird.
Manche Game-Engines greifen auf vorhandene Skriptsprachen zurück, etwa LUA. Aufgrund der
besonderen Anforderungen besitzen viele Game-Engines eine eigene
Skript-Sprache, beispielsweise
UnrealScript in der
Unreal-Engine,
C-Script im
3D Gamestudio, oder
Perch in der
Shark 3D-Engine.
Unterschiede von Engines für Konsolen und PC
Game-Engines für Konsolen
Konsolen,
beispielsweise die
Playstation-Serie und Xbox-Serie,
unterscheiden sich technisch von PCs vor allem in folgenden Aspekten:
- Deutlich weniger
Hauptspeicher
- Spezialhardware, insbesondere zur Berechnung der 3D-Grafik
-
CD/DVD
als primäres Speichermedium
Je nach Konsole kann man die
Hardware
zwar ähnlich programmieren wie PC-Hardware; allerdings geht dieses dann auf
Kosten der Qualität, da die Konsolen-Hardware dann nicht ausgeschöpft wird.
Da die technischen Eckdaten von Konsolen aber typischerweise deutlich hinter
aktuellen PCs zurückfallen, ist ein optimales Ausnutzen der Konsolenhardware
wichtig für eine gute Game-Engine. Konsolen-Engines besitzen daher in aller
Regel viel Code, welcher ausschließlich für eine spezielle Konsole
entwickelt wird. Da CD
und DVD merklich
langsamer sind als
Festplatten, andererseits Ladezeiten bei Konsolen besonders kurz sein
sollen, spielt die Organisation der Daten auf
DVD und die
Ladetechnik eine wichtige Rolle.
Zertifizierungsprozess
Des Weiteren müssen Spiele, die für Konsolen veröffentlicht werden, einen
strengen
Zertifizierungsprozess des Konsolenherstellers, etwa
Sony oder
Microsoft,
durchlaufen. Um diesen zu bestehen müssen die Spiele eine umfangreiche
Anforderungsliste erfüllen, welche beispielsweise bestimmte Anforderungen an
die Ladezeiten von DVD fordert. Die meisten Anforderungen haben aber auch
deutliche Konsequenzen für die darunterliegende Game-Engine. Auch aufgrund
dieser Anforderungen besitzen Game-Engines für Konsolen typischerweise eine
ganz andere
Software-Architektur als PC-Engines.
Portierung von Konsole auf PC
Einfacher ist dagegen der Schritt von Konsolen zu PC: Eine Engine, die
auf Konsolen läuft lässt sich in aller Regel problemlos auf den PC
portieren, einfach weil dort die Anforderungen geringer sind. Allerdings
beklagen Computerspieler bei derartigen Spielen dann öfters, dass das Spiel
auf dem PC nicht die weitreichenderen Möglichkeiten aktueller PC-Hardware
ausnutzt. Ein klassisches Beispiel sind
Playstation 2-Spiele, welche auch auf den PC portiert worden sind, und
welchen man oft ansieht, dass die Grafik für die technisch eher beschränkte
Konsolen-Hardware entworfen worden ist. Ein anderer Aspekt ist, dass die
Spiele-Entwickler bei Konsolen nur für eine feststehende Hardware entwickeln
müssen, während ein PC-Spiel auf PCs mit verschiedenster Ausstattung laufen
muss. Dieses hat weniger Einfluss auf die
Software-Architektur, bedeutet aber für den Spieleentwickler, dass er
die Engine umfangreich mit verschiedenen Hardware-Konfigurationen testen
muss.
Entwicklungswerkzeuge
Entwicklungswerkzeuge spielen eine immer wichtigere Rolle bei der
Entwicklung von Computerspielen. Viele professionelle Entwickler messen
diesen inzwischen sogar eine größere Bedeutung zu als der eigentlichen
Game-Engine. Grob kann man verschiedene Ansätze unterscheiden, die meistens
auch in Kombination eingesetzt werden:
- Plugins für existierende Programme. Beispielsweise ermöglichen
derartige Plugins Daten aus bekannten 3D-Modellierungsprogrammen in ein
spezielles Format für die Game-Engine zu konvertieren.
- Eigenständige Programme.
- Die Game-Engine hat eingebaute Editierfunktionalität. Dieses ist bei Konsolen
nur wenig praktikabel.
- Dynamische Verbindungen: Änderungen, die man in eigenständigen
Programmen oder Plugins vornimmt werden von der Game-Engine direkt
übernommen. Dieser Prozess etabliert sich insbesondere für
professionelle Konsolenentwicklung.
Immer wichtiger werden die sogenannten
Turn-Around-Zeiten: Je schneller ein Spieleentwickler das Ergebnis
seiner Änderungen im Spiel sieht, desto produktiver kann er arbeiten. Da
Spieleproduktionen immer aufweniger werden, spielt dieser Aspekt eine immer
wichtigere Rolle. Aus diesem Grund werden die Entwicklungswerkzeuge und die
Game-Engines immer weiter verzahnt.
Engines zum Abspielen vorhandener Spieldaten
Da ältere Spiele (DOS)
auf aktuellen Plattformen nicht mehr ohne weiteres laufen, haben engagierte
Entwickler verschiedene Projekte gestartet, um neue Engines zur
Interpretation von Spieldaten zu schreiben. In diesem Fall liefert das
Projekt meistens nur die Engine, die Spieldaten muss der Nutzer
bereitstellen (auf diese Weise werden von den Entwicklern die
Urheberrechte der ursprünglichen Hersteller nicht verletzt). Beispiele
hierfür sind die
ScummVM,
ein auf modernen Plattformen lauffähiger
Interpreter für die
Scriptsprache von
LucasArts-Adventures
und anderen oder
Exult, ein
Emulator
für Ultima
VII / Ultima VII Teil 2.