The Mixing Pot of Rendering algorithms

Diem Vu, Sunny Chow

Introduction and Background

We had absolutely no idea what our final scene would be so we decided what the heck, we'll try to implement all the cool ray tracing algorithms that we can code up in a week and base our final image on what we can mix up together. Altogether, we've implemented photon mapping (indirect, caustics), antialiasing, depth of view, procedural textures, volumetric lighting, and finally, path tracing. When it came time to figure out what would be our final image however, we found that there was no way we could use every technique and have the image come out making any sort of sense. In the end, we decided that what would best is to showa few images, and since me and Diem had disagreements on which techniques to show off (naturally we each wanted to highlight what we did by ourselves. ;) ) we will be submitting two different images that highlight the versatility of our ray tracer.

Photon Mapping

The implementation of photon mapping proved to be relatively easy thanks to Professor Jensen's photonmap class. The part I found trickiest was how to scaled the reflected photons to possess the lighting qualities of the surface it just bounced of off while at the same time maintaining, keeping each photon's power to be the same. The answer was relatively simple, and that was merely to multiply the photon's power with the color coefficients of the material divided by the average of the color coefficients. Besides that, the trick to getting a good quality image was to "tweak" the parameters around. Here's some obligatory cornell box images...

The cornell box with depth of field, and antialiasing. The cornell box with depth of field, antialiasing, and photon shadows. Unfortunately the quality of the shadows given with my implementation turned outbe very dependent on the distribution of shadow photons, and this "feature" will not be used by our final images.

Refraction, Fresnel and Beer's law
To correctly model the refraction ray, I use the convention that if the ray hit a surface from the same side as the normal, then it means the ray enter the 'medium' and exit the medium otherwise. By keep track of the refraction index of the current medium, it is easy to apply all these ray physics laws (Snells, Fresnel, beer) to the tracer.
Some results:

Without Beer's law

With Beer's law

Procedural and cellular Textures

Loaded with all Perlin's noise, Worley's noise and white noise ... The best time to work with texture is 3.12 am in the morning, when you don't know what you are typing and suddenly you enter some good combinations that turn out to be a perfect texture. Anyway, it is a lot of fun.

more examples...


more examples...


more examples...

Participating media
I initially want to simulate the effect when light go through a dusty air. So I read Jensen and Christensen paperand, ... well, have some sort of idea. But not like texture, implement photon and ray marching is NOT fun. I often have to wait ten to twenty minutes to realize my parameters is completely rubbish. So, after days (or hours?? - I'm confused) of working on this, I reduce my ambition to create some thing look like:

more examples...

Sunny's final image

For my final image, I decided I would like to render the salk institute just down the street. Here's a reference picture of the institute.

Since I couldn't find any models on the web, I ended up modeling the building in wings 3d, and correcting the normals with 3dwins. Here's an image without indirect lighting to illustrate the constrast when only direct lighting was used.

Now with indirect lighting...

I couldn't get a good shot with the two rows of buildings so I settled for one. The techniques that ended up being used for this image were photon mapping, and procedural texturing to give the faces ofthe buildings some "roughness"a nd to the give the ocean and sky some life. Since we all love caustics, there were some present in the scene as can be shown in the image below. However, in the pictures, their effect is relatively slight.

Here's another one in a different light. Notice the textures. ;)

Full resolution image
This is my final image. :)

Full resolution image

Diem's final image(s)

So here again, the ocean with bump mapping for water, volumetric photon maps for sun, procedural texture for cloud with a trick to add fog to the scene.

Full resolution image

... and the pool with many types of texture: bumpmap(water, wall flagstone), percedural (marble, moist on the wall), cellular (flagstone). Also refraction (notice the color of the transparent sphere is a bit lighter near the perimeter), photon mapping, antialiasing and of couse, volume scattering

Full resolution image