|
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.
|