Sea Shells
by Keith Ito and Kai Kam
Description
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.
Implementation
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
Photo |
Rendered Image |
|
|
Movie
seashell.avi (9
megs)
Source
seashell.tar.gz