blob: d76f4632a89ac863a7fe6addfd48de183153a643 [file] [log] [blame]
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.