# Godot

Godot ist eine freie Spiel-Engine. Sie besteht aus einem grafischen Editor, in dem Spielelemente in einer Baumstruktur organisiert und auf einer 2D- oder 3D-Leinwand angeordnet werden. Die Spiellogik wird üblicherweise in GDScript implementiert, einer eigenen integrierten Skriptsprache, deren Syntax an Python angelehnt ist und speziell an die Bedürfnisse von Spiel-Engines angepasst wurde.

## Geschichte und Entstehung

Nach vieljähriger interner Entwicklung und Verwendung der Godot-Engine von OKAM-Studio wurde im Februar 2014 der gesamte Quellcode des Projekts unter der MIT-Lizenz auf GitHub freigegeben. Unter der Leitung von Juan Linietsky und Ariel Manzur und mit Hilfe einer wachsenden Gemeinschaft externer Interessenten wurde am 15. Dezember 2014 die finale Version 1.0 veröffentlicht. Das erste große stabile Update, das die 2D-Engine stark erweiterte, erschien als Version 1.1 am 21. Mai 2015.
Version 2.0 wurde am 23. Februar 2016 veröffentlicht und enthält eine an vielen Stellen überarbeitete Benutzeroberfläche, die durch Registerkarten (Tabs) das Arbeiten an mehreren Szenen stark vereinfacht, einen verbesserten Debugger (inkl. Debugging auf externer Hardware) und das Persistent-Live-Editing (der Editor kann in ein laufendes Spiel eingreifen und getätigte Änderungen bleiben nach Spielende bestehen). Zeitgleich wurde eine neue überarbeitete offizielle Webseite vorgestellt. Version 2.1 überarbeitet die Benutzeroberfläche erneut (verbesserte Ergonomie, Lokalisierungen und Anpassungsmöglichkeiten) und bietet weitere Funktionen wie einen integrierten Profiler, Unterstützung von OTF- und TTF-Schriftarten, Verbesserungen am Live-Editing und einer eingebauten Funktion Medieninhalte und Projekte aus dem Internet zu laden.
Version 3.0, erschienen am 29. Januar 2018 nach anderthalb Jahren Entwicklung, ist die erste stabile Version der Godot-Engine, nachdem große Teile von Grund auf neu geschrieben wurden. Viel Arbeit wurde in die 3D-Engine investiert, die jetzt Full Principled BSDF Rendering, globale Beleuchtung (GI-Probes und Lightmaps) und GPU-berechnete Partikeleffekte beherrscht. Zusätzlich wurden viele Grafikeffekte integriert und die Unterstützung externer Dateiformate erweitert. Mit GDNative bietet Godot eine Schnittstelle, um Drittanwenderbibliotheken anzubinden, unter anderem wird nun C# als Programmiersprache durch Mono unterstützt. Parallel zur 3D-Engine wurde auch die Audio-Engine komplett neu entwickelt und bietet jetzt Audiobus-Verwaltung, positionsabhängiges Audio, Audioeffekte und 5.1-/7.1-Lautsprecherunterstützung. Zu den weiteren Änderungen gehören die Unterstützung von VR/AR, eine neue Netzwerk-API inklusive IPv6-Unterstützung, Integration der Physik-Engine Bullet, automatischer Asset-Import, Verbesserungen an der Benutzeroberfläche und GDScript, starke Verbesserung der Dokumentation und vieles mehr.
Godot 4.0 wurde am 1. März 2023 veröffentlicht und verwendet erneut ein von Grund auf neugeschriebenes Rendering-Backend, diesmal unter Verwendung der modernen Schnittstelle Vulkan. Diese lässt sich sowohl für PC- als auch mobile Spiele verwenden. Für ältere Plattformen steht weiterhin ein OpenGL-Backend (mit weniger Funktionen) zur Verfügung. Als größere neue Funktionen gibt es einen fortgeschrittenen Kachel-Editor, ein neues Text-Rendering-System, erweiterte Unterstützung zur Lokalisierung, eine vereinfachte und stabilere Schnittstelle für Netzwerkunterstützung, Unterstützung für mehrere offene Fenster im Editor, Verbesserungen am Animations- und Audio-System, einen Videoerzeugungsmodus und direkte Unterstützung von VR. Zum Programmieren unterstützt Godots Skriptsprache GDScript nun optional statische Typisierung mit präzisen Fehlermeldungen, Funktionen erster Klasse inkl. Lambdaausdrücken und eingebauten funktionalen Methoden, asynchrones Programmieren und automatischer Dokumentationsgenerierung. Godots Shadersprache wurde ebenfalls stark erweitert und die Unterstützung für die externe Sprache C# auf Version 10 mit .Net-Plattform 6 gehoben. Als Physik-Engine wird nicht mehr Bullet, sondern eine selbstgeschriebene benutzt. VisualScript wurde aufgrund geringer Nachfrage entfernt.
Godot-Versionsgeschichte :
| Version | Veröffentlichung | Anmerkungen | Letzter Patch |
| 1.0 | Dezember 2014 | Erste stabile Version | 1.0 |
| 1.1 | Mai 2015 | Verbesserungen der automatischen Vervollständigung im Code-Editor, Hinzufügung eines visuellen Schattierungseditors, neu geschriebene 2D-Engine und neue Unterstützung für 2D-Navigationspolygone. | 1.1 |
| 2.0 | Februar 2016 | Verbesserte Benutzeroberfläche und Debugger | 2.0.4.1 |
| 2.1 | Juli 2016 | Einführung der Add-On-Datenbank, des Profiler-Generators und der Add-On-API | 2.1.6 |
| 3.0 | Januar 2018 | Neuer physikbasierter Renderer, Mono (C#)-Kompatibilität und Hinzufügung von Bullet als Physik-Engine | 3.0.6 |
| 4.0 | März 2023 | Fügt Kompatibilität mit der Vulkan-Grafik-API hinzu. Wechselt von Mono zu .NET 6 CoreCLR. Bietet globale Beleuchtung auf Basis von SDF sowie mehrere Editoränderungen und Leistungsoptimierungen. | 4.0.3 |
| 4.1 | Juli 2023 | Aktualisierungen von Leistungselementen, Kern und Skript. Einführung statischer Variablen in GDScript und des Attributs [GlobalClass] in C#. Kompatibilität mit verschiedenen Fenstern und die Möglichkeit, Befehlssequenzeditoren zu trennen. Verbesserte Partikelturbulenzen und Einführung von 3D-Rauschtexturen. Erneuerte Präventionsalgorithmen für die Navigation mit KI. | 4.1.1 |

## Technische Eigenschaften
### Das Szenen-System

In Godot werden Szenen in einer Baumstruktur organisiert. Die Elemente werden Nodes genannt und haben jeweils genau ein Eltern-Node und beliebig viele Kinder-Nodes. Sämtliche Objekte in Godot sind Nodes und eine Szene ist die Summe aller Nodes und ihre Anordnung im Szenenbaum (scenetree). Große Flexibilität erreicht dieser Aufbau, da in Godot auch Sub-Szenen als Nodes an beliebigen Stellen im Szenen-Baum eingefügt werden können und somit ein großes Abstraktionsniveau und hohe Ordnung erreicht werden können. Ab Version 2.0 ist es zusätzlich möglich eine Vererbungshierarchie zwischen Szenen aufzubauen. Änderungen in der Basisszene werden dabei sofort in allen abgeleiteten Szenen verfügbar.

### Programmierung

Als Skriptsprache in Godot dient das eigens entwickelte GDScript. GDScript ähnelt syntaktisch stark Python und Lua, ist jedoch angepasst worden, um besser in die Engine integriert zu werden. Skripte können somit direkt den Nodes, die im Editor erstellt wurden, zugeordnet werden und Variablen können vom Quelltext in den Editor exportiert werden. Die integrierte Editorkomponente verfügt über Syntaxhervorhebung, automatische Einrückungen und ein fortgeschrittenes Autovervollständigungssystem. Zusätzlich zu GDScript können Programme auch in C++ geschrieben werden. Für Shader-Programmierung wurde eine gesonderte Skriptsprache integriert, die sich an GLSL orientiert. Zur Fehlerbehandlung und Leistungsmessung ist ein integrierter Debugger vorhanden. Ab Version 3.0 ist GDNative in Godot enthalten, eine Schnittstelle, welche es erlaubt, externe Bibliotheken mit Godot zu verbinden, ohne Godot neu kompilieren zu müssen. Damit ist auch Unterstützung für weitere Programmiersprachen gegeben, prominentestes Beispiel hierfür ist C#. Zusätzlich gibt es in Godot 3.x die Möglichkeit, mittels VisualScript graphisch über Flussdiagramme Programmierlogik zu definieren. Die Funktion wurde aber aufgrund geringer Nachfrage und der Vorzüge von GDScript mit Godot 4.0 eingestellt.

### Rendering

Godot nutzt in 2D und in 3D primär einen Vulkan-Renderer. Alternativ ist zur Unterstützung von älteren Geräten und für Spiele im Browser (über WebGL) ein OpenGL-Renderer nutzbar, jedoch mit geringerem Funktionsumfang. Materials können im Editor über Eigenschaften wie Textur, Normal Map, Spekularität und Volumenstreuung definiert oder von Grund auf als Shader in einer vereinfachten GLSL-ähnlichen Sprache geschrieben werden. Lichter nutzen Globale Beleuchtung und können dynamisch oder vorberechnet sein. Auch Postprocessing-Effekte wie Nebel, Schärfentiefe und HDR werden durch die WorldEnvironment-Node unterstützt.

### Animationssystem

Godot verfügt über ein tief integriertes Animationssystem. Hängt man im Szenenbaum die Node Animation ein, so können sämtliche Attribute der anderen Nodes im Szenenbaum mittels Keyframes zur Laufzeit verändert werden. Des Weiteren können mit Animationen auch Funktionen gezielt aufgerufen werden, was es erlaubt, viel Programmierlogik in den Editor zu übertragen.

### Separate Engine für 2D und 3D

In Godot können 2D-Anwendungen vollkommen ohne Kenntnisse über 3D-Programmierung erstellt werden, da die 2D-Engine getrennt läuft und keine Projektion der 3D-Engine ist. Dies gilt auch für die integrierte Physik-Engines (wobei deren API gleich gehalten ist). Bei Bedarf lassen sich 2D-Szenen dennoch in die 3D-Engine einbetten. 3D-Szenen lassen sich zum größten Teil in externer 3D-Grafiksoftware anfertigen (inklusive Animationen). Eine große Bibliothek von GUI-Elementen (genannt Control) lassen sich sowohl in 2D als auch in 3D verwenden, so z. B. einfache Etikette, welche dem Nutzer erlauben, einfachen Text auf dem Bildschirm zu zeigen, Schieberegler, welche für die Veränderung von Werten durch den Nutzer verwendet werden und Knöpfe, welche als Input-Möglichkeit gelten. Die integrierte 2D-Physik-Engine arbeitet in Pixelkoordinaten, die 3D-Engine im metrischen System.

### Plattformunabhängigkeit

Godot ist eine der wenigen Spiel-Engines, die Spielentwicklung neben Windows auch vollständig in Linux, macOS und weiteren Betriebssystemen erlauben. Seit Version 4.0 kann auch direkt unter Android und im Webbrowser (über WebAssembly) entwickelt werden. Erstellte Spiele können neben den genannten Entwicklungsplattformen auch für weitere Geräte exportiert werden. Es gibt eine interne Exportvorlage für iOS und projektexterne Exportvorlagen in unterschiedlicher Stabilität und Lizenz für PlayStation, PlayStation Vita, Nintendo 3DS, Windows Runtime und Nintendo Switch.

### Dokumentation

Godot liefert eine integrierte Dokumentation aller Klassen und Funktionen direkt im Editor. Eine illustrative Einführung und detaillierte Anleitungen befinden sich auf der Projektwebseite. Auf der offiziellen Webseite befindet sich zusätzlich ein durch die Gemeinschaft organisiertes Frage-Antwort-System (inkl. generierten FAQ), ein Forum und ein Schaukastensystem, die alle zum Lernen zur Verfügung stehen.