ContactPhysics_DennisKiewning

Werbung
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
Herunterladen