← На главную

Команда Easel перевела физический движок на инкрементные снапшоты

02.05.2026 00:12 · hackernews

Команда разработчиков платформы Easel представила собственный физический движок, который решил главную проблему масштабирования мультиплеерных игр. Ранее проекты такого масштаба, как корабль из Among Us, были недоступны для Easel, так как стандартные движки должны были делать снапшот и откат всего мира каждый кадр. Это было слишком ресурсоемко. Новый движок работает по принципу инкрементных снапшотов и откатов только тех частей мира, которые изменились. В большом корабле с тысячами объектов реально меняется меньше тридцати каждый кадр, что дает ускорение в 30–50 раз и делает большие миры возможными. Движок сразу отправляет тела в состояние сна, если скорость падает до нуля, что экономит вычисления, и учитывает балансировку сил, включая гравитацию, чтобы не просыпаться зря.

В части пространственного индексирования используется иерархия ограничивающих объемов (BVH), которая не перебалансируется постоянно, а лениво оптимизируется под изменения. Также система отслеживает категории коллайдеров, что ускоряет поиск ближайшего игрока или бота среди тысяч объектов. Для решения проблемы «прыгающих» персонажей при нажатии кнопки хода движок интегрировал прямую обработку без отскока в решатель, используя параметры ForcefulStep и restitution=0. Вместо коррекции позиции, которая могла вернуть предыдущий отскок, Easel корректно управляет векторами скорости в момент касания стены.

Для обнаружения столкновений быстродвижущихся объектов, например, летящих сфер огня, реализован непрерывный поиск коллизий (continuous collision detection). В отличие от Rapier, который может ошибаться при начальных условиях касания, Easel сначала решает столкновения, меняет направление отскока, а потом ищет момент удара. Старый Box2D 2.4 использует ретроспективный подход, а новинка Box2D 3.0 вообще не поддерживает взаимодействие динамических объектов в воздухе, и Photon Quantum отказался от такой функции из-за состояния движка без ядра. Easel же справляется с этим за счет инкрементных изменений состояния.

Теперь тела могут двигаться сами по себе, если у них задана скорость или угол поворота, даже без коллайдеров. Это позволяет использовать физические объекты как контейнеры для группировки спрайтов, например, для создания плавающих плакатов на экране. Разработка опиралась на алгоритмы обнаружения столкновений из библиотеки Parry от Dimforge, которая питает движок Rapier. Все компоненты системы, включая этот физический движок, теперь работают с инкрементными изменениями, что позволяет создавать гораздо большие игровые миры в рамках архитектуры с откатом состояния. Пришло время мыслить глобально.

Читать оригинал →