Box3D : SIMD pour la détection de collision 3D
Original : SIMD for Collision
Pourquoi c'est important
Une optimisation SIMD clé pour la simulation physique temps réel en 3D avec coques complexes.
Erin Catto, créateur de Box2D, explique dans un article du 18 juillet 2026 comment l'utilisation du SIMD « wide » dans Box3D réduit drastiquement le coût de la détection de collision entre coques convexes à 89 arêtes, en testant 4 arêtes simultanément.
Box3D, le successeur 3D du moteur physique Box2D, utilise le Separating Axis Test (SAT) pour la détection de collision entre coques convexes. En 3D, la complexité du SAT est quadratique : pour deux coques de 89 arêtes chacune (appelées « boulder »), le nombre de combinaisons arête-arête atteint 7 921, contre seulement 144 pour deux boîtes. Face à ce goulot d'étranglement, l'auteur applique une approche « wide SIMD » : plutôt que de tester une paire d'arêtes à la fois, le code traite une arête de la coque A contre quatre arêtes de la coque B simultanément, en structurant les données au format Structure of Arrays (SoA). Cette technique, déjà utilisée dans le solveur de contacts de Box2D via le graph coloring, s'avère particulièrement adaptée à la 3D où le nombre d'arêtes est bien plus élevé qu'en 2D. L'auteur justifie également le choix du SAT face à l'alternative GJK/EPA, plus commune mais sujette à des instabilités numériques et à des artefacts visuels (gaps entre les objets). Le benchmark « convex pile », porté depuis PEEL, simule 5 120 coques convexes de 32 points chacune pour mesurer l'impact réel de cette optimisation.