Mitarbeiter
Aufgabe 5 - Compute Shader & Simulations
(Neue) Techniken:
Compute Shader, Simulationen, Stoffsimulationen, Prozedurale Texture
Beschreibung:
Im Mittelpunkt dieser Aufgabe steht die Simulation, für die der Compute Shader (GPGPU Programmierung) genutzt werden soll. Der Umgang mit dem Compute Shader könnt ihr den Präsentationsfolien entnehmen sowie, dem im Samples Repo bereitgestellten GPU Compute Shader Sample oder dem Blur Sample. Für die Bearbeitung der Aufgabe muss OpenGL 4.3 und GLSL 4.30 (oder jeweils höher) verwendet werden.
Due Date: 20.01. (alternativ nach Absprache bis: 28.02.)
Material
Die Voraussetzung für diese Aufgabe sind die Kern und z.T. Zusatzanforderungen der vergangen Aufgaben, ihr könnt dies als Teillösung für diese Aufgabe nutzen.
Kernanforderungen
- Nutzt Indices für das Mesh der Cloth Simulation. Legt diese in ein Buffer-Objekt und rendert mit dem Draw-Command glDrawElements.
- Implementiert die Simulation unter Nutzung des Compute Shaders und arbeitet direkt auf dem Mesh. Achtet dabei darauf, Ergebnisse zu erzeugen, die unabhängig von der Ausführungsreihenfolge der Compute Shader Invocations sind.
- Berechnet nach der Simulation neue Normalen und Tangenten für die Vertices.
Weitere Funktionalitätsanforderungen
- Die Simulation wird in 2 Copmute Shadern berechnet.
Zuerst wird mit der Iterativen Constraint Satisfaction Methode parallel über alle Constraints iteriert
In einem 2. Durchlauf wird mittels der Verlet Integration parallel über die Massen (partikel) des Meshes iteriert - Nutzt für die Windkraft eine Noise Funktion die sichZeitabhängig (ggf. auch Ortsabhaengig; World Position) ändert
- Die Animation soll pausiert werden können.
- Nutzt weiterhin Tessellation um das Mesh abhängig von der Distanz zu verfeinern.
- Die Auflösung des Mesh lässt sich mittels Tastendruckes verändern. Achtet dabei darauf, dass die Simulationsbuffer mit angepasst werden.
- Weiterhin soll die Lichtberechnung mittels Deferred Rendering funktionieren, das Mesh soll dementsprechend auf den Gbuffer gerendert werden
- Die Berechnung der Normalen und Tangenten soll in einem zweiten Compute Shader parallel durchgeführt werden, achtet hierbei auf effiziente Berechnung und dass Additionen ggf. Atomar behandelt werden.
- Verteilt das Clothmesh an verschiedenen Orten in der Stadt Szene (achtet darauf, dass dies bei dem Deferred Rendering sowie weiteren Rendertechniken korrekt beachtet wird). [solltet ihr auf diesen Punkt der Bewertung verzichten wollen ist es okay, wenn ihr die gesamte Simulation & Rendering in einem neuen Programm durchführt, anstelle eurer Lösung aus Aufgabe 1-4 zu verwenden]
Tipps
1) Legt für den Anfang nur 4D-Vektoren in die Shader Storage Buffer, um Padding-Probleme (siehe Folien der Aufgabenvorstellung) zu verhindern.
2) Testet vor der Simulations Implementation aus, ob der Compute Shader richtig implementiert wurde. Z.B. durch konstantes setzten der Y-Koordinate bzw. abhängig von der
3) Achtung bisher können lediglich Nvidia Grafikkarten atomare Floating Point Funktionen in OpenGL Compute Shader durchführen. Daher müssen atomare Operationen mit int bzw. uint durchgeführt werden. Die GLSL Funktionen floatBitsToUint und uintBitsToFloat können behilflich sein. Die GLSL Operation atomicCompSwap kann verwendet werden um eine atomare „vergleichtausch“ Operation durchzuführen.
a. Beispiel siehe Folie
4) Wenn die Simulation in die Scene eingebaut wird, ist es okay, wenn ihr diese nicht zusätzlich auf dem Standard Grid durchführt, damit ihr Dimensionskomplikationen vermeidet.
Ideen
Für diejenigen, die mit der Aufgabe schnell fertig und noch nicht genug ausgelastet mit CG2 und anderen Übungen sind, gibt es folgende Ideen, die zum Teil das Wissen vertiefen oder einen Vorausblick auf die kommenden Aufgaben geben können.
- [EXTRA PUNKT] Es soll mittels prozeduraler Texturen eine Strickmuster Textur erstellt werden. (siehe Folien)
- Anstelle der OpenGL Compute Shader kann auch ein Cuda oder OpenCL Kernel geschrieben und genutzt werden. (Generell ist es ratsam im simplen OpenGL Context (wie dieser Aufgabe) den Compute Shader zu nutzen um Overhead durch OpenCL oder Cuda zu vermeiden)
- Wendet die Simulation auf andere Meshes z.B. Klamotten (Tshirt etc) an. Achtung hier müsst ihr euch überlegen, wie ihr die Federn/(Constraints) an den Compute Shader übergebt.
Abnahme
Abnahmen nach Absprache mit dem Abnehmer.
Dennis | Eduard |
---|---|
1 | 3 |
2 | 13 |
4 | 7 |
5 | 6 |