|
Эрин Катто (Erin Catto), автор проекта Box2D, объявил о создании нового движка симуляции физических процессов Box3D, который представляет собой форк Box2D, имеющий идентичную архитектуру, но переработанный и расширенный для использования в трёхмерных играх. Код проекта написан на языке Си и распространяется под лицензией MIT. Поддерживается сборка для Linux, Windows и macOS.
Движок Box3D создан в процессе разработки студией Kintsugiyama нового 3D-шутера The Legend of California, в работе над которым участвует Эрин. В игре применяется игровой движок Unreal Engine, но разработчиков не устроил предлагаемый в нём штатный физический движок Chaos. Проблемы возникли с отсутствием учёта гироскопических крутящих моментов (тонкие объекты неестественно долго вращались), непрерывным обнаружением столкновений (нереалистичное поведение падающих деревьев) и низкой производительностью при обработке сотен тысяч объектов.
Вначале проблемы планировали решить создав форк физического движка Jolt, но затем по совету создателя движка Rubikon, задействованного в игре Half-Life, за основу был взят разработанный в качестве хобби упрощённый вариант Rubikon-Lite, который был переработан, используя код и оптимизации из Box2D для совмещения имевшихся 3D-возможностей с наработками из движка Box2D. В итоге почти все API, структуры данных и алгоритмы в Rubikon-Lite были заменены на код из Box2D, а от Rubikon-Lite остались лишь алгоритмы построения выпуклой оболочки и обработки 3D-столкновений. Получившийся движок с ведома автора Rubikon-Lite и компании Kintsugiyama было решено опубликовать как отдельный открытый проект Box3D.
В настоящее время опубликован первый выпуск Box3D 0.1, который отмечен, как имеющий качество альфа-версии. Основная запланированная функциональность реализована, но требуется доработка документации и тестирование. Помимо игры
The Legend of California, новый движок уже задействован в игровой платформе s&box, открытом игровом движке Esoterica и многопользовательской космической игре Space Game, рассчитанной на 1000 игроков.
Для 3D-игр в новом движке добавлены такие возможности, как расчёт столкновений с полигональной сеткой (мешем) и высотными картами, используемыми при генерации ландшафта, что позволило реализовать в игре The Legend of California реалистичные эффекты падения деревьев на воксельные поверхности. Добавлена поддержка предварительно просчитанных (baked) составных столкновений, скомпонованных из нескольких простых форм, значительно снизившая потребление ресурсов при симуляции столкновений огромного числа типовых мелких объектов.
Среди перенесённых в Box3D возможностей, ранее имевшихся в Box2D:
- Непрерывное определение столкновений (обработка движения объекта как непрерывной траектории), фильтрация столкновений и генерация событий при соприкосновении объектов. Поддержка сферических, капсульных и оболочечных форм для определения столкновений. Оптимизированный при помощи SIMD-инструкций обработчик соприкосновения объектов.
- Sub-stepping Solver для повышения точности симуляции за счёт разделения этапов симуляции на несколько более мелких шагов.
- Использование метода раскраски графов для обработки больших групп связанных объектов.
- Контроллер персонажа, отвечающий за обработку движения, столкновений и взаимодействия персонажа с окружающими объектами.
- Поддержка трассировки лучей, трассировки форм и проверки пересечений при сканировании окружающего пространства. Система сенсоров для обнаружения объектов в пространстве.
- Soft Step Solver для расчёта физики твёрдых тел при сложных взаимодействиях.
- Поддержка заморозки состояния групп неактивных или статичных объектов для экономии ресурсов.
- Поддержка разнообразных соединений и типов связей между объектами, включая шарниры, пружины, моторы, сварку и колёса, с возможностью
гибкой настройки каждого соединения. Расчёт сил сжатия и растяжения, с которыми объекты воздействуют друг на друга.
- Возможность генерации событий при начале движении, остановке или стабилизации объекта.
- Хуки для многопоточной обработки с опциональным внутренним планировщиком.
- Использование для координат типа double, позволяющего создавать огромные миры.
- Кроссплатформенный детерминизм, обеспечивающий получение идентичного результата на разных аппаратных платформах.
- Поддержка записи и воспроизведения симуляции.
- C API и Си-код соответствующий стандарту C17.
Из планов на будущее упоминается расширение возможностей, связанных с движениям персонажей, усовершенствование механизмов предотвращения "призрачных" столкновений (ghost collision), внесение оптимизаций и улучшение обработки соединений (joint solver). В репозитории намерены предоставить возможность отправки pull-запросов с изменениями от представителей сообщества после подписания соглашения о передаче имущественных прав на код (CLA).
|