Beratung für eine Physik-Engine erforderlich

12

Ich habe kürzlich ein Projekt gestartet, bei dem eine Physik-Engine gebaut wurde. Ich hatte gehofft, Sie könnten mir einen Rat geben, der sich auf Dokumentation und / oder die besten Technologien dafür bezieht.

Zunächst habe ich gesehen, dass Game-Physics-Engine-Development für die anstehende Aufgabe sehr empfehlenswert ist, und ich habe mich gefragt, ob Sie mir eine zweite Meinung geben könnten. Soll ich das verstehen? Außerdem bin ich beim Stöbern in Amazon auf Game Engine Architecture gestoßen, und da ich meine Physik-Engine für Spiele entwickeln möchte, dachte ich, dass dies auch eine gute Lektüre sein könnte.

Zweitens weiß ich, dass das Simulieren von Physik sehr rechenintensiv ist, daher würde ich gerne entweder CUDA oder OpenCL verwenden. Im Moment neige ich zu OpenCL, da es sowohl auf NVIDIA- als auch auf ATI-Chipsätzen funktionieren würde. Was schlagen Sie vor?

PS: Ich werde dies in C ++ unter Linux implementieren.

adivasil
quelle

Antworten:

10

So habe ich gelernt, eine Physik-Engine zu schreiben, die kostenlos und sehr empfehlenswert ist:

  1. David Baraffs Arbeiten im Besonderen Eine Einführung in die physikalisch basierte Modellierung

  2. Brian Vincent Mirtichs These Impulsbasierte dynamische Simulation starrer Körpersysteme

  3. Kacic / Bullock "Ein praktisches Dynamiksystem " SIGRAPH 2003, EDIT: Link hinzugefügt .

Diese Artikel wurden in einem anderen großartigen Artikel von Nick Porcino (LucasArts) in einem der Edelsteine-Bücher Gems 4 "Writing a Verlet-Based Physics Engine" erwähnt. Es ist nicht kostenlos, aber es ist jeden Cent wert.

Schauen Sie sich auch andere Motoren an, hier ist die Quelle für die Bullet Physics Engine .

Über die CUDA / OpenCL-Implementierung: Lassen Sie es zuerst auf der CPU laufen, es ist kompliziert genug :)

Seien Sie sich bewusst, dass Sie Ihren Motor mit hoher Wahrscheinlichkeit nach einer Weile wegwerfen werden, da es einfach zu schwierig ist, eine stabile und gut integrierte Physik-Engine damit zu erstellen Eine wettbewerbsfähige Feature-Liste für sich allein, aber es ist eine großartige Lernerfahrung!

Sobald Sie einen einfachen Motor laufen haben, lautet mein Rat: Machen Sie Testszenarien, in denen Sie das Ergebnis Ihres Motors mit dem Ergebnis eines anderen Motors vergleichen. Dies hat mir geholfen, viele Fehler zu finden und die Benutzeroberfläche zu verbessern. So etwas wie 1 Sekunde lang eine ähnliche Kraft auf dieselbe Karosserie in beiden Motoren ausüben.

Last but not least: Ignorieren Sie Kollisionen, wenn Sie anfangen, und konzentrieren Sie sich zuerst auf eine stabile Simulation.

Maik Semder
quelle
Sieht nach einer großartigen Antwort aus, aber Sie können sie ein wenig formatieren.
Die kommunistische Ente
Vielen Dank für das Feedback. Ich bin damit einverstanden, dass ich keinen wettbewerbsfähigen Motor bauen kann, aber mein Hauptziel dabei ist der Lernteil.
Adivasile
1
@ The Communist Duck danke für den Hinweis, ich war neu auf der Seite und ich gebe zu, ich war zu faul, um die
Formatoptionen
1
Der Link zu Kacics Artikel wurde hinzugefügt, hoffentlich ist er der richtige :)
Ray Dey,
5

Maik hat recht, Baraffs Papiere sind ein hervorragender Anfang, aber vergessen Sie nicht, dass Chris Heckers Artikel über Starrkörperdynamik geschrieben hat: http://chrishecker.com/Rigid_Body_Dynamics !

Auch sein Rat zu "[..] Sie werden Ihren Motor wegwerfen" ist völlig richtig. Aber du wirst viel lernen!

Bezüglich des CUDA / OpenCL-Teils Ihrer Frage: Wenn Sie CUDA kennen, wird der Wechsel zu OpenCL sehr einfach. Ich würde empfehlen, zuerst CUDA zu lernen, da es so viele gute Tutorials, Beispielcode und Berechnungsbibliotheken gibt. Beispielsweise:

Aber seien Sie sich bewusst: Der Einstieg in CUDA ist einfach, der Einstieg in die Physiksimulation ist etwas schwieriger, aber beides zu kombinieren ist eine ziemliche Herausforderung!

Jonas Bötel
quelle
du hast vollkommen recht, das ist eine weitere großartige Ressource, die erwähnt werden muss, +1 für Chris Heckers
Artikel
4

Ich habe auch mit Baraff angefangen, aber es ist schon etwas älter. Was Sie brauchen, sind iterative Löser und das beste Paper-Imo dazu sind Erin Cattos iterative Dyanmics . Sie haben alles, was Sie brauchen, um Ihre Physik-Engine zu implementieren. Sie können sich ein wenig in Erlebens Doktorarbeit vertiefen, wenn Sie mehr Details benötigen (wie Gelenke und mehr mathematische Dinge), aber das war es auch schon. Ich wünschte, ich hätte es von Anfang an gefunden - gehen Sie ein bisschen durch das Bullet-Forum, es gibt viele Informationen (vielleicht zu viel).

In Bezug auf Bücher sind viele Bücher enttäuschend, aber ich empfehle Physics Based Animation von Kenny Erleben oder Game Physics Pearls.

Ich kenne nicht viel CUDA / OpenCL (obwohl ich es immer wollte), aber du solltest auf jeden Fall Takahiro Haradas Arbeit ausprobieren.

Mihai F
quelle