Erin Catto, der Autor des Box2D-Projekts, hat die Schaffung eines neuen Simulations-Engines für physikalische Prozesse namens Box3D angekündigt. Dieses ist ein Fork von Box2D, der eine identische Architektur aufweist, jedoch überarbeitet und erweitert wurde, um in dreidimensionalen Spielen verwendet zu werden. Der Code des Projekts ist in C geschrieben und wird unter der MIT-Lizenz veröffentlicht. Es gibt Builds für Linux, Windows und macOS.
Die Engine Box3D wurde während der Entwicklung des neuen 3D-Shooters The Legend of California von dem Studio Kintsugiyama erstellt, an dem Erin beteiligt ist. In dem Spiel wird die Spiel-Engine Unreal Engine verwendet, doch die Entwickler waren mit der dort angebotenen Standardsimulation Chaos nicht zufrieden. Es traten Probleme auf, da gyroskopische Drehmomente nicht berücksichtigt wurden (dünne Objekte rotierten ungewöhnlich lange), es an durchgehender Kollisionsüberprüfung mangelte (unrealistisches Verhalten von fallenden Bäumen) und die Leistung bei der Verarbeitung von Hunderttausenden von Objekten niedrig war.
Zunächst planten die Entwickler, die Probleme durch die Erstellung eines Forks der Physik-Engine Jolt zu lösen, doch dann wurde auf den Rat des Schöpfers der Engine Rubikon, der an dem Spiel Half-Life beteiligt war, ein vereinfachter Hobby-Entwurf namens Rubikon-Lite als Grundlage genommen. Dieser wurde überarbeitet, indem Code und Optimierungen aus Box2D verwendet wurden, um die vorhandenen 3D-Funktionalitäten mit den bestehenden Funktionen der Box2D-Engine zu kombinieren. Letztendlich wurden fast alle APIs, Datenstrukturen und Algorithmen in Rubikon-Lite durch Code aus Box2D ersetzt, während nur die Algorithmen zur Berechnung konvexer Hüllen und zur Bearbeitung von 3D-Kollisionen von Rubikon-Lite übrig blieben. Der entstandene Motor wurde mit Wissen des Autors von Rubikon-Lite und der Firma Kintsugiyama als separates Open-Source-Projekt Box3D veröffentlicht.
Derzeit ist die erste Version von Box3D 0.1 veröffentlicht, die als alpha-qualitätsmäßig gekennzeichnet ist. Die Hauptfunktionalitäten sind umgesetzt, jedoch bedarf es noch einer Überarbeitung der Dokumentation und Tests. Neben dem Spiel The Legend of California wird die neue Engine bereits in der Spielplattform s&box, der Open-Source-Spiel-Engine Esoterica und dem Mehrspieler-Weltraumspiel Space Game verwendet, das für 1000 Spieler ausgelegt ist.
Für 3D-Spiele in der neuen Engine wurden Funktionen wie die Berechnung von Kollisionen mit polygonalen Netzen (Meshes) und Höhenkarten, die bei der Landschaftsgenerierung verwendet werden, hinzugefügt. Dies ermöglichte realistische Effekte beim Fallen von Bäumen auf voxelbasierte Flächen im Spiel The Legend of California. Unterstützung für vorab berechnete (baked) zusammengesetzte Kollisionen, die aus mehreren einfachen Formen bestehen, reduziert signifikant den Ressourcenverbrauch bei der Simulation von Kollisionen mit einer großen Anzahl typischer kleiner Objekte.
Zu den in Box3D übertragenen Funktionen, die zuvor in Box2D verfügbar waren, gehören:
- Kontinuierliche Kollisionserkennung (Behandlung der Bewegung eines Objekts als kontinuierliche Trajektorie), Kollisionsfilterung und Ereigniserzeugung beim Kontakt mit Objekten. Unterstützung für sphärische, kapselartige und schalenförmige Geometrien zur Bestimmung von Kollisionen. Optimierter Kollisionserkennungsprozess unter Verwendung von SIMD-Anweisungen.
- Sub-Stepping Solver zur Erhöhung der Simulationsgenauigkeit durch Aufteilung der Simulationsphasen in mehrere kleinere Schritte.
- Verwendung der Graphfärbungsmethode zur Verarbeitung großer Gruppen verbundener Objekte.
- Charaktercontroller, der für die Verarbeitung der Bewegung, Kollisionen und Interaktionen des Charakters mit der Umgebung verantwortlich ist.
- Unterstützung für Raytracing, Formverfolgung und Schnittprüfung beim Scannen der Umgebung. Sensorsystem zur Erkennung von Objekten im Raum.
- Soft Step Solver zur Berechnung der Physik fester Körper bei komplexen Wechselwirkungen.
- Unterstützung für das Einfrieren des Zustands von Gruppen inaktiver oder statischer Objekte zur Einsparung von Ressourcen.
- Unterstützung für unterschiedliche Verbindungen und Arten von Bindungen zwischen Objekten, einschließlich Gelenken, Federn, Motoren, Schweißen und Rädern, mit flexibler Anpassungsmöglichkeit für jede Verbindung. Berechnung der Druck- und Zugkräfte, mit denen Objekte einander beeinflussen.
- Möglichkeit zur Generierung von Ereignissen beim Starten, Stoppen oder Stabilisieren eines Objekts.
- Hooks für multithreaded Verarbeitung mit optionalem internem Scheduler.
- Verwendung von Koordinaten vom Typ double, die es ermöglichen, riesige Welten zu erstellen.
- Plattformübergreifender Determinismus, der die Erzielung identischer Ergebnisse auf verschiedenen Hardware-Plattformen gewährleistet.
- Unterstützung für die Aufzeichnung und Wiedergabe von Simulationen.
- C API und C-Code, die dem Standard C17 entsprechen.
In den Plänen für die Zukunft wird die Erweiterung der Funktionen im Zusammenhang mit den Bewegungen von Charakteren erwähnt, die Verbesserung der Mechanismen zur Vermeidung von "Geister"-Kollisionen (ghost collision), die Durchführung von Optimierungen und die Verbesserung der Verarbeitung von Gelenken (joint solver). Im Repository wird die Möglichkeit angeboten, Pull-Requests mit Änderungen von Vertretern der Community nach Unterzeichnung einer Vereinbarung über die Übertragung von Eigentumsrechten am Code (CLA) einzureichen.


Quelle: opennet.ru
