I am not my desk
Daniel Tenedorio
When I started grappling with ray tracing and the time
complexity that comes with it, I felt like my computer hardware
had taken a slap to the face. My 2.4 Celeron laptop, or, as I
like to call it, "The Beast," was suddenly insufficient for my
everyday computing needs. With great sadness, I retired all 15
pounds of her to my bookshelf, and resigned myself to the
knowledge that I would have to spend these many hours sitting at
my desk.
I enjoyed implementing environment mapping for the class, so I
decided to take my own environment map for this project. I
borrowed my roommate's digital camera, got a cheap tripod, and
checked out
Paul Debevec
's HDR Shop software. With the help of some tutorials, I was
able to figure out how to assemble one. I was not able to take
the full range of exposures recommended to create the image,
due to the fact that I was using a simple digital camera with
limited settings, but I was able to get a decent environment
map out of the scene:
I also especially liked the texture mapping section of the
class. I resolved to code every type of texturing I could find,
and I used each type in this project. I was surprised to learn
how nice it was to have the ability to cylindrically or
spherically map a texture onto on arbitrary object, and have it
work well most of the time.
+
+
+
+
+
+
+
+
As an alternative to learning a modeling package, I decided
to try to implement many kinds of primitives in my renderer so
I could use them directly instead of a huge triangle mesh. In
addition to the triangle, sphere, and bilinear path intersection
code we already had, I created objects for cones, cylinders,
and discs, each with many customizable parameters. For example,
the glass of water on the far end of the table comprises three
cones and two discs, one of which is actually a ring.
To simluate the appearance of the objects being outside, I
wanted some kind of large area light source. I experimented
with placing a rectangular light source above the scene, but I
found that this created shadows that were too pronounced. So I
ended up using ambient occlusion to simulate even diffuse
lighting everywhere.
Large area light
|
Ambient occlusion
|
I liked the interplay of reflecting objects I was seeing so
far, so I added glossy reflection to the teapot, meaning that
it reflects an image, but it is somewhat blurred. I liked the
effect that this created and plan on checking it out
more.
Glossiness!
Computer renderers do not use cameras, and therefore are not
saddled with the limitations of physical focusing devices.
Nevertheless, simulating an area of focus can result in a nice
cinematic effect:
Depth of Field
Once I decided to try making the desk surface glass, I realized
that it looked too flat and did not carry color in the way to
which my eye was accustomed. In addition to Snell's and
Fresnel's Laws, which specify the amount and angle of light
that reflects off a specular surface, I decided to implement
Beer's Law, which specifies the way light loses intensity as it
travels through a medium.
Beer's Law
Unfortunately, I found that Beer's Law did not play well with
my Monte Carlo algorithm to randomly determine whether a ray of
light should reflect off a specular surface or refract
through, as occurred in the image at the top of this page.
I had a lot of fun creating this image, and I definitely plan
on making improvements to the renderer in the future. It is
based off the Miro codebase at present, but I plan to rewrite
it from scratch sometime soon!