CS 447 - Image Synthesis
The goal of this project was to render bubbles with the effects of thin lens interference. My plan was to do this procedurally by simply using spheres and evaluating a noise function on the sphere to determine the thickness at that point. This thickness was to be used to determine the phase difference for different wavelengths and subsequently the color created by the interference. To try to make the rendering look cool I used image based lighting.
Thin Film Interference:
A bubble is actually a spherical film or membrane with varying thickness. When white light intersects a bubble, some of the light is reflected off the outer surface of the membrane and some is transmitted through. Then some of the transmitted light reflects off of the inner surface of the membrane and some passes through. The ray reflected off of the inner membrane can interfere with the ray reflected off of the outer membrane when the bubble film is thin enough. Depending on the thickness, and the lights angle of entry and wavelength, certain colored light can be removed by the interference making the complimentary color visible. Similar interference can occur with other films such as oil on water.
I decided to use the sphere object with a new material called thin_film to render bubbles procedurally rather then modeling a bubble membrane in a modeling package. The new material I created was based off the glass material but with a few changes. Instead of using a SpecularReflection BRDF like the glass material, I created my own BRDF called ThinFilmReflection. The Thin_film material uses the angle of ray entry and thickness of the bubble to determine the phase difference for red, green, and blue light.
The equation for phase differences is as follows:
The three phase differences are passed to the ThinFilmReflection BRDF where the resulting color is determined. This color is a function of the incoming light and phase difference and is determined by a three sums that yield an CIE XYZ value using the following equations:
S is the relative spectral irradiance, R is the reflectance, and x,y,z bar are the CIE tristimulus values.
This value is then converted to a RGB value using a matrix multiplication. Clipping is needed to make sure the RGB values are in the appropriate range because certain CIE values cannot actually be represented in RGB.
I originally intended to vary the thickness of the bubble slightly by using a Perlin noise function but my attempts yielded unfavorable results.
My resulting images were by no means complete or correct. What I obtained was what appears to be two reflections both on top of the sphere. I believe this occurred because I did not properly modify the glass material in order to produce a bubble which obviously does not invert an image like a solid glass sphere does. The one goal I did accomplish was to produce interference colors, and furthermore they are in bands like they should be for a fixed width. The use of a varying width, if implemented successfully, should have made the color patterns much more interesting. My rendering shows three bubbles rendered with the uffizi light probe using Image Bases Lighting:
Dias, Maria Lurdes. "Ray Tracing Interference Color" IEEE Computer Graphics & Applications. 1991. Jay Gondek, Gary Meyer, Jonathan Newman. "Wavelength Dependent Reflectance Functions" Department of Computer and Information Science. 1994.