Erin Catto, auteur van het Box2D-project, heeft de creatie van een nieuwe simulatie-engine, Box3D, aangekondigd. Dit is een fork van Box2D, met een identieke architectuur, maar herschreven en uitgebreid voor gebruik in driedimensionale games. De code van het project is geschreven in C en wordt verspreid onder de MIT-licentie. Er is ondersteuning voor Linux, Windows en macOS.
De Box3D-engine is ontstaan tijdens de ontwikkeling door studio Kintsugiyama van de nieuwe 3D-shooter The Legend of California, waaraan Erin meewerkt. In het spel wordt de Unreal Engine gebruikt, maar de ontwikkelaars waren niet tevreden met de standaard fysieke engine Chaos die daarin werd aangeboden. Problemen ontstonden door het gebrek aan rekening houden met gyroscopische koppel (dunne objecten draaiden onnatuurlijk lang), continue botsingen (onrealistisch gedrag van vallende bomen) en slechte prestaties bij het verwerken van honderdduizenden objecten.
In het begin was het plan om de problemen op te lossen door een fork van de fysieke engine Jolt te maken, maar later, op advies van de maker van de Rubikon-engine, die betrokken was bij het spel Half-Life, werd gekozen voor een vereenvoudigde variant genaamd Rubikon-Lite, die als hobby was ontwikkeld. Deze werd herschreven met gebruik van de code en optimalisaties uit Box2D om de bestaande 3D-mogelijkheden te combineren met de technieken uit de Box2D-engine. Uiteindelijk werden bijna alle API's, gegevensstructuren en algoritmes in Rubikon-Lite vervangen door code uit Box2D, en van Rubikon-Lite bleven alleen de algoritmes voor het bouwen van de convex hull en de verwerking van 3D-botsingen over. Het resultaat werd, met goedkeuring van de auteur van Rubikon-Lite en de firma Kintsugiyama, gepubliceerd als een apart open project, Box3D.
Op dit moment is de eerste uitgave van Box3D 0.1 gepubliceerd, welke wordt gemarkeerd als zijnde in alfa-status. De belangrijkste geplande functionaliteit is gerealiseerd, maar er is nog werk aan de documentatie en testing. Naast het spel The Legend of California is de nieuwe engine al ingezet in het game-platform s&box, de open game-engine Esoterica en de multiplayer ruimtegame Space Game, die is ontworpen voor 1000 spelers.
Voor 3D-games zijn er in de nieuwe engine mogelijkheden toegevoegd zoals botsingsdetectie met polygonale netwerken (mesh) en hoogtekaarten die worden gebruikt bij het genereren van landschappen, wat het mogelijk maakte om in het spel The Legend of California realistische effecten van vallende bomen op voxel-oppervlakken te implementeren. Ondersteuning voor vooraf berekende (baked) samengestelde botsingen is toegevoegd, samengesteld uit meerdere eenvoudige vormen, wat het hulpbronnenverbruik tijdens de simulatie van een groot aantal typische kleine objecten aanzienlijk heeft verminderd.
Onder de functies die naar Box3D zijn overgebracht, die eerder beschikbaar waren in Box2D:
- continue botsingsdetectie (de beweging van het object behandelen als een continue traject), botsingsfiltering en het genereren van gebeurtenissen bij de aanraking van objecten. Ondersteuning voor sferische, capsule- en schilvormen voor botsingsdetectie. Een geoptimaliseerde wedstrijdverwerker voor botsingen van objecten met behulp van SIMD-instructies.
- Sub-stepping Solver voor het verhogen van de nauwkeurigheid van de simulatie door de fasen van de simulatie in meerdere kleinere stappen op te splitsen.
- Het gebruik van een grafkleuringsmethode voor het verwerken van grote groepen verbonden objecten.
- Een personagecontroller die verantwoordelijk is voor de verwerking van beweging, botsingen en de interactie van het personage met de omringende objecten.
- Ondersteuning voor ray tracing, vormtracering en intersectiecontrole bij het scannen van de omgeving. Een sensor systeem voor het detecteren van objecten in de ruimte.
- Soft Step Solver voor het berekenen van de fysica van vaste lichamen bij complexe interacties.
- Ondersteuning voor het bevriezen van de status van groepen inactieve of statische objecten om hulpbronnen te besparen.
- Ondersteuning voor verschillende verbindingen en typen relaties tussen objecten, inclusief scharnieren, veren, motoren, lassen en wielen, met de mogelijkheid voor flexibele configuratie van elke verbinding. De berekening van de kracht van compressie en strekkingen waarmee objecten op elkaar inwerken.
- De mogelijkheid om gebeurtenissen te genereren bij het starten van beweging, het stoppen of het stabiliseren van een object.
- Haken voor multi-threaded verwerking met een optionele interne planner.
- Gebruik van coƶrdinaten van het type double, waardoor enorme werelden kunnen worden gecreƫerd.
- Cross-platform determinisme dat identieke resultaten oplevert op verschillende hardwareplatformen.
- Ondersteuning voor het opnemen en afspelen van simulaties.
- C API en C-code die voldoet aan de C17-standaard.
Toekomstplannen omvatten het uitbreiden van mogelijkheden met betrekking tot de beweging van personages, het verbeteren van de mechanismen ter voorkoming van 'spook'-botsingen (ghost collision), het aanbrengen van optimalisaties en het verbeteren van de verwerking van verbindingen (joint solver). In de repository is het de bedoeling om de mogelijkheid te bieden om pull-verzoeken met wijzigingen van leden van de gemeenschap in te dienen, na ondertekening van een overeenkomst over de overdracht van eigendomsrechten op de code (CLA).


Bron: opennet.ru
