Last modified: Fri Dec 4 22:25:15 EST 1998
Your program will read Inventor scene files and support:
Note that you have to work with a different partner from the one you worked with on assignment 4. Send us e-mail when you've found a partner, or when you have trouble finding one.
Similarly, paragraphs 6.1-6.5 of the Angel book talk about shading, and paragraph 6.10.1 talks a little about ray tracers.
Novice programmers often neglect the design phase, instead diving into coding without giving thought to the evolution of a piece of software over time. The result is a haphazard, poorly modularized code which is difficult to maintain and modify. A few minutes of planning short-term and long-term goals at the beginning is time well spent.You should think very carefully about the structure of your system. You need to intersect rays with triangles, spheres, and possibly with your acceleration structures. You want some kind of generic object with function pointers to the intersection functions (in C++ you would use inheritance with virtual functions). Start early, and you've got plenty of time to finish.
- Paul Heckbert, ``Writing a Ray Tracer,'' in An Introduction to Ray Tracing, edited by Andrew Glassner (Note that this book is an excellent reference for all sorts of ray tracing techniques)
|Nodename||Description||Value type||Default value|
|IOR||index of refraction, every transparent object after this node has this index of refraction||float||1.5|
|TRACEDEPTH||maximum ray tracing recursion level (first level = 0)||integer||4|
|IMAGEWIDTH||output image width in number of pixels. Compute the height from the camera's aspect ratio||integer||400|
|IMAGEHEIGHT||output image height in number of pixels. Compute the width from the camera's aspect ratio. If both IMAGEWIDTH and IMAGEHEIGHT are specified, ignore the camera's aspect ratio, and use IMAGEWIDTH/IMAGEHEIGHT instead||integer||(none)|
Do not submit image files. Instead, put a URL in your writeup.html pointing to a page with ray-traced images of the files from the 4th assignment, and images showing off your extra features.
Many more are possible. Foley & van Dam, paragraph 16.12 is a good source for ideas. Also see the next section for pointers to extra credit ideas.
|The winning digit "2" for the art contest||2 points|
|Non-winning digit "2" (if it's pretty :-)||1 point|
|Cones and cylinders||1 point|
|Constructive solid geometry (Foley & van Dam, 12.7)||3 points|
|Area lights, soft shadows||1 point|
|A user interface which shows the ray tracing in progress, showing a coarse picture quickly, becoming progressively finer||1 point|
|Adaptive oversampling using a priority queue, displaying intermediate results in real-time (Foley & van Dam, 15.10.4)||2 points|
|Motion blur (of animated objects) (Foley & van Dam, 16.10)||2 points|
|Depth of field (Foley & van Dam, 16.10)||1 point|
|Real camera lenses (see this SIGGRAPH paper (in PDF format) for more info)||2 points|
|Texture mapping||1 point|
|Texture antialiasing using mip-mapping||1 point|
|Bump mapping||1 point|
|Procedural textures (checkerboard, wood, marble, wavy water, etc.)||2 points|
|Environment mapping (Foley & van Dam, 16.6)||2 points|
|Bounding volumes||1 point|
|Hierarchical bounding volumes||2 points|
|Octree (Foley & van Dam, 12.6.3)||2 points|
|BSP tree (Foley & van Dam, 12.6.4)||4 points|
|Intersections with actual curved surfaces (e.g. tensor product surface, extrusion)(use a root finding method, and explain in your writeup why your method converges and is correct)||3 points|
|Parallelize your raytracer, using one master and several "compute slaves". Make sure your system is nicely load-balanced.||2 points|
Check out these images: