For the past two years Kitware has had funding from the Army Research Labs to explore the use of GPU (Graphics Processing Units) for visualization. This was an STTR in collaboration with University of Maryland, College Park. One of the outcomes of this funding was the birth of VTKEdge. Fueled by contributions from several other projects and funding sources, VTKEdge is now blooming into a collection of tools for improved visualization. All of the components that we talk about here have made it into VTKEdge.
We’ve developed a framework for incorporating GLSL or CUDA-based algorithms into VTK. A collection of classes that abstracts the OpenGL data structures for transferring data to and from GPU memory are provided. Using this infrastructure, writing new algorithms that exploit the parallelism provided by the GPU for data processing should be a fairly straightforward process.
This framework also makes it easy to implement advanced rendering techniques. For example, we implemented support for a few algorithms for line integral convolution (LIC). We have filters that take in vector fields in the form of image data or structured grids to generate the LIC images. We took it another step forward by adding support for producing LIC from vector fields defined on arbitrary surfaces. LIC is traditionally known to be slow, given that it is compute intensive. However, by exploiting modern GPU capabilities we were able to achieve an interactive frame rate of 10-15 fps.
VTKEdge now includes a CUDA-based implementation for a Feldkamp back-projection algorithm for CT reconstruction. We were able to achieve speeds up to 25x faster when compared with our CPU-based implementation.
We’ve also added a collection of nifty GPU-based enhancements such as hidden line removal, illuminated lines, and GPU-accelerated glyph mapper to VTKEdge. Furthermore, where applicable, we’ve developed plug-ins for ParaView so that users can simply load the plug-ins and try these new capabilities from inside ParaView with ease.
An octree fractal viewed at four different refinement levels.
Results of Feldkamp back-projection.