GENRAY(1) UNIX System V GENRAY(1)
NAME
genray - a generic raytracer
SYNOPSIS
genray [ -s ] [ -geom WidthxHeight ] filename
DESCRIPTION
Genray is a simple raytracer. It supports scenes composed of
a limited range of basic objects and objects defined by
Constructive Solid Geometry (CSG) over these basic objects.
Surface attributes may be attached to each object, and
reflective and transparent objects are supported. A very
limited form of texture mapping is available.
The program reads input files in the format specified below,
and produces either tiff or ppm format files, depending on a
compile time option. Normally the program will display a
greyscale image of the scene being traced, but this can be
suppressed with the -s option. The output file is in 24-bit
colour.
OPTIONS
-s Silent operation. No runtime image will be displayed
and the file will be automatically saved.
-geom WidthxHeight
Render the image in a window of the given dimensions.
The image generated will also have these dimensions.
Command line dimensions override those given in the
input file.
FILE FORMAT
The file is passed through cpp first, so #define and
#include are allowable. In fact, any C preprocessor direc-
tive will work, but you can't pass the preprocessor any
options, so -I is out. Comments are C style /* */.
The following keywords are allowed in the input file. Argu-
ments are shown enclosed in <>, options in []. A vector is
a sequence of 3 numbers, eg: 1 2.5 -3.2. A string is a
sequence of characters enclosed by double quotes eg:
"string". A colour is a vector with elements between 0 and
1. An instance modifier is one of the keywords: scale,
rotate, translate, colour, diffuse, specular, reflect,
refract, transparency, pixmap. The seperator is any number
of spaces, tabs or newlines. All commands are case insensi-
tive, but strings are case sensitive.
lookfrom <vector>
The location of the eye in the world. All rays are cast
from this point. The default is 10 0 0.
Page 1 (printed 9/14/94)
GENRAY(1) UNIX System V GENRAY(1)
lookat <vector>
The center of the scene in the world. This point will
appear at the center of the final image. The default is
0 0 0.
lookup <vector>
A vector defining the up direction in the world. This
vector will always appear to be vertical in the scene.
The default is 0 0 1.
eyedist <float>
The distance that the viewplane is from the eye. This
influences the amount of perspective in the scene -
shorter eye distances give more pronounced perspective
effects. Shorter eye distances also give a wider field
of view for a given window size. The default is 10.
window <horiz_float> <vert_float>
The size of the viewing window in the world. This is
NOT the size of the image to be rendered, rather an
indication of how much of the scene you wish to see.
This, combined with the eye distance, determines the
field of view of the scene. Note also that the window
proportions should match those of the scene size, or
the image will be distorted.
screen <x_int> <y_int>
The size of the final image in pixels. This is also the
size of the window that the scene will be rendered into
(if not silent). It is overwridden by the -geom command
line option. As mentioned for window, the window and
screen proportions should match.
ambient <colour>
Defines the colour of the ambient light in the scene.
This light, scaled by the diffuse coefficient, contri-
butes to the final colour of every object, regardless
of whether or not it is shadowed.
light position <vector> colour <vector> end
Defines a light source in the scene, at the given posi-
tion with the given colour. All defined sources are
point sources (they radiate in every direction). Light
sources do not themselves appear in the scene, they
only illuminate other objects.
set <instance_modifiers> end
Set the object attributes for the following objects.
Translate, scale and rotate can not appear in the list
of modifiers. The given attributes will be used for all
objects up to the next set statement. Modifiers not set
inside the set statement will retain their previous
Page 2 (printed 9/14/94)
GENRAY(1) UNIX System V GENRAY(1)
values.
name <string> <object_definition>
Define an object with the given name. Such an object
WILL NOT be instantiated until an instance statement is
found. The defined object can have all the things a
normal object has. It is most useful for defining CSG
objects.
instance <string> <instance_modifiers> end
Creates an instance of the object named by a previous
name statement. The instance can be further modified
as desired.
cube [instance_modifiers] end
Creates a cube. It initially has corners at 1 1 1 and
-1 -1 -1, and has its center at the origin.
sphere [instance_modifiers] end
Creates a sphere centered at the origin with radius 1.
cylinder [instance_modifiers] end
Creates a cylinder with radius 1 and height 2, centered
on the origin.
cone [instance_modifiers] end
Creates a cone, with base radius 1, base center 0 0 -1
and point at 0 0 1, centered on the origin.
torus [radius] [instance_modifiers] end
Creates a torus with tube radius 1, mean radius radius,
centered on the origin with central axis 0 0 1. The
default mean radius is 2.
square [instance_modifiers] end
Creates a square, with corners 1 1 0 and -1 -1 0, lying
in the X-Y plane.
plane [instance_modifiers] end
Creates an infinite plane initially coincident with the
X-Y plane.
union <instance> <instance> [instance_modifiers] end
intersection <instance> <instance> [instance_modifiers] end
difference <instance> <instance> [instance_modifiers] end
Creates a CSG union, intersection or difference of the
2 instances given. Further modifiers may be applied to
the resulting object. CSG instances can be arbitrarily
nested ie you can take the intersection of 2 unions.
Difference takes the second instance away from the
Page 3 (printed 9/14/94)
GENRAY(1) UNIX System V GENRAY(1)
first.
scale <vector>
Scale the object by in the x, y and z directions by the
corresponding x, y and z components of the vector. 0
values in the vector will result in singular matrices
and halt the program. All scaling is relative to the
world axes, so scaling after rotation will actually
shear the object. Scaling is cummulative, so scale 2.0
3.0 4.0 followed by scale 1.0 1.5 3.0 is the same as
scale 2.0 4.5 12.0.
rotate <axis> <angle>
Axis is one of the characters x, y or z. Rotate the
object about the indicated axis by the given angle in
degrees. Positive rotation corresponds to anti-
clockwise motion about the axis using a right handed
frame. Rotation is always about the center of the body
ie rotation about an axis parallel to the given axis
passing through the center of the body. Rotations, like
scaling, are cummulative.
translate <vector>
Translate the object by the given amount. translations
also are cummulative.
colour <colour>
Set the object's basic colour. The default is 1 1 1
(white).
diffuse <float>
Set the diffuse reflection coefficient of the object to
a value between 0 and 1. Diffuse lighting for non-
shadowed light sources contributes diffuse coefficient
times colour times cos of the angle between the surface
normal and a vector to the light source to the total
colour of the object. The default is 1.
specular <float>
Set the specular reflection coefficient of the objec to
a value between 0 and 1. Specular lighting for non-
shadowed sources contributes similarly to diffuse
lighting, but the cos of the angle is taken to the
power of specular coefficient x 100, to produce a small
highlight on the object. The default is 0.
reflect <float>
Set the amount that the object reflects light off other
objects. The default is 0. Having large numbers of
reflective objects slows the trace considerably. Valid
values are in the range 0 to 1.
Page 4 (printed 9/14/94)
GENRAY(1) UNIX System V GENRAY(1)
refract <float>
Set the refractive index of the object. This will have
no effect unless the transparency is non-0. The default
is 1.
transparency <float>
Set the amount of light that passes through the object
to a value between 0 and 1. The light passing through
is refracted according to the refractive index of the
object. The default transparency is 0. Like reflection,
transparent objects slow the trace considerably.
pixmap <string>
This modifier can only be applied to squares and
planes. It takes the given string to be the name of a
ppm format image file. The image is mapped onto the
square or plane, ie the colour for a given point on the
square or plane is based on the colour of the pixmap at
a corresponding point. For squares the mapping is such
that the pixmap will cover the square - the pixmap will
be scaled to make it fit. For planes the pixmap is
scaled into a 1x1 square, then tiled onto the plane. If
the plane is scaled, the image will be scaled by the
same amount. Note that the colour of the point is taken
from the pixmap - all the standard surface modifiers
are then applied to this colour.
BUGS
The torus intersection code is a bit unstable. You may get
dots on the surface of the torus.
If you find any more, tell me.
AUTHOR
Stephen Chenney : stephen@cs.su.oz.au
Page 5 (printed 9/14/94)