WPI Computer Science Department

Computer Science Department

CS 563 Advanced Computer Graphics Spring Semester 2007

Project 2 - Camera Simulation

Due March 13, 2007


Many rendering systems approximate the light arriving on the film plane by assuming a pin-hole camera, which produces images where everything that is visible is in-focus and sharp.  In contrast, real cameras contain multi-lens assemblies with different imaging characteristics such as limited depth of field, field distortion, vignetting and spatially varying exposure.  In this assignment, you'll extend pbrt to support a more realistic camera model that accurately simulates these effects.

Specifically, you are provided with data from real wide-angle, normal and telephoto lenses, each composed of multiple lens elements. You will build a camera plugin for pbrt that simulates the traversal of light through these lens assemblies.  

With this camera simulator, you'll explore the effects of focus, aperture and exposure.  You will empirically characterize the critical points of the telephoto and normal lenses.  Using these data you can  optimize the performance of your simulator considerably.

Step 1

Read A Realistic Camera Model for Computer Graphics by Kolb, Mitchell, and Hanrahan, in SIGGRAPH 1995.

Step 2: Compound Lens Simulator

Sample Images:

Some conventions:


Step 3: Web page submission

Create a web page that describes your work and mail the URL to me. The page should contain the following:

  1. A clear description of your approach and summarize the steps you took to simulate the camera.
  2. Your code (attached to this website)
  3. Describe parameter setting you used to generate your images for each lens type.
  4. Use exrtotiff to convert your .exr renderings to tiffs, and then convert these to jpgs to include in your web pages.
  5. Though it is not a requirement, feel free to append a discussion of anything extra or novel that you did at the end of your web page.


  1. Q: PBRT complains that it can't find realistic.dll or realistic.so. What should I do?
    A: Make sure that '.' (the local directory) is in your PBRT_SEARCHPATH environment variable.  In this assignment, you will compile a camera plugin (realistic.so/dll) in your working directory. Note that the path is ':' delimited on Linux and ';' delimited on Windows.
  2. Q: Should we be implementing the thick lens approximation described in the paper or a full lens simulation?
    A: Please implement the full lens simulation, which is less work for you and only slightly less efficient computationally.  Implementing the thick lens approximation is a superset of the work, since you need the full lens simulation in order to calculate the thick lens parameters.
  3. Q: Why are my images so noisy?
    A: Integrating over the surface of the lens, especially for large apertures, requires multiple samples for accuracy.  Too few samples increases the variance of the integral estimate, resulting in noisy images.  The problem is exacerbated in Step 2 by the fact that you will fire many rays at the lens system that will not make it into the world because they will hit the aperture stop. To drive down the noise, you can increase the number of samples ("integer pixelsamples" parameter in the scene file).

    Adapted from UT Austin CS 395T, which adapted it from Pat Hanrahan's Stanford CS348B course.