# Transparent surfaces in Raster3D

#### Transparency

MATERIAL descriptions (object type 8) now include a parameter related to transparency. Material descriptions apply to subsequent objects in the render input file until an termination record (object type 9) is encountered. This means that an entire surface representation, for instance one generated by the program GRASP, can be rendered as transparent by inserting one record in front of it and another at the end. This is illustrated in example 6 of the Raster3D distribution kit.

Nothing is free, of course, and this includes transparency. I tried very hard to leave normal bread-and-butter operation of the rendering program unaffected by support for transparency. If you are actually rendering an image which contains transparent objects, however, the program may slow down by as much as a factor of 3. If your machine seems to do much worse than this, you can try the fix described at the end of this section.

Here is an example of a MATERIAL description which specifies a transparent surface:

        8
        17.0    0.6     -1.0 -1.0 -1.0     0.9        0 0 0 0

        ^       ^       ^    ^    ^        ^          ^
        |       |       |    |    |        |          |
        MPHONG  MSPEC   SR   SG   SB       CLRITY     OPTS

The first record specifies a MATERIAL description (object type 8). The following record contains a set of parameters which apply to this material.

MPHONG
  overrides the global Phong parameter in the header; a lower value (<20.) smears out specular highlights over a larger area, which is probably a good idea for transparent surfaces.
MSPEC
  overrides the global SPECLR parameter in the header; controls what fraction of the total shading is due to specular reflection. This probably should be >0.5 for a transparent object.
SR/SG/SB
  red, green, and blue components of the specular highlights. Remember that each object has an associated RGB triple that determines its colour. But the "colour" of a transparent object is somewhat problematic, so you have the option of passing the object's basic colour through to appear also in the specular highlighting. This is indicated by setting SR, SG, SB negative as in the example above.
CLRITY
  This is a value between 0.0 and 1.0 indicating the degree of clarity of the material. 0 indicates a completely opaque surface, while 1 indicates a completely transparent surface. Values in the range of 0.8 to 1.0 are probably appropriate.
OPTS
  These four parameters are reserved for future expansion of the MATERIAL specification. The first one (OPTS[1]) affects the handling of transparency:
  OPTS[1] = 0
    All transparent objects will be rendered, subject to the limit that at a depth of three overlapping transparent objects the third is effectively opaque
  OPTS[1] = 1
    Only the topmost surface of any given transparent material will be rendered at all. This will, for example, cause internal cavities to disappear from a molecular surface covering an entire protein. It also allows rendering only the outside surface of a transparent CPK model.
  OPTS[1] = 2
    The rear-facing portions of transparent spheres, cylinders, and tesselated surfaces will be rendered (normally only the front surfaces are rendered).

#### What to do if transparent objects seem to turn your machine to molasses.

The extra time involved in rendering transparent objects is mostly due to bookkeeping overhead rather than to the actual calculation of surface properties, at least on the machines I have clocked it on. The algorithm used, however, does include at least one cosine calculation for each pixel and I can easily imagine that some machines (or FORTRAN libraries) would execute this calculation very slowly indeed. Therefore I have put a commented-out alternative algorithm in the render source code, along with instructions for re-compiling. The alternative algorithm produces a slightly less realistic result (in my purely empirical opinion) but avoids any cosine functions.

Back to top Raster3D homepage