Dopo un anno di sviluppo, è stato presentato il primo rilascio del nuovo motore di gioco open source Ambient. Il motore offre un runtime per la creazione di giochi multiplayer e applicazioni 3D, compilabili in WebAssembly e che utilizzano l'API WebGPU per il rendering. Il codice è scritto in Rust e distribuito con licenza MIT.
Un obiettivo chiave nello sviluppo di Ambient è fornire strumenti che semplifichino la creazione di giochi multiplayer, rendendola non più complessa rispetto ai progetti single player. Il motore è inizialmente focalizzato sulla creazione di un runtime universale che supporti lo sviluppo di giochi e applicazioni in qualsiasi linguaggio di programmazione in grado di essere compilato in codice intermedio WebAssembly. Tuttavia, nel primo rilascio è attualmente supportato solo lo sviluppo in Rust.
Caratteristiche principali del nuovo motore:
- Supporto trasparente per l'interazione di rete. Il motore combina le funzionalità di client e server, fornendo tutti i componenti necessari per creare la logica client e server, e sincronizza automaticamente lo stato del server sui client. Sia il client che il server utilizzano un modello di dati condiviso, semplificando il trasferimento del codice tra backend e frontend.
- Avvio di ogni modulo nel proprio ambiente isolato, che consente di limitare l'impatto di codice non affidabile. La chiusura imprevista di un modulo non causa la chiusura imprevista dell'intera applicazione.
- Architettura orientata ai dati (Data-oriented). Fornitura di un modello di dati basato su un sistema di componenti, che può essere manipolato da ciascun modulo WASM. Utilizzo del pattern di design ECS (Entity Component System). Memorizzazione dei dati di tutti i componenti in un database centralizzato su server, il cui stato viene automaticamente replicato al client, il quale può estendere i dati in base allo stato locale.
- Possibilità di creare moduli Ambient in qualsiasi linguaggio di programmazione compilabile in WebAssembly (attualmente supportato solo Rust).
- Generazione di file eseguibili universali che possono essere eseguiti su Windows, macOS e Linux, e funzionare sia come client che come server.
- Possibilità di definire componenti e "concetti" personalizzati (collezioni di componenti). Nei progetti che utilizzano componenti e concetti identici, è garantita la portabilità e la condivisione dei dati, anche se tali dati non sono stati specificatamente progettati per essere utilizzati in progetti specifici.
- Supporto per la compilazione di risorse in diversi formati, inclusi .glb e .fbx. Possibilità di caricamento in streaming delle risorse su rete — il client può ottenere tutte le risorse necessarie connettendosi al server (è possibile iniziare a giocare senza aspettare il caricamento di tutte le risorse). Sono supportati formati di modelli FBX e glTF, vari formati audio e immagini.
- Sistema avanzata di rendering che utilizza la GPU per accelerare l'output e supporta l'esecuzione del culling basato sulla visibilità e il cambio dei livelli di dettaglio sul lato GPU. Utilizza per default il rendering fisicamente corretto (PBR), supportando l'animazione e le shadow map cascade.
- Supporto per la simulazione di processi fisici basato sul motore PhysX.
- Sistema di costruzione dell'interfaccia utente simile a React.
- Sistema unificato di input, indipendente dalla piattaforma attuale.
- Sistema di audio spaziale con filtri connettivi.
Lo sviluppo è attualmente in fase alpha. Tra le funzionalità non ancora implementate, si notano la possibilità di avvio in Web, API client, API per la gestione della multi-threading, libreria per la creazione di interfacce utente, API per l'utilizzo di shader personalizzati, supporto audio, caricamento e salvataggio di componenti ECS (Entity Component System), ricarica delle risorse al volo, scalabilità automatica, server, editor per la co-creazione di mappe di gioco e scene di gioco.

Fonte: opennet.ru
