Assignment 4 -- Due 4/22/08

Jonathan Hall


Problem :

In lieu of a mirrored room I created a curved mirror. The planer model of a mirror will not work for a curved mirror, because in general the reflected eye point will be different for all points on the geometry.  Therefore, the general algorithm that is used is: For each vertex find the reflection point on the reflective surface and reflect about that point as if it were a plane.

I used the idea in A GPU-driven Algorithm for Accurate Interactive Reflections on Curved Objects, Estalella et.al. To search for the reflection point, we search an image of the mirror's normals and positions trying to maximize the dot product of the half vector and normal. Of interest is the most GPU intensive operation is moving the vertices. Since the search uses the old location for the starting point only three texture look-ups are needed if the scene did not change between frames. In contrast, to move the vertices to their proper place requires three vertex texture fetches, but this operation is not as optimized as fragment texture fetches. In the event that all vertices need to search for their reflection point the frame rate can crawl to ~3 fps.


Results

It's a Dragon!!!
The curved reflection
Zooming in on the reflection
This is the model and mirror,
 the reflection is hidden.
The reflection is visible. Notice that the
 reflected dragon appears distorted due to
the curvature of the mirror.
Here I've zoomed in on the mirror as well
as moved the model closer to the ball. Now
The distortion is more apparent.
Zoomed all the way, model far away
Oops, bad mirror

Here we can see aliasing effects when the
model is far away. This can be due to:
(1) Resolution (2) Tessellation of the mirror
When the model moves behind our mirror
the search no longer works


All results on a 2.8 GHz Pentium 4, 1 GB main memory and a nVidia GeForce 7600 GS 512 MB

(Click pictures for full view)