Box3D: Эрин Катто превращает Box2D в открытый 3D-движок
Эрин Катто, чей Box2D отвечает за физику в Angry Birds и множестве инди-игр, выпустил Box3D — движок твёрдых тел для 3D, начавшийся как форк внутреннего движка Valve по имени Rubikon.
Box3D сохраняет почти ту же архитектуру, что и Box2D: код на C17, C-API, солвер с суб-шагами и непрерывное определение столкновений, а затем добавляет столкновения с треугольными сетками, картами высот и запечёнными составными телами для 3D-миров.
Необычное происхождение: он начался как форк Rubikon-Lite Дирка Грегориуса, любительского родственника движка, который Valve сделала для Half-Life: Alyx, и до сих пор несёт этот код в генерации выпуклых оболочек.
Весь отзыв ветерана сетевого гейм-кода уместился в «Используйте!!!», а другой разработчик спросил, где же гарантии детерминизма.
3D-движок на костях Box2D
Box3D — это открытый движок физики твёрдых тел для 3D, и его автор прямо говорит о родословной: базовая архитектура почти совпадает с Box2D. Общие у них кодовая база на C17, C-API, солвер с суб-шагами, непрерывное определение столкновений и многопоточность, а сверху добавлено то, что нужно 3D-играм: столкновения с треугольными сетками, с картами высот и с запечёнными составными телами.
Под капотом — раскраска графов для крупных островов, контактный солвер с широким SIMD, поддержка больших миров с координатами в double, а также запись и воспроизведение.
История появления необычна. Box3D начался как форк Rubikon-Lite Дирка Грегориуса, любительского родственника Rubikon — движка физики, который Valve сделала для Half-Life: Alyx; в выпущенном коде Rubikon-Lite до сих пор живёт в генерации выпуклых оболочек и части алгоритмов столкновений. Сам Грегориус тем временем встраивает похожие оптимизации в новый движок Valve под названием Ragnarok. Box3D сейчас бесплатен в использовании, приём пул-реквестов планируется позже (вероятно, под CLA), а разработка финансируется через GitHub Sponsors и Patreon.
Как он смотрится на фоне Jolt?
В треде первым делом сравнивают: открытая 3D-физика вдруг стала тесной от Jolt, Rapier, PhysX и вот теперь этого. Создатель языка программирования Nim сейчас в разгаре своего проекта и осторожничает:
«Забавно видеть это спустя всего пару дней после того, как я начал делать браузерную 3D-игру в духе Tron на Jolt… Обязательно присмотрюсь к этому.»
Одобрение от основателя Network Next уместилось в три слова:
«Да, эта библиотека отличная. Используйте!!!»
Для веб-игр выделяется размер. Гейм-разработчик, чей движок компилируется в WASM измерил:
«Релизная сборка библиотеки весит 916 КБ (по крайней мере на macOS).»
Один пробел бросился в глаза создателю jank, диалекта Clojure на LLVM, который борется с недетерминизмом в сетевых играх:
«В анонсе не было ничего про детерминизм, но мне очень хотелось бы увидеть об этом побольше.»
Для сетевого бильярда, где каждый клиент должен согласиться с каждым столкновением, этот оставшийся без ответа вопрос и есть вся суть.
Получайте такие разборы каждый день
Главные истории Hacker News — на email, в Telegram или RSS.
Программа для графического программиста: сначала трассировка пути, потом PBR, минимум математики
Алан Вулф, ведущий блог как demofox, уверяет: чтобы стать графическим программистом, хватит линейной алгебры, базовой тригонометрии и немного матана, а быстрее всего войти в тему, написав трассировщик пути ещё до знакомства с любым real-time API.