Was genau ist eine Physik-Engine?

57

Ein Programm sollte Eingaben nehmen, sie verarbeiten und Ausgaben geben. Was genau nimmt eine Physik-Engine als Input und liefert als Output?

user91119
quelle
36
Viele Begriffe befragen die Menschen. Grundlegende Fragen müssen nicht einfach deshalb abgelehnt werden, weil sie einfach sind.
MichaelHouse
16
Die Beschreibung eines Programms als etwas, das "Input nehmen, verarbeiten und Output geben sollte", ist eine so absurd vereinfachte und reduktionistische Art, darüber zu denken, dass es nutzlos ist. Überlegen Sie, wie Sie die Frage beantworten würden: "Ein Programm sollte Eingaben nehmen, sie verarbeiten und Ausgaben geben. Was genau nimmt ein Spiel als Eingaben und gibt sie als Ausgaben aus?" Spiel.
Jack Aidley
10
@JackAidley Ich verstehe Ihren Standpunkt, aber in Wirklichkeit ist ein Spiel sehr ähnlich: Eingabe: Tastenanschläge und Maus- / Joystickbewegungen, Ausgabe: lustige Bilder auf dem Bildschirm und unterhaltsame Töne aus den Lautsprechern. Es ist einfach, ja, aber es hilft zu verstehen, was ein "Spiel" rechnerisch ist, und meiner Erfahrung nach ist es auch eine äußerst nützliche (aber natürlich nicht die einzige) Möglichkeit, über Codearchitektur, Asset-Design, Projektmanagement usw. nachzudenken.
WJL

Antworten:

58

Eine Physik-Engine ist für die Simulation der Bewegungen und Reaktionen von Objekten verantwortlich, als befänden sie sich unter den Bedingungen der realen Physik (oder ähnlich der realen Physik). Es handelt sich normalerweise nicht um ein eigenständiges Programm, sondern um eine Komponente eines größeren, interessanteren Programms (z. B. eines Spiels).

Die Eingabe für eine Physiksimulation ist im Allgemeinen eine Sammlung von Objekten ("Körpern") mit Eigenschaften (z. B. ob sie starr oder weich sind, ihre Massen, Formen usw.) sowie die Sammlung von Kräften, die auf diese Körper wirken.

Basierend auf dieser Eingabe simuliert die Engine aktualisierte Positionen und Ausrichtungen der Körper und wendet sie an ("gibt sie aus"). Wenn Objekte kollidieren oder sich überlappen, ist dies in der Regel in der Ausgabe eines Simulationsschritts in Form eines Rückrufs enthalten, in den sich der Client-Code einbinden kann, um die spezifische, für die Kollision relevante Gameplay-Logik zu handhaben.

Josh
quelle
6

Die Eingabe ist Geschwindigkeit, Masse und Zeit, die Ausgabe ist neue Geschwindigkeiten. Manchmal ist Rotation / Drehimpuls auch eine Eingabe und Ausgabe.

Im Wesentlichen versuchen Physik-Engines, die Auswirkungen von Schwerkraft und Kollision zu simulieren. Für bessere Physik-Engines bedeutet dies, dass sie sowohl permanente als auch temporäre Verformungen von Objekten beinhalten, einschließlich der Aufteilung von Objekten in mehrere Objekte und des Drehimpulses von Objekten. Im Idealfall simulieren sie auch Stress, z. B. wie viele Lastwagen diese Brücke überqueren können, bis sie einstürzt, aber das ist ziemlich selten. Weitere Simulationsvariablen wie der Luftwiderstand würden ebenfalls als Physik-Engine gelten, aber soweit ich weiß, haben es diese noch nicht in irgendein Spiel geschafft.

Die meisten Physik-Engines sind zu einem gewissen Grad spezialisiert und simulieren die Physik bis zu einem Punkt, der für das Spiel erforderlich ist. Physik-Engines für Autospiele unterscheiden sich häufig von Physik-Engines für 3D-Shooter. Und die Physik-Engine eines Golfspiels könnte übermäßige Berechnungen der Wechselwirkungen des Golfballs und der einzelnen Grasblätter haben, während die Handhabung von Hochgeschwindigkeitskollisionen und die Verformung eines Autos (falls es von einem Golfball getroffen wird) völlig fehlen. .

Peter
quelle
1
Ich möchte darauf hinweisen, dass der Luftwiderstand eigentlich ein weit verbreitetes Merkmal von Physikmotoren ist. Jedes Spiel, das auf fallende Objekte eine Endgeschwindigkeit anwendet, modelliert den Luftwiderstand.
Patrick Roberts
@PatrickRoberts Terminal-Geschwindigkeit ist nicht genau das, woran ich gedacht habe, als ich den Luftwiderstand erwähnte. Das wäre so, als hätte Pong eine Physik-Engine, die kinetische Einflüsse modelliert.
Peter
12
gut, um fair zu sein, in einem lockeren Sinn tut es das. Es modelliert perfekt elastische Kollisionen in einer schwerelosen Umgebung. Ich verstehe, dass Modelle vereinfachend sein können, aber deshalb werden sie Modelle genannt, weil sie praktische Annäherungen an Phänomene sind, die wir in der Realität erleben.
Patrick Roberts
4

In der Regel wird eine Physik-Engine verwendet, um das Verhalten von Objekten in einem Spiel in Bezug auf ihre Umgebung realistisch zu gestalten, ohne dass für jedes mögliche Szenario spezielle Animationen erstellt werden müssen.

Insbesondere nimmt eine Physik-Engine ein Modell mit einer Reihe von Eigenschaften (Masse, Gelenke usw.) und rendert es gemäß einer Reihe von Parametern im Spiel.

Ein frühes Beispiel hierfür waren Raggdoll-Motoren (z. B. in Unreal), die die Art und Weise modellierten, in der schlaffe Körper Stufen herunterfallen usw.

In der aktuellen Technologie sind Physik-Engines häufig eng in ein allgemeines Game-Deign-Paket integriert, ebenso wie KI, In-Game-UI, Cutscene-Generierung usw.

Man könnte mit Sicherheit argumentieren, dass Physik-Engines bis in die Anfänge des Spieledesigns zurückreichen, z. B. könnte Pong als grobe Physik-Engine betrachtet werden. Der wichtigste Punkt ist jedoch, dass eine Physik-Engine Animationspunkte im laufenden Betrieb auf der Grundlage einer Reihe von Parametern generieren kann, anstatt nur vorgegebene Animationssequenzen aus der Bewegungserfassung oder manuellen Animation zu verwenden.

Wie in anderen Antworten erwähnt, kann in einigen Klassen oder bei Spielen wie dem Fahren oder der Flugsimulation die Physik-Engine von grundlegender Bedeutung für das Spiel sein und als solche die Haupteingabe für die Bildschirmanimation sein. Obwohl der Begriff in der Regel für ein Allzweck-Tool verwendet wird, das auf eine Vielzahl von Situationen angewendet werden kann, ohne dass der Entwickler sehr spezifische Kenntnisse oder Analysen des betreffenden Kontextes benötigt, und nicht für einen aus dem Boden gebauten, sehr spezifischen Simulator für eine bestimmte Anwendung.

Chris Johns
quelle
4

Eine Physik-Engine ist für die Simulation der Bewegung von Objekten in "der Welt" verantwortlich (was auch immer das im Kontext der Engine bedeutet). Die meisten Physik-Engines verwenden heutzutage die Newtonsche Mechanik, da sie für die meisten Zwecke relativ einfach zu simulieren und "genau genug" sind, es sei denn, Sie führen eine Weltraumsimulation durch.

Theoretisch würde eine "reine" Physik-Engine drei Eingaben benötigen:

  • Der Zustand der Welt (die Objekte, ihre Positionen und ihre Geschwindigkeiten) ab dem letzten "Tick" (dem letzten Zeitpunkt, zu dem die Engine modellieren musste)
  • Wie viel Zeit ist seit dem letzten Tick vergangen
  • Eine Liste der Kräfte, die seit dem letzten Tick auf verschiedene Objekte der Welt gewirkt haben

Unter Berücksichtigung der Trägheit und der Kräfte bewegt der Motor die Objekte. Die Ausgabe der Physik-Engine ist einfach der neue Zustand "der Welt" , den das Spiel nach Bedarf auslesen und ändern kann.

In der Praxis sind Physik-Engines nicht unbedingt so "rein" . Objekte müssen erstellt und zerstört werden, und manchmal müssen sie so bewegt werden, wie es die Gesetze der Physik-Engine nicht zulassen. Dies kann manchmal außerhalb des Motors erfolgen, manchmal jedoch auch innerhalb des Motors. Um dies zu erreichen, benötigt der Motor mehr Eingaben. Die drei oben genannten Eingänge decken jedoch die Grundlagen ab.

Nehmen wir zum Beispiel an, Sie müssten einen Charakter in einem Spiel mit einem Joystick bewegen. Wenn Sie keine Physik-Engine verwenden, ist dies ziemlich einfach: Wenn Sie sehen, dass der Benutzer den Joystick bewegt, verschieben Sie das Objekt entsprechend. Mit einer Physik-Engine bewegen Sie das Objekt nicht direkt: Sie üben eine Kraft auf das Objekt aus, die der Richtung entspricht, in die das Objekt bewegt werden soll, und lassen es von der Engine tatsächlich bewegen .

Was ist der Unterschied? Selbst wenn es nichts anderes auf der Welt gibt, ist es unwahrscheinlich, dass sich das Objekt auf die gleiche Weise bewegt, da die Physik-Engine Dinge wie eine realistische Beschleunigung handhabt. Es ist aber auch möglich, dass andere Kräfte gleichzeitig auf das Objekt einwirken, ebenso wie die Trägheit, und dass der Motor alle berücksichtigt . Wenn Sie beispielsweise eine Kraft nach Norden auf das Objekt ausüben, während eine andere Kraft eine Kraft nach Westen ausübt (oder wenn sich das Objekt bereits nach Westen bewegt und nichts die Bewegung verlangsamt), bewegt die Engine das Objekt nach Nordwesten.

Das bringt Ihnen eine Physik-Engine: Sie verfolgt Objekte, deren Positionen und Geschwindigkeiten sowie die auf sie einwirkenden Kräfte. Dank der Gesetze der Mechanik kann es sogar einige Kräfte selbst erzeugen, um automatisch mit Dingen wie Kollisionen, Reibung und Schwerkraft umzugehen, ohne dass Sie, der Spieleentwickler, etwas Besonderes tun müssen.

Der Löffeligste
quelle
1

Eine Physics Engine ist im Grunde ein Simulator von Physikkörpern.

Eingang

Hiermit können Sie einen Körper (oder mehrere) erstellen und seine physikalischen Eigenschaften wie Masse, Größe, Dichte usw. angeben.

Sie können damit auch die Eigenschaften der physikalischen Welt definieren, in der die Simulation stattfindet (z. B. Schwerkraft).

Schließlich können Sie Kräfte aufbringen oder Verbindungen zwischen Körpern herstellen.

Ausgabe

Nachdem Sie all diese Dinge definiert haben, können Sie die Simulation starten und die Physics Engine teilt Ihnen mit, wo sich jeder Körper im nächsten Zeitschritt befindet (der normalerweise dem nächsten Frame in Ihrem Spiel entspricht). Und der nächste und so weiter ...

Sie sehen, wie sich die Sprites auf dem Bildschirm bewegen, weil die Game Engine bei jedem Frame die Physics Engine fragt

Wo ist dieser Körper jetzt?

und die Game Engine aktualisiert die Grafikdarstellung entsprechend.

Überlegungen

Normalerweise sehe ich die Physics Engine gerne als Werkzeug, um die physikalischen Gesetze deklarativ anzuwenden .

Anstatt Code zu schreiben, um zu beschreiben, welche Berechnungen durchgeführt werden sollen, um zu bestimmen, wo sich ein Körper im nächsten Zeitschritt befindet, beschreibe ich einfach die Physikwelt, indem ich die Attribute der Körper (und der Physikwelt selbst) setze, und lasse die Physik-Engine antworten diese Frage für mich.

Luca Angeletti
quelle
Ihr Abschnitt "Überlegungen" ist (für mich) nicht wirklich klar. Wenn Sie das verbessern, um es klarer und konkreter / praktischer zu machen (z. B. tatsächliche Systembeispiele, die Sie beobachtet, erstellt usw. haben), gebe ich Ihnen +1.
Code_dredd
@ray: Danke für deinen Vorschlag. Ich werde das so schnell wie möglich beheben!
Luca Angeletti
Stelle sicher, dass du mir einen Kommentar schreibst, wenn du fertig bist, und beeil dich nicht. Es sollte später für andere nützlich sein.
Code_dredd