Box3d: создатели box2d выпустили open source движок физики для 3d
Забудьте про физику встроенными средствами движка. Серьёзно: когда нужно заставить тонкие объекты вести себя реалистично, а деревья — падать без телепортаций, стандартные решения быстро упираются в потолок.
Что такое box3d
Box3D — это новый движок физики для трёхмерных игр. По сути, это форк Box2D, адаптированный для работы в 3D-пространстве.
Автор подчёркивает: ядро архитектуры осталось почти идентичным оригинальному Box2D. Если вы работали с Box2D, переход на трёхмерную версию не станет культурным шоком.
Вот что уже есть в релизе:
- Коллизии треугольных мешей
- Коллизии высотных полей
- Оптимизированные составные коллизии
- C API и исходный код на C17
- Непрерывная коллизионная проверка
- SIMD-солвер для контактов
- Поддержка многопоточности
- Детерминированность для разных платформ
- Запись и воспроизведение симуляции
BOX3D: АРХИТЕКТУРА СОЛВЕРА
──────────────────────────
┌─────────────────────────────────────┐
│ Входные данные: позиции, скорости │
└──────────────┬──────────────────────┘
▼
┌─────────────────────────────────────┐
│ Broad Phase │ Narrow Phase │
│ (быстрая │ (точная │
│ фильтрация) │ проверка) │
└──────────────┬─┴────────────────────┘
▼
┌─────────────────────────────────────┐
│ Контакт-солвер (SIMD, многопоточный)│
└──────────────┬──────────────────────┘
▼
┌─────────────────────────────────────┐
│ Интеграция (Эйлер / полушаг) │
└──────────────┬──────────────────────┘
▼
┌─────────────────────────────────────┐
│ Выход: обновлённые позиции/скорости│
└─────────────────────────────────────┘
Почему возникла потребность
Автор статьи работает над игрой The Legend of California с 2022 года. Игра построена на Unreal Engine 5, и встроенная физическая система Chaos создала несколько проблем.
Гироскопические моменты. В игре нужна реалистичная физика для тонких объектов вроде винтовок. Без поддержки гироскопических моментов такие предметы могли вращаться бесконечно, сохраняя угловую скорость. Epic добавили эту функцию в Chaos только в конце 2024 года.
Падающие деревья. Это была главная головная боль. Деревья в игре должны падать реалистично, но вместо этого они телепортировались по экрану. По мнению автора, причина крылась в механизме непрерывной коллизионной проверки встроенного движка.
Масштаб. На сервере одновременно существуют сотни тысяч сущностей. Стандартный broad-phase не справлялся.
В какой-то момент стало ясно: либо пытаться чинить чужое решение, либо написать своё.
Откуда взялся box3d
Ключевую роль сыграл Дирк Грегориус из Valve. Он работал над физическим движком Rubikon для Half-Life: Alyx и поддерживает его упрощённую версию для личных проектов.
Автор статьи форкнул эту версию и подключил напрямую к Unreal. Результат оказался отличным: гироскопические моменты заработали, деревья падали как надо.
Параллельно Box2D версии 3.0 получил множество оптимизаций. В какой-то момент стало очевидно, что поддерживать два разных движка с разными API — это пустая трата сил. Автор заменил API, структуры данных и алгоритмы в своём форке на код из Box2D.
Так Rubikon-Lite постепенно превратился в Box3D. При этом часть кода из Rubikon всё ещё осталась: генерация выпуклых оболочек и некоторые алгоритмы коллизий.
ЭВОЛЮЦИЯ BOX3D
──────────────
2015 │ GDC: алгоритм гироскопических моментов
│
2022 │ Начало работы над The Legend of California
│
│ Проблемы с Chaos в Unreal Engine 5
│
▼
2023 │ Форк Rubikon-Lite от Dirk Gregorius (Valve)
│
│ Подключение к Unreal, работает!
│
▼
2024 │ Миграция кода из Box2D v3.0
│
│ Замена API, структур данных, алгоритмов
│
▼
2026 │ Box3D — open source релиз
│
│ v0.1 (скоро)
Кто уже использует
Помимо The Legend of California, Box3D уже применяется в нескольких проектах:
- s& box — игровая платформа от Facepunch Studios
- Esoterica — open source игровой движок под руководством Бобби Ангуэлова
- Space game на 1000 игроков — мультиплеерный проект Гленна Фидлера
Кому это пригодится
Если вам нравится философия Box2D — минимализм, понятный код, отсутствие лишних абстракций — то Box3D покажется знакомым.
Движок подойдёт, если вы:
- Разрабатываете игру с нестандартными физическими требованиями
- Хотите полный контроль над физикой без привязки к конкретному игровому движку
- Изучаете физические движки и хотите разобраться в исходниках
- Работаете с большим количеством объектов и вам нужен быстрый broad-phase
Как начать
Установка стандартная для C++ проектов:
- Установите git и CMake
- Клонируйте репозиторий Box3D
- Следуйте инструкциям в README
Документация доступна онлайн, а примеры кода — в тесте HelloWorld.
Что дальше
На данный момент Box3D всё ещё в статусе альфа-версии. В планах — улучшение движения персонажей, оптимизация работы с «призрачными» коллизиями, общие оптимизации производительности и улучшенный солвер для соединений.
Автор обещает поддерживать проект неопределённо долго, как и Box2D. В отличие от «старшего брата», Box3D будет открыт для pull-запросов.
Итог: Box3D — это не эксперимент, а рабочий инструмент, который уже используют в реальных проектах. Если вам нужен физический движок с контролем и без привязки к конкретному движку — попробуйте.
Ссылки
- Box3D на GitHub — исходный код и релизы движка
- Документация Box3D — руководство, примеры и API
- Box2D — оригинальный 2D-движок физики
Дмитрий Полухин — продуктовый дизайнер. Пишу про разработку, AI и дизайн интерфейсов. Обо мне, контакты и профили.