Seite 1 von 1

[Projekt] Voraca

Verfasst: 20.04.2014, 14:44
von Raphael
Hallo,

heute veröffentliche ich mein Projekt "Voraca" (Volume Ray-Caster) sowohl als binäre Datei für Windows als auch in Form von Quellcode. Es handelt sich im Kern um die Umsetzung des Ray-Casting Algorithmus mithilfe von C++/OpenGL 3.3 bzw. GLSL 3.3 und ist im Rahmen meiner Bachelorarbeit "Interaktives Ray-Casting von Volumendaten" entstanden. Folgende Techniken sind umgesetzt worden und können im Programm angewählt werden:

- Eindimensionale Transferfunktionen
- Early Ray Termination
- Empty Space Skipping
- Stochastic Jittering
- Pre-Integration der Transferfunktion
- Adpative Sampling
- Lokale Beleuchtung
- Direkte Schatten
- Volume Clipping

Über den Umfang und die Güte der Umsetzung wird tiefer gehend in meiner Arbeit eingegangen (http://kola.opus.hbz-nrw.de/volltexte/2014/970/). Folgende Abhängigkeiten bestehen (bei der Binary wird alles nötige mitgeliefert):

-AntTweakBar
-RapidXML
-picopng
-GLFW
-GLEW
-GLM

Theoretisch sollte es sowohl auf Windows, Linux als auch MacOS funktionieren. Auf MacOS macht aber die AntTweakBar Probleme, weshalb es sich dort noch nicht ausführen lässt. Auf Windows und Linux ist es bereits erfolgreich kompiliert worden, siehe hierzu die Readme in der Version mit Quellcode. Anbei sind beide Versionen und eine Screenshot, später werde ich wohl noch ein paar Screenshots mit hübscheren Volumina hinzufügen. Eine kleine Anleitung zum Import von DAT Dateien gibt es in Form eines Videos: http://youtu.be/rirZg5DN4OE. Ansonsten kann man noch dekomprimierte PVM (http://www9.informatik.uni-erlangen.de/External/vollib/) importieren. Zum Dekomprimieren braucht man aber das V^3 volume rendering package, welches ich nur unter Linux kompiliert bekomme habe.

Viel Spaß!

EDIT 1: Weitere Screenshots hinzugefügt.
EDIT 2: Showcase Videos:
[youtube]sM18a2M5_FM[/youtube]
[youtube]ZcDHNtyZ3es[/youtube]

Re: [Projekt] Voraca

Verfasst: 21.04.2014, 16:56
von NytroX
Wow, coole Sache.
Und das sieht auch alles sehr flüssig aus.
Die Leiste, wo man die ganzen Transparenzen+Farben der unterschiedlichen Tiefen einstellen kann gefällt mir besonders gut; ist leicht verständlich und sieht einfach in der Bedienung aus. Tolles Konzept.

Danke fürs Vorstellen und die Links, echt interessante Arbeit! :-)

Re: [Projekt] Voraca

Verfasst: 21.04.2014, 21:49
von Krishty
Mir gefällt es auch außergewöhnlich gut. Ich habe durch Atmosphärenberechnung noch eine Vorstellung davon, wie unglaublich schwer Volume Rendering sein kann – dementsprechend habe ich auch großen Respekt davor, das wirklich einsatztauglich zu implementieren. Von mir ebenfalls danke für’s Vorstellen!

Re: [Projekt] Voraca

Verfasst: 20.10.2014, 16:04
von Raphael
Update mit Bugfixes:
CHANGELIST.txt
- Out of bounds exceptions when trying to select handle which does not (yet) exists fixed
- Added support for "launch.xml" for launch settings
- Transfer function was not updated when "Assign Active's Value" was used
- Specular term was not influenced by sun color
- picopng.h: were wrong #define's in lines 26/27
- Primitives.h: comment in line 35 was wrong
- ImportanceVolume.frag: inner and outer loop used i as index, now it is i and j
- Complete reset via bar button possible
Theoretisch könnte man die Source noch mit einer CMakeList versehen. Da ich aber blutiger Anfänger bei CMake bin und erste Versuche kläglich scheiterten, ist es zumindest nicht mehr geplant. Ich sehe das Projekt jetzt als abgeschlossen an und habe auch keine neuen Funktionen mehr im Auge. Es gibt zwar noch einen interessanten Ansatz, den ich in einem anderen kleinen Projekt untersucht habe (Sampling, bei dem man JEDEN Voxel auf dem Sichtstrahl beim Abtasten trifft und das Volume damit perfekt abtastet). Der Raycasting-Shader von Voraca ist jedoch schon über 600 Zeilen lang und ein Monster aus #if defined. Aufgrund von Seiteneffekten lasse ich das dann auch lieber :D Eventuell mache ich für diesen Ansatz ein extra Thema auf, weil ich ziemlich stolz auf die Optimierung des Shaders bin.

Re: [Projekt] Voraca

Verfasst: 20.10.2014, 16:11
von Schrompf
Du liest gegen jeden Voxel in jedem Raycast? Und hast das dann auch noch schnell hinbekommen! Wow!

Re: [Projekt] Voraca

Verfasst: 20.10.2014, 21:57
von Raphael
Raphael hat geschrieben:Sampling, bei dem man JEDEN Voxel auf dem Sichtstrahl beim Abtasten trifft und das Volume damit perfekt abtastet
Oh, da habe ich mich wohl missverständlich ausgedrückt. Es ist damit gemeint, dass jedes Voxel AUF dem Sichtstrahl, bzw. das den Sichtstrahl schneidet, in das resultierende Pixel Einfluss nimmt. Im Endeffekt handelt es sich um eine adaptive Abtastweite, welche anhand der Gitterstruktur und Strahlrichtung pro Abtastung neu berechnet wird. Es ist immer noch günstiger, als eine äquidistante Abtastweite so einzustellen, dass das Nyquist-Shannon Abtasttheorem erfüllt ist. Diese Berechnung in der Abtastschleife kommt bei mir nach der Optimierung ohne if aus. Im Anhang ist ein Bild, der unoptimierte aber verständliche Code und der optimierte. Endlich ist das nun auch mal von meiner Platte und hatte einen Sinn :D