Physik in Computerspielen

Transcription

Physik in Computerspielen
Seminar Technik in Computerspielen
Physik in Computerspielen
Florian Kleinert
[email protected]
Inhalt
Einleitung
3
Grundlagen
3
Physikalische Bereiche
3
Simulierte Größen
3
Beispiel: Wurf einer Granate
4
Exakte Lösung
4
Lösungsansätze
4
Physikengines
5
Rigid Bodies
5
Kollisionsabfragen
5
Joints
6
Ragdolls
7
Kleidung & Haare
7
Aktuell verfügbare Engines
8
Havok – Physics3 & Havok FX
8
Ageia - Novodex
8
OpenDynamicsEngine
9
Tokamak
9
NewtonGameDynamics
9
Ausblick
Hardware Ausblick
9
10
Havok
10
Ageia
10
Quellenangabe
10
Bildnachweis
11
Einleitung
Spielephysik nimmt in heutigen Computerspielen eine immer wichtigere Rolle ein. Eine realistische Simulation physikalischer Effekte trägt
wesentlich zur Spieleathmosphäre bei. In aktuellen Umsetzungen tritt die Spielephysik bereits
als fester Bestandteil des Spielgeschehens auf.
Grafikengines berechnet und wurden bereits in
einem früheren Vortrag gewürdigt. Die Akustik oder besser der „Game Sound“ werden zur
Zeit noch direkt von der Spielengine berechnet.
Diese Verfahren zu beschreiben würde den
Rahmen dieser Ausarbeitung wohl sprengen.
Grundlagen
Bevor man in die Materie von Physikengines einsteigen kann, sind zuerst einige Grundlagen vonnöten..
Was ist unter Physik eigentlich zu verstehen? Wikipedia beschreibt es folgendermaßen:
„Die Physik ist die Naturwissenschaft, welche die grundlegenden Gesetze der Natur, ihre
elementaren Bausteine und deren Wechselwirkungen untersucht. Sie befasst sich sowohl
mit den Eigenschaften und dem Verhalten von
Materie und Feldern in Raum und Zeit als auch
mit der Struktur von Raum und Zeit selbst.“
Physikalische Bereiche
Die heutige Physik lässt sich grob
in diese Bereiche einteilen:
• (klassische) Mechanik
• Wärmelehre
• Akustik
• Optik
• Elektrodynamik
• Atom & Kernphysik
• Relativistische Mechanik
• Quantenmechanik
Wenn man schon einmal ein Computerspiel
gespielt hat, wird einem auffallen, dass einige
physikalische Effekte aus den verschiedenen
Bereichen keine Beachtung finden. Zum Beispiel hat die Wärmelehre noch keinen Einzug
gehalten.- Sonst würde wohl ein Schuss aus
einer Laserwaffe dieselbe sofort verdampfen
lassen. Auch die Bereiche Quantenmechanik,
Atom- und Kernphysik, Elektrodynamik und
relativistische Mechanik sind eher schwach
vertreten. Eine realistische Umsetzung relativistischer Effekte würde die Spieldauer einer
Weltraumsimulation unnötig in die Länge ziehen.
Optische Effekte werden typischerweise von
Damit verbleibt als letzter Bereich die Mechanik, auf die man sich auch üblicherweise
bezieht, wenn man von Spielephysik spricht.
Simulierte Größen
In modernen Physikengines finden folgende Größen Beachtung:
• Kräfte
• Impuls
• Drehmoment
• Drehimpuls
• Ort
• Geschwindigkeit
• Winkelgeschwindigkeit
• Schwerpunkt/Massenverteilung
Je nach Spiel oder verwendeter Engine
kommen dazu noch andere Größen wie z.B.
Reibungskoeffizienten oder Elastizität.
Diese physikalischen Größen werden für
jedes Grundobjekt einer Spielewelt gespeichert
und bilden die Grundlage für Simulationen.
Eine - wenn nicht „die“ - Aufgabe für Physikengines ist es, die Bewegungsgleichung einzelner
Elemente zu lösen. Eine Bewegungsgleichung
drückt aus, an welchem Ort sich ein Körper
zu einem bestimmten Zeitpunkt befindet.
Beispiel: Wurf einer Granate
Auf der Abbildung sieht man den Wurf einer Granate in Quake4. Möchte der Physiker
nun eine Bewegungsgleichung aufstellen, so
bedient er sich des 2. Newtonschen Gesetzes:
„Force is equal to the change in momentum per change in time“
oder auch ein wenig mathematischer ausgedrückt:
Ť mƒŤx
F
Anfangsbedingungen
: Ťx xŤ0 hierbei
Ťv vŤ0 die
(die
Punkte über dem xt0
bezeichnen
aAbleitung
Ŧt ŧŤ
g des Ortes nach der Zeit)
zweifache
Ťx Ŧt ŧŤ
t
Im
Falle
eines
Wurfes
(einer Granax5 Ŧt ŧŤv Ŧt ŧvŤ0 Ր d Ǝ Ť
a ŦƎŧvŤ0 ŐŤ
gt
Ť
te) unter Einfluss der0Schwerkraft unseres
t
Planteten und unter
Nichtberücksichti1 2
ŧAuftrieb,
xŤ0ŤxՐ d Ǝ Luftreibung,
gt
gungŤxF
von
ŤŦt
Ťv ŦƎŧxŤ0 ŐvŤrelativimƒ
0 tŐ Ť
2
0
stischer
Massenzunahme usw.
Anfangsbedingungen
t0 :erhält
v vŤ0
Ťx xŤman
0 Ť
Ťx Ŧt ŧaŤ Ŧt ŧgŤ
t
Integriert
nunazwei
ŧvŤdieses
ŦƎŧmal
vŤ0 ŐŤ
gt
Ťx5 Ŧt ŧŤv Ŧtman
0 Ր d Ǝ Ť
t
a ŦƎŧvŤ0 ŐŤ
gt
Ťx5 Ŧt ŧŤv Ŧt ŧvŤ0 Ր d Ǝ Ť
Exakte Lösung
t
Ť mƒŤx
F
Anfangsbedingungen t0: Ťx xŤ0 Ťv vŤ0
nachŤx der
soŤ
Ŧt ŧZeit,
a Ŧt ŧ
gerhält man:
Ť
0
1 2
Ťx Ŧt ŧxŤ0 Ր d Ǝ Ťv ŦƎŧxŤ0 ŐvŤ0 tŐ gŤ t
2
0
t
0
1 2
gt
Ťx Ŧt ŧxŤ0 Ր d Ǝ Ťv ŦƎŧxŤ0 ŐvŤ0 tŐ Ť
2
0
Man sieht an dem Term „1/2 gt²“
die berühmte Parabelbahn, wie auch
in dem Beispiel gut zu erkennen.
Lösungsansätze
Das Problem besteht nun darin, dass die
Lösung nicht immer so einfach ist wie in diesem
Fall. Betrachtet man z.B. Kräfte die sich mit der
Zeit ändern oder miteinander interagierende Körper, so erhält man auch gerne einmal gekoppelte
nichtlineare Differentialgleichungen (DGL‘s),
die sich nicht so ohne weiteres lösen lassen.
Zum Glück kennt die Mathematik einige Methoden die Bewegungsgleichungen zu vereinfachen oder zu nähern. Beispielsweise sei hier genannt:
• Lagrange-Multiplikatoren: zum
Vereinfachen von DGL‘s unter
Zwangsbedingungen. Z.B. eine Kugel die von zwei Schienen auf einer geraden Bahn gehalten wird.
• Reduzierte Koordinaten: Berechnungen
können auf weniger Dimensionen
reduziert werden. Z.B. eben genannte Kugel stellt eine eindimensionale
Bewegung in einem 3D-Raum dar.
Kollisionsabfragen
Kollisionsabfragen sind immer dann relevant, wenn sich zwei Rigid Bodies anfangen zu überschneiden. Dies zu erkennen ist
die Aufgabe der Kollisionserkennung.
Da sich Abfragen, die auf den Original Rigid
Bodies beruhen, als sehr komplex bzw. rechenaufwändig erweisen, wird bei vielen Verfahren die Originalform des Körpers genähert.
• Verlet-Integration: Geschwindigkeitslose Darstellug bei der die Position
zum nächsten Zeitintervall aus dem
aktuellen Aufenthaltsort und dem
Vorhergehenden berechnet wird.
Physikengines
Es kann natürlich nicht behauptet werden, dass alle Physikengines gleich sind. Es
gibt jedoch einige Grundtechniken, die fast
alle aktuelle Engines implementieren.
Rigid Bodies
Rigid Body Elements heißt auf deutsch
„Starre Körper“. Aus diesen Elementen ist
aus Sicht einer Physikengine die ganze, zur
Berechnung interessante, Welt aufgebaut. Diese Elemente können zum Beispiel sein:
• Axis aligned bounding box: Ein gedachter Quader, dessen Kanten parallel
zu den Raumachsen der Welt liegen,
wird um den Körper gelegt und bildet die
Basis für die Kollisionserkennung. Das
wohl schnellste Verfahren, da nur nacheinander für die 3 Achsen die Positionen
der Boxen verglichen werden müssen.
• Quader
• Kugeln
• Polygon Netze
• etc.
Diese Körper haben die unter „Simulierte Größen“ (S.3) genannten Eigenschaften zugwiesen und bilden die
Grundlage für Objektinteraktionen.
Warum starre Körper? Momentan würden so genannte Soft Bodies einen zu großen Rechenaufwand verursachen, da bei der
Berechnung zusätzlich die Verformung unter Einfluß externer Kräfte berücksichtigt
werden müßte. (siehe auch „Ausblick“)
• Sphere: Um den Mittelpunkt des
Körpers wird eine Kugel gelegt, die
diesen gerade komplett einschließt.
Die Kollisionsabfrage gestaltet sich
wiederum sehr einfach, da nur der
Abstand der Mittelpunkte zweier
Objekte berechnet werden muss.
Joints
Um die Bewegung zweier Objekte zueinander
einzuschränken, bedient man sich so genannter
Joints. Wohl am besten zu übersetzen mit „Gelenken“. Es gibt dabei verschiedene Arten wie:
• Oriented bounding box: Um den Körper wird ein Quader gelegt, der diesmal
allerdings parallel zu den Achsen des
Körpers ausrichtet wird. Die Erkennung
von Kollisionen erfordert hierbei schon
einiges an Aufwand und Mathematik.
• Mesh: ein Netz von Polygonen (typischerweise mit geringerer Polygonanzahl als der originale Körper)
nähert dabei die Form des Körpers
an. Die wohl aufwändigste und präziseste Art der Kollisionserkennung.
Außer den genannten Arten gibt es noch weitere:
• Heightfields: Bei dieser Technik wird
ein dreidimensionales Objekt aus einer Graustufengrafik abgeleitet, wobei
die Helligkeitsinformation die Höhe
an dieser Stelle wiederspiegelt.
• Alle möglichen Arten von
konvexen Objekten
• Andere Grundobjekte wie:
Kapsel und Zylinder
• Kugelgelenk
• Scharniergelenk
• Schiebegelenk
Um eine Idee davon zu erhalten was diese Joints bewirken betrachtet man am
besten die dazugehörigen Grafiken.
Allen diesen Verbindungen ist gemeinsam,
dass sie die in der Physik bekannten Freiheitsgrade einschränken. Betrachtet man der Einfachheit halber einmal ein System aus zwei
Körpern, die nicht miteinander verbunden
sind, so kann man sich überlegen, dass sich das
Geamtsystem in 3 Richtungen bewegen und um
3 Achsen rotieren kann. Nun können sich die
Körper auch noch innerhalb des Systemes in 3
Achsen gegeneinander bewegen und in 3 Achsen gegeneinander rotieren. Das ergibt somit
für das Gesamtsystem: 2*3 Freiheitsgrade der
Translation + 2*3 Freiheitsgrade der Rotation.
Insgesamt also 12 Freiheitsgrade. Verbindet man
diese zwei Körper nun über ein Schiebegelenk,
so erhält man immer noch: 3 Freiheitsgrade
der Translation und 3 der Rotation für das Gesamtsystem. Der Joint erlaubt nun allerdings
nur noch einen Freiheitsgrad der Translation
und einen der Rotation der Teilchen zueinander
(siehe auch die Grafik „Schiebegelenk“ auf Seite
6). Insgesamt also nur noch 8 Freiheitsgrade.
Es gibt nun noch in jeder Engine weitere Jointarten, die sich allerdings alle durch Einschränkungen der Freiheitsgrade beschreiben lassen.
Je nach Implementierung der Engine können diesen Gelenken auch noch weitergehende
Eigenschaften zugewiesen werden, z.B.
der verbindet so kann man eine relitätsnahe Version eines (menschlichen) Körpers erschaffen. Man
würde z.B. für ein Kniegelenk ein Schaniergelenk
verwenden und dafür Eigenschaften, wie maximaler Winkel und Drehwiderstand, definieren.
Unter Anderem finden Ragdollanimationen Anwendung, um frischverstorbene
Gegner möglichst realistisch mit anderen Gegenständen kollidieren zu lassen.
Kleidung & Haare
• Dämpfungskonstanten
• Federkonstanten
• Motoren/Aktuatoren
Ragdolls
Mithin den größten Rechenaufwand verursachen zur Zeit Simulationen von Haaren
oder Kleidern. Eine Stoffbahn eines Kleidungsstückes stellt sich für eine Physikengine
als ein System aus über Federn verbundene
Massenpunkte dar. Da viele Massenpunkte,
die miteinander interagieren viel Rechenaufwand verursachen, vereinfacht man dieses
Modell weiter und lässt die Federhärte gegen
unendlich gehen. Also eher eine Stahlstange
als eine Feder. Außerdem wird die Anzahl der
Massenpunkte stark verringert und die harten Kanten, die entstehen würden, geglättet.
Ragdoll heißt in der Übersetzung „Lumpenpuppe“ man erhält aber ein besseres Bild,
wenn man an „Gliederpuppe“ denkt.
Wenn man Rigid Bodies über Joints miteinan
Aktuell verfügbare Engines
Auf dem Markt gibt es ein Vielzahl von
Physikengines. Dazu ein kleiner Überblick über die weitverbreitetsten.
Havok – Physics3 & Havok FX
Bei dem Screenshot würde der Autor
die Anzahl der Punkte im Kleid der jungen Dame auf nicht mehr als 20 schätzen.
Erwähnenswert ist auch, dass, um ein
realistisches Schwingverhalten der Oberweite moderner weiblicher Charaktere
zu erhalten, die gleiche Technik wie bei
Kleidungsstücken verwendet wird.
Haarsimulationen verwenden das gleiche
Prinzip wie bei Kleidung, Allerdings mit einer eindimensionalen Massenpunktkette. Es
gibt in heutigen Computerspielen noch keine realitätsnahe Einzelhaarsimulation. Der
Rechenaufwand wäre bei einer Haaranzahl,
die in die zehntausende geht, einfach zu
groß. Bei realistisch schwingenden Pferdeschwänzen ist momentan leider Schluss.
Wie man an der Anzahl der Lizenznehmer
und der Spiele die Engines von Havok einsetzen
schon sieht, ist diese Firma momentan Marktführer. Beinahe alle großen Titel, sei es für PC
oder Konsole, sofern sie keine Eigenentwicklungen verwenden, kommen mit einer Engine
von Havok. Einige Titel wie z.B. Half Life 2
implementieren eine modifizierte Version.
Über die Gründe des hohen Verbreitungsgrads kann nur spekuliert werden.
An einer mit Informationen gespickten Internetseite liegt es sicherlich nicht.
Die Physics 3 Engine unterstützt alle zuvor
aufgezählten Features. Außerdem besteht auch
die Möglichkeit, seit der ersten Version Soft Bodies zu verwenden. Wobei laut einem Entwickler
von Havok „[..] die Entwicklung der Funktionen
für Rigid Bodies Priorität hatte“. Havok liefert
den Entwicklern außerdem viele Tools, z.B. für
komplette Fahrzeugsimulationen mit. Lobend sei
an dieser Stelle auch der Support erwähnt, da sich
ein Programmierer Zeit nahm, um einige Fragen
im Rahmen dieser Ausarbeitung zu beantworten.
Ageia - Novodex
Die Novodexengine wurde erst im Jahre
2004 von Ageia gekauft. Ebenso verleibte sich
die Firma Mitte 2005 das Entwicklungsteam
der Meqon Engine ein, um damit den Funkti
onsumfang der Novodexengine zu erweitern.
Damit ist diese Engine eine recht junge und es
existieren vorerst nur Spieleankündigungen und
Absichtserklärungen zur Zusammenarbeit.
Es bestehen gute Chancen, dass sich diese
Engine auf dem Markt etablieren kann, da die
kommende Unreal3 Engine als Standardphysiksystem die Novodex Engine verwenden wird.
Außerdem wird der kommende PhysX Chip aus
eigenem Haus diese Engine nativ unterstützen.
OpenDynamicsEngine
Ausblick
In Zukunft wird die Physik in Computerspielen
eine immer größere Rolle spielen. Damit steigen
auch die Anforderungen an kommende Physikengines. Insbesondere wird zur Zeit gearbeitet an:
• Soft Bodies: Im Gegensatz zu Rigid
Bodies die bisher die kleinsten Teile
einer Szene waren, verformen sich Soft
Bodies unter Einfluss von Kräften.
Damit wird man z.B. einen Wasserball
darstellen können, der sich beim Auftreffen auf den Boden korrekt verformt.
Die wohl interessanteste Eigenschaft der
ODE ist, dass der Quellcode frei verfügbar ist.
Die Engine unterstützt alle wichtigen Funktionen und fand auch schon Anwendung in einigen
kommerziellen Titeln, wie zum Beispiel Blood
Rayne2. Eine Vielzahl der Anwendungen ist
allerdings im Simulationssektor zu Hause.
Tokamak
NewtonGameDynamics
zwei weiter Physikengines, die es allerdings noch nicht in größere Spieleproduktionen geschafft haben.
• Flüssigkeiten: Realistische Flüssigkeiten
sind bisher leider nicht möglich, da auf
Grund der hohen Teilchenanzahl und
Kräfte zwischen den einelnen Teilchen
ein sehr hoher Rechenaufwand entsteht.
Mit realistischem Wasser wäre dann z.B.
ein echt aussehender Wasserfall möglich
und nicht nur eine animierte Textur.
• Realistische Haare/Kleidung: Insbesondere Einzelhaaranimationen stellen derzeit zu große Ansprüche an die
CPU. Ebenso realistische Kleider. In
Zukunft ist z.B. denkbar, dass Stoff
unter zu hoher Belastung zerreißt.
• Finite-Elemente-Analyse: Mit Hilfe der
FEA wird für ein System von Flächen
(z.B. ein Mesh aus Polygonflächen) die
auftretenden Kräfte an jedem Eckpunkt
berechnet. Damit liese sich z.B. bei
einer Kollision eines Autos mit Buschwerk oder Ähnlichem die wirkenden
Kräfte berechnen und damit die Stoßstange wirklichkeitsnah verformen.
Hardware Ausblick
Havok
Vor allem als Konkurrenzangebot zu PhysX plant Havok derzeit mehrere Neuerungen,
um die Effizienz seiner Engines zu steigern. So
ist z.B HavokFX darauf optimiert, Dualkern
CPUs, die in Zukunft eine immer wichtigere
Rolle spielen sollen, optimal auszunutzen.
Außerdem ist eine Verlagerung der Physikberechnung weg von der CPU und hin zur GPU
angedacht. Seit der Einführung des Shader
Models 3.0 können Shaderprogramme deutlich
komplexer sein (z.B. Schleifen und bedingte
Sprünge enthalten). Da im Speicher der Grafikkarte Teile der Informationen über die einzelnen Objekte vorgehalten werden, hat solch ein
Ansatz durchaus Chancen sich durchzusetzen.
Andererseits ist in modernen Computerspielen
meistens sowieso die Grafikkarte der Flaschenhals und daher die GPU auch recht ausgelastet.
Ageia
Hier die technischen Daten:
• 125M Transistoren - zum Vergleich:
Athlon64 Venice E6:68,5 M
Nvidia GeForce 7800 GTX: 302 M
• 182² mm Die-Größe
• 130nm von TSMC
• 20W Energieaufnahme
• 128MB GDDR3
Der angestrebte Preis der von Asus gebauten
Karte soll zwischen 249€ und 299€ liegen. Hier
sieht man auch schon den größten Nachteil von
PhysX. Es muss eine nicht gerade billige Zusatzkarte gekauft werden, um in den Genuss
von Physikbeschleunigung zu kommen. Leider
sind zum jetzigen Zeitpunkt noch keine weiteren
Informationen oder Benchmarkergebnisse verfügbar, um die Leistungsfähigkeit des Chips zu
bewerten. Laut Ageia soll folgendes mit dem Physikprozessor möglich sein/beschleunigt werden:
• 32000 Rigid Body-Objekte
• Soft Body-Objekte
• Flüssigkeiten
• Partikelsysteme (40-50 tausend Partikel)
• Kollisionserkennung
Die bisher verfügbaren Demos sehen auf
jeden Fall sehr vielversprechend aus. Man
kann gespannt sein, wie künftige Spiele den
Realismusgrad weiter erhöhen werden.
Im Jahr 2005 kündigte Ageia einen Zusatzchip, namens PhysX, an, dessen Aufgabe es sein
soll, Physikberechnungen deutlich zu beschleunigen. Die Firma kommt urspünglich aus dem
Bereich der Hochgeschwindigkeits-Netzwerkprozessoren und hat somit einiges an Erfahrung
wenn es darum geht, große Datenmengen in
kurzer Zeit zu bewegen. Daher hat der angkündigte PhysX-Chip dieser Firma gute Chancen die
Physikberechnung wesentlich zu beschleunigen.
Der Flaschenhals bei Physikberechnungen liegt
wohl weniger in der eigentlichen Berechnung
als vielmehr in der verfügbaren Speicherbandbreite. Dies macht sich auch in der Speicherausstattung der PhysX-Zusatzkarte bemerkbar.
10
Quellenangabe
http://www.gamasutra.com/resource_guide/20030121/
http://ode.org/ode-latest-userguide.html
http://www.ageia.com/developers/downloads.html
http://www.gamedev.net/reference/list.asp?categoryid=28
http://www.d6.com/users/checker/dynamics.htm
http://www.havok.com
http://ai.eecs.umich.edu/soar/Classes/494/talks/Physics.pdf
http://www.gdhardware.com/interviews/agiea/002.htm
Bildnachweis
1: Realtime fluids - Ageia
3: Motor - ODE Dokumentation
4.: Screenshot Quake4 - ID Software
5-6: Bounding Boxes - Eigenanfertigung
6: Joints - ODE Dokumentation
7: Ragdoll & Kleidung - Eigenanfertigung
8: Spieleverpackungen - www.havok.
com & Herstellerseiten der Spiele
9: Realtime Fluids - Ageia
9: PhysX - Asus
11