*Stratified Sampling* |
Implement a stratified sampling algorithm for choosing subpixel
positions for visibility computations, motion blur interpolation
times, and depth of field lense positions. Some candidate algorithms
include n-rooks, halton, or Poisson disc. Compare the results
against uniform random and non-random sampling by creating a set of
sample scenes such as a fine toothed comb, slowly moving radial lines,
fast moving objects, and so forth. |

*Shadow Algorithms* |
The basic shadow algorithm is a very basic percentage closer
algorithm. Try to modify or rewrite the algorithm to add more
accurate penumbra, or create more realistic controls such as a light
radius, to work correctly with multiple shadow maps for point lights
or detail maps for specific areas, add translucent shadows, or ray
traced shadows. |

*Bokeh* |
Add probability sampling to the lens depth of field computations
to simulate bokeh. |

*Geometric Primitive* |
Add a subdivision surface primitive to the geometry library.
Or derive a new Geometry class and implement subdivision surfaces,
read a new file format such as Wavefront's OBJ polygon format, add
support for NURBS by converting them to Bezier patches |

*Material Shaders* |
Implement an advanced material shader. For example, a skin
shader with multiple layers and Kubelka-Monk subtractive mixing, an
anisotropic metal shader, multi-lobed phong models using measured
reflectance data, etc. |

*Ray Tracing* |
Add support for ray traced reflections, or shadow maps. |

*Environment Maps* |
Write a set of scripts to generate the views for six faces of a cube
that surround a given point and use these images as an environment map
by deriving a new Material class that computes reflections and indexes
into the appropriate image |

*Algorithm Visualization* |
Write a viewer that graphically visualizes part of the main
rendering pipeline. For example, write a subpixel viewing tool that
illustrates the sampling problem and visualizes the surfaces within
the pixel to show how transparency is handled. |

*Texture Filtering* |
Implement a more advanced texture filtering operation, such as
oriented eliptical filtering, scan conversion, or summed area tables. |

*Tone Operators* |
Write a 2D image filter that computes a global tone operator for
the entire image and quantizes the floating point colors into 8bit or
16bit values. How should this work for a sequence of images? |

*Dithering* |
Writea 2D image filter that performs one of the many dithering
algorithms, such as Floyd/Steinberg, or Error Diffusion, while
quantizing the floating point data into 8-bits. |