Subsections

- Spheres
- Triangles
- Smoothed Triangles
- Infinite Planes
- Rings
- Infinite Cylinders
- Finite Cylinders
- Axis Aligned Boxes
- Fractal Landscapes
- Arbitrary Quadric Surfaces
- Volume Rendered Scalar Voxels

##
Objects

###
Spheres

Spheres are the simplest object supported by Tachyon and they are also the fastest object to render. Spheres are defined as one would expect, with a CENTER, RAD (radius), and a texture. The texture may be defined along with the object as discussed earlier, or it may be declared and assigned a name. Here's a sphere definition using a previously defined "NitrogenAtom" texture:

     SPHERE  CENTER 26.4 27.4 -2.4   RAD 1.0   NitrogenAtom

A sphere with an inline texture definition is declared like this:

     Sphere center 1.0 0.0 10.0
               Rad 1.0
            Texture  Ambient 0.2  Diffuse 0.8  Specular 0.0  Opacity 1.0
                     Color   1.0 0.0 0.5
                     TexFunc 0

Notice that in this example I used mixed case for the keywords, this is allowable... Review the section on textures if the texture definitions are confusing.

###
Triangles

Triangles are also fairly simple objects, constructed by listing the three vertices of the triangle, and its texture. The order of the vertices isn't important, the triangle object is "double sided", so the surface normal is always pointing back in the direction of the incident ray. The triangle vertices are listed as V1, V2, and V3 each one is an X, Y, Z coordinate. An example of a triangle is shown below:

    TRI
      V0  0.0 -4.0 12.0
      V1  4.0 -4.0 8.0
      V2 -4.0 -4.0 8.0
      TEXTURE
        AMBIENT  0.1 DIFFUSE  0.2 SPECULAR 0.7 OPACITY 1.0
        COLOR 1.0 1.0 1.0
        TEXFUNC 0

###
Smoothed Triangles

Smoothed triangles are just like regular triangles, except that the surface normal for each of the three vertexes is used to determine the surface normal across the triangle by linear interpolation. Smoothed triangles yield curved looking objects and have nice reflections.

    STRI
      V0 1.4   0.0   2.4
      V1 1.35 -0.37  2.4
      V2 1.36 -0.32  2.45
      N0 -0.9 -0.0  -0.4
      N1 -0.8  0.23 -0.4
      N2 -0.9  0.27 -0.15
      TEXTURE
        AMBIENT  0.1 DIFFUSE  0.2 SPECULAR 0.7 OPACITY 1.0
        COLOR 1.0 1.0 1.0
        TEXFUNC 0

###
Infinite Planes

Useful for things like desert floors, backgrounds, skies etc, the infinite plane is pretty easy to use. An infinite plane only consists of two pieces of information, the CENTER of the plane, and a NORMAL to the plane. The center of the plane is just any point on the plane such that the point combined with the surface normal define the equation for the plane. As with triangles, planes are double sided. Here is an example of an infinite plane:

    PLANE
      CENTER 0.0 -5.0 0.0
      NORMAL 0.0  1.0 0.0
      TEXTURE
        AMBIENT  0.1 DIFFUSE  0.9 SPECULAR 0.0  OPACITY 1.0
        COLOR  1.0 1.0 1.0
        TEXFUNC  1
          CENTER 0.0 -5.0 0.0
          ROTATE 0. 0.0 0.0
          SCALE  1.0 1.0 1.0

###
Rings

Rings are a simple object, they are really a not-so-infinite plane. Rings are simply an infinite plane cut into a washer shaped ring, infinitely thing just like a plane. A ring only requires two more pieces of information than an infinite plane does, an inner and outer radius. Here's an example of a ring:

      Ring
        Center 1.0 1.0 1.0
        Normal 0.0 1.0 0.0
        Inner  1.0
        Outer  5.0
        MyNewRedTexture

###
Infinite Cylinders

Infinite cylinders are quite simple. They are defined by a center, an axis, and a radius. An example of an infinite cylinder is:

      Cylinder
        Center 0.0 0.0 0.0
        Axis   0.0 1.0 0.0
        Rad    1.0
        SomeRandomTexture

###
Finite Cylinders

Finite cylinders are almost the same as infinite ones, but the center and length of the axis determine the extents of the cylinder. The finite cylinder is also really a shell, it doesn't have any caps. If you need to close off the ends of the cylinder, use two ring objects, with the inner radius set to 0.0 and the normal set to be the axis of the cylinder. Finite cylinders are built this way to enhance speed.

      FCylinder
        Center 0.0 0.0 0.0
        Axis   0.0 9.0 0.0
        Rad    1.0
        SomeRandomTexture

This defines a finite cylinder with radius 1.0, going from 0.0 0.0 0.0, to 0.0 9.0 0.0 along the Y axis. The main difference between an infinite cylinder and a finite cylinder is in the interpretation of the AXIS parameter. In the case of the infinite cylinder, the length of the axis vector is ignored. In the case of the finite cylinder, the axis parameter is used to determine the length of the overall cylinder.

###
Axis Aligned Boxes

Axis aligned boxes are fast, but of limited usefulness. As such, I'm not going to waste much time explaining 'em. An axis aligned box is defined by a MIN point, and a MAX point. The volume between the min and max points is the box. Here's a simple box:

      BOX
        MIN -1.0 -1.0 -1.0
        MAX  1.0  1.0  1.0
        Boxtexture1

###
Fractal Landscapes

Currently fractal landscapes are a built-in function. In the near future I'll allow the user to load an image map for use as a heightfield. Fractal landscapes are currently forced to be axis aligned. Any suggestion on how to make them more appealing to users is welcome. A fractal landscape is defined by its "resolution" which is the number of grid points along each axis, and by its scale and center. The "scale" is how large the landscape is along the X, and Y axes in world coordinates. Here's a simple landscape:

    SCAPE
      RES 30 30
      SCALE 80.0 80.0
      CENTER 0.0 -4.0 20.0
      TEXTURE
        AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0
        COLOR 1.0 1.0 1.0
        TEXFUNC 0

The landscape shown above generates a square landscape made of 1,800 triangles. When time permits, the heightfield code will be rewritten to be more general and to increase rendering speed.

###
Arbitrary Quadric Surfaces

Docs soon. I need to add these into the parser, must have forgotten before ;-)

###
Volume Rendered Scalar Voxels

These are a little trickier than the average object :-) These are likely to change substantially in the very near future so I'm not going to get too detailed yet. A volume rendered data set is described by its axis aligned bounding box, and its resolution along each axis. The final parameter is the voxel data file. If you are seriously interested in messing with these, get hold of me and I'll give you more info. Here's a quick example:

    SCALARVOL
      MIN -1.0 -1.0 -0.4
      MAX  1.0  1.0  0.4
      DIM 256 256 100
      FILE /cfs/johns/vol/engine.256x256x110
      TEXTURE
            AMBIENT 1.0 DIFFUSE 0.0 SPECULAR 0.0 OPACITY 8.1
            COLOR 1.0 1.0 1.0
            TEXFUNC 0