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