Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Physikalische Simulation mit NVIDIA PhysX

Ähnliche Präsentationen


Präsentation zum Thema: "Physikalische Simulation mit NVIDIA PhysX"—  Präsentation transkript:

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

2 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

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 Integrationskonstanten Anfangsgeschwindigkeit 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 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

9 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

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

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ägheitsmoment z.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 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

15 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

16 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

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 Gleitreibung Rollreibung Reibungskoeffizienten
~ Anpresskraft ~ Haftreibungskoeffizient Gleitreibung ~ Gleitreibungskoeffizent ~ Relativgeschwindigkeit reibender Objekte Rollreibung ~ 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; eine Physik-Engine die die Physikberechnung auf die Grafikkarte holt

28 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

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

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 Cuda hier

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* 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

33 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);

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

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 => Continuous Collision Detection

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

42 SDK: Architektur-Diagramm

43 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

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: NxActorDesc actorDesc; NxBodyDesc bodyDesc; 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:

51 Quellen karten/2008/bericht_nvidia_cuda_physx_ueberblick/1 AMD-stellt-schnellste-Grafikkarte-vor-- /meldung/114131 GeForce-GTX-285-an--/meldung/121359 g= &source=/newsarchiv_d&noindex


Herunterladen ppt "Physikalische Simulation mit NVIDIA PhysX"

Ähnliche Präsentationen


Google-Anzeigen