Light Field Renderer


In this assignment, we had to create a light field renderer (or some other image-based renderer). This implementation was done using techniques presented in the paper "Light Field Rendering" by Marc Levoy and Pat Hanrahan and "The Lumigraph" by Gortler, et al.

I created my data set using my ray tracer. For the front plane (I only created one light slab, instead of six for the entire cube surrounding the scene), I used a 16x16 grid of camera samples, and for the back plane I used a 128x128 grid. The data was created by generating a sheared perspective projection from each camera. Some sample images spanning the entire data set are shown below.

Once I had this data, generating images from new viewpoints was simply a matter of tracing rays (as opposed to a more efficient method using texture mapping) from the eye point through each pixel in the image plane and determining where the rays intersected the front and back planes. These intersection points are used to look up color values in the light field representation. The color at each pixel is interpolated between the four closest cameras on the front plane.

You can see an animation of moving through the scene here. The file is kind of big. The speckling in the image is due to the conversion to GIF.

You can get the code too, but it isn't very fun to look at.