Gabo's CGL Page
Gabo's CGL Page

COURSES
Computer Graphics
Splines
Billboard Clouds
COURSES
Stream Raytracer Radiosity Maps

 

People & Pictures

Hello, my name is Gabriel Moreno-Fortuny and I had the honour of studying a Masters degree in mathematics at the University of Waterloo. I was a member of the Computer Graphics Lab (CGL) under the supervision of Michael McCool and had financial aid from CONACYT. I studied in this university between 2003 and 2005 during which time I also worked in a company called Serious Hack (founded by my supervisor and a fellow grad student) now known as RapidMind. I am currently working as a game developer in Bioware Corp.

This web page is meant to show some of the work I did during my masters and will be of interest to you if:

  1. You are a new grad student looking for a description of the kind of work that is done in some of the courses.
  2. You want to know about me and what I have done in general.

Below is a brief description of the courses I took, some of the projects I worked on and my thesis research. The sidebar on the left has links to detailed descriptions of the more interesting ones. For a more personal description of my life, please feel free to click on the "personal" link at the bottom of the sidebar.

 

Course Listing

Thesis Work

Course Descriptions

(Clicking on the course name will open its UW page, clicking on the images will open my own web pages related to the course or projects)

cs688 - Introduction to Computer Graphics

This is quite a coding intensive course, but if you want to learn what graphics is all about, its certainly worth the work. There are 5 main assigments and a final project. The most noteworthy assignments are assignments 3 and 4 which involve creating an interactive virtual puppet and a fully working ray tracer respectively. In my case I created a cute polar bear named Ben and rendered an artic scenery for him with the raytracer. For the final project I used "Sh", an internaly develop shader library, to create some interesting real time illumination effects to enhance a simple game of punching robots. You can see more about my work in this class by following this link.

cs888 - Advanced Topics in Computer Graphics

This is a special "topic" class which is given every other term and in which different aspects of graphics are analysed by having the students read papers and present them for the class. I took many of these topics but I only had interesting projects in the following two:

Recent Advances in Computer Graphics

In this topic, students were asked to present recent papers from any graphics related conference like SIGGRAPH or Eurographics. I selected a paper called Billboard Clouds in which the authors presented an algorithm to convert a complex 3D model into a cloud of billboards (textured rectangles) which represented the original model to a reasonable degree but with greatly decreased geometric complexity. A more detailed description of my implementation can be found here.

Computer Vision and Image Processing

For this class students presented papers from relatively recent computer graphics papers but specifically focused on computer vision and/or image processing algorithms within those papers. I chose a paper that compared various recent edge detection algorithms using ROC curves. Since I only took this course for audit credit, I did not implement a project, though I did implement a simple Soble edge detector program.

cs779 - Splines

This course, though less intensive than cs688, requires much more mathematical work. The assignments involve coding and coming up with creative solutions to some splines related problems, including proving one or two theorems. In general, these assignments really get you thinking and help you to properly understand the theory and are quite a lot of fun, if you like the math. For the final project you can invent your own splines related idea or choose from one of the typical topics from the web page. I chose direct manipulation and ended up with a program that lets you intuitively mold any 3D object. More information on this is found here.

cs775 - Parallel Algorithms in Scientific Computing

Because my thesis will be focusing on interactive programs that require processor heavy algorithms, the contents of this course was quite useful to me. In it, you see the whole theory of parallel methods of computing, along with how to analyze timing complexities. The algorithms and math becomes dense once you get to the actual algorithm examples so beware. This course has two assignments in which you learn to use the MPI library, and a final project. For my project I chose to implement a simple gaussean elimination algorithm using various parallel methods.

Thesis Work

I worked on my thesis in two stages: first researching methods on running ray tracing algorithms within a GPU and then applying these methods to efficiently calculate radiosity using a GPU.

Stream Ray Tracer

The first part of my research has involved reading about and implementing an algorithm by Tim Purcell that involves executing a ray tracer within a GPU. I implemented this using the Sh library using the stream processing mode it has. This has given as a result a raytracer that can be run on a GPU with conditional capabilities (like the Nvidia 6800) or using a CPU backend. On the GPU it runs fast enought so that a simple scene (about 400 triangles) can be rendered at interactive times. Click here to find more details about this work.

Radiosity Maps

The thesis I actually presented was an application of the stream ray tracing algorithm. It involved calculating radiosity by using a Monte Carlo method (random sampling) and the previously mentioned ray tracing method. This allowed radiosity to be calculated very fast using powerful GPUs, giving interactive frame rates for simple scenes. A more detailed explanation of this is given in this link.

Back to the top