Spiel-Engine
Eine Spiel-Engine (englisch game engine [.mw-parser-output .IPA atext-decoration:noneˈgeɪmˌɛndʒɪn]) ist ein spezielles Framework für Computerspiele, das den Spielverlauf steuert und für die visuelle Darstellung des Spielablaufes verantwortlich ist. In der Regel werden derartige Plattformen auch als Entwicklungsumgebung genutzt und bringen dafür auch die nötigen Werkzeuge mit.
Zu den am häufigsten verwendeten 3D-Engines gehören die CryEngine, Frostbite, die Unity Engine und die Unreal Engine.[1]
Inhaltsverzeichnis
1 Basisfunktionalitäten
1.1 Grafik-Engine
1.2 Physiksystem
1.3 Soundsystem
1.4 Zustandsspeicherung
1.5 Steuerung
1.6 Netzwerk-Code
1.7 Datenverwaltung
1.8 Skripting
2 Unterschiede von Engines für Konsolen und PC
2.1 Spiel-Engines für Konsolen
2.2 Zertifizierungsprozess
2.3 Portierung von Konsole auf PC
3 Entwicklungswerkzeuge
4 Engines zum Abspielen vorhandener Spieldaten
5 Liste von Spiel-Engines
6 Literatur
7 Weblinks
8 Einzelnachweise
Basisfunktionalitäten |
Je nach Engine besteht diese u. a. aus folgenden Bestandteilen:
Grafik-Engine |
Die Grafik-Engine ist für die grafische Darstellung auf dem Bildschirm verantwortlich.
Eine Grafik-Engine beinhaltet meistens folgende Werkzeuge:
- Funktionen zum Laden, Verwalten und Anzeigen von Texturen beziehungsweise Sprites
- Textausgabe
- Effekte wie Feuer, Explosionen, Wasser, Schnee, Nebel
Im Falle einer 3D-Engine kommen oftmals folgende Werkzeuge hinzu:
- Funktionen zum Laden, Verwalten, Darstellen und Animieren von 3D-Modellen
Shader-System zur möglichst realistischen Darstellung der Wirkung von Licht und Schatten auf verschiedene Materialien (beispielsweise Metall, Holz oder Haut)
Physiksystem |
Aktuelle Spiele werden mit zusehends realistischeren Physiksystemen (Physik-Engine) ausgestattet. Neben höherem visuellem 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.
- Manche Spiele simulieren auch das realistische Verhalten von Soft Bodies, (z. B. Fahnen, Kleidung) oder Fluiden (z. B. Wasser, Rauch)
Physikengines bekamen im Jahr 2005 auch eine Hardwareunterstützung spendiert, sogenannte Physikbeschleuniger, um die Berechnung der physikalische Effekte auf eine spezielle Physikkarte oder die Grafikkarte auszulagern.
Soundsystem |
Nahezu alle aktuellen Spiele bzw. ihre zugrundeliegende Engine unterstützen 5.1 oder 7.1-Raumklang und Technologien wie z. B. EAX, entsprechende PC-Hardware (Soundkarte) und Boxen vorausgesetzt. Dadurch wird der räumliche Eindruck der Spielwelt verstärkt, indem ein differenzierter Raumklang entsteht, der es beispielsweise erlaubt, die Position von Gegnern zu orten. Außerdem können klanglich verschiedene Räumlichkeiten wie Badezimmer, Hallen, Gänge, Höhlen oder Unterwasser-Klangdämpfung simuliert werden. Auch andere, physikalisch bedingte Effekte wie der Doppler-Effekt sind hardwarebeschleunigt umsetzbar.
Zustandsspeicherung |
Um den aktuellen Spielstand abzuspeichern und wieder zu laden gibt es zwei Ansätze:
Serialisierung des Objektbaums: Alle Objekte, deren Zustände und Beziehungen werden 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 Spiel-Engines daher oft auf einfachere Verfahren zurück, etwa, dass man den Spielzustand nur an bestimmten Stellen im Spiel abspeichern kann.
Steuerung |
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 Rennspiele ist dies das Lenkrad, eventuell mit Force-Feedback-Unterstützung.
Bei Sportspielen, zum Beispiel der FIFA-Reihe, greifen viele Spieler zum Gamepad.
Für die Steuerung von Fluggeräten und Raumschiffen werden in der Regel Joysticks verwendet.
Gerade auf hohen Realismus ausgelegte Simulationen erlauben häufig die Nutzung multipler Steuerungssysteme, um z. B. in einer Rennsimulation neben einem Lenkrad eine hochwertige Schaltung nutzen zu können. In der Flugsimulationsszene erlauben Baukasten-Systeme den Aufbau und die Ansteuerung kompletter Cockpit-Replikas.
Strategie- und Aufbauspiele werden normalerweise per Maus gesteuert.
Bei Ego-Shootern, Third-Person-Shootern und weiteren ähnlichen Genres hat sich eine Kombination aus Maus und Tastatur durchgesetzt.
Netzwerk-Code |
Der Netzcode bestimmt die Voraussetzungen für den Multiplayer-Teil eines Spiels, z. B. wie viele Spieler gleichzeitig am Spiel teilnehmen können oder ob ein 56k-Modem ausreichend ist oder ein Breitbandinternetanschluss wie xDSL oder TV-Kabel benötigt wird.
Der Entwickler kann sich zwischen den zwei Netzwerkprotokollen UDP und TCP entscheiden. Der Vorteil von TCP besteht in der Sicherheit, dass Daten sicher und in der richtigen Reihenfolge beim Clienten ankommen. UDP hingegen ist schneller, es können aber Paketverdopplung, Paketverlust oder Durchmischung auftreten. Meistens werden beide Protokolle gleichzeitig verwendet, um flüchtige Daten über UDP zu senden und sichere Daten, wie zum Beispiel die Anmeldung über TCP.
Datenverwaltung |
Zum Laden und Speichern von Spielständen, Benutzer- und Leveldaten sowie zur Speicherverwaltung ist eine Datenverwaltung erforderlich.
Spiel-Engines verfügen deshalb über folgende Funktionen:
- Laden von Dateien aus Datenpaketen (zum Beispiel verschlüsselte ZIP-Dateien)
- Speicherverwaltung
Skripting |
Skriptsprachen dienen der Programmierung der Spielabläufe. Grundsätzlich sind Spielabläufe auch in der Entwicklungssprache programmierbar, dennoch bieten Skriptsprachen folgende Vorteile:
- Skriptsprachen sind für den Anwenderkreis der Spieledesigner, die nicht notwendigerweise professionelle Programmierer sind, leichter zu erlernen als reine Entwicklungssprachen.
- Skriptsprachen können oftmals iterativ während der Programmausführung vorgenommen werden, was die Entwicklungszeit verkürzt; eine Neukompilierung des Engine-Codes ist hierbei nicht erforderlich.
- Die Spiel-Engine wird universeller und kann auch von den Nutzern erweitert werden
Die Ausführung einer Skriptsprache ist langsamer als hardwarenahe, kompilierte Programme wie etwa C/C++. Daher werden Spiel-Engines nur selten in einer Skriptsprache geschrieben, sondern werden bevorzugt in C++ implementiert. Meist stellt die Spiel-Engine eine eigene Skriptsprache zur Verfügung. Insbesondere für größere Spieleproduktionen hat sich daher eine Zwei-Schichten-Architektur etabliert: Das eigentliche Spiel wird in der Skriptsprache entwickelt, die von der zugrundeliegenden Spiel-Engine zur Verfügung gestellt wird.
Manche Spiel-Engines greifen auf vorhandene Skriptsprachen zurück, etwa Lua. Aufgrund der besonderen Anforderungen besitzen viele Spiel-Engines eine eigene Skriptsprache, beispielsweise UnrealScript in der Unreal Engine, C-Script bzw. Lite-C im 3D GameStudio, Clonk, oder Perch in der Shark-3D-Engine.
Unterschiede von Engines für Konsolen und PC |
Spiel-Engines für Konsolen |
Moderne Konsolen unterscheiden sich technisch von PCs vor allem in folgenden Aspekten:
- Deutlich weniger Hauptspeicher
- Alle Geräte eines Typs sind gleich leistungsfähig.
- Spezialhardware, insbesondere zur Berechnung der 3D-Grafik
- optische Medien CD/DVD/Blu-ray Disc 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 Spiel-Engine. Konsolen-Engines besitzen daher in aller Regel viel Code, der ausschließlich für eine spezielle Konsole entwickelt wird. Da CD, DVD oder Blu-ray Disc merklich langsamer sind als Festplatten, andererseits Ladezeiten bei Konsolen besonders kurz sein sollen, spielt die Organisation der Daten auf diesen Medien und die Ladetechnik eine wichtige Rolle.
Zertifizierungsprozess |
Spiele, die für Konsolen veröffentlicht werden, müssen einen strengen Zertifizierungsprozess des Konsolenherstellers durchlaufen. Um diesen zu bestehen, müssen die Spiele eine umfangreiche Anforderungsliste erfüllen, beispielsweise bestimmte Anforderungen an die Ladezeiten. Die meisten Anforderungen haben deutliche Konsequenzen für die darunterliegende Spiel-Engine. Aufgrund dieser Anforderungen besitzen Spiel-Engines für Konsolen typischerweise eine ganz andere Softwarearchitektur 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, weil dort die Anforderungen geringer sind. Allerdings beklagen Computerspieler bei derartigen Spielen dann öfter, dass das Spiel auf dem PC nicht die weitreichenderen Möglichkeiten aktueller PC-Hardware ausnutzt. Ein klassisches Beispiel sind PlayStation-2-Spiele, die auch auf den PC portiert worden sind, und denen man oft ansieht, dass die Grafik für die technisch eher beschränkte Konsolen-Hardware entworfen wurde. 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 Softwarearchitektur, 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 Spiel-Engine. Grob kann man verschiedene Ansätze unterscheiden, die meistens auch in Kombination eingesetzt werden:
Plug-ins für existierende Programme. Beispielsweise ermöglichen derartige Plug-ins, Daten aus bekannten 3D-Modellierungsprogrammen in ein spezielles Format für die Spiel-Engine zu konvertieren.- Eigenständige Programme.
- Die Spiel-Engine hat eingebaute Editierfunktionalität. Dieses ist bei Konsolen nur wenig praktikabel.
- Dynamische Verbindungen: Änderungen, die man in eigenständigen Programmen oder Plug-ins vornimmt, werden von der Spiel-Engine direkt übernommen. Dieser Prozess etabliert sich insbesondere für professionelle Konsolenentwicklung.
Immer wichtiger werden die sogenannten Turnaround-Zeiten: Je schneller ein Spieleentwickler das Ergebnis seiner Änderungen im Spiel sieht, desto produktiver kann er arbeiten. Da Spieleproduktionen immer aufwendiger werden, spielt dieser Aspekt eine immer wichtigere Rolle. Aus diesem Grund werden die Entwicklungswerkzeuge und die Spiel-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 ScummVM, ein auf modernen Plattformen lauffähiger Interpreter für die Skriptsprache SCUMM von LucasArts-Adventures und anderen oder Exult,[2][3] eine nachprogrammierte Engine für Ultima VII und Ultima VII Teil 2.
Liste von Spiel-Engines |
Literatur |
- Jason Gregory, Jeff Lander: Game Engine Architecture. Erste Auflage. Taylor & Francis Ltd., 2009, ISBN 978-1-56881-413-1.
- Jonathan Blow: Game Development: Harder Than You Think. In: ACM Queue. Band 1, Nr. 10, Februar 2004, S. 28–37, doi:10.1145/971564.971590 (queue.acm.org).
- Eike Falk Anderson, Steffen Engel, Leigh McLoughlin, Peter Comninos: The case for research in game engine architecture. In: Proceedings of the 2008 Conference on Future Play: Research, Play, Share (= Future Play ’08). ACM, New York, NY, USA 2008, ISBN 978-1-60558-218-4, S. 228–231, doi:10.1145/1496984.1497031 (c-sheep.org [PDF; abgerufen am 11. September 2012]).
- Valente, Luis and Conci, Aura and Feijó, Bruno: Real time game loop models for single-player computer games. In: Proceedings of the IV Brazilian Symposium on Computer Games and Digital Entertainment. 2005, S. 89–99 (guff.stage.tigris.org [PDF; abgerufen am 29. Juli 2012]).
- Steed, Anthony and Oliveria, Manuel Fradinho: Networked Graphics: Building Networked Games and Virtual Environments. Morgan Kaufmann, 2009, ISBN 978-0-12-374423-4.
- White, Walker and Koch, Christoph and Gehrke, Johannes and Demers, Alan: ACM Queue. Band 6, Nr. 7. ACM, November 2008, ISSN 1542-7730, S. 18–25, doi:10.1145/1483101.1483106.
Weblinks |
Monsterprojekt – Artikel zur Spieleentwicklung von Yager in NZZ Folio, Ausgabe 05/05.- Watte: Canonical Game Loop
Einzelnachweise |
↑ Unity, UDK, Unreal Engine 4 or CryENGINE – Which Game Engine Should I Choose?, digitaltutors.com (englisch), Zitat: “The most popular game engines are Unity, UDK, Unreal Engine 4 and CryENGINE.” abgerufen am 31. Oktober 2014.
↑ Howard Wen: Exult: The Open Age of Ultima. In: Linuxdevcenter. O’Reilly Media, 24. April 2003, abgerufen am 19. Januar 2016 (englisch): „Exult replaces Ultima VII’s engine so that the game can be played on other operating systems and platforms. It also expands the graphics capabilities of the game and adds features not present under the original engine. (A legal copy of Ultima VII is required in order to use Exult.) Lord British (aka Richard Garriott) himself, the creator of the entire Ultima franchise, has given the Exult team his unofficial blessing.“
↑ Exult (englisch) – Entwicklerseite bei SourceForge (Abgerufen am: 24. März 2013)