PART V CONTACT PHYSICSChapter 16 - 17
Aufbaumodul 3: Visuelle Programmierung II
Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung
Prof. Dr. Manfred Thaller
Sommersemester 2012
Dennis Kiewning
2
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
3
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)
16.1 STABILITY
4
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
5
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()
6
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
7
16.1 THE BENEFITS OF PESSIMISTIC COLLISON DETECTION
8
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 )
9
16.2 OPTIMIZATIONS
Zu den Optimierungen…
Berechnungen nur einmalig ausführen Speicherplatz wieder freigeben Überflüssige Berechnungen verkürzen
10
16.2 SLEEP
Problem Konsistente Einwirkung von Kraft verhindert Ruhezustand
Ziel Berechnungen für ruhende Objekte vermeiden
Lösung Sleep State hinzufügen
11
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
12
Ein einfacher Algorithmus…
In jedem Frame wird die Bewegung eines Objekts erfasst Bei einer Stabilisierung über mehrere Frames werden die
Objekte „eingeschläfert“
16.2 PUTTING OBJECTS TO SLEEP
if (motion < sleepEpsilon) { setAwake(false);}
13
Hintergrund Ruhende Objekte müssen über Einschläge informiert werden Anliegende Objekte ebenfalls Methode hinzufügen: Contact()
16.2 WAKING OBJECTS UP
void Contact::matchAwakeState() {/* … */if (body0awake ^ body1awake) {
if (body0awake) body[1]->setAwake();else body[0]->setAwake();
}}
14
16.2 SETS OF INDEPENT OBJECTS
15
16.2 SETS OF INDEPENT OBJECTS
16
16.2 CONTACT GROUPING
Prinzip Gruppierte Objekte haben keine Beziehung zu anderen Gruppen
17
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
17PUTTING IT ALL TOGETHER
18
17.1DATA FLOW TROUGH THE PHSICS ENGINE
19
Algorithmus der das Bewegungsverhalten von menschlichen Körpern simuliert
Bewegungen werden in Echtzeit berechnet Teile eines Körpers werden über Gelenke verbunden
17.1 RAGDOLLS
20
Objekte werden realistisch zerstört abhängig von der Position des Einschlags (Bruchstelle)
17.1 FRACTURE PHYSICS
21
Vielen Dank!