Pierwsze wydanie silnika gier wieloosobowych typu open source Ambient

Po roku rozwoju zaprezentowano pierwszą wersję nowego silnika gry Ambient o otwartym kodzie źródłowym. Silnik zapewnia środowisko wykonawcze do tworzenia gier wieloosobowych i aplikacji 3D, które kompilują się do reprezentacji WebAssembly i korzystają z interfejsu API WebGPU do renderowania. Kod napisany jest w języku Rust i jest rozpowszechniany na licencji MIT.

Kluczowym celem w rozwoju Ambientu jest dostarczenie narzędzi, które uproszczą tworzenie gier wieloosobowych i sprawią, że ich tworzenie nie będzie trudniejsze niż projekty dla pojedynczego gracza. Silnik ma początkowo na celu stworzenie uniwersalnego środowiska wykonawczego, które wspiera tworzenie gier i aplikacji w dowolnych językach programowania, dla których możliwa jest kompilacja do kodu pośredniego WebAssembly. Jednak pierwsza wersja obsługuje na razie tylko rozwój Rusta.

Najważniejsze cechy nowego silnika:

  • Przejrzyste wsparcie sieciowe. Silnik łączy w sobie funkcje klienta i serwera, zapewnia wszystkie niezbędne komponenty do tworzenia logiki klienta i serwera, a także automatycznie synchronizuje stan serwera pomiędzy klientami. Po stronie klienta i serwera stosowany jest wspólny model danych, co upraszcza przesyłanie kodu pomiędzy backendem a frontendem.
  • Uruchamianie każdego modułu w jego własnym izolowanym środowisku, co pozwala ograniczyć wpływ niezaufanego kodu. Awaria modułu nie powoduje awarii całej aplikacji.
  • Architektura zorientowana na dane. Zapewnienie modelu danych opartego na systemie komponentów, którymi może manipulować każdy moduł WASM. Korzystanie ze wzorca projektowego ECS (Entity Component System). Przechowywanie danych wszystkich komponentów w scentralizowanej bazie danych na serwerze, którego stan jest automatycznie replikowany do klienta, który po swojej stronie może rozszerzać dane z uwzględnieniem stanu lokalnego.
  • Możliwość tworzenia modułów Ambient w dowolnym języku programowania kompilującym się do WebAssembly (na razie obsługiwany jest tylko Rust).
  • Generowanie uniwersalnych plików wykonywalnych jako danych wyjściowych, które można uruchomić w systemach Windows, macOS i Linux oraz działać zarówno jako klient, jak i serwer.
  • Możliwość definiowania własnych komponentów i „koncepcji” (zbiorów komponentów). Projekty korzystające z tych samych komponentów i koncepcji umożliwiają przenoszenie i udostępnianie danych, nawet jeśli dane nie są specjalnie zaprojektowane do wykorzystania w konkretnych projektach.
  • Obsługa kompilacji zasobów w różnych formatach, w tym .glb i .fbx. Możliwość strumieniowego pobierania zasobów przez sieć - klient może otrzymać wszystkie niezbędne zasoby po podłączeniu do serwera (można rozpocząć grę bez czekania na załadowanie wszystkich zasobów). Obsługuje formaty modeli FBX i glTF, różne formaty audio i obrazu.
  • Zaawansowany system renderowania, który wykorzystuje procesor graficzny do przyspieszenia renderowania i obsługuje przycinanie po stronie procesora graficznego oraz zmiany poziomu szczegółowości. Domyślnie korzysta z renderowania opartego na fizyce (PBR), obsługuje animacje i kaskadowe mapy cieni.
  • Wsparcie dla symulacji procesów fizycznych w oparciu o silnik PhysX.
  • System do budowy interfejsów użytkownika podobny do React.
  • Ujednolicony system wprowadzania danych, niezależny od bieżącej platformy.
  • Przestrzenny system dźwiękowy z filtrami wtykowymi.

Rozwój jest wciąż na etapie wersji alfa. Wśród jeszcze nie zaimplementowanych funkcjonalności możemy wymienić możliwość działania w sieci Web, API klienta, API do zarządzania wielowątkowością, bibliotekę do tworzenia interfejsu użytkownika, API do korzystania z własnych shaderów, obsługę dźwięku, ładowanie i zapisywanie Komponenty ECS (Entity Component System), ponowne ładowanie zasobów w locie, automatyczne skalowanie serwera, edytor do wspólnego tworzenia map gier i scen gier.



Źródło: opennet.ru

Dodaj komentarz