GENERAL INFORMATION: This code renders a three-dimensional scene onto a two-dimensional image plane using optimized ray tracing. A hierarchical uniform grid is used to represent the scene for efficient access, and early ray termination and antialiasing are implemented. The best description of the algorithm can be found in Jaswinder Pal Singh, Anoop Gupta and Marc Levoy, "Parallel Visualization Algorithms: Performance and Architectural Implications", IEEE Computer, July 1994. A detailed description will be in the SPLASH-2 report. RUNNING THE PROGRAM: To see how to run the program, please see the comment at the top of the main.C file or run it as "RAYTRACE -h". The base problem we recommend does not use antialiasing, so it would not use the -a flag. The program reads an environment file (.env) which sets up parameters and also points to an input geometry file (.geo) and an output file (.rl) in which to store the image. The input file can be found in the "inputs" directory. At the bottom of the .env input file are some parameters (optionally) that control the building of the hierarchical uniform grid (the hierarchical representation of the scene for efficient access). They control how much memory the program needs and how fast it runs. We recommend leaving these parameters as they are for each input file in the base problems. If you change them, the characteristics of the computation will change. There are no compile-time flags to vary in the code. The raytrace program does not use any graphics utilities. It produces a .rl file that contains the image in a special format. The rltotiff program that we provide takes the output .rl file from raytrace and converts it to a tiff file which can then be viewed on most workstations. The rltotiff program is provided in the "rltotiff" directory. To see how to use it, see the beginning of the file rltotiff.c in that directory. You should use the Makefile in that directory to compile rltotiff for your workstation. The rltotiff program requires a tiff library in order to function correctly. The PBMPLUS tiff library works with this application. Simply install the tiff library and replace the directory specified in the makefile in the rltotiff directory with the path to the tiff library. BASE PROBLEM SIZE: Since the raytracer generates images, we provide some sample input scenes that can be used. These include car.env, balls4.env and teapot.env (a small input, provided mostly for testing purposes). Ways to increase the problem "size" for a given scene include using antialiasing to improve quality and changing the hierarchical uniform grid parameters to improve computation time at the cost of more memory (say). For now, we recommend using anti-aliasing to change problem size (i.e. using the -a command line parameter). More details on the hierarchical uniform grid parameters and their effects can be gleaned from the code and will be provided in the SPLASH-2 report. If you change the antialiasing level from the default or change any parameters in the input .env file, please say so explicitly in any results you present. DATA DISTRIBUTION: Data distribution is difficult in a shared address space version of ray tracing (and, if it is required as in a message-passing abstraction, requires a very different algorithm: see the paper cited above). One could place a processor's portion of the image plane in its local memory. For the scene, however, particularly given changing viewpoints from which the scene might be rendered and the unpredictable paths of rays due to reflections, refractions etc. it is very difficult to place scene data appropriately in physically distributed main memory. Data distribution, however, does not make much difference to performance on the Stanford DASH multiprocessor.