Zeitschrittschemata für physikalische Simulationen

8

Die Operationen, die zum Ausführen einer Physiksimulation verwendet werden, sind am häufigsten:

  • Geschwindigkeit und Position integrieren
  • Kollisionserkennung und -auflösung
  • Kontaktauflösung (in fortgeschrittenen Fällen)

Vor einiger Zeit bin ich auf dieses Papier von Stanford gestoßen , das ein alternatives Schema vorschlug, das wie folgt lautet:

  • Kollisionserkennung und -auflösung
  • Geschwindigkeit integrieren
  • Kontaktauflösung
  • Position integrieren

Es ist faszinierend, weil es robuste Lösungen für das Stapelproblem ermöglicht. Also habe ich mich gefragt ...

Welche einfachen oder komplexen alternativen Systeme stehen zur Verfügung? Was sind ihre Vor- und Nachteile sowie Leistungsaspekte?

Kevintodisco
quelle

Antworten:

2

Die Technik, die ich gefunden habe und die im Laufe der Jahre am besten für mich funktioniert hat, ist folgende:

  • Geschwindigkeit integrieren

  • Kollisionserkennung

  • Constraint Solver (einschließlich Kontaktauflösung)

  • Position integrieren

Anscheinend wird dies als "semi-implizit" bezeichnet. Ich habe festgestellt, dass es die stabilste aller Techniken ist, die ich ausprobiert habe. Ich habe dies in der Physik-Engine hinter Little Big Planet PSP verwendet.

Ich hoffe es hilft!

Prost, Paul.

Wildhase
quelle
Hintergrundinformationen zu "semi-implicit": gafferongames.com/post/integration_basics
mnagel
0

Ein anderes Schema, auf das ich gestoßen bin, ist das von Position Based Dynamics, bei dem Sie:

  • Geschwindigkeit und Position integrieren (nicht eingeschränkt)
  • Kollisionserkennung
  • Constraint Solver (positionsbasiert)
  • Aktualisieren Sie Geschwindigkeiten von neuen Positionen (im Grunde integrieren Sie sie mithilfe der berechneten Zwangskräfte, genau wie Sie es für die Positionen getan haben).

Dies soll zeigen, dass es tatsächlich andere Systeme gibt. Jeder hat seine Vorteile. PBD ist zum Beispiel gut für Stoffe, während der semi-implizite Geschwindigkeitslöser besser für Rigids geeignet ist.

Der Kollisionserkennungsschritt muss irgendwo nach der Aktualisierung der Positionen erfolgen, da es keine Rolle spielt, ob Sie ihn vor oder nach einer Geschwindigkeitsaktualisierung platzieren (es sei denn, Sie verwenden die Geschwindigkeit für die kontinuierliche Erkennung). Noch chaotischer kann es werden, wenn Sie Methoden höherer Ordnung wie Runge-Kutta verwenden: Wo setzen Sie dann Kollisionen ein und wie oft? Ich denke, Kenny Erleben hat zu Beginn seiner Doktorarbeit einige Absätze dazu (faule und eifrige Ansätze).

Mihai F.
quelle