Ray tracing has been shown to be an effective technique for producing realistic synthetic images of three dimensional geometry. Ray tracing simulates rays of light as they interact with object surfaces. The simulation of surface physics allows ray tracing to render reflections, refractions, and shadows which look realistic. When compared with other rendering techniques such as polygon rendering, ray tracing offers enhanced realism at a higher computational cost [1]. The higher computational cost of ray tracing can be offset through exploitation of parallelsm. Ray tracing is well suited for rendering volumetric data such as MRI scans or fluid flow fields. Current acceleration techniques make ray tracing a feasible alternative to polygon rendering for many visualization applications.
The motivation for developing a parallel raytracing and animation library is to address the lack of easy-to-use, parallel rendering software. Many existing rendering libraries were designed to run on special purpose machines with polygon rendering hardware. Special purpose graphics hardware provides benefits when available, but detracts from the portability of applications which take maximal advantage of it. Dedicated rendering machines are hard to integrate closely with time marching simulation applications which execute on parallel computers. All data required for rendering each timestep of a simulation must be saved to files for batch rendering, or communicated to the rendering host at each time step. Parallel simulations can consume huge amounts of memory during execution, making data dumping at each time step impractical or impossible. This leads to the idea of rendering the data in place, without retransmission or dumping to disk. Parallel rendering libraries can be tightly integrated with applications so that rendering can take place on the same processors that are used for simulation. Crockett gives a good overview and discussion of the design considerations of parallel rendering libraries in [2].
Portability has been a major consideration in the design of this rendering library. In order to make the library portable to a wide range of machinery, it has been implemented using the Message Passing Interface [3]. Using MPI for message passing allows the same code to execute on the iPSC/860, Paragon, IBM SP-2, and on clusters of workstations. MPI contexts and communicators provide guaranteed-safe message handling when building applications with parallel libraries [4].