Physik

Aus DGL Wiki
Wechseln zu: Navigation, Suche
Info DGL.png Physik in Spielen ist sehr vielfältig. Dieser Artikel beschreibt einige Facetten und kann keinesfalls als vollständig gelten.

Die Physik ist mittlerweile in fast allen Spiele-Genres zum wichtigen Bestandteil geworden. Da in den letzten Jahren die Grafik massiv in den Mittelpunkt geraten ist, haben wir heute schon fast photorealistische Spiele aber darunter haben andere Teile, wie z.B. Physik und KI gelitten. Ein Spiel kann aber nur so gut sein, wie sein schlechtestes Modul. Wenn die KI gegen die Wand läuft, über eine Kiste nicht rüber oder vorbei kommt, dann hilft auch die beste Grafik nichts. Der Spieler wurde unschön aus der Spielwelt rausgerissen und nun hat er Zeit zu überlegen, was er nun tut(z.B. das Spiel beenden). Die Physik arbeitet für die KI vor, denn die KI braucht Wissen über die Umgebung. Also hat die Physik einen wichtigen Platz in der Gameengine. Mittlerweile werden sogar Hardware-Physik-Beschleuniger entwickelt (siehe Ageia), die, wie Grafikkarten, die CPU bei speziellen Berechnungen entlasten sollen. Parallisierung ist ebenfalls ein wichtiger Schritt und neue Algorithmen, zur schnelleren Kollisionserkennung, Sortierung und Reaktion auf Kollisionen.

Kollisionskontrolle

Ein Egoshooter, bei dem man durch Wände laufen kann, ein Echtzeitstrategiespiel, bei dem sich Einheiten durch Gebäude bewegen, all dies kommt der Realität nicht so wirklich nahe.

Deshalb verfügen selbst einfachste Jump&Run-Spiele über eine Kollisionskontrolle. Diese verhindert, dass sich Objekte ungebremst durch andere Objekte bewegen können. Überprüft wird hierbei, ob ein Objekt A (z.B. der Spieler) ein Objekt B (z.B. die Wand) berührt. Ist dies der Fall, wird die Bewegung des Objektes A in die Richtung des Objektes B blockiert, und die Routine für das Verhalten bei Kollisionen aufgerufen.

Da diese Berechnung bei Objekten mit vielen Polygonen sehr rechenintensiv ist, werden in der Praxis meist so genannte Bounding Volumes verwendet(z.B. Bounding-Boxes). Dabei wird für die Kollisionskontrolle nicht das Objekt mit vielen Polygonen verwendet, sondern ein Objekt aus geometrischen Formeln. So kann der Spieler in einem 3D-Shooter durch fünf einfache Quader (Rumpf & Kopf, Arme, Beine) simuliert werden. In den meisten Fällen ist solch eine einfache Bounding-Box bereits ausreichend.

Info DGL.png Kollisionsberechnung und auch Bounding Volumes werden im 3 teiligen DGL Tutorial zum Thema "Kollision" behandelt.

Bounding Volumes

Bounding Volumes erleichtern das ausschliessen von Objektkollisionen, da diese durch einfache Mathematische Formeln sehr schnell geprüft werden. Hierbei wird z.B. eine Bounding Sphere, um das Objekt, gespannt und durch das Prüfen der Distanz und Radius zwischen 2 BoundingSpheres eine Kollision festgestellt. Man verwendet im ersten Pass (im Regelfall) eine Bounding Sphere, gibt es eine Kollision, dann wird eine genauere Prüfung durchgeführt, z.B. Bounding-Box und dann Triangle basiert. Eine gute Möglichkeit ist auch das Verwenden von einem spatial partition system (z.B. Octree oder BSP). Hierbei wird ein Triangle basiertes Objekt in einen Octree zerlegt und somit sind bei sehr hoch polygonierten Models, die entsprechenden Triangles einfach zu finden. Eine andere Möglichkeit, komplexe Models zu verarbeiten, ist das Berechnen einer Hülle. Die Hülle ist wieder eine abstraktere Variante aber reicht oft als Lösung.

Gravitation

Gerade bei neueren Spielen, in denen viele frei bewegliche Objekte vorhanden sind, ist die Simulation der Schwerkraft sehr wichtig. Hier ein kurzes Beispiel:

Der Spieler läuft durch einen Gang, in dem mehrere Kisten stehen. Er schießt auf eine Kiste. Durch die Wucht der Geschosse wird die Kiste in die Luft geschleudert.

Ohne die Gravitation würde diese Kiste nun ewig im Raum rumschweben. Durch die Gravitation jedoch fällt die Kiste wieder zu Boden, was der Realität auf der Erde doch näher kommt. Für den Einsatz der Gravitation, muss jedem Objekt eine Masse zugewiesen werden.

Durch Gravitation wirkt die Reibung stärker und Objekte lassen sich schwerer bewegen, können sogar bei größerer Masse ein anderes Objekt deformieren oder kaputt machen. Je höher die Masse und Dichte eines Objektes, desto höher die Gravitation, die davon ausgeht.

Plastische Verformungen

Plastische Verformungen sind meist das Ergebnis einer Kollision. Das wohl beste Beispiel für den Einsatz von plastischen Verformungen ist das Schadensmodell der Autos in Rennspielen, bei denen die Fahrzeuge bei Crashs Kratzer und Dellen bekommen. Diese wurden in der Vergangenheit vorher modeliert und dann einfach die Models ausgetauscht aber heute werden auch hier die Methoden komplexer. So werden z.B. die Models über die unterschiedlichsten Varianten verändert. Das Zerlegen der Spielewelt, wie es in RedFaction zum ersten mal groß bekannt wurde, hat man z.B. in die neueste Unreal Engine 3 Subversion übernommen. Eine gängige Methode ist z.B. das Erfassen des Einflussradius der Zerstörung, spannen eines Octrees, entfernen von Nodes und dann die Neuberechnung der Hülle. Diese Variante ist natürlich höchstgradig ungenau, aber mit steigender Rechenpower kann man hier minimalistische Simulationen einbringen. So könnte man z.B. an die Funktion, zum Entfernen von Nodes, weitere komplexe Bedingungen (Absorbation von Engergie, durch die einzelnen Materialien) knüpfen. Eine Verwendung der Grundlagen von Schallausbreitung, könnte hier auch einiges für Explosionen bringen.

Ragdoll

Unter Ragdoll-Simulationen versteht man die Simulation des Zubodengehens einer Spielfigur. Diese Technik wird meist in 3D-Shootern verwendet, um darzustellen wie z.B. die Gegner von den Treffern des Spielers nach hinten geworfen werden, vom Balkon fallen und dabei an Ästen hängen bleiben wobei sich ihr Körper weiter verformt. Diese physikalisch korrekt berechnete Simulation des Todes ist gerade in Deutschland sehr umstritten.


Fertige Physikbibliotheken

Wer keine Zeit, Lust oder Geduld hat, eine eigene Physikbibliothek zu erstellen findet hier eine kleine Auswahl an fertigen:

  1. Havok (http://www.havok.com/) (Windows)
  2. Newton (http://newtondynamics.com/) (Windows, Linux, MacOS X)
  3. PhysX (http://www.nvidia.de/object/nvidia_physx_de.html) (Windows)
  4. ODE (http://www.ode.org/) (Windows, Linux, MacOS X)
  5. Bullet physics (http://www.bulletphysics.com/) (alle gängigen Plattformen und OS)