Создатель движка Box2D анонсировал открытый физический движок Box3D для 3D-игр
Разработчик Эрин Катто анонсировал релиз Box3D – опенсорсного физического движка для 3D-игр, ставшего развитием его же 2D-движка Box2D. Исходный код доступен на GitHub, лицензия открытая, а сам движок распространяется на тех же условиях, что и его двухмерный предшественник.
Проектом Катто занимается совместно со студией Kintsugiyama, где параллельно ведётся разработка сурвайвал-игры The Legend of California.
Box3D построен как форк Box2D с добавлением возможностей, необходимых 3D-играм – коллизий с треугольной сеткой, картой высот и предзапечённой составной геометрии. Ключевая архитектура при этом почти не менялась.
Движок сохраняет C-API, полностью написанный на стандарте C17 код, суб-шаговый решатель, непрерывные столкновения, раскраску графа для крупных островов, широкий SIMD-решатель контактов, встроенный планировщик задач, поддержку крупных миров с двойной точностью для координат и кроссплатформенный детерминизм.
Появление Box3D объясняется практическими потребностями The Legend of California. С 2022 года команда Kintsugiyama разрабатывает игру на Unreal Engine 5, и встроенный физический движок Chaos на старте не устроил разработчиков сразу по нескольким пунктам.
В нём отсутствовала симуляция гироскопических моментов, из-за чего вытянутые предметы вроде винтовки могли бесконечно вращаться. Более серьёзной проблемой стало поведение падающих деревьев, которые хаотично телепортировались по экрану – для сурвайвал-игры с рубкой леса такое поведение оказалось критичным.
Дополнительной сложностью стал масштаб серверной симуляции. На сервере The Legend of California существуют сотни тысяч сущностей, что требует быстрой широкофазной обработки коллизий.
Финальным толчком стало предложение Дирка Грегориуса, известного по разработке движка Rubikon для Half-Life: Alyx. Дирк ведёт домашнюю версию своего движка, условно называемую Rubikon-Lite, и предложил Катто взять её за основу.
Катто интегрировал форк напрямую в Unreal и получил стабильную симуляцию с корректными гироскопическими моментами и аккуратно падающими деревьями. По мере доработок он постепенно заменял в Rubikon-Lite API, структуры данных и алгоритмы кодом из Box2D версии 3.0, стремясь сохранить максимальную близость 2D и 3D-реализаций.
В итоге форк трансформировался в Box3D, а от Rubikon-Lite в текущей версии остались части кода для генерации выпуклых оболочек и отдельные алгоритмы коллизий.
Ключевые новые компоненты Box3D по сравнению с Box2D:
Столкновения с треугольной сеткой для сложной геометрии окружения
Коллизия с картой высот для террейнов
Составная предзапечённая коллизия, объединяющая тысячи мелких форм в один оптимизированный ресурс
Расширенная поддержка крупных миров через двойную точность координат
Улучшенная система стриминга для баз с большим числом отдельных мешей
Помимо The Legend of California, Box3D уже используется в нескольких сторонних тайтлах. Среди них платформа s&box от Facepunch Studios, опенсорсный движок Esoterica под руководством Бобби Ангуэлова и мультиплеерная космическая игра на 1000 игроков от Гленна Фидлера.
По оценке самого Катто, Box3D сейчас находится в статусе альфа-версии – в ближайшее время движок получит тег v0.1, а работа над релизом v1.0 будет включать доработку системы движения персонажа, снижение ghost-коллизий, оптимизации и улучшенный решатель шарниров.