Ambient est développé par une petite équipe de cinq personnes à Stockholm, en Suède parmi lesquelles : Tobias, le PDG, Fredrik, le CPTO, Mithun & Tei, les développeurs Rust, et Magda le designer interne. Après plus d'un an de développement, ils ont annoncé la disponibilité d'Ambient 0.1. L'environnement d'exécution open source a été construit avec Rust.
Pourquoi Ambient ?
Il existe de nombreux moteurs de jeu qui optimisent la création de jeux solo, mais peu visent à faciliter le multijoueur. Nous étions curieux : qu'est-ce qui pourrait être construit si le multijoueur était aussi facile à utiliser que le solo ? Quels types d'expériences extraordinaires - avec des interactions nouvelles et intéressantes - les gens pourraient-ils envisager une fois libérés des détails fins du réseautage ?
Ambient est le début de notre réponse à ces questions : un environnement d'exécution conçu pour permettre aux développeurs de toutes sortes de créer et de partager les expériences qu'ils souhaitent créer. Cependant, le problème n'est pas seulement de bien faire la communication client-serveur. Cela inclut également tous les autres défis qui se posent dans le développement de jeux multijoueurs : servir des actifs, distribuer votre jeu, exécuter durablement votre jeu en tant que service, interagir avec vos utilisateurs, et bien plus encore. Le runtime est notre première étape vers cela, et nous sommes ravis de ce qui va suivre.
Nous rendons Ambient gratuit et open-source (avec la licence MIT) car notre objectif est d'établir une norme pour la création de jeux multijoueurs qui peuvent vivre au-delà de nous. En tant qu'entreprise, notre plan est de fournir des services à valeur ajoutée pour le runtime que nous prévoyons de monétiser (y compris l'hébergement de serveurs et d'actifs), mais le runtime lui-même sera gratuit et open source pour toujours. En tant qu'utilisateur du runtime, vous pourrez toujours choisir les services de notre part dont vous profitez et ceux que vous choisissez de mettre en œuvre vous-même.
Ambient est le début de notre réponse à ces questions : un environnement d'exécution conçu pour permettre aux développeurs de toutes sortes de créer et de partager les expériences qu'ils souhaitent créer. Cependant, le problème n'est pas seulement de bien faire la communication client-serveur. Cela inclut également tous les autres défis qui se posent dans le développement de jeux multijoueurs : servir des actifs, distribuer votre jeu, exécuter durablement votre jeu en tant que service, interagir avec vos utilisateurs, et bien plus encore. Le runtime est notre première étape vers cela, et nous sommes ravis de ce qui va suivre.
Nous rendons Ambient gratuit et open-source (avec la licence MIT) car notre objectif est d'établir une norme pour la création de jeux multijoueurs qui peuvent vivre au-delà de nous. En tant qu'entreprise, notre plan est de fournir des services à valeur ajoutée pour le runtime que nous prévoyons de monétiser (y compris l'hébergement de serveurs et d'actifs), mais le runtime lui-même sera gratuit et open source pour toujours. En tant qu'utilisateur du runtime, vous pourrez toujours choisir les services de notre part dont vous profitez et ceux que vous choisissez de mettre en œuvre vous-même.
Mise en réseau transparente
Avant tout, Ambient a été conçu à partir de zéro pour permettre des expériences en réseau comme l'exemple de cube qui sera abordé plus bas. L'état du serveur est automatiquement synchronisé avec les clients et le modèle de données est le même sur le serveur et le client. Cela signifie qu'à l'avenir, vous pourrez déplacer votre code entre le backend et le frontend, ou même l'exécuter sur les deux de manière transparente.
Indépendant du langage
L'interface d'Ambient est construite sur WebAssembly, ce qui vous permettra d'écrire du code dans n'importe quel langage qui se compile en WASM. À l'heure actuelle, Rust est notre seul langage pris en charge, mais nous travaillons activement à prendre en charge autant de langages que possible afin que vous puissiez choisir le bon outil pour le travail. Grâce à notre modèle de données, différents modules construits dans différents langages peuvent toujours communiquer entre eux via des données partagées et des messages.
Isolation
L'isolation est la clé du modèle d'exécution d'Ambient : chaque module s'exécute isolé de tous les autres modules. Si une partie de votre application tombe en panne, le reste de l'application peut continuer à fonctionner sans être affecté, ce qui augmente sa résilience. Cela permet également l'utilisation de code tiers non approuvé - le code auquel vous ne faites pas confiance devrait pouvoir s'exécuter dans son propre module isolé sans affecter la fonctionnalité globale.
Conception orientée données
Ambient est construit avec une conception orientée données à l'esprit de haut en bas. Toutes les données sont stockées et interagissent via un système de composants d'entité soutenu par une base de données d'entités centralisée sur le serveur. Cette base de données est automatiquement répliquée sur chaque client, et chaque client a la possibilité d'augmenter et d'étendre les entités avec un état local. L'utilisation d'un ECS facilite la visualisation de l'état de votre application et offre d'excellentes performances et évolutivité. [ndlr. Entity Component System (ECS) est un modèle d'architecture logicielle principalement utilisé dans le développement de jeux vidéo pour la représentation d'objets du monde du jeu. Un ECS comprend des entités composées de composants de données, avec des systèmes qui fonctionnent sur les composants des entités]
Interopérable
L'utilisation d'un ECS fournit une abstraction commune des données de votre application. Cela permet une possibilité passionnante : les modules qui ne se connaissent pas peuvent toujours interagir tant qu'ils comprennent comment interpréter les données partagées de la même manière.
Pour ce faire, nous avons introduit la possibilité de définir des composants personnalisés (le C dans ECS : données typées attachées à une entité) et des concepts (ensembles de composants décrivant des comportements et des fonctionnalités partagés). Ceux-ci peuvent être partagés par plusieurs modules et utilisés pour interagir, même sans que ces modules soient directement conscients les uns des autres. De plus, les modules peuvent diffuser des messages (groupes de composants) pour négocier un comportement plus complexe.
Par exemple, un composant points de vie : F32 peut être diminué par un module de dégâts, augmenté par un module de soins et visualisé par un module d'interface utilisateur. Tous partagent la même définition, mais sont par ailleurs complètement indépendants et ne se connaissent pas.
Exécutable unique
Ambient est un exécutable unique que vous pouvez télécharger pour Windows x64, Linux x64 ou macOS ARM, ou vous pouvez le créer vous-même pour votre plate-forme. Cet exécutable peut agir en tant que serveur ou rejoindre un serveur en tant que client graphique. Il peut même faire office des deux à la fois avec ambient run !
Pipeline et flux d'actifs
Les actifs sont automatiquement compilés et optimisés par le pipeline d'actifs Ambient personnalisable, qui prend en charge les formats de modèle les plus courants (y compris FBX et glTF), les formats d'image, les formats audio, etc.
Les ressources compilées sont toujours transmises aux clients, afin qu'ils puissent immédiatement commencer à jouer sans avoir à télécharger tout le contenu au préalable.
Fonctionnalité standard riche
Enfin, Ambient vise à fournir un riche ensemble de fonctionnalités standard pour le développement de jeux et d'applications 3D. Cela inclut, mais sans s'y limiter, un moteur de rendu physique piloté par GPU, une physique alimentée par PhysX, un système d'interface utilisateur de type React, un son spatial avec des filtres composables, une entrée utilisateur indépendante de la plate-forme, etc. Certaines de ces fonctionnalités (par exemple, l'interface utilisateur et le son) n'ont pas été exposées à l'API, mais nous y travaillons.
Aperçu rapide
Commencez par installer Ambient, puis créez un nouveau projet Ambient : ambient newOuvrez ensuite src/lib.rs et ajoutez ce qui suit à la fonction principale et laissez votre EDI s'importer automatiquement :
Code Rust : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 | spawn_query(player()).bind(move |players| { for _ in players { Entity::new() .with_merge(make_transformable()) .with_default(cube()) .with(translation(), rand::random()) .with(color(), rand::random()) .spawn(); } }); |
Cela fera apparaître un cube aléatoire pour chaque joueur rejoignant la partie. L'exemple complet ici :
Maintenant, lancez-le avec : ambient runVous devriez voir quelque chose comme ceci :
Ouvrez maintenant une nouvelle fenêtre de terminal et entrez : ambient joinVous devriez maintenant voir deux cubes. Félicitations, vous venez de créer votre première expérience multijoueur avec Ambient !
Exemples plus complexes
Nous avons déjà vu comment créer une petite expérience multijoueur avec Ambient, mais il y a beaucoup plus à faire. Voici un exemple d'une scène plus complexe, Offworld, construite dans l'éditeur à venir :
Physics est supportée nativement grâce à l'utilisation de PhysX, qui s'exécute sur le serveur et fonctionnera donc par défaut dans un environnement multijoueur :
Code Rust : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 | Entity::new() .with_merge(make_transformable()) .with_default(cube()) .with(box_collider(), Vec3::ONE * 2.) .with(dynamic(), true) .with_default(physics_controlled()) .spawn(); on(event::COLLISION, |c| { println!("Collision"); EventOk }); |
L'équipe a fourni ce src :
Les personnages peuvent également être chargés et animés :
Code Rust : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | let unit_id = Entity::new() .with_merge(make_transformable()) .with( prefab_from_url(), asset_url("assets/Peasant.fbx").unwrap(), ) .spawn(); let anim = "assets/Dance.fbx/animations/main.anim"; entity::set_animation_controller( unit_id, AnimationController { actions: &[AnimationAction { clip_url: &asset_url(anim).unwrap(), looping: true, weight: 1., }], apply_base_pose: false, }, ); |
L'équipe a fourni ce src :
Et bien sûr, vous pouvez créer des jeux. Voici un tic-tac-toe multijoueur en moins de 100 lignes de code :
Ou un minigolf multijoueur :
L'équipe propose plusieurs autres exemples de jeux
Installer Ambient
Source : Ambient
Et vous ?
Que pensez-vous d'Ambient tel qu'il est présenté ?
Comprenez-vous la motivation de l'équipe derrière l'outil ?
Seriez-vous tenté de l'essayer ?
Si vous vous lancez, pourriez-vous faire un retour utilisateur (courbe d'apprentissage, facilité d'utilisation, etc.) ?