Cafu Engine

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
Cafu Engine
Cafu Engine Logo.png
Ein Netzwerk-Spiel mit der Cafu Engine
Ein Netzwerk-Spiel mit der Cafu Engine
Basisdaten
Entwickler Carsten Fuchs Software
Betriebssystem plattformunabhängig
Programmier­sprache C++, Lua
Kategorie Grafik-Engine, Spiele-Engine
Lizenz GPL oder wahlweise kommerziell
www.cafu.de

Cafu ist eine Grafik- und Spiele-Engine. Ihr Ziel ist es, die Entwickler von Spielen oder anderen 3D Software-Anwendungen zu unterstützen, indem sie ihnen eine umfassende Grundlage für Grafik, Sound, Physik, Netzwerk, Portierbarkeit und viele weitere Bereiche zur Verfügung stellt.[1] Cafu ist plattformunabhängig und läuft unter Windows und Linux, die Anpassungen für Mac OS laufen.[2]

Die Cafu Engine ist im Quellcode unter der GPL als freie Software für jedermann verfügbar, kann aber von den Entwicklern auch unter einer kommerziellen Lizenz erworben werden.[3]

Merkmale[Bearbeiten]

Grafik[Bearbeiten]

Der Kern der Cafu Engine dreht sich um realistische 3D Grafik in Echtzeit, die durch zahlreiche Programm-Module realisiert wird:

Ein Fabrikgebäude in der Cafu Engine

Das Cafu Material System ermöglicht es Anwendern und Level-Designern, leicht und schnell eigene und neue Materialien zu entwerfen, mit denen die Oberflächen der Objekte in den 3D Welten dargestellt werden. Dafür werden Material Skripte verwendet, die per Hand oder in Kürze auch mit einem Material Editor mit einer graphischen Benutzeroberfläche erstellt werden können.[4] Der in CaWE eingebaute Material Browser ermöglicht einen schnellen Überblick über alle vorhandenen Materialien.[5]

Die Implementierung des Material Systems erfolgt sehr flexibel und modular in Renderern. Ein Cafu Renderer kann dazu auf jede beliebige Programmierschnittstelle wie OpenGL oder DirectX zurückgreifen. Zurzeit existieren Renderer für OpenGL 1.2, OpenGL mit Cg mit NV2X Profilen, OpenGL mit Cg mit NV3X Profilen, und OpenGL mit der „vertex and fragment programs“ Erweiterung.[6] Das Schreiben weiterer Renderer ist relativ leicht, und Renderer für OpenGL 3.x und DirectX 11 befinden sich zurzeit in der Entwicklung.[2] Die Cafu Engine entscheidet bei jedem Programmstart, welcher Renderer am besten zur vorhandenen Hardware passt, und lädt diesen dann für die Grafikausgabe. Mit dieser Technik ist Cafu in der Lage, sowohl sehr alte Systeme (z.B. mit OpenGL 1.2) als auch die allerneuesten (z.B. mit DirectX 11) jeweils optimal zu unterstützen, und selbst zukünftige Systeme bedürfen nicht mehr als eines neuen Renderers, um eine vollständige Unterstützung zu gewährleisten.

Die Cafu BSP und PVS Programme unterteilen die Geometrie der Levels rekursiv, und berechnen im voraus, welche Räume von jedem Raum aus sichtbar sein können. Auf diese Art und Weise kann Cafu beim Rendern sehr schnell entscheiden, welche Teile des Levels gezeichnet werden müssen.

Cafu kann zwei voneinander unabhängige Beleuchtungs-Techniken einsetzen:

  • Das auf einer physikalischen Simulation der Lichtausbreitung beruhenden Radiosity Verfahren, welches sehr realistische Ergebnisse liefert. Die Berechnungsergebnisse werden in um Richtungsangaben erweiterten "Lightmaps" gespeichert. Die Radiosity Farbwerte und Richtungsinformationen können vom Renderer zusammen mit den Normal-Map Informationen der Materialien "per pixel" gerendert werden, und kombinieren so die Vorteile von Radiosity und dem per-pixel Rendering mit Normal-Maps bei optimaler Geschwindigkeit (nur ein Render-Pass erforderlich).
  • Zugleich oder alternativ kann Cafu auch dynamische Lichtquellen verwenden und dazugehörige Schatten mit der Stencil-Methode berechnen. Dabei werden Normal-Maps, Specular-Maps und viele weitere Parameter berücksichtigt.

Beide Beleuchtungstechniken können problemlos miteinander kombiniert und gleichzeitig eingesetzt werden. Zukünftige Versionen von Cafu sollen außerdem mit der dynamischen Beleuchtung von Außenarealen und projizierten Schatten umgehen können.[2]

Sound und Musik[Bearbeiten]

Das Sound System von Cafu ist ebenso modular aufgebaut wie das Material System: 2D und 3D Sound-Effekte und Musikstücke werden als Sound Shader Skripte definiert, die vom besten zum Computer passenden Sound System abgespielt werden. Cafu enthält Sound System Implementierungen sowohl für OpenAL als auch für FMOD.

Mehrspieler und Netzwerk[Bearbeiten]

Ein Netzwerk-Spiel mit der Cafu Engine

Die Cafu Engine ist im Kern auf das Spiel mit mehreren Spielern über ein Netzwerk wie das Internet oder ein LAN ausgelegt. Sie enthält sowohl einen Game-Server, der das Spielgeschehen zentral verwaltet, als auch einen Client, den ein Spieler benutzt, um sich mit dem Server zu verbinden und so in ein Spiel einzusteigen.

Für die Verbindung implementiert Cafu basierend auf UDP ein eigenes schlankes und effizientes Netzwerkprotokoll, das die übertragenen Daten effizient komprimiert und auch mit langsamen oder schwankenden Verbindungsgeschwindigkeiten klarkommt.

Ein besonderes Merkmal des Cafu-Netzwerkprotokolls ist die Fähigkeit, bei der Eingabe eines Spieler die Antwort des Servers vorherzusagen, während diese noch über das Netzwerk unterwegs ist. Damit kann sich der Spieler flüssig durch die Spielwelten bewegen, ohne dass es wegen später eintreffender Serverantworten zu Verzögerungen (Delay) oder Ruckeln käme.

Portierbarkeit[Bearbeiten]

Cafu verzichtet weitestgehend auf Programmierkonstrukte und Bibliotheken, die nur mit bestimmten Betriebssystemen, Compilern, Prozessoren oder Grafikkarten funktionieren. Wo dies in Einzelfällen nicht möglich ist, wird der Code modular gehalten, sodass spezifische Programmteile leicht gegen andere ausgetauscht werden können.

Der Cafu Quellcode ist sowohl als 32-Bit Software (ILP32 Typenmodell) als auch als native 64-Bit Software (LP64 Typenmodell) mit allen gängigen Compilern kompilierbar.[7] Er läuft zurzeit unter Windows (ab Windows 2000) und zahlreichen Linux-Distributionen. Die Entwickler streben zudem eine baldige Portierung auf Mac OS an, langfristig ist auch die Unterstützung von Spielkonsolen vorgesehen.

Skripting[Bearbeiten]

Um Details nicht schwer veränderlich im Programmcode festlegen zu müssen, setzt die Cafu Engine in vielen Programmteilen Skripte ein. Konkret werden Materials, Sounds, Konfigurationseinstellungen, GUIs (Bedienoberflächen) und das Verhaltenen von Entities (z.B. Gegnern) alle mit Skripten definiert. Als Skriptsprache wird (außer für die Material und Sound Definitionen) stets Lua verwandt.

Physik-Simulation[Bearbeiten]

Um bewegliche Gegenstände wie Kisten, Fässer, Fahrzeuge und viele weitere physikalisch korrekt zu simulieren wenn diese bewegt, gekippt, angerempelt oder angeschossen werden oder eine andere Krafteinwirkung erfahren, setzt Cafu zwei Verfahren gleichzeitig ein:[8]

  • Eine Cafu-eigene Simulation beschäftigt sich ausschließlich mit den Bewegungen der Figuren der menschlichen Spieler, um den damit einhergehenden hohen Anforderungen gerecht zu werden: Die Berechnungen müssen sehr schnell und für das Netzwerkprotokoll sehr exakt und trotz Rundungsfehlern beliebig oft mit demselben Ergebnis wiederholbar sein, die Spieler sollen niemals in Wänden oder dem Boden stecken bleiben, Volumentests für das Auslösen von Triggern sollen schnell durchgeführt werden können, und der gesamte Zustand muss für die Zukunftsprognose des Netzwerkprotokolls zurücksetzbar und wiederholbar sein.
  • Alles andere wird mit der freien Physik-Bibliothek Bullet simuliert.

Beide Verfahren laufen unabhängig voneinander, werden aber von Cafu zu jedem Frame miteinander abgeglichen.

Ein weiterer Aspekt ist, dass Cafu Physikeffekte sowohl auf dem Server als auch auf den Clients anwenden kann: Physikeffekte, die auf dem Server ablaufen, werden über das Netzwerk mit den Clients synchronisiert, d.h. eine purzelnde Kiste wird von jedem Spieler gleich gesehen und hat auf das Spielgeschehen für alle die gleichen Auswirkungen. Diese Variante wird in Cafu z.Zt. hauptsächlich eingesetzt, hat aber den Nachteil, dass die Darstellung der Objekte aus Sicht der Spieler wegen der Latenz und begrenzten Bandbreite im Netzwerk mit Rucklern behaftet sein kann. Alternativ können Physikeffekte auch nur auf den Clients ablaufen. Solche Physikeffekte erlebt jeder Spieler unabhängig von allen anderen. Sie dienen hauptsächlich der optischen Präsentation und haben keinen Einfluss auf das Spielgeschehen.

Editoren und Werkzeuge[Bearbeiten]

Zu der Cafu Engine gehört der graphische Editor CaWE, dessen Name für „Cafu World Editor“ steht. CaWE vereint in einem Programm den Map Editor, den GUI Editor, den Font-Wizard, den Material Browser und den Model Editor, und enthält somit alle wichtigen Werkzeuge, um neue Levels, GUIs, Fonts und Models für die Cafu Engine zu erstellen.

Map Editor[Bearbeiten]

Die Bearbeitung eines in einer Map befindlichen Terrains

Der Map Editor wird verwendet, um neue Maps zu erstellen. Dazu kann der Benutzer nach dem CSG-Prinzip auf die Grundbausteine Brushes (Polyeder), Bézierflächen (gebogene Oberflächen), Terrains (große Gelände), Modelle und Vegetationsobjekte zurückgreifen, die beliebig platziert und geformt werden können.[9] Alle Objekte können zu Einheiten zusammengefasst oder frei gruppiert werden.

GUI Editor[Bearbeiten]

Das Hauptmenü wird im GUI Editor bearbeitet

Mit dem GUI Editor werden die graphischen Benutzeroberflächen (GUIs) erstellt, die innerhalb der Cafu Engine zum Einsatz kommen.[10] Diese graphischen Benutzeroberflächen finden sowohl für alle herkömmlichen 2D Menüs Verwendung (z. B. für das Hauptmenü, die eingebaute Konsole und alle Dialoge), als auch für die sich in den Spielwelten befindlichen 3D GUIs, mit denen der Spieler im Rahmen des laufenden Spiels interagiert (z. B. zum Öffnen von Türen, Rufen von Aufzügen, etc.).

Eine Besonderheit des GUI Editors ist seine Fähigkeit, den Benutzer die GUIs graphisch bearbeiten zu lassen, aber zugleich ihre wahre Natur als Lua Skripte zu unterstützen: Die GUIs werden aus Lua Skripten geladen und als solche gespeichert, und der Bediener des Editors kann direkt den Lua Programmcode eingeben, der für die Interaktion mit dem Spieler verantwortlich ist.[8]

Material Browser[Bearbeiten]

Der eingebaute Material Browser zeigt die dem Cafu Material System bekannten Materialien in einer dem Windows Explorer ähnelnden Darstellungsweise an.

Font-Wizard[Bearbeiten]

Der Font-Wizard ermöglicht es auf einfache Weise, die meisten Schriftarten zu laden und in eine für Cafu GUIs verwendbare Form zu konvertieren.[8]

Model Editor[Bearbeiten]

Der Model Editor wird zurzeit entwickelt und mit dem nächsten Release erstmals vorgestellt. Er ermöglicht es, detaillierte geometrische Modelle z.B. für Gegenstände oder Personen aus zahlreichen 3D-Modelling-Programmen zu importieren, zu betrachten und zur weiteren Verwendung in im Map Editor und der Cafu Engine vorzubereiten.

Lizenzierung[Bearbeiten]

Seit Dezember 2009[11] steht die Cafu Engine jedermann im Quellcode unter der GPL als freie Software zur Verfügung. Der Quellcode kann von der offiziellen Downloadseite heruntergeladen werden, oder direkt aus dem Subversion Repository mit dem Kommandozeilenbefehl

svn checkout https://svn.lcube.de/dev123/projects/cafu/trunk Cafu

ausgecheckt werden.[12]

Alternativ ist es möglich, den Quellcode von den Entwicklern unter einer kommerziellen Lizenz zu erwerben (duale Lizenzierung). Damit können die Hersteller von Spielen und Anwendungen den Cafu Quellcode verwenden, ohne an die Beschränkungen der GPL gebunden zu sein.[3]

Entwicklung[Bearbeiten]

Die Cafu Engine wird ständig weiterentwickelt. Die Entwicklung erfolgt offen über das frei zugängliche Subversion Repository.[13]

Entwickler, Nutzer und Interessierte können allgemeine und technische Fragen rund um Cafu und dessen Programmcode in Mailinglisten und Foren diskutieren.

Die Dokumentation wird in einem Wiki verwaltet und kann somit von den Benutzern ergänzt oder verändert werden.

Für das Projektmanagement verwendet Cafu das Issue-Tracking-System Trac, das Listen über Meldungen von zu behebenden Fehlern, vorgeschlagenen neuen Features und Verbesserungen, und zu integrierenden Programmcode führt. Entwickler können ihre Änderungen und Verbesserungen in den offiziellen Cafu Quellcode einfließen lassen, indem sie diese über den Tracker einreichen.[14] Dort werden sie nach Prüfung durch die Admins und ggf. Rücksprache über die Mailinglisten oder das Forum in den Hauptentwicklungszweig übernommen.

Zukünftig geplante oder bereits in Arbeit befindliche Erweiterungen werden in einer Roadmap erfasst und verwaltet.[15][2]

Einzelnachweise[Bearbeiten]

  1. Cafu Engine Details auf devmaster.net
  2. a b c d List of all tickets ordered by milestones Liste der derzeit wichtigen in Bearbeitung befindlichen Projekt-Punkte, sortiert nach Milestones, aufgerufen 10. Juli 2013.
  3. a b Cafu and Dual-Licensing im Cafu Engine Wiki
  4. The Cafu Material System im Cafu Engine Wiki
  5. The Material Browser im Cafu Engine Wiki
  6. OpenGL API-based Product Listing auf OpenGL.org
  7. Cafu now on 64-bit systems! Newsmeldung
  8. a b c New version 9.06 released! Newsmeldung
  9. Introduction to Editing im Cafu Engine Wiki
  10. The Cafu Graphical User Interface System im Cafu Engine Wiki
  11. Cafu is now open-source! Newsmeldung
  12. Getting Started with the Cafu Source Code im Cafu Engine Wiki
  13. Startseite für Entwickler
  14. How to Submit Patches im Cafu Engine Wiki
  15. Roadmap im Cafu Engine Wiki

Weblinks[Bearbeiten]