После года разработки представлен первый выпуск нового открытого игрового движка Ambient. Движок предоставляет runtime для создания многопользовательских игр и 3D-приложений, компилируемых в представление WebAssembly и использующих API WebGPU для отрисовки. Код написан на языке Rust и распространяется под лицензией MIT.
Ключевой задачей при разработке Ambient называется предоставление инструментов, упрощающих разработку многопользовательских игр и делающих их создание не сложнее однопользовательских проектов. Движок изначально нацелен на создание универсального runtime, поддерживающего разработку игр и приложений на любых языках программирования, для которых возможна компиляция в промежуточный код WebAssembly. Тем не менее, в первом выпуске пока реализована только поддержка разработки на языке Rust.
Ключевые особенности нового движка:
Ключевой задачей при разработке 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.
- Унифицированная система ввода, не зависящая от текущей платформы.
- Система пространственного звука с подключаемыми фильтрами.