Erin Catto porta la leggendaria fisica Box2D in 3D
Se ti sei mai interessato allo sviluppo di giochi 2D, probabilmente ti sei imbattuto in Box2D. Angry Birds, Limbo e centinaia di altri progetti sono stati costruiti su questo motore. Recentemente, il suo creatore, Erin Catto, ha svelato il suo nuovo progetto — Box3D. È una libreria di fisica 3D a corpi rigidi scritta da zero in C.
Cos'è Box3D
La libreria è scritta in C17 portabile e non ha dipendenze esterne oltre alla libreria standard C. Gli esempi inclusi nel progetto sono scritti in C++20 con il backend grafico sokol e l'interfaccia Dear ImGui. L'applicazione demo viene compilata senza problemi su Windows, macOS e Linux e permette di eseguire la fisica direttamente nel browser tramite WebAssembly.

A differenza delle alternative commerciali gonfiate, Box3D si concentra sulle pure prestazioni, un approccio orientato ai dati e sulla prevedibilità.
Funzionalità Principali della Libreria
Calcolo Vettoriale e Prestazioni
Il core del motore di fisica utilizza attivamente le istruzioni vettoriali SSE2 per processori x86 e Neon per ARM. Se stai compilando il progetto per una piattaforma esotica o un microcontrollore senza supporto SIMD, la matematica vettoriale può essere disabilitata tramite la definizione della macro BOX3D_DISABLE_SIMD.
Soft Step Solver e Tipi di Giunti
L'algoritmo Soft Step gestisce il comportamento dei corpi rigidi. Il motore supporta hull convessi, capsule, sfere, mesh poligonali e height field. È possibile allegare più forme a un singolo corpo.
I giunti disponibili includono:
- Cerniere e slider
- Vincoli di distanza e motori
- Saldate e giunti ruota
- Limiti configurabili, molle e attrito
Per risparmiare risorse, viene utilizzato un sistema di sleep a isole: se un gruppo di oggetti si è fermato, il motore lo esclude temporaneamente dai calcoli.
Determinismo e Registrazione della Simulazione
Il risultato dei calcoli del mondo fisico rimane identico su piattaforme diverse. Questo è fondamentale per i giochi multiplayer online. La registrazione e la riproduzione delle simulazioni è disponibile out of the box, semplificando il debugging dei bug della fisica.
Rilevamento Continuo delle Collisioni
Gli oggetti in rapido movimento non attraversano le pareti grazie a un sistema completo di rilevamento continuo delle collisioni (CCD). Gli algoritmi gestiscono sia i movimenti lineari veloci che le rotazioni.
Come Integrare in un Progetto
Integrare Box3D in un progetto CMake richiede letteralmente un paio di minuti tramite 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)
Se preferisci mantenere il codice di terze parti locale, funzionerà anche il classico add_subdirectory:
add_subdirectory(extern/box3d)
target_link_libraries(my_app PRIVATE box3d::box3d)
Una Conversazione Onesta sull'IA nello Sviluppo
Un dettaglio interessante nel README — l'autore ha descritto onestamente i ruoli delle reti neurali nella creazione della libreria. Erin Catto dichiara esplicitamente che utilizza LLM per generare unit test, configurare CMake, migrare codice da Box2D, scrivere benchmark e revisionare il codice. Tuttavia, scrive personalmente tutta la logica del motore di fisica e si assume la responsabilità personale per ogni riga di codice.
A Chi È Destinato Questo Progetto
Se stai scrivendo il tuo motore 3D in C o C++ e cercavi una libreria di fisica compatta senza un enorme overhead grafico o di motore, Box3D merita un esame dettagliato. Il progetto è nella fase 0.1.0, le pull request sono attualmente chiuse e vengono accettate solo le issue, ma il codice sorgente è aperto sotto licenza MIT ed è molto facile da leggere.
Progetti correlati