Erin Catto, autorul proiectului Box2D, a anunțat crearea unui nou motor de simulare a proceselor fizice, Box3D, care reprezintă un fork al Box2D, având o arhitectură identică, dar regândită și extinsă pentru utilizarea în jocuri 3D. Codul proiectului este scris în C și este distribuit sub licența MIT. Se suportă compilarea pentru Linux, Windows și macOS.
Motorul Box3D a fost creat în procesul de dezvoltare a studioului Kintsugiyama pentru noul shooter 3D The Legend of California, la care participă Erin. În joc se folosește motorul de joc Unreal Engine, dar dezvoltatorii nu au fost mulțumiți de motorul fizic Chaos oferit. Problemele au apărut din lipsa contabilizării momentelor de torsiune giroscopică (obiectele subțiri se rotunjau nerealist de mult timp), detectarea continuă a coliziunilor (comportament nerealist al copacilor care cad) și performanța scăzută la procesarea a sute de mii de obiecte.
La început, se planificase rezolvarea problemelor prin crearea unui fork al motorului fizic Jolt, dar apoi, la sugestia creatorului motorului Rubikon, implicat în jocul Half-Life, s-a decis ca baza să fie un model simplificat al Rubikon-Lite, dezvoltat ca hobby, care a fost regândit, folosind cod și optimizări din Box2D pentru a combina capacitățile 3D existente cu rezultatele din motorul Box2D. În rezultat, aproape toate API-urile, structurile de date și algoritmii din Rubikon-Lite au fost înlocuite cu cod din Box2D, rămânând doar algoritmii pentru construirea învelișului convex și procesarea coliziunilor 3D. Motorul rezultat, cu acordul autorului Rubikon-Lite și al companiei Kintsugiyama, a fost decis să fie publicat ca un proiect deschis separat, Box3D.
În prezent, a fost publicat primul release Box3D 0.1, marcat ca având calitate de versiune alpha. Funcționalitatea principală planificată este implementată, dar este necesară completarea documentației și testarea. Pe lângă jocul The Legend of California, noul motor este deja folosit în platforma de jocuri s&box, în motorul de joc deschis Esoterica și în jocul multiplayer Spațial Space Game, destinat pentru 1000 de jucători.
Pentru jocurile 3D în noul motor au fost adăugate funcționalități precum calculul coliziunilor cu rețeaua poligonală (mesh) și hărțile de înălțime utilizate în generarea peisajului, ceea ce a permis realizarea unui efect realist al căderii copacilor pe suprafețele voxel. A fost adăugat suport pentru coliziunile compuse precalculate (baked), compuse din mai multe forme simple, reducând semnificativ consumul de resurse în simularea coliziunilor unui număr uriaș de obiecte mici tipice.
Printre funcționalitățile transferate în Box3D, care au fost anterior disponibile în Box2D:
- Determinarea continuă a coliziunilor (prelucrarea mișcării unui obiect ca o traiectorie continuă), filtrarea coliziunilor și generarea de evenimente la contactul între obiecte. Suport pentru forme sferice, capsule și shell pentru definirea coliziunilor. Procesor de contact al obiectelor optimizat folosind instrucțiuni SIMD.
- Sub-stepping Solver pentru creșterea preciziei simulării prin împărțirea etapelor de simulare în mai multe pași mai mici.
- Utilizarea metodei de colorare a grafurilor pentru gestionarea grupurilor mari de obiecte legate.
- Controller de personaj, responsabil pentru gestionarea mișcării, coliziunilor și interacțiunii personajului cu obiectele din jur.
- Suport pentru trasarea razelor, trasarea formelor și verificarea intersecțiilor în timpul scanării mediului înconjurător. Sistem de senzori pentru detectarea obiectelor în spațiu.
- Soft Step Solver pentru calcularea fizicii corpurilor rigide în timpul interacțiunilor complexe.
- Suport pentru înghețarea stării grupurilor de obiecte inactive sau statice pentru economisirea resurselor.
- Suport pentru diverse conexiuni și tipuri de legături între obiecte, inclusiv balamale, arcuri, motoare, sudură și roți, cu posibilitatea de a ajusta flexibil fiecare conexiune. Calculul forțelor de comprimare și întindere cu care obiectele interacționează între ele.
- Posibilitatea de a genera evenimente la începutul mișcării, oprirea sau stabilizarea unui obiect.
- Hooks pentru procesarea multithreading cu un planificator intern opțional.
- Utilizarea tipurilor de coordonate double, permițând crearea unor lumi enorme.
- Determinism multiplatform, asigurând obținerea unui rezultat identic pe diferite platforme hardware.
- Suport pentru înregistrarea și redarea simulărilor.
- API C și cod C conform standardului C17.
Din planurile de viitor se menționează extinderea capacităților legate de mișcările personajelor, îmbunătățirea mecanismelor de prevenire a coliziunilor „fantomă” (ghost collision), implementarea optimizărilor și îmbunătățirea procesării conexiunilor (joint solver). În repository se intenționează să se ofere posibilitatea de a trimite pull request-uri cu modificări din partea reprezentanților comunității, după semnarea unui acord de transfer al drepturilor de proprietate asupra codului (CLA).


Sursa: opennet.ro
