Hallo Herr Zachmann,
wie schon besprochen würde ich gerne meine Beachlor Arbeit in iherer Abteilung schreiben.
Ich habe zwei eigne Themen Ideen und zwei Themen von iherer Webseite die ich interesannt finde.
Ein Themengebiet was ich spannend finde ist Raytracing bzw Raycasting von Datenstrukturen wie 3D Voxel Grittern.
Konkret wäre Fragestellung die ich gerne erkunden würde:
Ist es möglich nur die Teile eines sparse Voxel Octree dynamisch auf die GPU läd die wirklich gerade angezeigt werden.
Dabei wird zum Start nur die Root-Node die in den GPU Buffer geladen. Beim rendern via Octree traverlas wird nicht nur die Frabe für den Pixel ermittelt sondern auch ob die angezeigte Node noch Kinder hätte die auch geladen werden sollten. Dabei wird entwerder ein weiterer compute shader oder die CPU die genutzt um diese Kinder dann zu für den nächsten Frame zu laden.
Die Datenstrucktur baut sich also über die einige Frames auf, bis alle Node die man sehen könnte auch angezeigt werden.
Der Vorteil davon ist das der Buffer der die Nodes speichert z.B. extrem klein sein kann. So könnte dieser komplett gecached werden was potenziell zu besseren render perfomances führen könnte.
Es wäre theoretisch auch möglich sehr viele Voxel anzuzeigen da der GPU Speicher optimal genutzt wird. Optimal wäre es wenn jeder Pixel ein anderen Voxel anzeigt.
Der Renderansatz implementiert dabei automatisch eine Art View-Frustum-Culling und LOD System da nur geladen wird was auch gesehen werden kann.
Es geht sogar soweit dass wenn man einen soliden Block an Voxeln hatt nur die äußere Schicht gelanden werden würde.
Ich hoffe diese Erkläreung war verständlich, sonst kann ich die Idee auch gerne nochmal persönlich erklären.
Ich habe privat schonmal versucht so ein Rendersystem mit Vulkan in Rust zu implementieren. Jedoch habe ich es nie ganz zuende geführt da gerade den sparese Octree dynamisch performant zu laden nicht einfach ist. Aber ich könnte mir gut vorstellen mich im Rahmen meiner Beachlorarbeit nochmal an dieses Problem zu setzten.
Hier finden sie ein kurzes Video die den Versuch zeigt.
2024-07-10 14-47-26.mkv - Google Drive
Das Probelm mit dieser Version ist das ich irgendwo ein Bug habe der dafür sorgt die Kinder mancher Nodes nicht gelanden werden. Das Video sollte trozdem die Idee verständlich machen.
Hier habe ich habe auch noch probiert ganze Pages an Nodes zu laden wenn ich in die Nähe einer Node komme dessen kinder nicht geladen sind.
2024-07-09 23-39-40.mkv - Google Drive
Auch hier habe ich aus Zeitgründen aufgehört diesen Ansatz zu verfolegen und bin nie dazu gekommen im wärend des renderings zu markieren welche Nodes gelanden werden müssten.
Meine andere Idee entspringt aus einem Projekt an dem ich gerade in meiner Freizeit arbeite.
Mit Inspiration von Marching Cubes und Model Synthesis / Wave Function Collapses kam mir die Idee für eine neue Art von 3D-Design-System.
In viele Computerspielen oder Desingtools ist es möglcih sehr komplexe Sturkturen zu erstellen. Doch meist barucht man dafür sehr viel Zeit.
Dahin gegen gibt es Spiele wie Minecraft, Terraria, etc die ein wesentlich intuitiveres blockbasiertes Bausystem haben.
Was ist nun wenn der Nutzer auschließlich Blöcke in einem 3D Gitter plazieren kann. Diese Blöcke sich aber abhängig von ihren Nachbarblöcken verändern um eine komplexere Sturucktur zu bilden.
Jeder Block hat also verschiedene Zustände die er sein kann. Jeder dieser Zustände hat Regeln wie die Nachbarn sein müssen damit der Block in diesem Zustand annehmen kann.
Ich denke diese Erklärrung ist warscheinlich etwas abstrakt deswegen habe ich hier ein kleines Video welches das Bausystem in seinem Grundkozept zeigt.
2024-07-10 15-13-06.mp4 - Google Drive
Dies kann ich gerne auch nochmal persönlich erkären.
Ich hätte Interesse auch aus diesem Konzept eine Beachlor Arbeit zu formen.
Von iherer Webseite finde ich das Thema zu Probabilistic Collision Detection interessant.
Als ich als Werkstudent beim DFKI gearbeitet habe, habe ich mich dort viel mit GJK-Implemtierungen beschäfitigt.
Ich habe dort an einem Paper mitgearbeitet, in welchen die Performace verschiedener Collision Frameworks verglichen wurde.
Daher ist mir das Themengebiet nicht ganz neu.
Ich fände auch das Masterarbeits Thema Real-Time Rendering of Dynamic Point Clouds interesannt.
Im Rahmen einer Beachlor arbeit müsste man gucken wie weit man das herunterstufen kann, jedoch da ich mich ich privat schon relativ viel mit Acceleration Structures und Voxelrenderering
beschäftigt habe denke ich das ich das hinbekomme.
Ich habe kein gutes Gefühl dafür welchem Umfang eine Beachlor Arbeit haben sollte und freue mich daher auf ihr Feedback.
Viele Grüße
Maarten Behn