Here is the required image:

Here is the creative image:

The creative image contains a pair of red spheres shaded with the Phong material, a pair of green spheres shaded with the metal material and a pair of dielectrics. The dielectrics have a lightly blue shade due to absorption according to Beer's law. The top one is hollow with an air bubble 0.4 times its radius. The bottom on contains another green metal sphere at its core, also 0.4 times its radius. The ground plane has my glossy shader as usual.
I implemented the materials largely as described in the class lecture. The only really interesting parts were related to my implementation of dielectrics:
One design goal was to allow for nested dielectrics, bubbles, other surfaces inside a dielectric etc. Originally I thought that I might have the ray keep track of the properties it was moving through, either inside the ray or on a stack as it entered and exited the various materials. I concluded that explicitely tracking the material properties this way was to difficult.
Consider a ray passing through a wineglass:

A first approach to creating this scene might be to have the wineglass as one closed surface and the wine as another. However, at the interface of the wine and the glass one must prevail due to the code to avoid self-intersections and separating the two by enough to avoid that problem leads to incorrect physics as the ray passes back into air and then back into the wine. One way to solve this would be to allow the surfaces to be open, but then this would cause a stack approach to fail.
The solution as I took was quite simple and general. Each instance of the dielectric material knows the absolute index of refraction and absorption properties on both sides. The dielectric shader would simply distinguish the two sides based on whether the cosine of theta was positive or negative. With care, this allows complex setups to be composed in a piece-wise fashion out of open surfaces. The wineglass above would be composed of three different surfaces corresponding to the three interfaces (as shown by the colors above).

I hope this counts for the extra credit. Verbally in class there was mention of toon shading for the extra credit, though I now notice that the assignment sheet is a little different.
I thought it would be fun to try to implement a crosshatch style NPR shader and this is what I cooked up. The shader starts by calculating the standard ambient/diffuse/phong specular combination, plus an optional constant mirror reflection. If below depth 0, this value is simply returned.
At depth 0, however, the luminance of this colour is computed. An adjustment is made to darken it where the normal comes close to perpindicular with the viewing direction: this helps bring out the silhouette better in some cases (note the edges of the spheres and the horizon line). Next, the hit position of the primary ray (since this is depth 0) is transformed back into screen space by multiplying it with the transpose of the camera's screen-to-world matrix (with a slight offset to give the lines a nice small curve). The screen space coordinates are then tested to see if they fall on any of the crosshatch lines. To determine which set of crosshatches to test, the luminance is quantized to one of nine levels. The brightest is left white, the second brightest tested against one set of crosshatch lines, the third against that plus another, etc. Each new set of crosshatches is linearly interpolated in to reduce the discontinuity from the quantization. The sets of crosshatches where chosen to alternate directions and to start sparse and then fill in.
I should also note that a fisheye camera model was used for this image.