by Charles Sanglimsuwan (email)

Hello

The purpose of this website is to highlight the main features of the LTDC125 Renderer (standing for "Lack of Time Due to CSE 125" Renderer), and the "Oasis in the Desert" image . The LTDC125 Renderer is a ray tracer written in C++ for CSE 168 at the University of California, San Diego, taught by Professor Matthias Zwicker.

The Final Image

The final image depicts one of humanity's greatest inventions, and something that Americans and other developed countries have often taken for granted: a toilet. I tried to strike an artistic pose with the toilet, and felt that it would contrast well with the barren desert you see.

On the technical side, the image features 1) Texture mapping, with mipmapping, 2) Environment maps, 3) Soft shadows - 100 samples - (although they do not come up that soft on a textured surface), 4) Anti-aliasing, 5) Area lights, and 6) Minor bump-mapping on the ground. Additionally, the scene is lit by the Sun you see in the picture, and light sources determined from the environment map.

Path-tracing nor photon-mapping was implemented because it would not benefit an outdoor scene.

Initially, I wanted to render the same scenery with a mech robot created by my colleague Todd Espiritu Santo. Unfortunately, the robot's polygon count of 200,000 proved to be too time costly (I was able to render parts of the image before time ran out). When I realized that rendering the robot would take days, I decided to swap in the toilet instead. The toilet was more friendly on the renderer, sporting only 12,000 polygons (it's a nice, well-detailed toilet).

The Raytracer

The ray tracer was built using the Miro base code. Over the quarter, the following features have been added:

- Basic ray tracing (ray-object intersections, with BRDF lighting model)
- Reflections
- BSP tree with mailboxing
- Texture mapping, mipmapping, bump-mapping
- Procedural textures using Perlin noise
- Using an environment map as a light source
- Anti-aliasing
- Soft shadows

Closing Thoughts

Overall, I am not too happy with my image. I would have much preferred the mech. The last minute decision to lower the wattage of the environmental map and sun light sources was also a poor artistic choice, as the scene is now much too dark. However, aside from that, there was not much I could do to get the mech rendering faster. I used about 30 machines to render different parts of the image (and then piece them together with a program I made). However, at one point, the power strip powering 8 machines went out, and I lost a lot of work. The toilet itself took about a little less than 3 days to render (combined times from ~30 machines). My ideal day would have been to see the rest of this image:

Works in Progress

Here are some images that were rendered at various stages of the process:


The 3D Studio Max file of the original mech I was going to render


Implementation of soft shadows


Implementation of anti-aliasing


Setting up the basic environmental cubic closure (scene generated by Vue 3D)


Generated procedural texture of sand (not used in final image)


Before and After - Light from Environmental Map

Running the Code

The code was constructed in Visual Studio .NET 2003, but should compile in most compilers like GCC. I did not add any special parameters to the program, so it behaves the same way Miro does (takes in same default command arguments).

Special Thanks

Thanks to Dr. Matthias Zwicker for his instruction and guidance, Wojciech Jarosz for his continual help, Todd Espiritu Santo for the awesome 3d model, Nelson Dou for his environment maps, and the CSE 168 students for the support.

No thanks to CSE 125 for taking time away from this class.

(C) Charles Sanglimsuwan