\section*{Goals}

Our project will implement a ray-tracer distributing its effort over a 
cluster of networked machines.  Having more available computing power
will give us the ability to explore different ray-tracing algorithms,
including forward ray-tracing and combining forward and backward
ray-tracing.  Given sufficient computing power, it may be possible to
implement real-time animation on the server machine as well.
Regardless, this project should noticably decrease the time
requirements to fully render a scene.

\section*{Design}

Rendering work will be divided among a cluster of Unix-based
workstations.  The scene description will be stored on a shared
network filesystem, such as NFS or AFS, and all of the clients will be
responsible for reading the description in on start-up.  We are
considering either a one-level or two-level system for distributing
rendering operations.

A single server will ultimately be responsible for rendering images.
The server will be given input parameters such as the size and format
of the resulting image.  It is responsible for contacting its client
machines and handing out either individual rays or segments of the
image to render.

Our system will include a number of light-weight clients that can
calculate individual rays.  A client will recieve a request from the
server to calculate the color a particular ray will see when cast from 
a given eyepoint.  The client will perform ray-casting to determine
which object it hits.  It can also determine the color of the object
as it reflects the ambient light in the scene and its diffuse color.
We may extend these clients to be able to calculate specular lighting
and reflective and transmissive effects.

In a one-level system, the server will directly ask each of the
clients to calculate pixel colors.  In a two-level system, a number of 
heavy-weight clients will do this work instead.  The main server will
ask each of the heavy-weight clients to render a portion of the
scene.  These clients will in turn ask a designated subset of the
available light-weight clients to render individual pixels.

We presently plan to have no visible user interface to the system.  We 
may implement an interface in the last week of the project if other
parts of the project are complete and functional.  This interface
would allow users to render particular scene descriptions and watch
the rendering work proceed in real-time.
