>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
C

Erin Catto Przenosi Legendarne Fizyki Box2D do 3D

Jeśli kiedykolwiek interesowałeś się tworzeniem gier 2D, prawdopodobnie natknąłeś się na Box2D. Angry Birds, Limbo i setki innych projektów zostały zbudowane na tym silniku. Ostatnio jego twórca, Erin Catto, zaprezentował swój nowy projekt — Box3D. To biblioteka fizyki ciał sztywnych 3D napisana od zera w C.

Logo Box3D

Czym jest Box3D

Biblioteka jest napisana w przenośnym C17 i nie ma zewnętrznych zależności poza standardową biblioteką C. Przykłady dołączone do projektu są napisane w C++20 z backendem graficznym sokol i interfejsem Dear ImGui. Aplikacja demo buduje się bez problemów na Windows, macOS i Linux, a pozwala uruchamiać fizykę bezpośrednio w przeglądarce przez WebAssembly.

Wideo Box3D

W przeciwieństwie do rozbudowanych komercyjnych alternatyw, Box3D koncentruje się na czystej wydajności, podejściu zorientowanym na dane i przewidywalności.

Kluczowe funkcje biblioteki

Obliczenia wektorowe i wydajność

Rdzeń silnika fizyki aktywnie wykorzystuje instrukcje wektorowe SSE2 dla procesorów x86 oraz Neon dla ARM. Jeśli budujesz projekt dla egzotycznej platformy lub mikrokontrolera bez obsługi SIMD, matematykę wektorową można wyłączyć za pomocą definicji makra BOX3D_DISABLE_SIMD.

Solver Soft Step i typy połączeń

Algorytm Soft Step obsługuje zachowanie ciał sztywnych. Silnik obsługuje wypukłe powłoki (convex hulls), kapsuły, sfery, siatki wielokątów i pola wysokości. Wiele kształtów można przypisać do jednego ciała.

Dostępne połączenia obejmują:

  • Zawiasy i suwaki
  • Ograniczenia odległości i silniki
  • Spawy i połączenia kołowe
  • Konfigurowalne limity, sprężyny i tarcie

Aby oszczędzać zasoby, używany jest system uśpienia wysp: jeśli grupa obiektów się zatrzymała, silnik tymczasowo wyklucza ją z obliczeń.

Determinizm i nagrywanie symulacji

Wynik obliczeń świata fizyki pozostaje identyczny na różnych platformach. Jest to krytyczne dla sieciowych gier wieloosobowych. Nagrywanie i odtwarzanie symulacji jest dostępne out of the box, co upraszcza debugowanie błędów fizyki.

Ciągłe wykrywanie kolizji

Szybko poruszające się obiekty nie przechodzą przez ściany dzięki pełnemu systemowi Ciągłego Wykrywania Kolizji (CCD). Algorytmy obsługują zarówno szybkie ruchy liniowe, jak i obrotowe.

Jak zintegrować z projektem

Integracja Box3D z projektem CMake zajmuje dosłownie kilka minut przez 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)

Jeśli wolisz zachować kod zewnętrzny lokalnie, standardowe add_subdirectory również zadziała:

add_subdirectory(extern/box3d)

target_link_libraries(my_app PRIVATE box3d::box3d)

Szczera rozmowa o AI w tworzeniu oprogramowania

Interesujący szczegół w README — autor szczerze opisał role sieci neuronowych w tworzeniu biblioteki. Erin Catto wyraźnie stwierdza, że używa LLM do generowania testów jednostkowych, konfigurowania CMake, migracji kodu z Box2D, pisania benchmarków i przeglądu kodu. Jednak całą logikę silnika fizyki pisze sam i osobiście odpowiada za każdą linię kodu.

Dla kogo jest ten projekt

Jeśli piszesz własny silnik 3D w C lub C++ i szukałeś kompaktowej biblioteki fizyki bez ogromnego narzutu graficznego lub silnika, Box3D zasługuje na szczegółowe zainteresowanie. Projekt jest na etapie wydania 0.1.0, obecnie pull requesty są zamknięte i przyjmowane są tylko issues, ale kod źródłowy jest otwarty na licencji MIT i bardzo łatwy do czytania.

Powiązane projekty