1 / 51

Physikalische Simulation mit NVIDIA PhysX

Physikalische Simulation mit NVIDIA PhysX. 28.01.2009 David Riedmann André Müller. Inhalt. Grundlagen physikalischer Simulation Simulation von Bewegungen Probleme bei der Simulation Kollisionen, Stöße Beispielszenario/Demo PhysX Einführung in das SDK Spezialeffekte

fairfax
Download Presentation

Physikalische Simulation mit NVIDIA PhysX

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Physikalische Simulationmit NVIDIA PhysX 28.01.2009 David Riedmann André Müller

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

  3. Grundlagen physikalischer Simulation

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

  5. BEISPIEL: Objekt im freien Fall • Bewegungsgleichung • Beschleunigung = Erdbeschleunigung • Lösung: Integrieren • einmal Integrieren ergibt Geschwindigkeit • nochmal Integrieren ergibt Position • IntegrationskonstantenAnfangsgeschwindigkeit und -position

  6. 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

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

  8. Lösungsmöglichkeiten • Zeitschritte verkleinern  Rechenzeit! • Unerlaubte Durchdringungen in jedemZeitschritt 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

  9. State ofthe 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

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

  11. 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ägheitsmomentz.B. bei gelagerten Drehachsen (Fahrzeugräder)

  12. 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

  13. 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

  14. Kollisionserkennung • Kugeln • 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

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

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

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

  18. 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

  19. 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

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

  21. Beispielszenario

  22. 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

  23. Beispielszenario – Implementierung • explizites Euler-Verfahren

  24. Beispiel: Kollision Kugel-Wand

  25. Beispiel: Kollision Kugel-Kugel

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

  27. 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;einePhysik-Engine die diePhysikberechnung auf die Grafikkarte holt

  28. Interessantes über PhysX • September 2007: Intel kauft HavokHavok FX wird eingestellt, da Intels Grafikkarten zu schwach sind. • Februar 2008: NVIDIA übernimmt Ageia • August 2008: NVIDIA veröffentlicht“Geforce Power Pack“Jetztfinden die Berechnungenüber CUDA auf derGrafikkartestatt. • Ergebnis: Eine NVIDIA Grafikkarteistschnelleralseine Ageia Zusatzkarte + Grafikkarte

  29. Harware-Beschleuningung: CUDA • ComputeUnified 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 istund führt dann Berechnungen auf der GPU aus.

  30. 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 Cudahier

  31. 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

  32. SDK: Initialisierung NxPhysicsSDK* gPhysicsSDKNxCreatePhysicsSDK ( NxU32 sdkVersion, NxUserAllocator * allocator = NULL, NxUserOutputStream * outputStream = NULL, constNxPhysicsSDKDesc & 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

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

  34. 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

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

  36. SDK: Actor Beispielcode NxActorDescactorDesc; NxBodyDescbodyDesc; NxBoxShapeDescboxDesc; 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));

  37. 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

  38. 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)

  39. 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 => ContinuousCollisionDetection

  40. 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, …

  41. SDK: Joints Beispielcode NxDistanceJointDescdistDesc; 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);

  42. SDK: Architektur-Diagramm

  43. PhysX: Flüssigkeiten • Realisiert als Partikelsystem • PartikeleigenschaftenPosition, 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 • SmoothedParticle Hydrodynamics (SPH)schnell, numerisch robust • keine Interaktion zwischen Partikeln • gemischt

  44. 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

  45. 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

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

  47. 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.

  48. Simulationen laufen asynchron • Rigid Bodies • Flüssigkeiten • Cloth • Soft Bodies • Kraftfelder

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

  50. PhysX Performnace Quelle: www.computerbase.de

More Related