Efter et års udvikling er den første udgave af den nye åbne spilmotor Ambient blevet præsenteret. Motoren tilbyder runtime til oprettelse af multiplayer-spil og 3D-applikationer, der kompileres til en WebAssembly-repræsentation og bruger WebGPU API til rendering. Koden er skrevet i Rust og distribueres under MIT-licensen.
En nøgleopgave i udviklingen af Ambient er at tilbyde værktøjer, der forenkler udviklingen af multiplayer-spil og gør deres oprettelse ikke sværere end til enspillerprojekter. Motoren er oprindeligt designet til at skabe et universelt runtime, der understøtter udviklingen af spil og applikationer på ethvert programmeringssprog, for hvilket det er muligt at kompilere til WebAssembly-mellemkode. I den første udgave understøttes dog kun udvikling på Rust.
Nøglefunktioner i den nye motor:
- Gennemsigtig understøttelse af netværksinteraktion. Motoren kombinerer klient- og serverfunktioner og giver alle de nødvendige komponenter til oprettelse af klient- og serverlogik samt automatisk synkronisering af serverens tilstand på klienterne. På klient- og serversiden anvendes en fælles datamodel, hvilket forenkler overførslen af kode mellem backend og frontend.
- Kørsel af hver modul i sit isolerede miljø, der begrænser indflydelsen fra upålidelig kode. En uventet nedlukning af et modul fører ikke til en uventet nedlukning af hele applikationen.
- Dataorienteret arkitektur. Tilvejebringelse af en datamodel baseret på et komponent-system, som hvert WASM-modul kan manipulere. Anvendelse af designmønsteret ECS (Entity Component System). Opbevaring af data fra alle komponenter i en centraliseret database, serveren, hvis tilstand automatisk replikeres til klienten, som på sin side kan udvide data i henhold til den lokale tilstand.
- Mulighed for at oprette Ambient-moduler i ethvert programmeringssprog, der kan kompileres til WebAssembly (i øjeblikket understøttes kun Rust).
- Produktion af universelle eksekverbare filer, der kan køres på Windows, macOS og Linux, og fungere både som klient og server.
- Mulighed for at definere egne komponenter og "konceptuer" (komponentkollektioner). I projekter, der bruger de samme komponenter og konceptuer, sikres portabilitet og deling af data, selvom disse data ikke specifikt er beregnet til brug i konkrete projekter.
- Understøttelse af kompilering af ressourcer i forskellige formater, inklusive .glb og .fbx. Mulighed for streaming af ressourcer over nettet - klienten kan modtage alle nødvendige ressourcer ved tilslutning til serveren (du kan begynde at spille, før alle ressourcer er indlæst). Formaterne FBX og glTF til modeller, samt forskellige lyd- og billedformater understøttes.
- Avanceret renderingssystem, der bruger GPU'en til at accelerere output, og der understøttes visningsfrakobling og skift af detaljeringsniveau på GPU-siden. Standard brug af fysisk korrekt rendering (PBR), understøttelse af animation og kaskadiske skyggekort.
- Understøttelse af simulering af fysiske processer baseret på PhysX-motoren.
- Brugergrænseflade-system, der ligner React.
- Unified input system, uafhængigt af den aktuelle platform.
- Spatial lydsystem med tilsluttelige filtre.
Udviklingen er stadig i alfa-fasen. Af den endnu ikke implementerede funktionalitet kan nævnes muligheden for at køre i webformat, klient-API, API til styring af multitrådet behandling, bibliotek til oprettelse af brugergrænseflader, API til brug af egne shaders, lydsupport, indlæsning og gemning af ECS (Entity Component System) komponenter, live genindlæsning af ressourcer, automatisk skalering. servere, editor til samarbejdende oprettelse af spilkort og spilscenarier.

Kilde: opennet.ru
