Pärast aasta arendust on esitlemiseks valmis saanud uus avatud mängumootor Ambient. Mootor pakub runtime'i mitmikmängu mängude ja 3D-rakenduste loomiseks, mis kompileeritakse WebAssembly esitamiseks ja kasutavad WebGPU API-d renderdamiseks. Kood on kirjutatud keeles Rust ja jagatakse MIT litsentsi alusel.
Ambient'i arendamise peamine ülesanne on pakkuda tööriistu, mis lihtsustavad mitmikmängu mängude loomist ja teevad selle sama lihtsaks kui ühes mängus projektide tegemine. Mootor keskendub esialgu universaalse runtime'i loomisele, mis toetab mängude ja rakenduste arendamist kõikides programmeerimiskeeltes, mille puhul on võimalik kompileerida vahepealseks koodiks WebAssembly. Siiski, esimeses versioonis on praegu teostatud toetust vaid arendamiseks keeles Rust.
Uue mootori peamised omadused:
- Avaheeritav võrgu tugi. Mootor ühendab kliendi ja serveri funktsioone, pakkudes kõiki vajalikke komponente kliendi ja serveri loogika loomiseks ning automaatselt sünkroniseerib serveri oleku klientidega. Kliendi ja serveri poolel kasutatakse ühist andmemudelit, mis lihtsustab koodi ülekandmist tagasiside ja esiosade vahel.
- Iga mooduli käivitamine oma isoleeritud keskkonnas, mis võimaldab piirata usaldusväärset koodi. Mooduli ootamatu lõpetamine ei põhjusta kogu rakenduse ootamatut lõpetamist.
- Andmetele orienteeritud arhitektuur. Andmemudeli pakkumine komponentide süsteemil, mida saab hallata iga WASM mooduli poolt. Kasutatakse ECS (Entity Component System) kujundusmustrit. Kõikide komponentide andmete säilitamine tsentraliseeritud andmebaasis, serveril, mille olek replitseeritakse automaatselt kliendile, kes võib oma poolel andmeid laiendada, arvesse võttes kohalikku olekut.
- Ambienti moodulite loomise võimalus igasugustes programmeerimiskeeltes, mis kompileeritakse WebAssembly's (praegu on toetatud ainult Rust).
- Universaalsete väljaantavate failide genereerimine, mis võivad töötada Windows, macOS ja Linuxis ning tegutseda nii kliendi kui ka serverina.
- Oma komponentide ja 'kontseptsioonide' (komponentide kogumite) määramise võimalus. Projektides, kus kasutatakse samu komponente ja kontseptsioone, tagatakse ühilduvus ja andmete jagamine, isegi kui need andmed ei ole otseselt kohandatud konkreetsetele projektidele.
- Toetatakse ressursside kompileerimist erinevates formaatides, sealhulgas .glb ja .fbx. Võime ressursse voogedastada üle võrgu - klient saab kõik vajalikud ressursid serveriga ühendamisel (saab mängima hakata, oodates, et kõik ressursid laaditakse). Toetatakse FBX ja glTF mudelite formaate, samuti erinevaid helide ja piltide formaate.
- Täpne renderdus süsteem, mis kasutab GPU-d väljundi kiirendamiseks ning toetab nähtavuse alusel lõikamist ja tasemete vahetamist GPU küljelt. Vaikimisi füüsiliselt korrektne renderdamine (PBR), animatsioonide toetus ja kaskaadsed varjukaardid.
- Füüsikaliste protsesside simuleerimise tugi PhysX mootori baasil.
- Kasutajaliideste loomise süsteem, mis sarnaneb React'iga.
- Ühtne sisestussüsteem, mis ei sõltu praegusest platvormist.
- Ruumi heli süsteem, millel on ühendatavad filtrid.
Arendus on hetkel alpha-etapis. Veel teostamata funktsioonidest võib mainida veebiversiooni käivitamise võimalust, kliendi API-d, mitme lõime haldamise API-d, kasutajaliidese loomise raamatukogu, oma shader'ite kasutamise API-d, heli toetust, ECS (Entity Component System) komponente laadimise ja salvestamise, ressursside kuumalt uuendamise ja automaatse skaleerimise. serverite, redigeerija mängukaartide ja stseenide koostamiseks.

Allikas: opennet.ru
