• Cloud Ray Tracer

  • Completed 2003

In 2003 I completed a ray tracer project for an honors advanced graphics course. The initial implementation did not include global illumination, but several were added a couple of months later. In late 2004 I dug up the code and began adding support for primitive distributed (cloud) rendering support. Eventually I would like to perform a major re-write of this demo, scrapping the entire UI (which was provided by my university), and improving the feature support.


This version of the ray tracer supports distributed processing across many connected devices. Currently, servers and clients are running on both Windows and OSX. Using 16 connected devices (of varying performance) the tracer is able to complete scenes much faster than with a single device, often reducing rendering time for complex scenes from hours to minutes.

The following list describes the current set of rendering features:

  1. Diffuse lighting with specular highlights

  2. Post processing effects

  3. Bump and parallax mapping

  4. Texture mapping

  5. Oct-tree and kd-tree scene hierarchies

  6. Environment Mapping

  7. Photon mapping

  8. Radiosity solver

  9. Motion blur effects

  10. Distributed rendering support

  11. Soft shadows

  12. Fullscreen anti-aliasing

  13. Interactive interface

  14. Volumetric effects

  15. Procedural geometry

  16. Ray shading system

  17. Reflective and refractive surfaces

  18. Progressive tracing

  19. Depth buffer support

  20. Full HDR pipeline

Photon Mapping

Photon mapping is one approach to global illumination. Using a monte-carlo sampling method, a significant performance improvement is realized with an acceptable (and often unnoticable) degredation in lighting quality.

This approach works in two phases: first, photons are emitted from all light sources (limited by the total energy in the scene), and allowed to bounce from object to object until some threshold is reached. Each time a photon strikes an object, an entry (referred to as a photon splat) is stored in a kd-tree, to track the irradiance at the collision point.

Next, a forward ray tracing path casts rays through each camera pixel into the scene and determines the respective collision points. For each point, contributions from direct illumination are calculated generically and added to an estimate for the indirect contribution that is derived from a sampling of the neighboring photon splats of the collision point.



  Ray Tracer Demo for Windows (840 KB)