[Projekt] Voraca

Hier könnt ihr euch selbst, eure Homepage, euren Entwicklerstammtisch, Termine oder eure Projekte vorstellen.
Forumsregeln
Bitte Präfixe benutzen. Das Präfix "[Projekt]" bewirkt die Aufnahme von Bildern aus den Beiträgen des Themenerstellers in den Showroom. Alle Bilder aus dem Thema Showroom erscheinen ebenfalls im Showroom auf der Frontpage. Es werden nur Bilder berücksichtigt, die entweder mit dem attachement- oder dem img-BBCode im Beitrag angezeigt werden.

Die Bildersammelfunktion muss manuell ausgeführt werden, die URL dazu und weitere Details zum Showroom sind hier zu finden.

This forum is primarily intended for German-language video game developers. Please don't post promotional information targeted at end users.
Antworten
Benutzeravatar
Raphael
Beiträge: 65
Registriert: 22.12.2011, 13:39
Echter Name: Raphael Menges

[Projekt] Voraca

Beitrag 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]
Dateianhänge
Specular and Emissive Shading.
Specular and Emissive Shading.
Skin Shading und Volume Clipping.
Skin Shading und Volume Clipping.
Voraca095_src.zip
Voraca Quellcode.
(719.58 KiB) 200-mal heruntergeladen
Voraca095_bin.zip
Binary für Windows.
(689.05 KiB) 202-mal heruntergeladen
Screenshot mit generiertem Testvolumen.
Screenshot mit generiertem Testvolumen.
NytroX
Establishment
Beiträge: 364
Registriert: 03.10.2003, 12:47

Re: [Projekt] Voraca

Beitrag 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! :-)
Benutzeravatar
Krishty
Establishment
Beiträge: 8240
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt] Voraca

Beitrag 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!
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Raphael
Beiträge: 65
Registriert: 22.12.2011, 13:39
Echter Name: Raphael Menges

Re: [Projekt] Voraca

Beitrag 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.
Dateianhänge
Screenshot aus Voraca 0.95, hier aber noch nicht gezeigt.
Screenshot aus Voraca 0.95, hier aber noch nicht gezeigt.
Voraca096_src.zip
Source
(724.13 KiB) 184-mal heruntergeladen
Voraca096_bin.zip
Windows Binary
(693.22 KiB) 179-mal heruntergeladen
Benutzeravatar
Schrompf
Moderator
Beiträge: 4855
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: [Projekt] Voraca

Beitrag von Schrompf »

Du liest gegen jeden Voxel in jedem Raycast? Und hast das dann auch noch schnell hinbekommen! Wow!
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Raphael
Beiträge: 65
Registriert: 22.12.2011, 13:39
Echter Name: Raphael Menges

Re: [Projekt] Voraca

Beitrag 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
Dateianhänge
PerVoxelRaycaster.txt
Hier nochmal mit Optimierungen.
(3.26 KiB) 203-mal heruntergeladen
SimplePerVoxelRaycaster.txt
Einfache Implementierung der Idee.
(3.19 KiB) 190-mal heruntergeladen
Erklärungsbild
Erklärungsbild
Antworten