Lösung von 2D-Starrkörperkollisionen
Problemdefinition
- Vom Moment, in dem Mario auf eine Wolke springt, bis zum Zusammenstoß zweier Autos in einem Rennspiel ist der Umgang mit Kollisionen ein äußerst wichtiger Bestandteil der meisten Videospiele.
- In dieser Blogserie geht es um die tatsächliche Mathematik und Physik hinter der Physiksimulation.
- Videospiele sind eine gute Möglichkeit, diese Konzepte in einen Kontext zu setzen und sie weniger abstrakt zu machen.
Ein Wort zur Mathematik
- In diesem Artikel kommt viel Mathematik vor, aber man sollte sich davon nicht abschrecken lassen.
- Die mathematische Notation kann kompliziert wirken, aber das meiste davon ist einfache Arithmetik.
- Hab keine Angst vor Mathematik und probiere es aus.
Bevor wir anfangen
Starrkörper
- Starrkörperphysik ist eine Physiksimulation, die sich mit Objekten befasst, die sich nicht verformen.
- In der Realität verformen sich alle Objekte auf molekularer Ebene, aber in der Simulation wird dies vereinfacht und als Starrkörper behandelt.
Kollisionserkennung und Kollisionsauflösung
- Kollisionserkennung ist der Prozess, bei dem geprüft wird, welche Objekte in einer Szene kollidieren.
- Kollisionsauflösung ist der Prozess, bei dem entschieden wird, wie sich kollidierte Objekte bewegen sollen.
- In dieser Blogserie liegt der Fokus auf der Phase der Kollisionsauflösung.
Was wollen wir erreichen?
- Die meisten Spiele laufen in einer großen Schleife.
- Bei jeder Wiederholung der Spielschleife wird die Position eines Objekts entsprechend seiner aktuellen Geschwindigkeit aktualisiert.
- Geschwindigkeit ist ein Vektor mit Betrag und Richtung.
Geschwindigkeit
- Geschwindigkeit beschreibt die Positionsänderung eines Objekts über eine bestimmte Zeit.
- Die neue Position eines Objekts wird berechnet, indem man die Verschiebung addiert, die sich aus der Multiplikation der aktuellen Geschwindigkeit mit dem Zeitintervall ergibt.
Kollisionsauflösung
- Das Ziel der Kollisionsauflösung ist es, nach einer Kollision die Geschwindigkeit der Objekte so zu ändern, dass sie sich nicht länger gegenseitig durchdringen.
- Die Geschwindigkeit nach der Kollision lässt sich als Summe der Geschwindigkeit vor der Kollision und der durch die Kollision verursachten Geschwindigkeitsänderung ausdrücken.
Was ist eine Kollision?
- Damit zwei Objekte als kollidierend gelten, müssen zwei Bedingungen erfüllt sein:
- Die geometrischen Formen der Objekte müssen sich berühren oder überlappen.
- Die Objekte müssen sich weiterhin auf die Kollision zubewegen.
Flächennormale
- Um ein Objekt möglichst weit von einer Oberfläche wegzubewegen, muss es in eine Richtung bewegt werden, die senkrecht zur Oberfläche steht.
- Diese Richtung wird Normalenrichtung genannt und steht senkrecht auf der Oberfläche.
Skalarprodukt
- Um zu berechnen, wie stark zwei Vektoren in dieselbe Richtung zeigen, verwendet man das Skalarprodukt.
- Das Skalarprodukt ist definiert als die Summe der Produkte der entsprechenden Komponenten zweier Vektoren.
- Am Vorzeichen des Skalarprodukts lässt sich erkennen, ob zwei Vektoren in die gleiche oder in entgegengesetzte Richtung zeigen.
Fazit
- Eine Kollision tritt auf, wenn ein Punkt eines Objekts einen Punkt eines anderen Objekts berührt und die relative Normalgeschwindigkeit negativ ist.
- Im nächsten Artikel geht es um die eigentliche Physik von Kollisionen.
Meinung von GN⁺
- Die Bedeutung der Physiksimulation: In der Spieleentwicklung ist Physiksimulation ein wichtiger Faktor, um den Realismus zu erhöhen.
- Die Rolle der Mathematik: Mathematik ist der Kern der Physiksimulation, und wer sie versteht, kann bessere Simulationen erstellen.
- Die Komplexität der Kollisionsauflösung: Kollisionsauflösung ist ein komplexerer Prozess, als einfach nur die Position von Objekten zu aktualisieren.
- Pädagogischer Wert: Dieser Artikel hilft sehr dabei, die Grundlagen der Physiksimulation zu verstehen.
- Weiterführendes Lernen: Es ist auch eine gute Lernmethode, eine Physics Engine selbst zu implementieren. Als Referenz können Open-Source-Physics-Engines wie Box2D oder Chipmunk dienen.
1 Kommentare
Hacker-News-Meinungen
Zusammenfassung der Hacker-News-Kommentare
Hey everyone, author here!
Oh! Look, a well-researched, deeply-explained, and interactive post.
One side project I am working on right now is a 2d space shooter I am developing with my son.
I always enjoyed the explanation from the N game: N game tutorial
I had fun building a TypeScript demo about this topic, involving balls that can bounce and collide. I learned a lot.
This is great. This reminds me of Chris Hecker's Rigid Body Dynamics series from GDMag/Gamasutra that I read (checks watch) almost 30 years ago!
Collisions are violations of the pairwise non-intersection constraint between bodies.
If you want to go further and go for rigid body dynamics and constraint, I found that series of blog post very useful: Toptal blog post
To dredge up a related oldie-but-goodie memory of blog posts: Gaffer on Games
Guess this is a Shameless plug but I wrote an interesting program over 12 years ago using even then very old three Js which is not quite the metal but much less abstract than today's tools.