Etter et år med utvikling presenteres den første utgivelsen av den nye åpen kildekode-spillmotoren Ambient. Motoren gir en kjøretid for å bygge flerspillerspill og 3D-applikasjoner som kompileres til en WebAssembly-representasjon og bruker WebGPU API for gjengivelse. Koden er skrevet i Rust og distribuert under MIT-lisensen.
Et sentralt mål i utviklingen av Ambient er å tilby verktøy som forenkler utviklingen av flerspillerspill og gjør det ikke vanskeligere å lage dem enn enkeltspillerprosjekter. Motoren er i utgangspunktet rettet mot å lage en universell kjøretid som støtter utviklingen av spill og applikasjoner på alle programmeringsspråk der kompilering til WebAssembly mellomkode er mulig. Den første utgivelsen støtter imidlertid bare Rust-utvikling så langt.
Hovedfunksjoner til den nye motoren:
- Transparent støtte for nettverk. Motoren kombinerer funksjonene til en klient og en server, gir alle nødvendige komponenter for å lage klient- og serverlogikk, og synkroniserer automatisk serverens tilstand på klienter. En vanlig datamodell brukes på klient- og serversiden, som gjør det enkelt å overføre kode mellom backend og frontend.
- Kjør hver modul i sitt eget isolerte miljø for å begrense virkningen av uklarert kode. Å krasjer en modul fører ikke til at hele applikasjonen krasjer.
- Dataorientert arkitektur. Å tilby en datamodell basert på et system av komponenter som hver WASM kan manipulere. Bruke ECS (Entity Component System) designmønster. Lagring av dataene til alle komponenter i en sentralisert database på serveren, hvis tilstand automatisk replikeres til klienten, som på sin side kan utvide dataene under hensyntagen til den lokale tilstanden.
- Muligheten til å lage Ambient-moduler i et hvilket som helst programmeringsspråk som kompileres til WebAssembly (bare Rust støttes så langt).
- Generering av utgående universelle kjørbare filer som kan kjøres på Windows, macOS og Linux, og fungere som både en klient og en server.
- Evne til å definere egne komponenter og "konsepter" (komponentsamlinger). Prosjekter som bruker de samme komponentene og konseptene sikrer at data er portable og delte, selv om dataene ikke er spesifikt designet for bruk i spesifikke prosjekter.
- Støtte for kompilering av ressurser i forskjellige formater, inkludert .glb og .fbx. Muligheten til å strømme ressurser over nettverket - klienten kan få alle nødvendige ressurser når den er koblet til serveren (du kan begynne å spille uten å vente på at alle ressursene skal lastes). FBX- og glTF-modellformater, ulike lyd- og bildeformater støttes.
- Et avansert gjengivelsessystem som bruker GPU for å øke hastigheten på gjengivelsen, og støtter klipping på GPU-siden og LOD-er. Bruker fysisk basert gjengivelse (PBR) som standard, støtte for animasjon og overlappende skyggekart.
- Støtte for simulering av fysiske prosesser basert på PhysX-motoren.
- Reager-lignende brukergrensesnitt byggesystem.
- Unified input system uavhengig av gjeldende plattform.
- Romlig lydsystem med plug-in filtre.
Utviklingen er fortsatt på alfastadiet. Fra funksjonaliteten som ennå ikke er implementert, kan vi merke oss muligheten til å kjøre på nettet, klient-API, API for å administrere multithreading, biblioteket for å lage brukergrensesnittet, API for å bruke dine egne shaders, lydstøtte, lasting og lagring ECS (Entity Component System)-komponenter, omlasting av ressurser på farten, automatisk skalering av servere, en editor for å samskape spillkart og spillscener.
Kilde: opennet.ru