Эрин Катто перенес легендарную физику Box2D в 3D

23 июл 2026
6,132
306
47
3 недели

Если вы хоть раз интересовались разработкой 2D-игр, то наверняка сталкивались с Box2D. На этом движке выросли Angry Birds, Limbo и сотни других проектов. Недавно его создатель, Эрин Катто, представил свой новый проект — Box3D. Это библиотека трехмерной физики жестких тел, написанная с нуля на си.

Box3D Logo

Что представляет собой Box3D

Библиотека написана на портативном C17 и не имеет внешних зависимостей, кроме стандартной сишной библиотеки. При этом примеры к проекту сделаны на C++20 с графическим бекендом sokol и интерфейсом Dear ImGui. Демо-приложение без проблем собирается под Windows, macOS, Linux и даёт возможность погонять физику прямо в браузере через WebAssembly.

Box3D Video

В отличие от разросшихся коммерческих альтернатив, Box3D сфокусирован на чистой производительности, data-oriented подходе и предсказуемости.

Реклама

Главные фичи библиотеки

Векторные вычисления и производительность

Ядро физического движка активно использует векторные инструкции SSE2 для процессоров x86 и Neon для ARM. Если вы собираете проект под экзотическую платформу или микроконтроллер без SIMD, векторную математику можно выключить определением макроса BOX3D_DISABLE_SIMD.

Солвер Soft Step и типы связей

За поведение жестких тел отвечает алгоритм Soft Step. Движок умеет работать с выпуклыми сетками (convex hulls), капсулами, сферами, полигональными сетками и картами высот (height fields). На одно тело можно навешивать сразу несколько форм.

Из связей (joints) доступны:

  • Шарниры и слайдеры
  • Дистанционные связи и моторы
  • Сварка и колесные соединения
  • Настраиваемые лимиты, пружины и трение

Для экономии ресурсов используется островная система засыпания (island sleep): если группа объектов остановилась, движок временно исключает её из расчетов.

Детерминизм и запись симуляции

Результат расчета физического мира остается одинаковым на разных платформах. Это критикально для сетевых мультиплеерных игр. Из коробки доступна функция записи и повторного воспроизведения симуляций (recording and replay), что упрощает отладку физических багов.

Непрерывное обнаружение столкновений

Быстро движущиеся объекты не пролетают сквозь стены благодаря полноценной системе Continuous Collision Detection (CCD). Алгоритмы обрабатывают как быстрые линейные перемещения, так и вращения.

Как подключить к проекту

Интегрировать Box3D в проект с CMake можно буквально за пару минут через FetchContent:

include(FetchContent)
FetchContent_Declare(box3d
  GIT_REPOSITORY https://github.com/erincatto/box3d.git
  GIT_TAG v0.1.0)
FetchContent_MakeAvailable(box3d)

target_link_libraries(my_app PRIVATE box3d::box3d)

Если вы предпочитаете держать сторонний код локально, сработает и стандартный add_subdirectory:

add_subdirectory(extern/box3d)

target_link_libraries(my_app PRIVATE box3d::box3d)

Откровенный разговор об ИИ в разработке

Интересная деталь в README — автор честно описал роли нейросетей при создании библиотеки. Эрин Катто прямо указывает, что использует LLM для генерации юнит-тестов, настройки CMake, миграции кода из Box2D, написания бенчмарков и ревью. При этом всю логику физического движка автор пишет сам и берет личную ответственность за каждую строку кода.

Кому пригодится этот проект

Если вы пишете собственный 3D-движок на C или C++ и искали компактную физическую библиотеку без гигантского графического или движкового обвеса, Box3D заслуживает детального изучения. Проект находится на этапе релиза 0.1.0, пул-реквесты автор пока закрыл и принимает только issue, но исходники открыты под лицензией MIT и читаются очень легко.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.