The following images show my implementation of dielectrics. The first image shows "diamond" with an index of refraction of 2.4 and small but realistic amount of dispersion (hardly noticable in this setup.) The second image unrealistically exaggerates the dispersion to better show the effect. The index of refraction ranges from 1.71 at the longest wavelenght to 2.925 at the shortest.
Each image was rendered at 512x512 with 2560 samples per pixel and with 1/3, 1/3, 1/3 mixture densities. A 4x4 pixel importance-sampled b-spline filter was used for antialiasing and stratification over the pixel area and wavelength was done using a low-discrepency Hammersley set. They took 42 minutes each to render using both processors on a dual 2.5GHz G5.
Update: One thing that bothered me about the image with the exaggerated dispersion is the colour banding that occurs around the images of the light source visible in the dielectric. I had expected a smoother transition between the fringes. I realized on waking this morning that the banding is because each of the RGB components of the pixels has an all-or-nothing thing going on where they oversaturate and are clamped. Thus it is a tone mapping problem. So this afternoon, I re-did a bit of infrastructure, added support for post-processing and implemented the Reinhard tone mapping algorithm. (Note that I think there's an error in the Reinhard et al. paper: the 1/N scale factor should be inside the exponentiation.) Here's how the scene now looks with a key of 0.09. It's at least somewhat smoother in the transitions between bands. Also, the reflected glints off the dielectrics now show as dimmer than the light source.
Update: After some refinement, I found a couple of bugs in my changes for tone mapping and my implementation of the Reinhard tone mapping. There's a subtle gotcha here if you apply the Reinhard algorithm in the RGB colour space. The XYZ to RGB conversion from spectral processing can produce negative values for some components. This can lead to the L/(1+L) step producing values greater than 1.0 since the negative divides out, leading to excessively dark components going excessively light. So you still need to clamp on the black side after the XYZ to RGB conversion though the L/(1+L) step will take care of the higher values. The two images below have been re-rendered with the corrections. (Interestingly, this bug manifested in the red component midway between the cyan and violet fringes on the right dielectric.)
Extra Credit: I've also implemented a Fresnel metal material. Here's the scene with the box and the ball changed to metal. All settings, including the tone mapping are otherwise the same.