Wie funktionieren die Box2d- und Bullet-Physiksimulationen intern?

8

Ich habe Box2d und Bullet in JavaScript portiert gesehen, aber keiner von ihnen hat mich angezogen, außer dem Quellcode. Es schien alles ziemlich einfach zu sein, als ich hineinschaute.

Was tun sie in jeder dieser Bibliotheken, um eine schöne Physiksimulation zu erhalten? Ich kann keine Erklärung finden.

Heiter
quelle
Ich werde die Frage schließlich selbst beantworten, weil ich die Quellen studiere. Wenn Sie es schaffen, den Aufwand zu verkürzen, werde ich es schätzen.
Fröhlich

Antworten:

10

Die starre Körperphysik ist eigentlich recht einfach im Konzept - das heißt, die Verhaltensweisen, die ein Motor zu erzeugen versucht, sind nicht sehr kompliziert. Das ist wahrscheinlich der Grund, warum Ihnen die Bibliotheken, die Sie sich angesehen haben, recht einfach erscheinen.

Der Trick besteht darin, dass es ziemlich schwierig ist, eine Sim zu erstellen, die robust , stabil und schnell ist , selbst wenn Gleitkommafehler und niedrige, variable Frameraten vorliegen, und in der Regel viel gezwickt und herumgespielt wird. Eine weitere Komplikation ist die Tatsache, dass viele äußerst kluge Leute heldenhafte Anstrengungen unternommen haben, um bessere Lösungen zu finden, und schöne und leistungsstarke, aber schwer verständliche Algorithmen entwickelt haben, die dem Gebiet einen Ruf für schwarze Magie verliehen haben.

Im Allgemeinen wird sich eine Physik-Engine mit drei Dingen befassen (die Reihenfolge, in der sie in der internen Schleife ausgeführt werden, variiert):

  1. Integration (Annäherung an die Newtonschen Bewegungsgleichungen),
  2. Kollisionserkennung und
  3. Lösen von Einschränkungen (Aktualisieren von Positionen und Geschwindigkeiten, um Nichtdurchdringung oder andere benutzerdefinierte Einschränkungen zu erfüllen.)

Für die meisten von ihnen gibt es sowohl einfache, aber nicht so genaue Algorithmen als auch komplexe, aber genauere Algorithmen. Um Ihnen den Einstieg zu erleichtern:

  1. Für die Integration verwenden die meisten Leute entweder Symplectic Euler oder Verlet (die eigentlich gleichwertig sind. Sie können sich über die numerische Integration informieren, wenn Sie möchten, aber der Konsens scheint zu sein, dass billige Methoden erster Ordnung in Ordnung sind.
  2. Auf der Ressourcenseite "Echtzeit-Rendering" finden Sie alle gewünschten Referenzen zur Kollisionserkennung .
  3. Für das Lösen von Einschränkungen ist die Methode der sequentiellen Impulse sehr leicht zu verstehen. Erin Catto (die Autorin von Box2D) hält jedes Jahr eine Präsentation auf der GDC - die Folien sind auf der Box2D-Hauptseite verlinkt . Die Folien von 2006 decken sequentielle Impulse ziemlich gut ab. Sie können sich auch mit ausgefalleneren Methoden wie Featherstone oder projiziertem Gauß-Seidel befassen.

In den ersten Kapiteln des gerade veröffentlichten Buches Game Physics Pearls finden Sie eine hervorragende Einführung in einfache Methoden und was schief gehen kann.

Charlie
quelle
6

Lesen Sie Glenn Fiedlers Spielphysik-Reihe: http://gafferongames.com/game-physics/

Auch Erin Catto (die Autorin von Box2D) hat einen Artikel über eingeschränkte Dynamik .

Informationen zur Kollisionserkennung finden Sie unter Echtzeit-Kollisionserkennung durch Christer Ericson

David
quelle
1
Dieser erste Link ist defekt, aber ich denke, dass die gleichen Artikel jetzt hier zu finden sind: gafferongames.com/game-physics/integration-basics (aber ich kann nicht sicher sein, weil ich die Originale nie gesehen habe)
Justin
2

http://en.wikipedia.org/wiki/Rigid_body_dynamics könnte ein guter Anfang sein. Verschiedene Spiele teilen die Dinge in verschiedene Körper auf, aber im Allgemeinen haben Sie eine Reihe von diskreten starren Körpern, die durch Gelenke mit bestimmten Eigenschaften verbunden sind. In jeder Runde des Spiels berechnen Sie die Kräfte auf jeden Körper und die neuen Parameter (Position, Geschwindigkeit usw.). Sie müssen auch Kräfte von jedem Körper auf die anderen übertragen, mit denen er Gelenke teilt, und globale Kräfte (Schwerkraft) berücksichtigen.

Dies betrifft nicht Dinge wie Flüssigkeits- oder Stoffphysik, diese sind für mich alle Kauderwelsch. Es gibt Differentialgleichungen und das ist ungefähr der Punkt, an dem meine Augen glasig werden.

Codierer
quelle
Nun, Wikipedia wäre der erste offensichtliche Ort, an dem man Dinge sehen kann. Auch jeder bis jetzt weiß wahrscheinlich, dass er dazu neigt, Körperbewegungen durch Kräfte zu simulieren. In box2d steckt noch viel mehr. Hier sind einige Dinge, die mich interessieren: das Lösen von Einschränkungen und einige andere Dinge, die verhindern, dass die Simulation explodiert. Kollisionserkennungsalgorithmen. Optimierungen bei der Lösung von Einschränkungen und der Kollisionserkennung. Algorithmen für Gelenk- / Kollisionsreaktionen. Simulation der Reibung.
Fröhlich
Das nähert sich dem Gebiet "zu lang für eine echte Antwort". Zum Beispiel ist die Dämpfung, um Simulationsartefakte zu verhindern, ein komplexes Stück Mathematik . Was die Übertragung der Gelenkkraft betrifft, so besteht die einfache Version darin, dass jedes Gelenk bestimmte Achsen hat, auf die es die Kraft überträgt, wobei ein Prozentsatz der Energie des Körpers in Richtung der Verbindung zählt, abhängig vom Winkel zwischen den beiden. Das einfachste Gelenk ist ein festes Glied, bei dem die gesamte Kraft von beiden Seiten übertragen wird.
Coderanger
Wie ich in der Frage sagte: Es ist in Ordnung, hier und da nur zu sagen, dass es komplexe Mathematik gibt, und einen Link zum weiteren Lesen bereitzustellen.
Fröhlich
Na los geht's dann :-)
Coderanger
1

OpenCloth beschreibt alle Integrationstechniken so einfach wie möglich. Viel ist in Vorbereitung.

Details: http://code.google.com/p/opencloth/

Mobeen
quelle
0

Neben den physikalischen Gleichungen ist es wichtig, alle Objekte zu verfolgen, damit die Überprüfung auf Kollisionserkennung und Interaktionen so schnell wie möglich erfolgt. Spatial Hashing ist die Technik, die die Chipmunk- Physik-Engine verwendet.

AShelly
quelle