|
|
||
![]() |
||
| ਵਿਕਰਮ ਸਿੰਘ ਨਿੱਜਰ | Vikrum Singh Nijjar |
|
I implemented thin film interference in my ray tracer which simulates iridescent surfaces. The scope of the project was limited to single interface film and media. Some examples of iridescence include the anti-reflective coating on a camera lens1 (proposed image), goniochromatic paint2, and soap bubbles3:
![]()
![]()
![]()
Over the course of the quarter I successfully implemented the basic components of a ray tracer:
- Point and area lights.
- Lambertian and Blinn-Phong shading.
- Reflection and refraction including Schlick's approximation to the Fresnel equations.
- Procedural texturing using Perlin noise.
- Acceleration structure based on binary space partitioning.
- Trilinear texture mapping using mipmaps.
- Bump mapping using differentials.
- Distribution ray tracing.
- Uniform, jittered, and adaptive supersampling.
- Embarrassingly parallel ray tracing with pixel queue to avoid starvation.
- Tone mapping using a linear global operator.
- Seperate acceleration structure for occluders to allow for decimation or omission.
- Monte Carlo global illumination using path tracing.
- Caustics with photon mapping.
Reading scientific and academic papers7--13 is a thoroughly excruciating process. Time not spent trying to decipher different authors' notation was spent trying to infer omitted implementation details. [10] and [8] were used as a primary sources for implementation and [7] for tristimulus (CIE XYZ) theory.
Rendering competition submission of camera lens:
![]()
![]()
Faces: 18,079 triangles
Occluders: 608 triangles
Samples/pixel: 100
Shadow rays/pixel: 13
Pixels: 404,500
Wall clock render time: 3 hours
Parallelized across: 45 computers
Inspiration15 Rendered
In addition to simulating the anti-reflective coating of a camera lens, I was able to simulate chameleon paint on a car4 by using Perlin noise to vary film thickness ±0.03µm:
Chameleon Paint ![]()
![]()
Photograph5 Rendered (DivX | GIF)
Since I had no prior experience with 3D software and -7 artistic & creative skills, modeling the camera lens took an obscene amount of time. With no access to commercial software, I chose to use Blender 2.41.
The main hurdle in creating the components was the fact that the normals on a cylinder's sheath are orthogonal to the normals of the two faces: interpolating normals for such an object becomes problematic. Blender has a feature which allows one to recalculate normals for the outside and inside of objects which, while useful for some components, does not work for certain geometries.
![]()
![]()
![]()
In order to render antialiased images in a reduced amount of time I implemented adaptive supersampling. I tried a few different heuristics to decide when to recurse on a pixel: one of the early methods involved interpreting colors as vectors and measuring the angle between two colors to determine whether or not to recurse. While the semantics of "the angle between two colors" are questionable, I did have varying success with this method. I opted for a simple metric based on percentage differences of individual RGB components of color; this methods lacks when antialiasing pixels with contributions from distribution ray tracing---producing speckled results. A visualization of this metric is shown below with high RGB values indicating high aliasing.
![]()
![]()
![]()
Aliased Visualization of threshold metric Antialiased
Other various features implemented:
- Soft shadows.
- Depth of field; left: 1 sample/lens, right: 25 samples/lens.
- Procedural texturing: Pseudo-cellular.
- Procedural texturing: Snow-globe with snow capped mountains, hills, hurricanes, tornadoes, and a lake. This feature is so advanced that I don't know where it's implemented.
- Path tracing: Visualization of global illumination.
- Photon mapping: Caustics.
- "Environment Mapping6."
1. 2. 3. ![]()
![]()
4. 5. 6. ![]()
7.
- Anmol Nijjar - Insight into spectral power densities and radiant emittance.
- Matthew Taylor - Photon mapping.
- Ardavan Ghalebi - Creative feedback.
- Wojciech Jarosz - Ray tracing optimizations.
- Carl Zeiss Nikon (ZF) Image Gallery.
- Pearlescent Viper.
- Soap bubble.
- Car model.
- Chameleon TVR.
- Environment map.
- H. Kubota. ``On the Interference Color of Thin Layers on Glass Surfaces.'' J. Optical Society of America, Vol. 40, No.3, Mar. 1950, pp. 146-149.
- M. Dias. "Ray Tracing Interference Color." IEEE Computer Graphics and Applications, vol. 11, no. 2, pp. 54-60, Mar/Apr, 1991.
- J. S. Gondek , G. W. Meyer , J. G. Newman. ``Wavelength dependent reflectance functions.'' Proceedings of the 21st annual conference on Computer graphics and interactive techniques, p.213-220, July 1994.
- Y. Sun, F. D. Fracchia, T. W. Calvert, and M. S. Drew. ``Deriving Spectra from Colors and Rendering Light Interference.'' IEEE Computer Graphics and Applications, vol. 19, no. 4, pp. 61-67, Jul/Aug, 1999.
- H. Hirayama, K. Kaneda, H. Yamashita,† and Y. Monden. ``An Accurate Illumination Model for Objects Coated with Multilayer Films.'' EUROGRAPHICS 2000.
- H. Hirayama, K.Kaneda, H.Yamashita, Y.Yamaji, and Y. Monden. ``Visualization of optical phenomena caused by multilayer films based on wave optics.'' The Visual Computer (2001) 17:106–120.
- D. Jaszkowski, J. Rzeszut. ``Interference colours of soap bubbles.'' The Visual Computer (2003) 19:252–270.
- Octane Digital Studios: Environment map.
- H. Faas (Ed.), T. Page (Ed.). Requiem: By the Photographers Who Died in Vietnam and Indochina