Distributed-Memory Ray Tracing
Ray-tracing refers to the rendering technique where one or more rays are cast for every pixel on the screen. Each time the ray encounters geometry, new rays can be spawned to create additional lighting effects, such as soft shadows, ambient occlusion, or specular reflections. Ray-tracing produces pictures that are far more photo-realistic than those produced via rasterization -- the technique used with OpenGL -- since it can model more of the paths from light emitters. Further, studies have shown that these more realistic lighting approximations can better aid in the interpretation of scientific data compared to the more primitive rasterization lighting models.
Rasterization has been much more widely used than ray-tracing because it is must faster. However, recent trends are causing ray-tracing performance to be increasing viable:
Results To Date
GraviT will combine user interface, parallel scheduling algorithms, and optimized ray-tracing engines. When possible, hardware-specific engines such as Embree or Optix will be used. But part of GraviT's mission is to provide portable performance over all architectures; developers who use the GraviT framework should feel future-proofed against architectural change. To support this, we have been developing a ray-tracing engine with portable performance over many architectures.
EAVL is a visualization library that aims to provide portable performance. This performance is achieved by providing abstractions that can be easily ported over many-core architectures. The abstractions are that of data-parallel primitives: operations that can be carried out in time proportional to the logarithm of the input size on a vector machine. Examples of such operations are gather, scatter, map, and reduce. Developers then implement algorithms by composing these data-parallel primitives. This approach is a departure from traditional approaches (i.e., writing CUDA code directly), but it is effective in enforcing development that is proven to be parallelizable. To date, we have produced a functioning ray-tracer using these data-parallel operations. This ray-tracer will become part of GraviT and provide GraviT with a way for porting to architectures that are not covered by known ray-tracers, such as Embree or Optix.