Vortrag

Transcription

Vortrag
SEP: Implementing a GPU Cloth
Simulation Demo
Florian Reichl
computer graphics & visualization
Florian Reichl - Implementing a GPU Cloth Simulation Demo
Überblick
1)
2)
3)
4)
5)
Zielsetzung
Grundlagen
Implementierung
Erweiterungen
Anwendungsmöglichkeiten und Ausblicke
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Kapitel 1
Zielsetzung
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Zielsetzung
- Implementierung einer Kleidungssimulation
- Berechnung komplett auf der GPU
- Echtzeitanforderung
- Möglichst realistisches Verhalten
- Physikalische Korrektheit nicht gefordert
- Anreicherung der Demo mit zusätzlichen Features
wie Kollision, Beleuchtung etc.
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Kapitel 2
Grundlagen
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Grundlagen: Feder-Masse-System
- Simulation mithilfe eines Feder-Masse-
Systems
Modellierung des Stoffes als diskretes Gitter
- Verbinden der Gitterpunkte durch „Federn“
mit bestimmten Eigenschaften:
- Steifheit („Stärke“ der Feder)
- Ruhelänge
- Berechnung der Federkraft zwischen
Gitterpunkten i und j: Abhängig von
Ruhelänge, aktueller Federlänge und Steifheit
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Grundlagen: Feder-Masse-System
- Neuberechnung der Positionen aller Gitterpunkte
durch:
- Summe der entsprechenden Federkräfte
- Summe aller externen Kräfte
-
Gravitation
Wind
Kollisionen
Etc.
- Dynamisches System
- Kräfteänderung sorgt für Änderung der Position
- Änderung der Position sorgt für Kräfteänderung
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Grundlagen: Berechnungen
- Neuberechnung der Positionen über
mi ẍc ẋ i∑ j ∈ N F ij = F ext
i
i
mit x Position, c Dämpfung, m Punktmasse
- Lösen mittels numerischer Annäherung mit festem
Zeitschritt dt (Verlet-Integration):
d
F i t  2
xi tdt =
dt 2xi t−x i t−dt
mi
x i t −x i t −dt
F di t= F ext


F
−c
∑ j ∈N ij
i
dt
i
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Grundlagen: Berechnungen
- Somit Möglichkeit der Annäherung der
Differentialgleichung auf der GPU
- Stabile & schnelle Lösung durch Verlet-Integration
- Speicherung zusätzlicher Daten wie
Geschwindigkeit und Beschleunigung nicht nötig
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Grundlagen: Federansätze
- Grundsätzlich beliebige Federanordnung möglich
- Strukturfedern:
- Erhalten die grundsätzliche Struktur
-
und Punktanordnung
Nachteil: Ermöglichen beliebige
Stauchung einer Gitterzelle
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Grundlagen: Federansätze
- Kreuzfedern
- Erhalten die Form der Gitterzellen
- Verhindern Stauchung
- Problem: Faltung des Stoffes möglich
- Faltungsfedern
- Verhindern Faltung
- Problem: Zusätzliche Federn erhöhen
Berechnungsaufwand
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Grundlagen: Federansätze
- Vereinfachung: Änderung der Anordnung der
-
Kreuzfedern zur Verringerung der Faltung
Verzicht auf Faltungsfedern
Faltung in eine Richtung immer noch möglich, wird
jedoch in Kauf genommen
Faltungs- und Kreuzfedern
Ergebnis
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Kapitel 3
Implementierung
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Implementierung: Algorithmen
- Punkbasierter Ansatz:
- Alle Punkte durchlaufen
- Für jeden Punkt: Federkräfte berechnen und
-
Aufsummieren
Anschließend: Positionen aktualisieren
- Vorteile:
- Einfach zu implementieren
- Nachteile:
- Doppelte Berechnung aller Kräfte
- Entkoppelung des Algorithmus von der Federanordnung
nicht trivial
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Implementierung: Algorithmen
- Federbasierter Ansatz:
- Alle Federn des Gitters durchlaufen
- Für jede Feder:
- Kraft berechnen
- Kraft auf Startgitterpunkt aufrechnen
- Negative Kraft auf Endgitterpunkt aufrechnen
- Alle Punkte durchlaufen und Positionen aktualisieren
- Vorteile:
- Spart unnötige Berechnungen
- Entkoppelung des Algorithmus von der Federanordnung
- Nachteile:
- Kompliziertere Datenstrukturen nötig
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Implementierung: Details
- Verwendung des Federbasierten Ansatzes
- Speicherung der relevanten Daten als Farbwerte in
Texturen
- Positionstextur: Gitterpunkte
- Verbindungsdaten: Anfangs- und Endpunkt jeder Feder
- Federdaten: Steifheit, Ruhelänge
- Berechnung aller Ergebnisse im Shader
- Ausgabe als Farbwerte auf als Rendertarget
gebundene Texturen
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Implementierung: Details
- 4 Passes zur Berechnung notwendig
- Pass 1:
- Berechnung aller Federkräfte
- Ausgabe in eine „temporäre“ Textur: texEdgeForce
- Pass 2:
- Aufsummierung der Federkräfte auf die Startpunkte
- Ausgabe in eine „temporäre“ Textur: texPointForce
- Pass 3:
- Aufsummierung der Federkräfte auf die Endpunkte
- Ausgabe in texPointForce
- Pass 4:
- Integration der Positionen
- Ausgabe in Positionstextur
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Implementierung: Details
- Aufsummierung der Kräfte erfolgt über AlphaBlending
- Blending: Addition der alten und neuen Farbwerte
- Werte werden einfach „der Reihe nach“ ausgegeben und
automatisch addiert
- Schnelle Berechnung über Ausnutzung des
Pixelshaders
- Rendering eines bildschirmfüllenden Rechtecks in Passes 1
-
und 4 (Federkräfte und Integration)
Pixelshader verarbeitet genau 1 Pixel pro Feder /
Gitterpunkte
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Kapitel 4
Erweiterungen
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Erweiterungen
- Kollisionen mit der Umgebung
- Simpler Algorithmus zur Prüfung der Kollision mit
-
einfachen Objekten (Kugeln, Ebenen)
Kugeln:
- Prüfung pro Gitterpunkt, ob sich dieser in einem Objekt
befindet
- Falls ja: Herausbefördern aus dem Objekt
- Ebene:
- Prüfung pro Gitterpunkt, ob sich dieser hinter der Ebene
befindet (in Normalenrichtung der Ebene)
- Falls ja: Beförderung an die Oberfläche
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Erweiterungen
- Reißen des Stoffes
- Zusätzliche Federinformationen:
- Maximale Dehnung
- Gerissen / Intakt (Boolean)
- Neuschreiben der Federinformationen bei Berechnung der
-
Federkräfte nach Prüfung der Dehnung
Federinformationstextur als zusätzliches Rendertarget
Bei Aufsummierung der Kräfte:
- Speicherung zusätzlicher Information über den Zustand der
anliegenden Federn pro Punkt in einem zusätzlichen
Rendertarget
- Geometryshader: Verwerfen von Dreiecken mit
anliegenden gerissenen Federn
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Erweiterungen
- Normalenberechnung und Beleuchtung
- Annäherung der Normalenberechnung über Kreuzprodukt
-
aus der Differenz der umliegenden Punkte (linker Nachbar
– rechter Nachbar, oberer Nachbar – unterer Nachbar)
Einmalige Berechnung und Speicherung in einer weiteren
Textur
Normalendaten sind deshalb evtl. „veraltet“
- Uninteressant, da nur sehr minimale Änderungen pro
Berechnung durchgeführt werden
- Normalen werden als Grundlage für Beleuchtung
verwendet
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Erweiterungen
- Wind
- Wind als zweite globale Kraft neben Gravitation
- Gewirkte Kraft auf einen Gitterpunkt abhängig vom Winkel
zwischen Windrichtung und Punktnormale
- „Flattern“ des Stoffes automatisch erreicht durch
dynamische Änderung der Kraft
- Änderung der Kraft bewirkt Änderung der Normale
- Änderung der Normale bewirkt Änderung der Kraft
- Zusätzliche Erweiterung durch Änderung der globalen
Windkraft möglich (Windböen)
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Erweiterungen: Selbstkollision
- Problem: Stoff durchdringt sich selbst
- Kollisionsabfrage auf Basis von Dreieckstests zu
-
teuer
Möglichst einfache, optimalerweise
Komplexitätsunabhängige Kollisionsabfrage
gewünscht
- Im Rahmen des Projektes: Möglichst GPU-basiert
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Erweiterungen: Selbstkollision
- Grundlegende Annahmen: Ein Vertex des Stoffes
kollidiert mit dem Stoff, wenn
- Sich in einer gewissen Entfernung < d ein anderer Vertex
-
befindet, der nicht zu seinen Nachbarn gehört
Die Normalen der beiden Kollisionspartner einen Winkel
zwischen 90° und 270° einschließen
- Betrachtung in 2D
- Senden eines Strahls durch den Stoff in x-Richtung
- Kollisionen können nur dort sein, wo der Strahl auf einer
-
Strecke < d den Stoff mehr als einmal schneidet
Prüfen der Normalenbedingung an den kritischen Stellen
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Erweiterung: Selbstkollision
- Implementierung auf der GPU: Stencilrouting
- Rendering der Tiefeninformationen des Stoffes in
Blickrichtung entlang einer Achse
- Speicherung einzelner
Tiefenschichten in Texturen
- Schicht 1: Sichtbarer Teil des Stoffes
- Schicht 2: Sichtbarer Teil, wenn
Schicht 1 entfernt wird
- Etc.
- Zusätzlich Speicherung der Normalen
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Erweiterung: Selbstkollision
- Realisierung über Stencilbuffer
- Initialisierung mit Ref + Index der gewünschten Schicht
- Erniedrigung bei jedem Stenciltest
- Fragment wird nur gezeichnet wenn der Wert im Buffer Ref
entspricht
- Rendering in einem einzigen Pass
- Multisample-Rendertarget: In jedem Rendervorgang
-
werden bis zu 8 Werte geschrieben
Stencilbuffer ebenfalls multisampled, d.h. 8 verschiedene
Stencilwerte werden in einem Pass geprüft und gesetzt
Subsamples können im Shader einzeln ausgelesen werden
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Erweiterung: Selbstkollision
- Kollisionsprüfung: Ein Vertex wird im Shader analog
-
zum Stencilrouting transformiert
Auslesen aller Schichten an der Renderposition und
Prüfung der Tiefen und Normalen
- Kollisionsauflösung: Berechnung einer
Rückstellkraft zur Verwendung in der Integration
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Erweiterung: Selbstkollision
- Probleme
- Durch beschränkte Texturauflösung und Diskretisierung
- Ortogonale Projektion
- Möglichst passende Wahl des Bildausschnittes
- Kompromiss zwischen falsch erkannten und nicht erkannten
Kollisionen nötig
- Keine Erkennung von Kollisionen in einem „ungünstigen“
Winkel zur Kamera
- Rendering und Prüfung aus drei verschiedenen Ansichten in
x-, y- und z-Richtung
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Erweiterung: Selbstkollision
- Auflösen über Kräfte führt zu „dynamischen“
Problemen
- Allgemeine Dynamik des Stoffes, Bewegungen beeinflussen
andere Bewegungen
- Starke Umweltkräfte, dadurch zu starke benötigte
Rückstellkräfte
- Zittern des Stoffes
- Instabilität der Integration
- Keine Informationen über die Umgebung
- Richtung der Rückstellkraft ist nicht eindeutig feststellbar
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Kapitel 5
Ausblicke und Anwendungen
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Ausblicke: Probleme
- Framerateabhängigkeit
- Schwankungen der Framerate führen zu Änderung der
-
Simulationsgeschwindigkeit
Anpassung wegen Instabilität der Integration bei zu großen
Zeitschritt schwierig bis unmöglich
- Dämpfung
- Mitdämpfung der Umweltkräfte
- Unerwünschte Effekte, z.B. langsamerer Fall durch höhere
Dämpfung
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Ausblicke: Anwendungen
- Einsatz der Technik für komplexere Stoffe
- Nicht auf eine bestimmte Form oder Federanordnung
begrenzt
- Leichte Skalierung z.B. über die Anzahl der Federn / Vertices
möglich
- Performant auf schwächeren Systemen, realistisch auf
stärkeren
- Stoffdaten müssen nicht homogen sein
- Simulation von dickeren / dünneren Stellen
- Simulation von festeren / weicheren Bereichen
- Soll-Rissstellen
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Ausblicke: Anwendungen
- Technik nicht nur auf Stoffe beschränkt
- Simulation von z.B. Haaren oder Seilen möglich
- Simulation von Wasseroberflächen
- Erweiterung auf dreidimensionale Körper
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Performance
- Grundsystem ohne Erweiterungen
- GeForce 8800 GTS, 640 MB Videospeicher
- 35 Simulationen pro Frame
- 1024 x 768, Stoff: 100x100
- Framerate: 60 fps
- Bedingt durch Vertikale Synchronisation, um
-
konstante FPS zu erhalten, Obergrenze allerdings
erreicht
Default-Zeitschritt: 0.002 Sekunden
- Damit theoretisch vierfache Echtzeit
- Bedingt durch andere Parameter: Realistischer Eindruck
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization
Demo
Vielen Dank für die
Aufmerksamkeit!
Fragen?
Florian Reichl - Implementing a GPU Cloth Simulation Demo
computer graphics & visualization