In the last years programmability of workstation and consumer level graphics
hardware has evolved at an increasing pace. Driven by the steadily growing
demands of the game industry, performance of modern graphics processors has
exceeded the computational power of CPUs both in raw numbers and in their
extraordinary rate of growth. Abandoning the simple fixed-function pipeline
which was the characteristic feature of graphics processors only five years
ago, today's GPUs have evolved into very sophisticated, highly programmable
SIMD processing units. With the advent of graphics processors supporting the
new features of dynamic looping and branching, GPUs are becoming more and more
"general purpose processing units" comparable to the CPU.
In this project, this raw computational power and flexibility of modern GPUs
have been exploited to implement a flexible OpenGL-based framework for volume
raycasting which allows for the easy integration of highly diverse shaders. The
framework is based upon the idea of a general driver application on the one
hand and, on the other hand, a set of fragment programs which can be loaded at
run-time. All shaders are implemented based on a raycasting approach which, by
exploiting looping functionality, is done in a single rendering pass. The
resulting system exhibits good performance and produces visualizations of
superior quality.
Technical details about the implementation can be found in an accompanying
publication
published at Volume Graphics 2005.
Results
Shown below are some example images produced with the ray-casting system. The
shown data set is CT scan of a human head comprising 256 x 256 x 225 voxels in
8 bit quality. By clicking the images an image of the original viewport
resolution can be obtained. For each image, we also provide the setting files
required for reproducing the visualizations. Settings can be loaded by
pressing 'L' in the rendering windows (the settings filename is automatically
determined from the name of the current shader and the currently loaded data
set).
The raycasting system has a single code base that compiles under both MS
Windows and Linux. For MS Windows, we also provide a pre-compiled
executable. For compilation, the only external dependency is the GLUT library.
Both a Makefile and a Visual Studio .Net project file are provided. The
program can be executed on any system with a graphics adapter based on the
NVIDIA NV 40 chip, e.g., the NVIDIA GeForce 6600 or NVIDIA GeForce 6800.
The above image were generated on Linux using an NVIDIA x86_64 Kernel
Module 1.0-7174. On MS Windows, the system has been evaluated with the NVIDIA
driver revision 71.89.
The program requires the data sets to be provided in a two-component DAT/RAW
format. The RAW file is in binary format and contains the actual volume data
in unsigned byte format. Values in x-direction are varying fastest. The DAT
file contains meta information and is in ASCII format. The data set of the
human head used for rendering the images above is
provided as an example. Other data sets in raw format can be found on the VolVis Homepage.
Downloads
The following source code is provided free of charge; however, we would appreciate any
feedback if you find this program useful.
All source code is provided only for non-commercial use. The original headers
referencing the original authors must remain unchanged. Please note that
all shaders have been customized to a specific driver version and its
peculiarities (bugs); thus, the fragment program code may appear
non-intuitive occasionally. For newer driver versions simpler implementations
might be possible.