Nach einem Jahr der Entwicklung wurde die erste Version der neuen offenen Spiele-Engine Ambient vorgestellt. Die Engine bietet eine Laufzeitumgebung für die Erstellung von Mehrspielerspielen und 3D-Anwendungen, die in WebAssembly kompiliert werden und das WebGPU-API für die Darstellung nutzen. Der Code ist in Rust geschrieben und wird unter der MIT-Lizenz verbreitet.
Das Hauptziel bei der Entwicklung von Ambient besteht darin, Werkzeuge bereitzustellen, die die Entwicklung von Mehrspielerspielen vereinfachen und deren Erstellung nicht komplizierter gestalten als die von Einzelspielerprojekten. Die Engine zielt darauf ab, eine universelle Laufzeitumgebung zu schaffen, die die Entwicklung von Spielen und Anwendungen in allen Programmiersprachen unterstützt, die in Zwischenformaten von WebAssembly kompiliert werden können. Im ersten Release ist jedoch bisher nur die Unterstützung für die Entwicklung in Rust umgesetzt.
Die wichtigsten Merkmale der neuen Engine:
- Transparente Unterstützung der Netzwerkinteraktion. Die Engine vereint die Funktionen von Client und Server, bietet alle notwendigen Komponenten zur Erstellung der Client- und Serverlogik und synchronisiert automatisch den Zustand des Servers auf den Clients. Sowohl auf der Client- als auch auf der Serverseite wird ein gemeinsames Datenmodell verwendet, was den Code-Transfer zwischen Backend und Frontend vereinfacht.
- Die Ausführung jedes Moduls in einer isolierten Umgebung ermöglicht es, den Einfluss von nicht vertrauenswürdigem Code zu begrenzen. Ein unerwartetes Beenden eines Moduls führt nicht zum Absturz der gesamten Anwendung.
- Datenorientierte Architektur. Bereitstellung eines Datenmodells basierend auf einem Komponenten-System, mit dem jedes WASM-Modul arbeiten kann. Verwendung des Designmusters ECS (Entity Component System). Speicherung der Daten aller Komponenten in einer zentralen Datenbank, Server, deren Zustand automatisch an den Client repliziert wird, der seinerseits die Daten unter Berücksichtigung des lokalen Zustands erweitern kann.
- Die Möglichkeit, Ambient-Module in beliebigen Programmiersprachen zu erstellen, die in WebAssembly kompiliert werden (derzeit wird nur Rust unterstützt).
- Generierung von universellen ausführbaren Dateien, die unter Windows, macOS und Linux ausgeführt werden können und sowohl als Client als auch als Server fungieren.
- Die Möglichkeit, eigene Komponenten und „Konzepte“ (Sammlungen von Komponenten) zu definieren. In Projekten, die dieselben Komponenten und Konzepte nutzen, wird die Portabilität und der Datenaustausch sichergestellt, auch wenn diese Daten nicht speziell für die Verwendung in bestimmten Projekten vorgesehen sind.
- Unterstützung bei der Kompilierung von Ressourcen in verschiedenen Formaten, einschließlich .glb und .fbx. Möglichkeit des Streaming von Ressourcen über das Netzwerk – der Client kann alle benötigten Ressourcen beim Verbinden mit dem Server abrufen (es kann gespielt werden, ohne darauf zu warten, dass alle Ressourcen vollständig geladen sind). Unterstützt werden die Modellformate FBX und glTF sowie verschiedene Audio- und Bildformate.
- Ein fortschrittliches Rendering-System, das GPU nutzt, um die Ausgabe zu beschleunigen und Sichtbereichs-Culling sowie Level-of-Detail-Wechsel auf der GPU zu unterstützen. Standardmäßig wird physikalisch korrektes Rendering (PBR) verwendet, mit Unterstützung für Animationen und kaskadierende Schattenkarten.
- Unterstützung für die Simulation physikalischer Prozesse basierend auf der PhysX-Engine.
- Ein benutzeroberflächenbasiertes System ähnlich wie React.
- Ein einheitliches Eingabesystem, das plattformunabhängig ist.
- Ein räumliches Klangsystem mit anpassbaren Filtern.
Die Entwicklung befindet sich derzeit in der Alpha-Phase. Zu den noch nicht implementierten Funktionen gehören die Möglichkeit des Web-Starts, clientseitige APIs, API zur Steuerung von Multithreading, Bibliothek zur Erstellung von Benutzeroberflächen, API zur Nutzung eigener Shader, Unterstützung für Audio, Laden und Speichern von ECS-Komponenten (Entity Component System), dynamisches Neuladen von Ressourcen und automatisches Skalieren. Server, ein Editor für die gemeinsame Erstellung von Spielkarten und -szenen.

Quelle: opennet.ru
