Bi-Directional Volumetric RayTracer

VolTrace - CPE 572 - Spring 2017 - Zoe Wood


  • Andrew Adriance

Project Description

This project was about ray tracing volume data. It took a bi-directional approach which means rays are cast from both the light and the camera, and the two paths are converged. The ray tracing took a brute force approach to tacing the volume data. The ray would be walked through the valume, checking for density and material information at each step. The project also implemented a filter material. This material took advantage of the volume nature of the data and let the ray pass through the data and contribute its color to whatever was behind it. It took a lot of samples/path traces to make this look good though.

The volume itself was a huge NxNxN cube that contained two pieces of data per voxel. The first was the density of the volume at that point. The second is a pointer to the material type for that voxel. Using a pointer to material type helped give massive savings on memory used to store the data.


Ray tracing takes forever. Trouble shooting a render was a 5 hour proposition, as many visual artifacts didn't even show up unless it was a high quality render that took an hour or two to run. The final images ran for about 5 hours. Volumes are also hard to trace pretty. It took a lot of time to determine how finely to sample the volume. You can see in the images below that early on I had artifacts due to ray being trapped in the volume, or accidentally escaping a piece of volume data. Additionally storing volume data naively as a huge NxNxN matrix greatly limits the size of the scene. The resolution of my final result was 256x256x256, which was so low I couldn't really represent spheres.


  • Volume Data
  • Path Tracing (From eye)
  • Path Tracing (From light)


Sorry... it's a ray tracer


External Sources