Après une année de développement, la première version du nouveau moteur de jeu open source Ambient est présentée. Le moteur fournit un runtime pour créer des jeux multijoueurs et des applications 3D, compilées en WebAssembly et utilisant l'API WebGPU pour le rendu. Le code est écrit en Rust et est distribué sous licence MIT.
L'un des principaux objectifs du développement d'Ambient est de fournir des outils qui simplifient le développement de jeux multijoueurs et rendent leur création aussi facile que celle de projets solo. Le moteur vise initialement à créer un runtime universel, supportant le développement de jeux et d'applications dans n'importe quel langage de programmation, à condition qu'il soit compilable en code intermédiaire WebAssembly. Cependant, la première version ne prend en charge que le développement en Rust.
Les principales características du nouveau moteur :
- Support transparent de l'interaction réseau. Le moteur combine les fonctions client et serveur, fournissant tous les composants nécessaires à la création de la logique client et serveur, tout en synchronisant automatiquement l'état du serveur sur les clients. Une modèle de données unique est utilisée tant côté client que serveur, ce qui facilite le transfert de code entre le backend et le frontend.
- Exécution de chaque module dans un environnement isolé, ce qui permet de limiter l'impact du code non fiable. L'échec d'un module ne cause pas l'échec de l'ensemble de l'application.
- Architecture axée sur le traitement des données. Fourniture d'un modèle de données basé sur un système de composants, manipulable par chaque module WASM. Utilisation du modèle ECS (Entity Component System). Toutes les données des composants sont stockées dans une base de données centralisée sur le serveur, dont l'état est automatiquement répliqué au client, qui peut étendre les données en fonction de son état local.
- Possibilité de créer des modules Ambient dans n'importe quel langage de programmation compilable en WebAssembly (pour l'instant, seul Rust est pris en charge).
- Génération de fichiers exécutables universels, pouvant être exécutés sous Windows, macOS et Linux, et fonctionnant à la fois comme client et serveur.
- Possibilité de définir ses propres composants et « concepts » (collections de composants). Dans les projets utilisant des composants et concepts identiques, la transférabilité et le partage des données sont garantis, même si ces données ne sont pas spécifiquement conçues pour être utilisées dans des projets particuliers.
- Prise en charge de la compilation de ressources dans divers formats, y compris .glb et .fbx. Possibilité de chargement en streaming des ressources via le réseau — le client peut obtenir toutes les ressources nécessaires lors de la connexion au serveur (il est possible de commencer à jouer sans attendre que toutes les ressources soient chargées). Les formats de modèles FBX et glTF, ainsi que divers formats audio et image, sont pris en charge.
- Système avancé de rendu utilisant le GPU pour accélérer la sortie et prenant en charge le culling par zone de visibilité et le changement de niveaux de détail côté GPU. Utilisation par défaut du rendu physiquement correct (PBR), prise en charge de l'animation et des cartes d'ombre en cascade.
- Prise en charge de la simulation de processus physiques basée sur le moteur PhysX.
- Système de construction d'interfaces utilisateur similaire à React.
- Système d'entrée unifié, indépendant de la plateforme actuelle.
- Système de son spatial avec des filtres plug-in.
Le développement est encore en phase alpha. Parmi les fonctionnalités non encore mises en œuvre, on peut noter la possibilité de lancement sur le Web, l'API client, l'API de gestion de la multithread, une bibliothèque pour la création d'interfaces utilisateur, une API pour l'utilisation de shaders personnalisés, la prise en charge du son, le chargement et la sauvegarde de composants ECS (Entity Component System), le rechargement des ressources à la volée, et le scalabilité automatique. serveurs, éditeur pour la création collaborative de cartes et de scènes de jeu.

Source : opennet.ru
