Physikalische Simulation mit NVIDIA PhysX

Slides:



Advertisements
Ähnliche Präsentationen
Simulation komplexer technischer Anlagen
Advertisements

13. Transformationen mit Matrizen
Mechanik Mathematische Grundlagen und Begriffe: Formel? Funktion
(Harmonische) Schwingungen
Kapitel 3: Erhaltungssätze
Anliegen des Koordinationsbüros Molekulare Biomedizin:
Kollisionen erkennen Kollisions- und Schnittpunkttests auf Dreieckbasis Kollisions- und Schnittpunkttests auf Viereckbasis Einsatz von achsenausgerichteten.
Simulation physikalischer Einflüsse
Grundlagen der Geometrie
1.8 Energie und Leistung Klausur
1.8 Energie und Leistung zum Verständnis des Begriffs „Energie“
1.5 Typen von Kräften A abgeleitete Kräfte: elastische Kraft, Muskelkraft, Reibungskraft, Schwerkraft, ... B fundamentale Kräfte: elektrische Kraft.
Tensoreigenschaften physikalischer Größen
Drehmoment Drehmomentschlüssel r=0,4m F=50N r=0,2m F=100N Achtung:
Impuls und Impulserhaltung
Kinetische Energie Elektrische Energie wird zugeführt, um die Geschwindigkeit zu erhöhen (Beschleunigungsarbeit) Kinetische Energie Kinetik=Lehre von der.
Java: Dynamische Datentypen
Bewegung elektrischer Ladungen im elektrischen Feld
Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Prof.
Druck- & Beschleunigungssensoren
Kreiselgleichungen Annette Eicker 12. Januar
Wie messen wir eine Kraft Fx ?
Modellierung von Baumstrukturen mit einem einzigen Polygonnetz
Starrkörpereigenschaften
Variationsformalismus für das freie Teilchen
Einführung in die Physik für LAK
Ein Effekt der Induktion
FHP - Fachbereich Bauingenieurwesen
Collision Detection.
Universität Stuttgart Wissensverarbeitung und Numerik I nstitut für K ernenergetik und E nergiesysteme Numerik partieller Differentialgleichungen, SS 01Teil.
Physik für Mediziner und Zahnmediziner
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
Proseminar: How to make a PIXAR movie?
§3 Allgemeine lineare Gleichungssysteme
Erhaltung von Energie, Impuls und Drehimpuls
Massenmittelpunkt, „Schwerpunkt“, Drehachsen und Trägheitsmoment
Winkelgeschwindigkeit, Drehimpuls, Drehmoment
Erhaltung von Energie, Impuls und Drehimpuls
Impuls und Impulserhaltung - vektoriell -
Masse und Kraft Masse: elementare Eigenschaft eines jeden Körpers
Reibung zwischen festen Stoffen
Skalare, Vektoren.
Ein Thema der Physik des „Massenpunktes“ und der Photonen
Bewegung auf der Kreisbahn: Die Zentripetalbeschleunigung
Impuls und Impulserhaltung
Verwandtschaft zwischen der Schwingung und der Bewegung auf der Kreisbahn.
Inhalt Weg-Zeitgesetz nach der cos- oder sin- Funktion
Verhalten von Objekten in der Szene
Ein Thema der Physik des „Massenpunktes“ und der Photonen
Kreisel und Präzession
von Marco Bühler und Elia Bodino
I. Die Mechanik Newtons.
Ausgewählte Kapitel der Physik
PART V CONTACT PHYSICS Chapter Aufbaumodul 3: Visuelle Programmierung II Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Prof.
Reibung Reibungskräfte sind die reactio auf die Bewegungskräfte actio
Zwangskraft Prinzip der Statik Gewichtskraft.
Physik für Mediziner und Zahmediziner
Masse und Kraft Masse: elementare Eigenschaft eines jeden Körpers
Erläuterungen zur Kraft
Impulserhaltungssatz Newton Pendel
Was ist mechanische Leistung?
Lernplan für den Die Coulombkraft und das Potenzial in der Umgebung
PhysX auf der GPU in Batman: Arkham Asylum & bei Fluid Simulations Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung Softwaretechnologie.
Kapitel 3: Erhaltungssätze
Erhaltungsgrößen Egon Berger Didaktik der Physik
Physik für Mediziner, Zahnmediziner und Pharmazeuten SS2000 6
Kapitel 3: Erhaltungssätze
2.5. Reibungskräfte zwischen festen Körpern
2. Dynamik Zur vollständigen Beschreibung und Erklärung von Bewegungen müssen die Ursachen für diese Bewegungen (Kräfte, Drehmomente) und die Eigenschaften.
Fachdidaktische Übungen Stefan Heusler.
 Präsentation transkript:

Physikalische Simulation mit NVIDIA PhysX 28.01.2009 David Riedmann André Müller

Inhalt Grundlagen physikalischer Simulation PhysX Simulation von Bewegungen Probleme bei der Simulation Kollisionen, Stöße Beispielszenario/Demo PhysX Einführung in das SDK Spezialeffekte Hardware-Beschleunigung Demos

Grundlagen physikalischer Simulation

Beschreibung von Bewegungen Position eines Objektes: Geschwindigkeit Änderungsrate der Position erste Ableitung nach der Zeit: Beschleunigung Änderungsrate der Geschwindigkeit zweite Ableitung nach der Zeit:

BEISPIEL: Objekt im freien Fall Bewegungsgleichung Beschleunigung = Erdbeschleunigung Lösung: Integrieren einmal Integrieren ergibt Geschwindigkeit nochmal Integrieren ergibt Position Integrationskonstanten Anfangsgeschwindigkeit und -position

In der Simulation Differenzialgleichungen numerisch lösen iteriere über diskrete Zeitschritte addiere Änderungsraten in jedem Zeitschritt Explizites Eulerverfahren in jedem Zeitschritt implizite Verfahren, Runge-Kutta mehrere Zeitschritte in die Zukunft mit verschiedenen Gewichtungen Beschleunigung abhängig von zukünftigen Kräften

Probleme bei der Simulation Energieerhaltung kann verletzt werden Objekte werden z.B. immer schneller Bewegung nicht exakt kein Stillstand/ständige kleine Bewegungen Durchdringungen bei Kollision Ursachen endliche Zeitschritte Rundungsungenauigkeiten (Fließkommazahlen)

Lösungsmöglichkeiten Zeitschritte verkleinern  Rechenzeit! Unerlaubte Durchdringungen in jedem Zeitschritt nachträglich beseitigen eventuell unnatürliche Bewegungen/Sprünge Reibungen vergrößern zehrt unerlaubte Energiezunahme auf muss genau eingestellt werden, damit realistisch Plastische statt elastische Kollisionen „weiche“ Stöße verringert Energie

State of the Art - Methoden Langrange-Multiplikator-Methoden bilde Lösung der DGLs auf die Lösung von linearen Gleichungssystemen ab: Linear Complementary Problems (LCP) Nebenbedingungen für Durchdringungsfreiheit Herausforderungen/Probleme singuläre Matrizen schwach besetzte Matrizen Integrator-Probleme bleiben

Rotationen Darstellung über Winkel, 3x3 Drehmatrix oder Quaternion (4-Tupel) Rotation um feste Achse durch Schwerpunkt analog zur Translation Position  Winkel/Matrix/Quaternion Geschwindigkeit  Winkelgeschwindigkeit (Drehachse) Beschleunigung  Winkelbeschleunigung Masse  Trägheitsmoment Kraft  Drehmoment Drehachse im Allgemienen nicht konstant!

Rotationen um beliebige Achsen Veränderung der Drehachse durch Kollisionen oder beim Rollen in jedem Zeitschritt momentane Drehung und Drehachse aktualisieren Trägheitsmoment abhängig von der momentanen Drehachse  Trägheitstensor (Darstellung als 3x3-Matrix) bei Drehungen um einer der drei Hauptträgheitsachsen oder dazu Parallele reicht ein skalares Trägheitsmoment z.B. bei gelagerten Drehachsen (Fahrzeugräder)

Externe Kräfte / Drehmomente beschleunigen Objekte Beschleunigung hängt von Objektmasse 𝑚 ab Winkelbeschleunigung hängt von Trägheitstensor ab Kräfte darstellbar als Kraftvektor Vektorfelder (Kraftvektor abhängig von Position) darstellbare Effekte Gravitation Wind Magnetfelder

Zustand eines Objektes Masse Position (Vektor) Geschwindigkeit (Vektor) Drehung (Winkel/3x3-Matrix/Quaternion) Trägheitstensor (3x3-Matrix) Winkelgeschwindigkeit/Drehachse (Vektor) Zustandsänderungen durch Käfte  Beschleunigungen Drehmomente  Winkelbeschleunigungen

Kollisionserkennung Kugeln Quader / Dreiecksobjekte Kollision falls Summe der Radien > Abstand der Mittelpunkte Quader / Dreiecksobjekte Separating Axis Theorem projiziere Objektausdehnung auf alle möglichen Achsenrichtungen wenn Projektionsintervalle nicht überlappen  keine Kollision

Kollisionserkennung N Objekte  Paare  Objekte mit vielen Dreiecken viele Rechenoperationen/Abfragen Bounding Volumes einfache Hüllkörper nähern komplexe Formen an Kugeln Quader (Bounding Box, Oriented Bounding Box) Kapseln (Zylinder mit angeflanschten Halbkugeln) Space Partitioning (Octree) finde wahrscheinliche Kollisionspaare in

Stoßprozesse an der Ebene: Einfallswinkel = Ausfallswinkel Geschwindigkeit Komponente parallel zur Wand bleibt gleich Komponente senkrecht zur Wand ändert Vorzeichen Elastizität 1  elastisch keine Energie geht verloren 0  plastisch Stoßpartner nach Stoß in Ruhe

Stoßprozesse: 2 identische Kugeln Geschwindigkeit Tangentialkomponente unverändert Radialkomponente wird ausgetauscht

Stoßprozesse: verschiedene Kugeln Impulserhaltung + Energieerhaltung Elastischer Stoß: Summe der Impulse/Energien vor und nach dem Stoß gleich Radialgeschwindigkeiten nach dem Stoß abhängig von den Massen der Stoßpartner: Einfache Implementierung nicht-elastischer Stöße: reduziere beide Geschwindigkeiten um Faktor

Stoßprozesse Allgemein Impulserhaltung + Energieerhaltung für rotierende Objekte führt auf Newton-Hypothese beschreibt Änderung der Geschwindigkeiten und Winkelgeschwindigkeiten beim Stoß Parameter: Elastizität wie zuvor

Reibungen Haftreibung Gleitreibung Rollreibung Reibungskoeffizienten ~ Anpresskraft ~ Haftreibungskoeffizient Gleitreibung ~ Gleitreibungskoeffizent ~ Relativgeschwindigkeit reibender Objekte Rollreibung ~ Rollreibungskoeffizient Reibungskoeffizienten Rollen < Gleiten < Haften

Beispielszenario

Beispielszenario geschlossener würfelförmiger Behälter Mittelpunkt im Ursprung Seitenlänge 2L (veränderbar) N Kugeln im Innern Stöße (Elastizität einstellbar) Kugel-Wand Kugel-Kugel Schwerkraft in Richtung (0,-g,0) (einstellbar) keine Rotation/Rollen

Beispielszenario – Implementierung explizites Euler-Verfahren

Beispiel: Kollision Kugel-Wand

Beispiel: Kollision Kugel-Kugel

Einführung in das PhysX SDK Grundlagen / Konventionen Initialisierung Aktoren Gelenke Effektoren Spezialeffekte

Interessantes über PhysX 2002 Gründung von Ageia als StartUp Entwicklung und Veröffentlichung von PhysX (vormals NovodeX) im Mai 2006 PhysX besteht aus zwei Komponenten (SDK und einer Zusatzkarte) Zeitgleich entwickelt Havok zusammen mit NVIDIA Havok FX; eine Physik-Engine die die Physikberechnung auf die Grafikkarte holt

Interessantes über PhysX September 2007: Intel kauft Havok Havok FX wird eingestellt, da Intels Grafikkarten zu schwach sind. Februar 2008: NVIDIA übernimmt Ageia August 2008: NVIDIA veröffentlicht “Geforce Power Pack“ Jetzt finden die Berechnungen über CUDA auf der Grafikkarte statt. Ergebnis: Eine NVIDIA Grafikkarte ist schneller als eine Ageia Zusatzkarte + Grafikkarte

Harware-Beschleuningung: CUDA Compute Unified Device Architecture Berechnungen über GPU und Texturspeicher nutzt im Prinzip gleiche Hardware- Mechanismen wie Shaderprogramme CUDA normalerweise: C-Funktionen „Kernels“ für die GPU mit speziellem NVIDIA Compiler kompilieren PhysX: kein extra CUDA-Code notwendig PhysX erkennt automatisch, ob ein CUDA- fähiger Grafikkartentreiber installiert ist und führt dann Berechnungen auf der GPU aus.

Harware-Beschleuningung: CUDA Aktuelle Leistungsdaten (theoretisch): NVIDIA GeForce GTX 285: 1,06 TFLOP AMD HD 4870 (RV770) X2: 2,4 TFLOP Core 2 Quad bei 3 Ghz: 96 GFLOPS Mehr Infos zu Cuda hier

SDK: Prinzipielles Physikalische Eigenschaften und Zustände von der Geometrie entkoppelt spezielle Import-Funktionalität für Geometrie für Cloth und Soft Bodies noch Vorbereitung notwendig Punktverschmelzung möglich Abfasen von Kanten

SDK: Initialisierung NxPhysicsSDK* gPhysicsSDK NxCreatePhysicsSDK ( NxU32 sdkVersion, NxUserAllocator * allocator = NULL, NxUserOutputStream * outputStream = NULL, const NxPhysicsSDKDesc & desc = NxPhysicsSDKDesc(), NxSDKCreateError * errorCode = NULL ) erstellt bei Vorhandensein des richtigen SDK eine Instanz des PhysX SDK Singleton/ReferenceCounting für jeden Call  Release für jede Instanz

SDK: Szene initialisieren Definition: Eine Szene ist ein Container für Actors (Körper) Joints (Gelenke) Effectors (Kräfte) NxSceneDesc sceneDesc; sceneDesc.gravity = gDefaultGravity; NXScene *gScene = gPhysicsSDK-> createScene(sceneDesc);

SDK: Actor erstellen Ein Actor ist das wesentliche Simulationsobjekt von PhysX wird von einer Szene erstellt und ist in ihr enthalten Kann dynamisch (Body vorhanden) oder statisch (Body nicht vorhanden) sein. referenziert 0 (dynamisch), 1(statisch) oder mehrere Shapes

SDK: Shapes sind an Aktoren gebunden enthalten darstellbare Geometrie enthalten Materialeigenschaften Shape-Typen Kugeln Quader Kapseln Konvexes Mesh Dreiecks-Mesh

SDK: Actor Beispielcode NxActorDesc actorDesc; NxBodyDesc bodyDesc; NxBoxShapeDesc boxDesc; boxDesc.dimensions.set( 1, 1, 10); boxDesc.localPose.t = NxVec3(0, 0, 0); actorDesc.body = &bodyDesc; actorDesc.density = 1.0f; actorDesc.globalPose.t = NxVec3(-10,40,10); NxActor *gBox = gScene->createActor(actorDesc); if(gBox) gBox->setLinearVelocity(NxVec3(0,50,0));

SDK: Massebestimmung eines actors erfolgt über das Shape Möglichkeiten der Angabe einer Masse: Masse > 0; keine Dichte und Trägheitstensor Dichte > 0; keine Masse und Trägheitstensor Masse > 0, Trägheitstensor >0; keine Dichte andernfalls schlägt das Erzeugen des Actors fehl aus Dichteinformation wird Masse anhand der Shapegeometrie errechnet

SDK: Materialen Material bestimmt Eigenschaften Elastizität Reibung (Gleit- und Haftreibung) Besonderheit: anisotrope Reibung Masse/Massendichte Problem: Eigenschaften nicht nur von einem Material abhängig Combine-Methoden: (min, max, avg, multiply) zukünftig bewegte Oberflächen und andere Arten der Reibung (Punktreibung)

SDK: Kollision zwischen Aktoren Bedingungen für Kollisionserkennung mindestens einer der Aktoren muss dynamisch sein Kollisionen zwischen den Gruppen der Aktoren müssen deaktiviert sein insbesondere Kollision zwischen Aktoren oder Shapes ist nicht deaktiviert Problem: schnelle Bewegung bei zu großen Zeitschritten => Continuous Collision Detection

SDK: Joints Ein Joint, auch Constraint genannt, referenziert immer zwei Actors und setzt deren Bewegung in Beziehung zueinander. Der Aufwand der Berechnung eines Joints hängt unmittelbar von der Anzahl der Freiheitsgrade (maximal 6) ab. Kann dynamisch (Body vorhanden) oder statisch (Body nicht vorhanden) sein. Je nach Anwendungsgebiet gibt es angepasste Joints: NxDistanceJoint, NxCylindricalJoint, NxD6Joint, …

SDK: Joints Beispielcode NxDistanceJointDesc distDesc; distDesc.actor[0] = pSphere1; distDesc.actor[1] = pSphere2; distDesc.localAnchor[0].zero(); distDesc.localAnchor[1].zero(); NxSpringDesc spring; spring.spring = 100; spring.damper = 0.5; distDesc.spring = spring; NxJoint *pJoints = gScene->createJoint(distDesc);

SDK: Architektur-Diagramm

PhysX: Flüssigkeiten Realisiert als Partikelsystem Szenen-Setup Partikeleigenschaften Position, Geschwindigkeit, Lebenszeit, Dichte,… Szenen-Setup Quellen (Emitter), kann an Shapes gebunden werden Senken (Drain) zusätzliche Manipulationsmöglichkeiten: Partikel hinzufügen, updaten, löschen 3 Berechnungsmethoden zur Auswahl Smoothed Particle Hydrodynamics (SPH) schnell, numerisch robust keine Interaktion zwischen Partikeln gemischt

PhysX: Soft Bodies Realisiert als Feder-Masse-System benutzt den Cloth-Solver erfordert Tetraedrisierung von Objekten Federn an den Tetraederkanten hält Tetraedervolumina konstant Dehnungsbeschränkung

PhysX: Cloth (Textilien) Parameter Biegesteifigkeit, Zugsteifigkeit Dichte, Dicke Dämpfung, Reibung externe Kräfte (Wind, Schwerkraft) zulässige Dehnungs- und Biegegrenzen Massepunkte lassen sich an Festkörperpunkte/Shapes binden Realisiert als Feder-Masse-System Selbst-Kollision Kollision mit festen Körpern

SDK: Konventionen Rückgabewerte und Parameter die NULL sein dürfen, werden als Pointer übergeben. Überprüfen der Gültigkeit/ungewohnter Code: NxActorDesc actorDesc; NxBodyDesc bodyDesc; ......... actorDesc.body = &bodyDesc;

SDK: Konventionen Rückgabewerte und Parameter die nicht NULL sein dürfen, werden als Referenzen übergeben. Vorteile: Es werden keine überflüssigen Kopien angelegt und Überprüfung auf NULL überflüssig. Objekte werden nicht direkt erstellt. Sondern über Deskriptoren von einer übergeordneten Instanz erzeugt.

Simulationen laufen asynchron Rigid Bodies Flüssigkeiten Cloth Soft Bodies Kraftfelder

PhysX Threading Interface sceneDesc.flags &= ~NX_SF_SIMULATE_SEPARATE_THREAD; sceneDesc.flags |= NX_SF_SIMULATE_SEPARATE_THREAD; Weiteres Flag: NX_SF_ENABLE_MULTITHREAD

PhysX Performnace Quelle: www.computerbase.de

Quellen www.nvidia.com http://www.computerbase.de/artikel/hardware/grafik karten/2008/bericht_nvidia_cuda_physx_ueberblick/1 http://www.heise.de/newsticker/Radeon-HD-4870-X2- AMD-stellt-schnellste-Grafikkarte-vor-- /meldung/114131 http://www.heise.de/newsticker/Nvidia-kuendigt- GeForce-GTX-285-an--/meldung/121359 http://www.cebit.de/newsanzeige_d?news=34080&ta g=1213567201&source=/newsarchiv_d&noindex http://ode.org/slides/parc/dynamics.pdf