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 tdt = 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