A Simple and Flexible Volume Rendering Framework for Graphics-Hardware-based Raycasting


Simon Stegmaier[1], Magnus Strengert[2], Thomas Klein[3]
  Description    
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[4] 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).

[5] [6] [7] [8] [9]
Isosurface
Download Settings[10]

Translucency
Download Settings[11]

Isosurface with Shadows
Download Settings[12]

Spheremapping
Download Settings[13]

Transparent Isosurfaces
Download Settings[14]

[15] [16] [17] [18] [19]
Continuous Refraction
Download Settings[20]

Clipped Isosurfaces
Download Settings[21]

Volume Raycasting
Download Settings[22]

Volume and Isosurface
Download Settings[23]

MIP Rendering
Download Settings[24]


  Preliminaries and data sets    
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[25]. 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[26] used for rendering the images above is provided as an example. Other data sets in raw format can be found on the VolVis Homepage[27].

  Downloads    
The following source code is provided free of charge; however, we would appreciate any feedback[28] 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.

  Contact    
Simon Stegmaier[34]
  References    
[SSKE05] S. Stegmaier, M. Strengert, T. Klein, and T. Ertl.
A Simple and Flexible Volume Rendering Framework for Graphics-Hardware-based Raycasting[35],
Proceedings of Volume Graphics 2005, Stony Brook, New York, USA, pp.187-195, 2005

(See also the list of publications of the institute[36].)

[37]



      University of Stuttgart, Institute for Computer Science,
Visualization and Interactive Systems Group

http://www.vis.uni-stuttgart.de/eng/research/fields/current/spvolren/index.html