diff --git a/README.md b/README.md index c42e7cd..23b307b 100644 --- a/README.md +++ b/README.md @@ -1 +1,71 @@ -# rwu_particles_informatikprojekt \ No newline at end of file +# Informatikprojekt: Performancevergleich eines Partikelsystem umgesetzt mit OpenGL und Vulkan +## Informationen +Autor: Niklas Birk\ +Betreuer: Prof. Dr. Daniel Scherzer\ +Fach: Informatikprojekt + +## Projektdateien +Das Projekt enthält im wesentlichen drei Varianten: +- CPU +- OpenGL +- Vulkan + +Der Name bezieht sich hierbei auf Art der Simulation der Partikel. +Die CPU-Variante simuliert die Partikel auf der CPU, +während die anderen beiden Varianten sich die Compute-Funktionalitäten der +jeweiligen Grafik-API zu nutze machen.\ +Bei der CPU- und OpenGL-Variante wird OpenGL zum rendern benutzt und +bei der Vulkan-Variante entsprechend Vulkan. + +### CPU-Variante +Zur CPU-Variante gehören folgende Dateien: +- [cpuMain.c](cpuMain.c): Enthält die main-Funktion +- ( [initOpenGL.c](initOpenGL.c): Enthält wesentliches zum initialiseren von OpenGL ) +- ( [initOpenGL.h](initOpenGL.h): Header-Datei zu [initOpenGL.c](initOpenGL.c) ) + +### OpenGL-Variante +Zur OpenGL-Variante gehören folgende Dateien: +- [openglMain.c](openglMain.c): Enthält die main-Funktion +- [initOpenGL.c](initOpenGL.c): Enthält wesentliches zum initialiseren von OpenGL +- [initOpenGL.h](initOpenGL.h): Header-Datei zu [initOpenGL.c](initOpenGL.c) +- [ComputeShader.glsl](shaders/opengl/ComputeShader.glsl): Der Compute-Shader für OpenGL +- [VertexShader.glsl](shaders/opengl/VertexShader.glsl): Der Vertex-Shader für OpenGL +- [FragmentShader.glsl](shaders/opengl/FragmentShader.glsl): Der Fragment-Shader für OpenGL + +### Vulkan-Variante +Zur OpenGL-Variante gehören folgende Dateien: +- [vulkanMain.c](vulkanMain.c): Enthält die main-Funktion +- [initVulkan.c](initVulkan.c): Enthält wesentliches zum initialiseren von Vulkan +- [initVulkan.h](initVulkan.h): Header-Datei zu [initVulkan.c](initVulkan.c) +- [ComputeShader.comp](shaders/vulkan/ComputeShader.comp): Der Compute-Shader für Vulkan in GLSL +- [VertexShader.frag](shaders/vulkan/VertexShader.vert): Der Vertex-Shader für Vulkan in GLSL +- [FragmentShader.vert](shaders/vulkan/FragmentShader.frag): Der Fragment-Shader für Vulkan in GLSL +- [runCompiler.bat](shaders/vulkan/runCompiler.bat): Eine Batch-Datei zum Übersetzen der Shader in SPIR-V.\ +__!Bitte den Pfad zur glslangValidator.exe auf Ihrem System anpassen!__\ +Cmake sollte sich automatisch um das kopieren der Dateien und Ausführen der Batch-Datei im Zielverzeichnis kümmern. + +### Partikelsystem und Sonstige +Für das Partikelsystem sind folgende Dateien vorhanden: +- [particlesystem.c](particlesystem.c): Enthält wesentliche Funktionen zum Erstellen eines Partikelsystems +- [particlesystem.h](particlesystem.h): Header-Datei zu [particlesystem.c](particlesystem.c) +- [utils.c](utils.c): Enthält eine kleine Hilfsfunktion zum Lesen von Dateien. +- [utils.h](utils.h): Header-Datei zu [utils.c](utils.c) und enthält #define für wichtige Konstanten + +## Ausführung +Cmake erstellt drei Ziele: +- Informatikprojekt: Die CPU-Variante +- Informatikprojekt_OpenGL: Die OpenGL-Variante +- Informatikprojekt_Vulkan: Die Vulkan-Variante + +Die Compute-Shader sehen aktuell eine Workgroupgröße von x=1024, y=1 und z=1 vor.\ +Sollte dies Ihr System nicht zulassen, dann kann das entsprechend in den Shadern geändert werden. +Bitte aber auch die Dispatch-Anweisungen anpassen. + +Die maximale Anzahl der Partikel ist durch die Dispatch-Anweisungen bzw. die maximale Anzahl an Gruppen beschränkt. +Bei meinem System waren es etwas mehr 60 Millionen Partikel. +Bei 60 Millionen Partikeln gibt es knapp 60 Tausend Arbeitsgruppen, bei meinem System ist die maximale Anzahl 65536. +Sollte also die Ausführung nichts anzeigen, dann kann es sein, dass Sie die Lokale X Größe anpassen müssen. +(Anmerkung: Für Partikelanzahl < 1024 sind es zu wenige Gruppen (0), die der Dispatch-Anweisung mit gegeben werden). + + +