COS 426 Computer Graphics - Fall 1997

COS 426 Home


Project 0

Project 1 (hints)

Project 2 (hints)

Project 3 (hints)

Project 4 (hints)

Project 5 (hints)

Project 6
Project 5 - Rayshade
Assigned: 12/01/97
Due: 12/11/97
Points: 25

In this assignment you will implement a basic ray tracer. Use a recursive approach, as suggested in Hearn and Baker, section 14.6 (read sections 14.1, 14.2 and 14.6, and the appropriate lecture notes).
Ray tracers can be extremely small programs. Check out Paul Heckbert's ray tracer on the back of a business card. Ray tracers often generate really beautiful pictures; for inspiration, check out The Raytracing Competition.
To implement the ray tracer, you will have to intersect rays with a list of primitives. Your program will support at least one kind of primitive: a triangle. In addition, you may optionally handle spheres, cones, cylinders or anything else you can think of.
Your ray tracer may use any kind of input file to describe the scene. However, we recommend that you use as a starting point your program from project 4, which reads Inventor models. For output, you program should at least produce a ppm image, although it would be nice if you could display the results of your ray tracer on the screen as well.
As with the last project, we are working in teams of two people. Please choose a different partner this time. In all but extreme cases, you will both receive the same grade. In the writeup, please say who implemented what features of the assignment. You should both be familiar (at least at a high level) with all of the parts of the project, even if you each only implement part of it.

Required features (20 points total)

1. Fire a grid of rays from a fixed camera position into the scene.

2. Ray-triangle intersection.

3. Reflection and refraction.

4. Recursive ray tree with a fixed maximum number of bounces.

5. Combine results of ray tree with local illumination (from project 4.)

6. The ability to write the results to a ppm file.

7. Add transparency properties to the material nodes. (A posting to the news group will describe how to do this.)

8. You may re-use your scene from project 4, but you should make sure that some of the objects are transparent.

9. At least one nice picture.

Optional features
If you support all the features listed above, you will get 20 out of 25 points. To get the remaining credit, you can choose from the laundry list below. If you have ideas for extensions which are not on the list, let us know. These point values are somewhat fuzzy in that you can do an amazing job and get significantly more than the value here. Likewise, you can do a shoddy job and get less. Please note in your writeup if you implement an optional feature (eg. texture mapping) that you had already implemented in a previous project, and if so, what you did differently this time.

(1) User-interface shows ray tracing in progress.

(1) Spread out samples so you see a coarse picture quickly.

(2) Sampling: Jittered, filtered oversampling.

(2) Adaptive refinement (refine where picture seems to be changing most, perhaps combined with oversampling.

(2) Primitives: spheres, cones and/or cylinders.

(2) Area lights/soft shadows.

(2) Motion blur.

(2) Depth of field/real camera lenses.

(2) Don't forget the art contest.

(3) A cool new model.

(3) Materials: texture and/or bump mapping.

(3) Procedural textures (checkerboards, wood, marble, wavy water, etc.).

(3) Constructive solid geometry (CSG).

(4) Good acceleration structures (hierarchical bounding volumes, spatial octrees, etc.) - if you're amazingly fast, you'll get more points.

(4) Fractals or other recursively defined primitives, evaluated on-the-fly (usually tied into your acceleration structure).

(4) Parallelize your ray tracer.

(5) Animation.

(?) Anything else you can think of. Ask a TA if you want to know how many points it is worth.

Getting started
The interface is basically the same as it was for Project 4. A few bug fixes were made, and transparency was added to the material node. The files may be unpacked in your directory by typing:

% gunzip project5.tar.gz
% tar xvf project5.tar
% rm project5.tar

The first thing to try is:

% make depend
% make
% raytrace.tcl simple.iv

Keep an eye on the hints that will appear during the course of this project, from frequently asked questions, precepts, etc.

Same as before.

Last update: Sun Nov 30 18:08:57 EST 1997