После года разработки представлен первый выпуск нового открытого игрового движка Ambient. Движок предоставляет runtime для создания многопользовательских игр и 3D-приложений, компилируемых в представление WebAssembly и использующих API WebGPU для отрисовки. Код написан на языке Rust и распространяется под лицензией MIT.
Ключевой задачей при разработке Ambient называется предоставление инструментов, упрощающих разработку многопользовательские игр и делающих их создание не сложнее однопользовательских проектов. Движок изначально нацелен на создание универсального runtime, поддерживающего разработку игр и приложений на любых языках программирования, для которых возможна компиляция в промежуточный код WebAssembly. Тем не менее, в первом выпуске пока реализована только поддержка разработки на языке Rust.
Ключевые особенности нового движка:
- Прозрачная поддержка сетевого взаимодействия. Движок сочетает в себе функции клиента и сервера, предоставляет все необходимые компоненты для создания клиентской и серверной логики, а также автоматически синхронизирует состояние сервера на клиентах. На стороне клиента и сервера используется общая модель данных, что упрощает перенос кода между бэкендом и фронтэндом.
- Запуск каждого модуля в своём изолированном окружении, позволяющем ограничить влияние кода, не заслуживающего доверия. Аварийное завершение модуля не приводит к аварийному завершению всего приложения.
- Архитектура, ориентированная на обработку данных (Data-oriented). Предоставление модели данных на основе системы компонентов, которыми может манипулировать каждый модуль WASM. Использование шаблона проектирования ECS (Entity Component System).
Хранение данных всех компонентов в централизованной БД на сервере, состояние которой автоматически реплицируется клиенту, который на своей стороне может расширять данные с учётом локального состояния. - Возможность создания модулей Ambient на любых языках программирования, компилируемых в WebAssembly (пока поддерживается только Rust).
- Формирование на выходе универсальных исполняемых файлов, которые могут запускаться в Windows, macOS и Linux, и функционировать как в роли клиента, так и сервера.
- Возможность определения собственных компонентов и “концепций” (коллекций компонентов). В проектах, использующих одинаковые компоненты и концепции, обеспечивается переносимость и совместное использование данных, даже если эти данные специально не рассчитаны на использование в конкретных проектах.
- Поддержка компиляции ресурсов в разных форматах, включая .glb и .fbx. Возможность потоковой загрузки ресурсов по сети – клиент может получить все необходимые ресурсы при подключении к серверу (можно начать играть не дожидаясь пока загрузятся все ресурсы).
Поддерживаются форматы моделей FBX и glTF, различные форматы звука и изображений. - Продвинутая система отрисовки, использующая GPU для ускорения вывода, и поддерживающая выполнение отсечения по зоне видимости и смену уровней детализации на стороне GPU. Использование по умолчанию
физически корректного рендеринга (PBR), поддержка анимации и каскадных теневых карт. - Поддержка симуляции физических процессов на базе движка PhysX.
- Система построения интерфейсов пользователя, похожая на React.
- Унифицированная система ввода, не зависящая от текущей платформы.
- Система пространственного звука с подключаемыми фильтрами.
Разработка пока находится на стадии альфа-версии. Из ещё не реализованной функциональности можно отметить возможность запуска в Web, клиентский API, API для управления многопоточностью, библиотека для создания интерфейса пользователя, API для использования собственных шейдеров, поддержка звука, загрузка и сохранение компонентов ECS (Entity Component System), перезагрузка ресурсов на лету, автоматическое масштабирование серверов, редактор для совместного создания игровых карт и игровых сцен.