Został zaprezentowany nowy silnik symulacji procesów fizycznych Box3D

Erin Catto, autor projektu Box2D, ogłosił stworzenie nowego silnika symulacji procesów fizycznych Box3D, który jest forkiem Box2D, mającym identyczną architekturę, ale przystosowanym i rozszerzonym do zastosowania w grach trójwymiarowych. Kod projektu napisany jest w języku C i rozprowadzany na licencji MIT. Wspierane są kompilacje dla Linuxa, Windowsa i macOS.

Silnik Box3D został stworzony w ramach rozwoju nowej gry 3D, The Legend of California, w której udział bierze Erin. W grze wykorzystano silnik Unreal Engine, ale deweloperzy byli niezadowoleni z oferowanego przez niego fizycznego silnika Chaos. Problemy wystąpiły z brakiem uwzględnienia momentów obrotowych (cieńkie obiekty obracały się nienaturalnie długo), ciągłym wykrywaniem kolizji (nierealistyczne zachowanie spadających drzew) oraz niską wydajnością przy przetwarzaniu setek tysięcy obiektów.

Początkowo planowano rozwiązać problemy, tworząc forka fizycznego silnika Jolt, ale później, na sugestię twórcy silnika Rubikon, zaangażowanego w grę Half-Life, zdecydowano się na uproszczoną wersję Rubikon-Lite, która była rozwijana jako hobby, a która została przystosowana, wykorzystując kod i optymalizacje z Box2D, aby połączyć istniejące możliwości 3D z osiągnięciami z silnika Box2D. Ostatecznie niemal wszystkie interfejsy API, struktury danych i algorytmy w Rubikon-Lite zostały zastąpione kodem z Box2D, a z Rubikon-Lite pozostały jedynie algorytmy budowy wypukłych powłok i przetwarzania kolizji 3D. Ostatecznie zdecydowano się opublikować powstały silnik jako osobny otwarty projekt Box3D, z wiedzą autora Rubikon-Lite i firmy Kintsugiyama.

Obecnie opublikowano pierwszą wersję Box3D 0.1, która jest oznaczona jako alfa. Podstawowa zaplanowana funkcjonalność została zrealizowana, ale wymaga dopracowania dokumentacji i testowania. Oprócz gry The Legend of California, nowy silnik jest już wykorzystywany w platformie gier s&box, otwartym silniku gier Esoterica oraz w wieloosobowej grze kosmicznej Space Game, przeznaczonej dla 1000 graczy.

Dla gier 3D w nowym silniku dodano takie możliwości, jak obliczanie kolizji z siatką poligonową (meshem) i mapami wysokościowymi używanymi do generowania krajobrazu, co pozwoliło na wdrożenie w grze The Legend of California realistycznych efektów upadku drzew na powierzchnie wokselowe. Dodano wsparcie dla wstępnie obliczonych (baked) złożonych kolizji, skomponowanych z kilku prostych form, co znacznie zmniejszyło zużycie zasobów podczas symulacji kolizji ogromnej liczby typowych małych obiektów.

Wśród przeniesionych do Box3D możliwości, które wcześniej istniały w Box2D:

  • Ciągłe określanie kolizji (przetwarzanie ruchu obiektu jako ciągłej trajektorii), filtrowanie kolizji i generowanie zdarzeń przy styku obiektów. Wsparcie dla sferycznych, kapsułkowatych i form powłokowych do określania kolizji. Zoptymalizowany przy pomocy instrukcji SIMD procesor kolizji obiektów.
  • Solver sub-stepping dla zwiększenia dokładności symulacji poprzez podzielenie etapów symulacji na kilka mniejszych kroków.
  • Wykorzystanie metody kolorowania grafów do przetwarzania dużych grup powiązanych obiektów.
  • Kontroler postaci odpowiedzialny za przetwarzanie ruchu, kolizji i interakcji postaci z otaczającymi obiektami.
  • Wsparcie dla śledzenia promieni, śledzenia form i sprawdzania przecięć podczas skanowania otaczającej przestrzeni. System czujników do wykrywania obiektów w przestrzeni.
  • Solver Soft Step do obliczania fizyki ciał stałych przy skomplikowanych interakcjach.
  • Wsparcie dla zamrażania stanu grup nieaktywnych lub statycznych obiektów w celu oszczędzania zasobów.
  • Wsparcie dla różnorodnych połączeń i typów więzów między obiektami, w tym przegubów, sprężyn, silników, spawania i kół, z możliwością elastycznego dostosowania każdego połączenia. Obliczenia sił ściskania i rozciągania, z którymi obiekty działają na siebie nawzajem.
  • Możliwość generowania zdarzeń przy rozpoczęciu ruchu, zatrzymaniu lub stabilizacji obiektu.
  • Hooki dla wielowątkowego przetwarzania z opcjonalnym wewnętrznym harmonogramem.
  • Użycie typu double dla współrzędnych, umożliwiającego tworzenie ogromnych światów.
  • Krzyżowa determinacja, zapewniająca uzyskanie identycznego wyniku na różnych platformach sprzętowych.
  • Wsparcie dla nagrywania i odtwarzania symulacji.
  • API C i kod w C zgodny ze standardem C17.

W planach na przyszłość przewiduje się rozszerzenie możliwości związanych z ruchami postaci, ulepszenia mechanizmów zapobiegających 'przezroczystym' kolizjom (ghost collision), wprowadzenie optymalizacji oraz poprawę przetwarzania połączeń (joint solver). W repozytorium planują udostępnienie możliwości przesyłania pull requestów ze zmianami od przedstawicieli społeczności po podpisaniu umowy o przeniesienie praw majątkowych do kodu (CLA).

Odtwarzaj wideo


Źródło: opennet.ru
Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster