După un an de dezvoltare, a fost lansată prima versiune a noului motor de jocuri open-source Ambient. Motorul oferă un runtime pentru crearea de jocuri multiplayer și aplicații 3D, compilabile în WebAssembly și utilizând API WebGPU pentru redare. Codul este scris în limbajul Rust și este distribuit sub licența MIT.
Obiectivul principal în dezvoltarea Ambient este de a furniza instrumente care simplifică dezvoltarea jocurilor multiplayer, făcând astfel crearea acestora la fel de ușoară ca în cazul proiectelor single-player. Motorul este inițial destinat să creeze un runtime universar, care să suporte dezvoltarea de jocuri și aplicații în orice limbaj de programare care poate fi compilat în cod intermediar WebAssembly. Cu toate acestea, prima versiune acceptă doar dezvoltarea în limbajul Rust.
Caracteristicile cheie ale noului motor:
- Suport transparent pentru interacțiunea în rețea. Motorul combină funcțiile de client și server, oferind toate componentele necesare pentru crearea logicii client- și server-side, precum și sincronizând automat starea serverului pe clienți. Pe partea clientului și serverului se utilizează un model de date comun, ceea ce simplifică transferul codului între backend și frontend.
- Rularea fiecărui modul într-un mediu izolat, care limitează influența codului nesigur. Oprirea bruscă a unui modul nu duce la oprirea întregii aplicații.
- Arhitectură orientată pe date (Data-oriented). Oferirea unui model de date bazat pe un sistem de componente cu care poate interacționa fiecare modul WASM. Utilizarea tiparului de design ECS (Entity Component System). Stocarea datelor tuturor componentelor într-o bază de date centralizată care server, starea căreia se replică automat clientului, care își poate extinde datele ținând cont de starea locală.
- Posibilitatea de a crea module Ambient în orice limbaj de programare care poate fi compilat în WebAssembly (deocamdată, este acceptat doar Rust).
- Generarea de fișiere executabile universale, care pot fi rulabile pe Windows, macOS și Linux, funcționând atât ca client, cât și ca server.
- Posibilitatea de a defini propriile componente și „concepte” (colecții de componente). În proiectele care utilizează componente și concepte similare, se asigură portabilitatea și reutilizarea datelor, chiar dacă aceste date nu sunt concepute special pentru utilizare în proiecte concrete.
- Sprijin pentru compilarea resurselor în diferite formate, inclusiv .glb și .fbx. Posibilitatea de a descărca resurse în flux prin rețea - clientul poate obține toate resursele necesare la conectarea la server (se poate începe să joace fără a aștepta încărcarea tuturor resurselor). Se acceptă formatele de modele FBX și glTF, diferite formate de sunet și imagini.
- Un sistem avansat de redare, care utilizează GPU pentru a accelera procesul de output și care suportă realizarea de tăieri pe baza zonei vizibile și schimbarea nivelurilor de detaliere pe GPU. Utilizarea implicită a renderizării fizic corecte (PBR), suport pentru animație și hărți de umbre în cascadă.
- Sprijin pentru simularea proceselor fizice bazate pe motorul PhysX.
- Un sistem de construire a interfeței utilizatorului, asemănător cu React.
- Un sistem unificat de input, independent de platforma actuală.
- Un sistem de sunet spațial cu filtre conectabile.
Dezvoltarea se află în prezent în stadiul de versiune alfa. Printre funcționalitățile care nu sunt încă implementate se numără posibilitatea de a rula în Web, API-ul clientului, API pentru gestionarea multithreading-ului, o bibliotecă pentru crearea interfeței utilizatorului, API pentru utilizarea shaderelor proprii, suport pentru sunet, încărcarea și salvarea componentelor ECS (Entity Component System), reîncărcarea resurselor în timp real, scalarea automată. servere, un editor pentru crearea colaborativă a hărților de joc și a scenelor de joc.

Sursa: opennet.ro
