Upload
sofia-raichle
View
108
Download
0
Embed Size (px)
PHYSIKALISCHE SIMULATIONMIT NVIDIA PHYSX28.01.2009David RiedmannAndré Müller
INHALT Grundlagen physikalischer
SimulationSimulation von BewegungenProbleme bei der SimulationKollisionen, StößeBeispielszenario/Demo
PhysX Einführung in das SDKSpezialeffekteHardware-BeschleunigungDemos
GRUNDLAGEN PHYSIKALISCHER SIMULATION
BESCHREIBUNG VON BEWEGUNGEN
Position eines Objektes: Geschwindigkeit
Änderungsrate der Positionerste Ableitung nach der Zeit:
BeschleunigungÄnderungsrate der Geschwindigkeitzweite Ableitung nach der Zeit:
BEISPIEL: OBJEKT IM FREIEN FALL
Bewegungsgleichung Beschleunigung = Erdbeschleunigung
Lösung: Integrieren einmal Integrieren ergibt
Geschwindigkeit
nochmal Integrieren ergibt Position
IntegrationskonstantenAnfangsgeschwindigkeit 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-Kuttamehrere Zeitschritte in die Zukunft mit
verschiedenen GewichtungenBeschleunigung abhängig von zukünftigen
Kräften
PROBLEME BEI DER SIMULATION Energieerhaltung kann verletzt
werdenObjekte werden z.B. immer schneller
Bewegung nicht exakt kein Stillstand/ständige kleine
Bewegungen Durchdringungen bei Kollision Ursachen
endliche ZeitschritteRundungsungenauigkeiten
(Fließkommazahlen)
LÖSUNGSMÖGLICHKEITEN Zeitschritte verkleinern Rechenzeit! Unerlaubte Durchdringungen in jedem
Zeitschritt nachträglich beseitigeneventuell unnatürliche
Bewegungen/Sprünge Reibungen vergrößern
zehrt unerlaubte Energiezunahme aufmuss genau eingestellt werden, damit
realistisch Plastische statt elastische Kollisionen
„weiche“ Stößeverringert Energie
STATE OF THE ART - METHODENLangrange-Multiplikator-Methoden bilde Lösung der DGLs auf die Lösung
von linearen Gleichungssystemen ab:Linear Complementary Problems (LCP)
Nebenbedingungen für Durchdringungsfreiheit
Herausforderungen/Problemesinguläre Matrizenschwach besetzte MatrizenIntegrator-Probleme bleiben
ROTATIONEN Darstellung über Winkel, 3x3 Drehmatrix
oder Quaternion (4-Tupel) Rotation um feste Achse durch
Schwerpunktanalog zur TranslationPosition Winkel/Matrix/QuaternionGeschwindigkeit Winkelgeschwindigkeit
(Drehachse) Beschleunigung WinkelbeschleunigungMasse TrägheitsmomentKraft Drehmoment
Drehachse im Allgemienen nicht konstant!
ROTATIONEN UM BELIEBIGE ACHSEN
Veränderung der Drehachse durch Kollisionen oder beim Rollenin 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)
EXTERNE KRÄFTE / DREHMOMENTE
beschleunigen ObjekteBeschleunigung hängt von Objektmasse 𝑚 ab
Winkelbeschleunigung hängt von Trägheitstensor ab
Kräfte darstellbar alsKraftvektorVektorfelder (Kraftvektor abhängig von Position)
darstellbare EffekteGravitationWindMagnetfelder
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 BeschleunigungenDrehmomente
Winkelbeschleunigungen
KOLLISIONSERKENNUNG Kugeln
Kollision falls Summe der Radien > Abstand der Mittelpunkte
Quader / DreiecksobjekteSeparating Axis Theoremprojiziere Objektausdehnung auf
alle möglichen Achsenrichtungenwenn 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
KugelnQuader (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ät1 elastisch
keine Energie geht verloren0 plastisch
Stoßpartner nach Stoß in Ruhe
STOẞPROZESSE: 2 IDENTISCHE KUGELN
GeschwindigkeitTangentialkomponente unverändertRadialkomponente wird ausgetauscht
STOẞPROZESSE: VERSCHIEDENE KUGELN
Impulserhaltung + EnergieerhaltungElastischer 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-Hypothesebeschreibt Änderung der
Geschwindigkeiten und Winkelgeschwindigkeiten beim Stoß
Parameter: Elastizität wie zuvor
REIBUNGEN Haftreibung
~ Anpresskraft~ Haftreibungskoeffizient
Gleitreibung~ Anpresskraft ~ Gleitreibungskoeffizent~ Relativgeschwindigkeit reibender Objekte
Rollreibung~ Anpresskraft ~ Rollreibungskoeffizient
ReibungskoeffizientenRollen < Gleiten < Haften
BEISPIELSZENARIO
BEISPIELSZENARIO geschlossener würfelförmiger
BehälterMittelpunkt im UrsprungSeitenlänge 2L (veränderbar)
N Kugeln im Innern Stöße (Elastizität einstellbar)
Kugel-WandKugel-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 HavokHavok 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 istund 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 Geometriefür Cloth und Soft Bodies noch
Vorbereitung notwendigPunktverschmelzung möglichAbfasen von Kanten
SDK: INITIALISIERUNGNxPhysicsSDK* 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ürActors (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
KugelnQuaderKapselnKonvexes MeshDreiecks-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 ShapeMö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 ReibungMasse/Massendichte
Problem: Eigenschaften nicht nur von einem Material abhängigCombine-Methoden: (min, max, avg,
multiply) zukünftig bewegte Oberflächen
und andere Arten der Reibung (Punktreibung)
SDK: KOLLISION ZWISCHEN AKTORENBedingungen 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
PartikeleigenschaftenPosition, Geschwindigkeit, Lebenszeit, Dichte,…
Szenen-SetupQuellen (Emitter), kann an Shapes gebunden
werdenSenken (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 Partikelngemischt
PHYSX: SOFT BODIES Realisiert als Feder-Masse-System
benutzt den Cloth-Solvererfordert Tetraedrisierung von ObjektenFedern an den Tetraederkantenhält Tetraedervolumina konstantDehnungsbeschränkung
PHYSX: CLOTH (TEXTILIEN)
ParameterBiegesteifigkeit, ZugsteifigkeitDichte, DickeDämpfung, Reibungexterne Kräfte (Wind, Schwerkraft)zulässige Dehnungs- und BiegegrenzenMassepunkte lassen sich an
Festkörperpunkte/Shapes binden Realisiert als Feder-Masse-System
Selbst-KollisionKollision 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/grafikkarten/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&tag=1213567201&source=/newsarchiv_d&noindex
http://ode.org/slides/parc/dynamics.pdf