PART V CONTACT PHYSICS
Chapter 16 - 17
Aufbaumodul 3: Visuelle Programmierung II
Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung
Prof. Dr. Manfred Thaller
Sommersemester 2012
Dennis Kiewning
16
STABILITY AND OPTIMIZATION
So weit...
Merkwürdige Effekte (Objekte gequetscht oder verzerrt)
Slow Downs durch viele Objekte
Ziel des Kapitels:
Ein stabiles und schnelles System
2
16.1
STABILITY
Die Probleme in der Übersicht...
Transformation der Matrizen führt zu Rotationsproblemen
Schnelle Objekte durchdringen andere Objekte
Ruhende Objekte rutschen von schiefen Ebenen ab
Unterschiedlich große Mengen wirken unrealistisch
(In Bewegung und Rotation)
3
16.1
QUATERNION DRIFT
Problem
Sichtbare Objekte werden verzerrt
Grund
Transformationsmatrizen werden aus Positionsvektor und
Quaternion* der Rigid Bodies generiert
Quaternion verliert nach vielen Berechnungen seine Einheitslänge
Lösung
Vor dem Generieren der Matrix die Quaternion normalisieren
* und/oder Achsen & Längen-Darstellung
4
16.1
IINTERPENETRATION ON SLOPES
Problem
Ruhende Objekte rutschen von schiefen Ebenen ab
Grund
Zwischen dem Update der Rigid Bodies und dem Ausführen der
Kollision besitzen bereits kollidierte Objekte unterschiedliche
Richtungen
Lösung
Berechnung der relativen Geschwindigkeit:
Jede Geschwindigkeit die sich bei der Kollision aufgebaut hat wird
entfernt: calculateLocalVelocity()
5
16.1
THE BENEFITS OF PESSIMISTIC COLLISON
DETECTION
Problem
Objekte „vibrieren“ bei einer Kollision auf der Oberfläche
Grund
Durchdringungen in einem einzigen Frame sind nicht sichtbar,
allerdings können sich kontinuierliche Kontakte mit den Objekten
in einem Kreislauf verlieren
Lösung
Kollisionen nur in der unmittelbaren Nähe von Objekten berechnen
Geometrie der Kollision um eine Einheit erhöhen
6
16.1
THE BENEFITS OF PESSIMISTIC COLLISON
DETECTION
7
16.1
CHANGING MATHEMATICAL ACCURACY
Problem
Kollisionsberechnungen sind nicht präzise genug
Grund
Floating Points werden in gruppierten Ziffern und einem Exponent
gespeichert
Große Unterschiede in der Höhe liefern falsche Ergebnisse
Lösung
Von floats zu doubles wechseln (Um ein vielfaches genauer )
8
16.2
OPTIMIZATIONS
Zu den Optimierungen…
Berechnungen nur einmalig ausführen
Speicherplatz wieder freigeben
Überflüssige Berechnungen verkürzen
9
16.2
SLEEP
Problem
Konsistente Einwirkung von Kraft verhindert Ruhezustand
Ziel
Berechnungen für ruhende Objekte vermeiden
Lösung
Sleep State hinzufügen
10
16.2
ADDING SLEEP STATE
Der Rigid Body Klasse werden 3 Membervariablen hinzugefügt
Boolean: isAwake
informiert die Klasse über den allgemeinen Zustand
Boolean: canSleep
Informiert die Klasse ob ein Objekt „einschlafen“ darf
Real*: motion
Informiert die Klasse über die Bewegungen eines Objekts
*typef of float
11
16.2
PUTTING OBJECTS TO SLEEP
Ein einfacher Algorithmus…
In jedem Frame wird die Bewegung eines Objekts erfasst
Bei einer Stabilisierung über mehrere Frames werden die
Objekte „eingeschläfert“
if (motion < sleepEpsilon) {
setAwake(false);
}
12
16.2
WAKING OBJECTS UP
Hintergrund
Ruhende Objekte müssen über Einschläge informiert werden
Anliegende Objekte ebenfalls
Methode hinzufügen: Contact()
void Contact::matchAwakeState() {
/* … */
if (body0awake ^ body1awake) {
if (body0awake) body[1]->setAwake();
else body[0]->setAwake();
}
}
13
16.2
SETS OF INDEPENT OBJECTS
14
16.2
SETS OF INDEPENT OBJECTS
15
16.2
CONTACT GROUPING
Prinzip
Gruppierte Objekte haben keine Beziehung zu anderen Gruppen
16
17
PUTTING IT ALL TOGETHER
Die vier Teile der Engine…
force generator
Berechnet den „Ist-Zustand“ des Spiels (Kräfte der Objekte)
rigid-body simulator
Berechnet die Bewegungen der Körper in Abhängigkeit ihrer
Krafteinwirkung
collision dedector
Berechnet die Kollisionen einzelner Objekte
collision resolver
Korrigiert die Bewegungen der Rigid Bodies
17
17.1
DATA FLOW TROUGH THE PHSICS ENGINE
18
17.1
RAGDOLLS
Algorithmus der das Bewegungsverhalten von menschlichen
Körpern simuliert
Bewegungen werden in Echtzeit berechnet
Teile eines Körpers werden über Gelenke verbunden
19
17.1
FRACTURE PHYSICS
Objekte werden realistisch zerstört
abhängig von der Position des Einschlags (Bruchstelle)
20
Vielen Dank!
21