1 Punkte von GN⁺ 4 시간 전 | 1 Kommentare | Auf WhatsApp teilen
  • Da der Bedarf wächst, groß angelegte 3D-Physiksimulationen auf Gameservern direkt zu steuern, wurde Box3D als Open-Source-3D-Physik-Engine aus der Box2D-Familie veröffentlicht
  • Die Struktur ist Box2D ähnlich und umfasst eine C API, C17-Quellcode, einen Substepping-Solver, kontinuierliche Kollisionserkennung, Graph Coloring, einen wide-SIMD-Kontakt-Solver und Multithreading-Hooks
  • Direkter Hintergrund der Entwicklung waren Erfahrungen mit Chaos in Unreal Engine, wo sich gyroskopisches Drehmoment, fallende Bäume und Anforderungen an eine groß angelegte Broad Phase nur schwer erfüllen ließen
  • Dreiecks-Meshes, Heightfields, baked compound collision, große Welten auf Double-Basis, plattformübergreifender Determinismus sowie Aufzeichnung/Wiedergabe sind als Funktionen für 3D-Spiele enthalten
  • Box3D wird bereits in mehreren Spielen und Engines eingesetzt, ist aber noch Alpha-Software; nach dem v0.1-Tag sind bis v1.0 weitere Tests und bessere Dokumentation nötig

Charakter und Kernfunktionen von Box3D

  • Box3D ist eine auf GitHub veröffentlichte Open-Source-3D-Physik-Engine und ähnelt einem Projekt, das das Design von Box2D für die Anforderungen von 3D-Spielen erweitert
  • Die Kernarchitektur ist nahezu identisch mit Box2D, und der gesamte Quellcode der Bibliothek ist in C17 geschrieben
  • Die wichtigsten Engine-Funktionen sind:
    • C API

      • Substepping-Solver
      • Kontinuierliche Kollisionserkennung
      • Graph Coloring für große Inseln
      • wide-SIMD-Kontakt-Solver
      • Multithreading-Hooks
      • Optionaler interner Scheduler
      • Unterstützung großer Welten mit double für Positionen
      • Plattformübergreifender Determinismus
      • Aufzeichnung und Wiedergabe
      • Enthalten sind auch zusätzliche Kollisionsfunktionen für 3D-Spiele
      • Dreiecks-Mesh-Kollision
      • Heightfield-Kollision
      • baked compound collision

Der Bedarf aus The Legend of California

  • Der erste Entwicklungsanstoß für Box3D war The Legend of California, das bei Kintsugiyama entwickelt wird
  • Das Spiel wird mit Unreal Engine gebaut; das Projekt begann mit Unreal 5.0
  • In Experimenten mit Chaos, der Standard-Physik-Engine von Unreal, zeigten sich mehrere Grenzen
    • Sie unterstützte keine Simulation gyroskopischen Drehmoments, weshalb es schwierig war, das Verhalten dünner Objekte zu behandeln, die ihre Winkelgeschwindigkeit beibehalten und lange rotieren
    • Der Entwickler hatte 2015 auf der GDC einen etwa zehn Zeilen langen Drop-in-Algorithmus vorgestellt, der einer Physik-Engine gyroskopisches Drehmoment hinzufügt
    • Epic fügte diese Funktion Ende 2024 zu Unreal Engine hinzu
  • Ein größeres Problem trat beim Baumfällen auf, einer Kernfunktion des Survival-Spiels
    • Fallende Bäume bewegten sich unregelmäßig und teleportierten über den Bildschirm
    • Die Situation war eine Simulation, bei der eine große Kapsel auf ein glattes Dreiecks-Mesh fällt, also ein Fall, der leicht zu handhaben sein sollte
  • Da auf dem Server Hunderttausende Entitäten existieren, war auch eine schnelle Broad Phase nötig
    • Weil dieses Element im Zentrum des Spiels steht, erschien es riskant, es Middleware zu überlassen
    • Der Entwickler hat viel Erfahrung mit Broad-Phase-Datenstrukturen und hat dazu auch GDC-Vorträge gehalten

Von Rubikon-Lite zu Box3D

  • Auch die Nutzung von Jolt, einer bestehenden Open-Source-Physik-Engine, wurde geprüft; Dirk Gregorius schlug jedoch vor, Rubikon-Lite zu forken und an die Anforderungen anzupassen
  • Dirk Gregorius ist der Physikprogrammierer hinter Rubikon, der Custom-Physik-Engine in Half-Life: Alyx, und pflegt eine Hobby-/Home-Version von Rubikon
  • Als Rubikon-Lite direkt an Unreal angebunden wurde, funktionierte das gyroskopische Drehmoment, und auch die Bäume fielen korrekt
  • Beim Austausch der Physik-Engine von Unreal ließen sich einige Abkürzungen nutzen
    • Es wird ein eigenes Scripting-System statt Blueprint verwendet
    • Das Esoterica animation system wurde nach Unreal portiert und eingesetzt
    • Verwendet wird ein Custom-ECS, das direkt an Box3D angebunden ist
  • Beim Versuch, Optimierungen aus Box2D v3.0 in den Rubikon-Lite-Fork zu übernehmen, entstand die Notwendigkeit, die 2D- und 3D-Arbeit möglichst ähnlich zu halten
    • Fast alle APIs, Datenstrukturen und Algorithmen von Rubikon-Lite wurden durch Box2D-Code ersetzt
    • Die Datenstrukturen für 2D und 3D waren zu großen Teilen unabhängig von der räumlichen Dimension
  • Mit der Zeit wurde aus dem Rubikon-Lite-Fork Box3D
    • Heute enthält Box3D noch Rubikon-Lite-Code für die Erzeugung von Convex Hulls und einige Kollisionsalgorithmen
    • Der Rest besteht aus Box2D-Code und neuem Code für Box3D
  • Aufseiten von Valve wird Rubikon weiterentwickelt, und Dirk entwickelte für die neue Engine Ragnarok ähnliche Optimierungen wie in Box3D

Spielanforderungen, erfüllt mit einer Custom-Physik-Engine

  • The Legend of California ist ein Projekt mit großer Open World und serverautoritärer Architektur
  • Fallende Bäume, Ragdolls, Voxel, Saloon-Türen und Tumbleweeds werden alle auf dem Server simuliert
  • Mit einer Custom-Physik-Engine lassen sich Funktionen und Performance direkt an die Anforderungen des Spiels anpassen
  • Besonders viel Performance-Arbeit floss in fallende Bäume
    • Riesige Redwood-Bäume fallen schnell auf Voxel-Terrain
    • Viel Arbeit entfällt darauf, Mesh-Kollision und CCD stabil zum Laufen zu bringen
  • Auch Kollisions-Meshes für das Voxel-System müssen zur Laufzeit schnell erzeugt werden
    • Voxel sind gitterförmig und lassen sich daher gut per Median Split strukturieren
  • Streaming war ebenfalls eine wichtige Anforderung
    • Strongholds werden per Kitbashing zusammengesetzt
    • Eine große Stronghold kann rund 50.000 separate Kollisions-Meshes enthalten
    • Diese einzeln in die Physik-Engine zu laden, wäre ineffizient und speicherintensiv
    • Dafür wurde ein Compound-Collision-System entwickelt, das separate Kollisionsformen in eine optimierte Datenstruktur verarbeitet und als einzelne uber shape lädt
    • Dieser Ansatz beseitigt den Overhead durch das Erzeugen Tausender Bodys und Shapes

Warum Open Source und für wen

  • Der Entwickler baut seit 2004 Physik-Engines für Spiele und musste diese Arbeit bei jedem Jobwechsel zurücklassen
  • Box2D entstand unter anderem, um Wissen und Aufwand in einem Open-Source-Projekt zu bündeln und als Grundlage für spätere Arbeiten zu nutzen
  • Im 3D-Bereich gab es die Belastung, ähnliche Arbeit immer wieder neu zu erstellen
  • Kintsugiyama erlaubte, Box3D als Open Source zu veröffentlichen und als Teil der Arbeit daran zu arbeiten
  • Box3D ist kein Projekt, das mit anderen Physik-Engines konkurrieren will; wer das Design von Box2D mag, dem dürfte auch Box3D gut passen

Einstieg und Dokumentation

  • Um mit Box3D zu starten, installiert man grundlegendes git und CMake und klont anschließend das Box3D repository
  • Die Build-Anleitung steht im README
  • Nach dem Build kann man die Samples ausführen, um die Funktionen zu prüfen, und mit dem Beispielcode mit dem Programmieren beginnen
  • Die Engine-Header enthalten vollständige Doxygen-Kommentare; ein geschriebenes Handbuch ist in Arbeit
  • Eine gehostete documentation ist verfügbar
  • Minimalen Beispielcode findet man im HelloWorld test

Aktuelle Nutzung und weitere Pläne

  • Box3D wird neben The Legend of California bereits an mehreren Stellen eingesetzt
  • Obwohl Box3D in mehreren Spielen verwendet wird, gilt es weiterhin als Alpha-Software
  • Demnächst soll ein v0.1-Tag erstellt und die Engine bis zum v1.0-Release weiterentwickelt werden
  • Es braucht weitere Tests und eine ausgereifte Dokumentation, doch der Funktionsumfang ist bereits gut aufgestellt
  • In Prüfung sind folgende Arbeiten:
    • Ausbau der Charakterbewegung
    • Verbesserte Minderung von ghost collision
    • Optimierung
    • Verbesserungen am Joint Solver
  • Es wird erwartet, Box3D ebenso wie Box2D auf unbestimmte Zeit zu unterstützen
  • Wenn ein Reifegrad erreicht ist, könnte die Funktionsarbeit vorübergehend pausieren
  • Anders als bei Box2D wird erwartet, dass Box3D Pull Requests annimmt; möglicherweise kommt ein CLA zum Einsatz
  • Es wird keine eigene Website und keinen eigenen Discord-Server für Box3D geben
    • Updates werden auf der Box2D-Website bereitgestellt
    • Gespräche finden auf dem Box2D Discord server statt
  • Wer sehen möchte, wie Box3D in The Legend of California läuft, kann das Projekt über die home page und Steam verfolgen

1 Kommentare

 
GN⁺ 4 시간 전
Hacker-News-Meinungen
  • Jedes Mal, wenn Box2D erwähnt wird, muss ich an diese alte Geschichte denken – zusammen mit der naheliegenden Verbindung zu Box3D, einer Library desselben Autors.
    https://kotaku.com/this-guy-created-angry-birds-physics-and-...

    • Eine Geschichte, die ich gehört habe, als ich bei Rovio, dem Entwickler von Angry Birds, arbeitete: Marketingchef Peter Vesterbacka bekam während eines Vortrags eine Frage aus dem Publikum, welche Physik-Engine das Spiel verwende. Als Vesterbacka korrekt mit Box2D antwortete, sagte die Person: „Warum stehe ich dann nicht in den Credits? Nur zur Info: Ich bin Erin Catto, der Entwickler von Box2D.“
      Vesterbacka antwortete: „Kommen Sie nach der Veranstaltung zu mir.“ Vielleicht hat Erin damals einen Hoodie bekommen. Kurz darauf soll sein Name in die Credits aufgenommen worden sein.
      Was alle überraschte, war, dass der Marketingverantwortliche wusste, welche Physik-Engine verwendet wurde.
  • Box2D war eine Zeit lang die Grundlage vieler physikbasierter Indie-Games.
    Ich frage mich, ob das heutige Umfeld leer genug ist, um wieder eine Renaissance zu ermöglichen.

    • Es gab von Anfang an nicht viele kostenlose Open-Source-3D-Physik-Engines. Als alte Vorläufer gab es ODE, Bullet und Newton Dynamics; alle erschienen erstmals Anfang der 2000er. Danach blieb das Feld fast 20 Jahre lang weitgehend leer, bis 2021 Jolt erschien und jetzt Box3D.
      Wenn zu so einer kleinen, geschlossenen Liste ein neuer Eintrag dazukommt, ist das immer willkommen.
    • Ich erinnere mich an die Zeit, als ich von Incredibots besessen war. Damals habe ich Box2D zum ersten Mal kennengelernt.
    • Box2D ist immer noch ziemlich gut. Für 2D-Physikspiel-Projekte kann man es definitiv empfehlen.
      Die C-API von Box2D – und jetzt auch von Box3D – ist wirklich angenehm zum Arbeiten.
    • Ich habe früher ein wenig Chipmunk2D verwendet; für die obskuren Dinge, an denen ich arbeitete, war es einfacher zu benutzen.
  • Das ist wirklich erfreulich. Erin Catto ist ein großartiger Hacker, und ich bin dankbar, dass er seinen Code mit der Open-Source-Community teilt.
    In der Ankündigung war von Determinismus keine Rede, aber ich würde dazu gern mehr sehen. Wenn man mit der eingebauten Unity-Physik ein Netzwerk-Billardspiel bauen will, wird es ziemlich mühsam, weil sich die Clients nicht darauf einigen können, was passiert ist.

    • Genau danach habe ich auch gesucht. Da es einen Replay-Mechanismus gibt, wirkt es deterministisch. Bei Floating-Point-Physik gilt das allerdings möglicherweise nicht plattformübergreifend.
      Laut Dokumentation wird -ffast-math nicht unterstützt; vielleicht ist plattformübergreifender Determinismus also tatsächlich beabsichtigt: https://box2d.org/documentation3d/recording.html
      Edit: Bedeutung von ffast-math präzisiert.
  • Als Machine-Learning-Forscher ist mir Box2D wegen der Reinforcement-Learning-Umgebungen vertraut. Es bildet die Grundlage für Standard-Benchmark-Umgebungen wie Lunar Lander oder Car Racing in OpenAI Gym.
    https://gymnasium.farama.org/environments/box2d/car_racing/

  • Physiksimulation ist ein gefährliches Rabbit Hole. Selbst wenn man sich nur auf starre Körper und physikalisch plausibles Verhalten konzentriert, gibt es bei Kollisionserkennung und Kollisionsauflösung viele offene Probleme.
    Für Geometrie verwendet man üblicherweise konvexe Approximationen oder Zerlegungen, Solver werden von Hand getunt, und Robustheit sowie Genauigkeit müssen ständig gegen Geschwindigkeit abgewogen werden.

  • Darauf habe ich wirklich gewartet. Mit Box2D hatte ich früher ziemlich viel Erfolg, und unter F/OSS gehört es klar zu den Spitzenleistungen.
    Spectre VR auf Basis von Box3D? Das wird bestimmt kommen. Hat auch etwas von Tanarus.
    Edit: Der Wechsel zwischen Aufnahme und Wiedergabe in der Demo von Legend of California auf Unreal-Engine-Basis wirkt wie ein ziemlich großer Sprung. Auch wenn es anfangs etwas grundlegend wirkt, sollte man sich das Demo-Video mindestens bis zur 18-Minuten-Marke ansehen. Es wird ziemlich roh, aber spannend, und die Aufnahme- und Wiedergabefunktion ist cool.

    • Ich muss auch immer an Tanarus denken, aber kaum jemand erwähnt es.
  • Ich kenne Rapier und davor ein wenig Cannon und Ammo; mich würde interessieren, wie sie sich mit Box3D vergleichen.
    Nebenbei: Vor ein paar Wochen habe ich selbst eine Physik-Engine für den 3D-Raum gebaut und sie auch hier geteilt. Eigentlich ist es nur ein Einzeiler, der Objekte in regelmäßigen Abständen nach unten bewegt, aber er funktioniert schon erstaunlich gut. Aus Lernperspektive macht das wirklich Spaß; ich kann nur empfehlen, es einmal auszuprobieren.

  • Vor ein paar Tagen habe ich angefangen, mit Jolt ein Tron-artiges 3D-Spiel für den Browser zu bauen; witzig, das hier jetzt zu sehen. Bisher funktioniert Jolt ziemlich gut, aber das hier werde ich mir auf jeden Fall auch ansehen.
    1 - Diese Domain hatte ich schon seit Jahren: https://lightcycles.io

  • Ich frage mich, wie es sich mit Jolt vergleichen wird. Beide haben offenbar eine gute Historie: die eine Seite Valve und Erin Catto, die andere wurde in den Horizon-Spielen verwendet.

  • „Auf Valve-Seite wird Rubikon weiterentwickelt, und Dirk hat ähnliche Optimierungen wie Box3D für die neue Engine Ragnarok entwickelt. Man wird sie in künftigen Valve-Spielen sehen.“
    Moment mal …

    • Man sollte die Erwartungen nicht zu hoch schrauben. Wahrscheinlich wird es für den Volleyball-Spielmodus von Deadlock verwendet.
    • Es ist bekannt, dass Valve an einem Spiel mit dem Codenamen HLX arbeitet und dass es sehr stark Physikfunktionen nutzt. Was „HLX“ allerdings bedeutet, weiß ich überhaupt nicht.
    • Valve
      Box3D
      3D
      3
      Hoffnung!
    • Half-Life 2D bestätigt?
    • Day of Defeat Source 2.1 kommt genau in einer Woche!