OmegaEngine

OmegaEngine

geschrieben von Bastian Eicher

Für eine moderne und zeitgemäße Spielentwicklung haben wir uns eine Reihe von Zielen und Kriterien gesetzt:

- Automatische Hilfsmittel, die die Entwicklung vereinfachen und somit Zeit sparen und die Wahrscheinlichkeit von Fehlern reduzieren, sind, wann immer möglich, einzusetzen.
- Quellcode sollte so modular und wiederverwendbar wie möglich sein.
- Benutzerfreundlichkeit ist auch außerhalb des eigentlichen Spiels, z.B. im Editor wichtig.
- Vorgänge, wie die Installation von Updates oder das Einbinden von neuen Mods, sollte für den Benutzer nahezu keinen Zusatzaufwand bedeuten.
- Alle Dateizugriffe sollten auch bei modernen Windows-Versionen wie XP und Vista mit eingeschränkten Benutzerrechten problemlos vonstatten gehen.

Um all dies zu erreichen, haben wir uns zu einer Eigenentwicklung mit C# und .NET 2.0 entschlossen:
Vom AlphaEditor (Maps und Menüs designen, Partikelsysteme entwerfen, Mods erstellen, etc.) bis hin zur OmegaEngine (DirectX 9 Renderer, GUI Subsystem, Lua scripting, interaktives und graphisches Echtzeit-Debugging, etc.).

OmegaEngine Logo AlphaEditor Logo


Überblick

Im Folgenden möchte ich allen Technikinteressierten einen Überblick über das Innenleben von Twilight Symphony geben.

Als Programmierumgebung nutzen wir Visual Studio 2010. Die Quellcodeverwaltung übernimmt SVN mit TortoiseSVN als Windows-Client. Ein Umstieg auf .NET 3.0 oder 3.5 ist nicht vorgesehen, da diese Framework-Versionen lediglich Ergänzungen der 2.0 Plattform darstellen und die neuen Funktionen keinen Mehrwert für die Engine bedeuten.

Das tatsächliche Rendern der Grafik übernimmt DirectX. Als Schnittstelle zu .NET nutzen wir SlimDX.

Modding

Bei der Entwicklung legen wir großen Wert auf Modding-Funktionalität, sprich wir wollen den Spielern ermöglichen, das Spiel nach eigenen Vorstellungen anzupassen.

Hierzu wird das endgültige Spiel mit demselben Editor-Tool ausgeliefert werden, das wir selber zum Bearbeiten von Maps, Einheiten, Menüs, etc. verwenden: Der AlphaEditor.

Der gesamte Game-Content wird in großen Archiv-Dateien zusammengefasst. Auf diese Art und Weise verläuft die Installation schneller und man kann die Originaldateien leicht von veränderten unterscheiden.

Im laufenden Spiel wird der Game Content über ein "Virtual File System" geladen. Dieses kombiniert Dateien aus einer Reihe von verschiedenen Quellen: die Original Archiv-Dateien, zusätzliche Dateien im Spielordner, Dateien aus Mods, usw.

Um das Erstellen und Weitergeben von Mods so einfach wie möglich zu gestalten, enthält der Editor eine "Packaging" Funktion. Diese speichert alle Dateien, die zu dem Mod gehören in einem komprimierten Archiv, das z.B. über das Internet weitergegeben werden kann.

Der Endbenutzer muss dieses Archiv nur mit einem Doppelklick öffnen. Twilight Symphony entpackt es dann automatisch an der richtigen Stelle und startet den Mod.
 

Dateiformate

Bei der Wahl der Dateiformate liegt der Schwerpunkt immer bei Standardkonformität. So werden strukturierte Datensätze meist als komprimierte XML-Dateien gespeichert. Terrain-Höhendaten werden als Graustufen-PNG-Dateien gespeichert.

Durch die Vermeidung von proprietären Binärformaten können die meisten Spieldaten problemlos auch mit Tools von anderen Herstellern bearbeitet werden.

Für Menüs und andere Spielinterfaces haben wir ein eigenes GUI System entwickelt. Benutzerinterfaces werden als XML-Dateien gespeichert und können im AlphaEditor bearbeitet werden.

An vielen Stellen des Spiels wird die Skript-Sprache Lua eingesetzt: Ereignisse im GUI System, geskriptete Events in den Kampagnen, usw. Die Wahl fiel auf Lua, da diese Sprache im Bereich der Spielentwicklung bereits etabliert ist (Einsatz in namhaften Titeln wie FarCry und World of Warcraft).
 

Rendern

Die Engine kombiniert beim Rendern die Fixed Function Pipeline von DirectX mit Shader Model 1.1 / 1.4 / 2.0 / 2.0a und 2.0b. Wenn eine dieser Funktionalitäten von der Grafikkarte nicht unterstützt wird, wird automatisch auf ein einfacheres System zurückgeschaltet. Auf diese Art und Weise läuft die Engine prinzipiell auf fast jeder DirectX 9-fähigen Grafikkarte.

Um das Spiel spielen zu können ist jedoch mindestens Shader Model 1.4 (Radeon 8500) erforderlich. Eine Karte mit Shader Model 2.0 Unterstützung (ab Radeon 9600) ist dringend zu empfehlen. Flüssige Performance ist ab einer Radeon X700 oder einer GeForce FX 5800 zu erwarten.

Beleuchtung mit mehreren dynamischen Lichtquellen wird unterstützt. Ein entsprechendes Schattensystem ist geplant. Gängige Grafikeffekte wie Anti-Aliasing und Anisotropes Filtern können bei entsprechender Hardware genutzt werden.

Die Engine setzt Bounding Sphere basiertes Frustum Culling ein, um sicherzustellen, dass nur jene Objekte gerendert werden, die tatsächlich im Sichtbereich des Spielers liegen. Weitere Performance-Optimierungen wurden den folgenden Bereichen vorgenommen: Vermeidung von redundanten Renderstate Changes, Cachen von Matrixberechnungen, etc.

Das eingebaute Terrain-System verzichtet auf Level-of-Detail Systeme, da diese bei Anwendung in Echtzeitstrategiespielen in der Regel mehr CPU Leistung verschwenden als sie durch Grafikkartenentlastung wettmachen.

Terrains werden in Form von Heightmaps verwaltet und können daher mit gängigen Methoden wie Perlin-Noise automatisch generiert und anschließend verfeinert werden. Es können bis zu 16 verschiedene Bodentexturen pro
Terrain kombiniert werden, welche fließend ineinander übergehen.

Zu den verfügbaren Wasser-Effekten gehören verschieden detaillierte Spiegelungen sowie Lichtbrechung zur Simulation von Wellen auf der Wasseroberfläche.

Es stehen zwei Formen von Partikelsystemen zu Verfügung: CPU-basiert und GPU-basiert.

Ersteres ermöglicht relativ komplexe Effekte (z.B. Windeinwirkung, Übergang von Feuer in Rauch, etc.), ist aber, wie der Name bereits vermuten lässt, stark CPU-lastig.

Das zweite System lagert seine gesamten Berechnungen auf die Grafikkarte aus und ist damit sehr performanceschonend. Der Nachteil ist der vergleichsweise beschränkte Umfang an möglichen Effekten.

Im Spiel werden beide Systeme je nach Anwendung kombiniert: Kleine Flammen oder Zaubereffekte mit dem GPU System; große Brände, Dampfeffekte, etc. mit dem CPU System.
 

Installation

Da Twilight Symphony mit .NET 2.0 und SlimDX einige Komponenten benötigt, die nicht auf jedem Windows-PC bereits installiert sind und außerdem ein Patchsystem für das Spiel selbst benötigt wird, haben wir uns für den Einsatz eines Online-Software-Distributionssystems namens NanoGrid entschieden. De facto bedeut dies, dass das Installationsprogramm selber nur knappe 2 MB groß sein wird, dieses dann aber alle weiteren benötigten Dateien aus dem Internet lädt und installiert. Der Spieler braucht sich um nichts weiteres zu kümmern. Zudem übernimmt NanoGrid das automatische Herunterladen und installieren von Updates für das Spiel.