You've seen them before, those patterns of light dancing on pool bottoms. They're called caustics and are caused by the refraction of light rays as they travel through the surface of the water.
The images on this page were generated in a caustic simulator I wrote in Processing (you can generate your own below). The surface of the “water” is randomly generated Perlin noise. Note the rainbow patterns at the edges of the bright bands, caused by dispersion, the same phenomenon seen when light shines through a prism.
What's more, by animating the surface of the noise, it is possible to generate animated movies, such as below.
Use the interactive applet! Note that it is a Java applet, and as such you will need Java installed to view it. It is very processor intensive, as there are millions of light-rays being simulated.
If you're on a Mac, I find that the applet only runs smoothly on Safari. It will still work on Chrome/Firefox but be much choppier. (2017 update: this would be fun to redo with modern technologies to make it more accessible. A project for another time)
Click images to see them large.
All images licensed under a Creative Commons Attribution 3.0 Unported License.