PART V CONTACT PHYSICS Chapter 16 - 17 Aufbaumodul 3: Visuelle Programmierung II Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Prof.

Slides:



Advertisements
Ähnliche Präsentationen
Dauermagnete Bei magnetischen Materialien unterscheidet man Eisenkerne bzw. Weicheisenstücke und Dauermagnete bzw. Hart-magnetische Materialien. Dauermagnete.
Advertisements

TAGUNG DER DEUTSCH-LUSITANISCHEN JURISTENVEREINIGUNG O processo penal português Panorâmica introdutória Der portugiesische Strafprozess ein einführender.
Ach wie gut, daß niemand weiß Der Schutz von Wissen
Herzlich Willkommen bei SIMPLE STABLE BULDING
Adjektivendungen Tabellen und Übungen.
ZWILLING Neuheiten 2008.
Das Hexenkochbuch Nicht Rattenschwänze, Spinnenbein
 Präsentation transkript:

PART V CONTACT PHYSICS Chapter 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

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

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()

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

THE BENEFITS OF PESSIMISTIC COLLISON DETECTION

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 )

OPTIMIZATIONS Zu den Optimierungen… Berechnungen nur einmalig ausführen Speicherplatz wieder freigeben Überflüssige Berechnungen verkürzen

SLEEP Problem Konsistente Einwirkung von Kraft verhindert Ruhezustand Ziel Berechnungen für ruhende Objekte vermeiden Lösung Sleep State hinzufügen

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(); }

SETS OF INDEPENT OBJECTS

SETS OF INDEPENT OBJECTS

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 17 PUTTING IT ALL TOGETHER

DATA 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!