Sea Shells

by Keith Ito and Kai Kam


In our project, we modeled the effects of iridescence generated by thin film interference in a seashell. The seashell photograph shows the rough outer shell and the inner shell, where the interaction between the reflected light on the outer and inner surfaces of the thin film causes light at certain wavelengths to be amplified depending on the viewing angle.

Rendering these images allows us to see some unusual interactions of certain materials with light. Such materials refract the light and look multi-colored, even though the colors are due to the iridescent effects from a transparent film.

We chose this project because of the variety of objects we can render implementing this feature. In addition to sea shells, we may also apply the same techniques to render soap bubbles, oily road surfaces, and other surfaces coated by thin films.


We used several rendering techniques to achieve a realistic image of a seashell. First, we modeled the seashell in Moonlight Atelier using NURBS curves. When the NURBS get refined to a triangle mesh, we then use Phong interpolation to achieve the appearance of a smooth surface. The inside of the seashell is modeled as a different surface, namely with a thin film. Since we thought the shell looked unrealistic with a uniform thin film thickness, we mapped different thicknesses to each part of the seashell. We also used bump mapping to give more realism to both the inside and outside of the seashell. In order to make the paper on the book more realistic, we used a Perlin noise function to perturb the normals of the surface. Below are more in-depth descriptions of each part.

Thin Film
For modeling thin film interference, we first calculated the reflected light from the thin film (assumed to be mirror-like and the reflected light from the surface beneath the thin film (assumed to be diffuse). We converted the RGB light that is represented in LRT to a spectral distrubtion so that we could calculate the intensity of the wavelength. We also calculated the path length through the thin film. Then, with these two intensities and the length, we got the spectral distribution of the total outgoing light color. We were able to change this distribution to XYZ colors and then finally to RGB.
NURBS + Phong interpolation
The model was created with Moonlight Atelier using NURBS curves. The original code from LRT was used to transform the NURBS into a triangle mesh. We used Phong interpolation of the vertex normals to create a smooth surface across the inside of the seashell.
Thickness Map
In order to create the thickness map, we first added a "modulation" factor in the RIB file. This was used to determine how much the thickness varied throughout the seashell. The values of the thickness function were stored per vertex of the trianglemesh and interpolated according to the triangle's parametric values. These interpolated values were then stored per pixel so that the the BSDF could retrieve it later to calculate the actual thickness and use that to calculate the thin film interference.
Bump Mapping + Perlin Noise
For bump mapping, we simply modeled a sine wave across the surface according to the surface's texture coordinates. This allowed for ridges to appear on both the outer and inner sides of the seashell. A Perlin noise function was used (we got the function from Ken Perlin's web page) to model the bumpiness of the paper, giving it a more realistic look.

Images and Movie

Rendered Image

seashell.avi (9 megs)