Erin Catto apporte la physique légendaire de Box2D en 3D
Si vous vous êtes déjà intéressé au développement de jeux 2D, vous avez probablement rencontré Box2D. Angry Birds, Limbo, et des centaines d'autres projets ont été construits sur ce moteur. Récemment, son créateur, Erin Catto, a dévoiler son nouveau projet — Box3D. C'est une bibliothèque de physique 3D à corps rigides écrite à partir de zéro en C.
Ce qu'est Box3D
La bibliothèque est écrite en C17 portable et n'a aucune dépendance externe au-delà de la bibliothèque C standard. Les exemples inclus avec le projet sont écrits en C++20 avec le backend graphique sokol et l'interface Dear ImGui. L'application de démonstration se construit sans problème sur Windows, macOS et Linux, et vous permet d'exécuter la physique directement dans le navigateur via WebAssembly.

Contrairement aux alternatives commerciales surchargées, Box3D se concentre sur la performance pure, une approche orientée données et la prévisibilité.
Fonctionnalités principales de la bibliothèque
Calcul vectoriel et performance
Le cœur du moteur de physique utilise activement les instructions vectorielles SSE2 pour les processeurs x86 et Neon pour ARM. Si vous compilez le projet pour une plateforme exotique ou un microcontrôleur sans support SIMD, les calculs vectoriels peuvent être désactivés via la définition de macro BOX3D_DISABLE_SIMD.
Soft Step Solver et types de liaisons
L'algorithme Soft Step gère le comportement des corps rigides. Le moteur prend en charge les enveloppes convexes, les capsules, les sphères, les maillages polygonaux et les champs de hauteur. Plusieurs formes peuvent être attachées à un seul corps.
Les articulations disponibles incluent :
- Charnières et glissières
- Contraintes de distance et moteurs
- Soudures et articulations de roue
- Limites, ressorts et frottement configurables
Pour économiser les ressources, un système d'îlots de sommeil est utilisé : si un groupe d'objets s'est arrêté, le moteur l'exclut temporairement des calculs.
Déterminisme et enregistrement de simulation
Le résultat des calculs du monde physique reste identique sur différentes plateformes. C'est critique pour les jeux multijoueurs en réseau. L'enregistrement et la relecture des simulations sont disponibles out of the box, simplifiant le débogage des bugs de physique.
Détection continue des collisions
Les objets en mouvement rapide ne traversent pas les murs grâce à un système complet de Détection Continue des Collisions (CCD). Les algorithmes gèrent à la fois les mouvements linéaires rapides et les rotations.
Comment intégrer à un projet
Intégrer Box3D dans un projet CMake prend littéralement quelques minutes via 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)
Si vous préférez garder le code tiers en local, le add_subdirectory standard fonctionnera également :
add_subdirectory(extern/box3d)
target_link_libraries(my_app PRIVATE box3d::box3d)
Une conversation honnête sur l'IA dans le développement
Un détail intéressant dans le README — l'auteur décrit honnêtement le rôle des réseaux de neurones dans la création de la bibliothèque. Erin Catto indique explicitement qu'il utilise les LLM pour générer des tests unitaires, configurer CMake, migrer le code de Box2D, écrire des benchmarks et faire des revues de code. Cependant, il écrit lui-même toute la logique du moteur de physique et assume la responsabilité personnelle de chaque ligne de code.
À qui ce projet est destiné
Si vous écrivez votre propre moteur 3D en C ou C++ et cherchiez une bibliothèque de physique compacte sans la surcharge massive d'un moteur graphique ou de jeu, Box3D mérite un examen détaillé. Le projet est au stade de version 0.1.0, les pull requests sont actuellement fermées et seuls les issues sont acceptées, mais le code source est ouvert sous licence MIT et très facile à lire.
Projets similaires