2.1 The Input File
The scene description read by rayshade consists of a number of keywords,
each followed by a set of arguments. These keywords can be thought of
as commands that direct rayshade to do various things, such as create
objects, set the eye's position, and change an object's appearance.
Many of the keywords have related command-line options for turning on
special features and setting values. These options override the values
given in the input file, and are explained in detail in Appendix A.
Rayshade is "case sensitive," which means that typing SPHERE or Sphere
instead of sphere won't work. Rayshade keywords are all lower-case.
Many people choose to capitalize the first letter of names that they
give to objects or surfaces in order to make then "stand out" in an
input file.
Keywords, numbers and strings in the input file are separated by spaces,
tabs, or new lines (carriage returns). These "whitespace" characters are
handled identically by rayshade, which means that you can separate
keywords from keywords, key words from arguments, and arguments from
arguments using any combination of whitespace characters that you choose.
Numbers may be entered directly as reals or as parenthesized expressions.
Reals may be written in exponential notation if you wish, and integers
may be written with or without a trailing decimal point. When an integer
value is called for and a real is given, the real value is truncated and
the resulting integer is used. Table 2.1 lists the available operators
available for use in expressions, in order of decreasing precedence.
The upshot of all this is that the strings 42, 42., (20 + 22), and
(7^2 - 7) mean the same thing to rayshade.
Variables may also be defined and used in expressions. Several built-in
functions are also provided. See appendix B for further details.
Rayshade will automatically run the input it receives through the C
preprocessor if it is available. This allows you to use C preprocessor
directives, such as #include, #define, and #ifdef when designing your
input files.
Comments may be included in rayshade input files by enclosing text
between the strings /* and */, as in the C programming language.
2.2 Images
The end result of running rayshade is an image file. Depending upon how
it was installed, rayshade writes images in either the Utah Raster RLE
format or a generic but easily-manipulated mtv format used by Mark
VandeWettering in his mtv ray tracer. The mtv format consists of a
header giving the resolution of the image followed by interleaved
red-green-blue values for each pixel. The RLE format supports an
arbitrary number of color channels, an alpha channel, comments, a
history field, and the ability to treat images as windows into a
larger image. As a result of this flexibility, a number of rayshade's
features are not supported if the mtv format is being used. You are
thus strongly encouraged to obtain a copy of the Utah Raster Toolkit.
If the mtv format is used, the image will (and must) consist of three
eight-bit color channels. If the RLE format is used, the image file
consists of three eight-bit color channels plus an eight-bit alpha
channel. Rayshade also documents in the RLE header the command line
and gamma value used in creating the image.
If more than one frame is rendered, the resulting images are appended
in turn to the image file. The various utilities provided by the Utah
Raster Toolkit can be used to manipulate the resulting "movie" files.
If the Toolkit is not being used, you will probably need to write
utility programs to handle the decidedly non-standard multi-image "mtv"
format files.
By default, rayshade writes the computed image to the standard output.
The image file may be written to a file instead by specifying a file
name in the input stream.
- outfile filename
- Write the computed image to the named file. The output file
name may also be specified on the command line by using the
-O option.
The size of the output image is measured in pixels. The x size is the
number of pixels left-to-right, while the y size is the number of pixels
bottom-to-top.
- screen xsize ysize
-
- Use a screen xsize pixels wide by ysize pixels high. The screen
size may also be set on the command line through the
-R option.
The default screen size is 512 by 512 pixels.
When rendering an image, it is often advantageous to split the image into
a number of disjoint windows, each of which is rendered on a different
machine. One then combines the images corresponding to the windows into
a final image.
- window minx maxx miny maxy
- Render the image in the given window. The window must be
properly contained within the screen, i.e., minx and miny must
be greater than or equal to zero, while maxx and maxy must be
less than xsize and ysize, respectively. The Utah Raster tool
rlecomp is useful for reconstructing the full image from
sub-images. By default, the window is equal to (0., 1., 0, 1),
or the entire screen.
It is also convenient to be able to render a small portion of the window
by specifying a subregion using normalized coordinates.
- crop left right bottom top
- Crop the rendering window. The rendering window is cropped by
rendering the screen area that falls within minx + left(maxx
- minx) and minx + right(maxx - minx) in the X
direction, and similarly for the Y direction. Left and bottom
must be greater than or equal to zero. Right and top must be
less than or equal to one. If left is greater than right, the
two values are swapped, and similarly for bottom and top.
Gamma correction may also be applied to the three output color channels.
See