
COS 426 Home

Projects
|
|
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

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

Credit
Same as before.
|
|