\ CMSC 635 Assignment 1

Assignment 1: Ray Tracing

CMSC 635, Spring 2009

Due February 19, 2009


Using any one or more of the techniques discussed in class, modify the simple ray tracer provided to make it go faster. Evaluate your improvements by computing the speedup between the original ray tracer and your improved version for the balls, gears, mount, tetra and tree benchmarks from the standard procedural databases (SPD). Ten points of your score will be allocated based on the ranking speedup you achieve in the class.


First, you will need to get both the SPD programs and base ray tracer to build on your system. Each has a Makefile that should work for building on Linux or Mac. For PC, or to use XCode on the Mac, you will need to create a project and add all of the source files to it. In addition, you might need to adapt them to read their command line options from a file. Both are self-contained, so you should not need to install any additional libraries.

The ray tracer produces PPM format images. If you do not already have a viewer for these, check out Gimp or ImageMagick. Another option if you choose to run on the campus linux systems is to use the convert program there to convert the image from PPM to JPG to view from your userpages web space.

convert trace.ppm trace.jpg

Don't count any image conversion time, or SPD file generation time in your timing. Do count the entire running time of the ray tracing program (including reading the scene and writing the object). On a Linux/Mac command line, you can do this with the time command. On Windows, you can get the current time at the beginning of the program and at the end, then report the difference.

What to submit

Submit all source files necessary for me to build your project, including headers, C++ files, and Makefiles and/or solution files. Do not submit any generated files, including images, executables, object files, or Windows build files other than the solution file. ALSO submit one readme file informally describing your project. It should include what sources and methods you used, timings and speedups for each benchmark, notes on how to build your project, and a summary of your own assessment of how well it turned out.

Where to submit

I have created a private class subversion (svn) repository for each of you. The best repository URL to use depends on where you are checking out the files. All have the same base path


In the URLs below, basepath is the path above, and username is your UMBC username. From the lab machines using tortoiseSVN, use


From campus GL machines, use


Finally, for remote access you can use


Note that with the svn+ssh method, you will probably need to type your password at least once or twice for each svn operation.

In this directory, you'll find a copy of the sample ray tracer. In addition, I have created a tag of this base version, which you can check out from .../assn1/tags/base, even after you've made changes to the trunk version

How to submit

Just check in your files the assn1 trunk by 11:59pm on the day of the deadline.

Show and tell

On February 24th, I'll present the final speedup numbers for each of you in class. I'll ask each of you to say a few words about how you approached this assignment. No advance preparation should be necessary.