POVRAY.TXT


Remove Frame

       



               Persistence of Vision Ray Tracer (POV-Ray)
                              Version 1.0
                             July 18, 1992
                                   
          
       Introduction.............................................5
       Program Description -- What is Ray Tracing?..............5
       Which Version of POV-Ray Should You Use?.................7
            IBM-PC and compatibles..............................7
            Apple Macintosh.....................................7
            Commodore Amiga.....................................7
            UNIX and other systems..............................8
            All Versions........................................8
       Where to find POV-Ray files..............................8
            Computer Art Forum on CompuServe....................9
            PC Graphics area on America On-Line.................9
            You Can Call Me Ray BBS in Chicago..................9
            The Graphics Alternative BBS in Oakland.............9
            Internet............................................9
       Quick Start..............................................9
       Installing POV-Ray.......................................9
       Using Sample Scenes......................................10
            Command Line Parameters.............................12
       Beginning Tutorial.......................................19
       Your First Image.........................................19
       Phong Highlights.........................................22
       Simple Textures..........................................23
       More Shapes..............................................24
       Quadric Shapes...........................................24
       Scene Description Language Reference.....................25
            Comments............................................25
            Include Files.......................................26
            Float...............................................27
            Vector..............................................27
            Declare.............................................27
            What can be declared?...............................30
            Camera..............................................32
                 Telephoto and Wide-Angle.......................33
                 Sky and Look_at................................34
                 Aspect Ratio...................................35
                 Translating and Rotating the Camera............36
            light_source........................................36
            spotlight light_source..............................37
            no_shadow...........................................38
       Objects..................................................40

       



       Quick Render Color.......................................41
       Transformations..........................................41
            Scale...............................................41
            Rotate..............................................41
            Translate...........................................41
            Transformation order................................43
            "Handedness" -- Rotation Direction..................44
       Shapes...................................................44
            Spheres.............................................44
            Planes..............................................45
            Boxes...............................................46
            Quadric Shapes......................................46
            Quadric surfaces the easy way.......................47
            Triangles...........................................48
            Quartic Surfaces....................................49
            Blob................................................52
            How do blobs work?..................................53
                 Threshold:.....................................53
                 Strength:......................................53
                 Radius:........................................54
                 Center:........................................54
                 The Formula....................................55
            Height Fields.......................................55
            Bezier/Bicubic Patches..............................59
       Constructive Solid Geometry (CSG)........................59
            Inside and outside..................................61
            union  { A B }......................................63
            intersection { A B }................................63
            difference { A B  }.................................63
            Inverse.............................................64
       Composite Objects........................................65
       Bounding Shapes..........................................67
       Clipping Shapes..........................................67
       Textures.................................................69
            Color Pattern.......................................69
            Bump Patterns.......................................70
            Surface Properties..................................70
            Texture Syntax......................................71
            Textures and Animation..............................71
                 Random Dither..................................72
                 Layered Textures...............................73
       More about Textures......................................73
            Turbulence or Noise.................................73
            Color Maps..........................................74
            Alpha...............................................74
            Layering Textures...................................75
       Texture Surface Properties...............................77

       



            Color...............................................77
            ambient value.......................................77
            diffuse value.......................................78
            brilliance value....................................78
            reflection value....................................78
            refraction value....................................78
            ior value...........................................79
            phong value.........................................79
            phong_size value....................................80
            specular value......................................80
            roughness value.....................................80
            metallic............................................81
       Color Pattern Texture Types..............................82
            Color Maps..........................................82
            checker - Color Pattern.............................83
            bozo - Color Pattern................................83
            spotted - Color Pattern.............................84
            marble - Color Pattern..............................84
            wood - Color Pattern................................84
            agate - Color Pattern...............................84
            gradient - Color Pattern............................84
            granite - Color Pattern.............................85
            onion - Color Pattern...............................86
            leopard - Color Pattern.............................86
            tiles - A texture pattern...........................86
       Bump Patterns............................................88
            ripples - Bump Pattern..............................88
            waves - Bump Pattern................................88
            bumps - Bump Pattern................................89
            dents - Bump Pattern................................89
            wrinkles - Bump Pattern.............................89
       Mapping Textures.........................................90
            Mapping Types:......................................90
            Mapping Method:.....................................90
            image_map - Color Pattern...........................90
            bump_map - A Bump Pattern...........................93
            material_map - A texture pattern....................94
            Interpolation.......................................95
       Misc Features............................................96
            Fog.................................................96
            Default Texture.....................................97
            Max trace level.....................................98
       Advanced Lessons.........................................99
            Camera..............................................100
            Ray-Object Intersections............................101
       Textures, Noise, and Turbulence..........................103
            Octaves.............................................105

       



            Layered Textures....................................105
            Parallel Image Mapping..............................108
       Common Questions and Answers.............................109
       Tips and Hints...........................................113
       Suggested Reading........................................115
       Legal Information........................................118
       Contacting the Authors...................................118

       



       
       
       Introduction
       
       This document details the use of the Persistence of Vision 
       Ray Tracer (POV-Ray) and is broken down into several 
       sections.
       
       The first section describes the program POV-Ray, explains 
       what ray tracing is and also describes where to find the 
       latest version of the POV-Ray software.
       
       The next section is a quick start that helps you quickly 
       begin to use the software.
       
       After the quick start is a more in-depth tutorial for 
       beginning POV-Ray users.
       
       Following the beginning tutorial is a scene description 
       language reference that describes the language used with 
       POV-Ray to create an image.
       
       The last sections include some tips and hints, suggested 
       reading, and legal information.
       
       
       
       POV-Ray is based on DKBTrace 2.12 by David Buck & Aaron A. 
       Collins
       
       Program Description -- What is Ray Tracing?
       
       The Persistence of Vision Ray Tracer (POV-Ray) is a 
       copyrighted freeware program that allows a user to easily 
       create fantastic, three dimensional, photo-realistic images 
       on just about any computer. POV-Ray reads standard ASCII 
       text files that describe the shapes, colors, textures and 
       lighting in a scene and mathematically simulates the rays of 
       light moving through the scene to produce a photo-realistic 
       image! 
       
       No traditional artistic or programming skills are required 
       to use POV-Ray. First, you describe a picture in POV-Ray's 
       scene description language, then POV-Ray takes your 
       description and automatically creates an image of it with 
       perfect shading, perspective, reflections and lighting. 
       
       The standard POV-Ray package also includes a large 
       collection of sample scene files that have been created by 
       other artists using the program. These scenes can be 
       rendered and enjoyed even before learning the scene 

       
                                                  POV-Ray V1.0 Page   6
       
       
       description language. They can also be modified to create 
       new scenes. 
       
       Here are some highlights of POV-Ray's features:
            -Easy to use scene description language
            -Image size up to 4096 x 4096 pixels and larger
            -Large library of stunning example scene files
            -Standard include files that pre-define many shapes, 
            colors and textures
            -Very high quality output image files (24-bit color.)
            -16 bit color display on IBM-PC's using the Sierra 
            HiColor chip
            -Create fractal landscapes using height fields
            -Spotlights for sophisticated lighting
            -Phong and specular highlighting for more 
            realistic-looking surfaces.
            -Several image file output formats including Targa, 
            dump and raw
            -Wide range of shapes:
            -Basic Shape Primitives such as...
            Sphere, Box, Ellipsoid, Cylinder, Cone, Triangle and 
            Plane
            -Advanced Shape Primitives such as...
            Torus (Donut), Hyperboloid, Paraboloid, Bezier Patch, 
            Height Fields (Mountains), Blobs, Quartics, Smooth 
            Triangles (Phong shaded)
            -Shapes can easily be combined to create new complex 
            shapes. This feature is called Constructive Solid 
            Geometry (CSG). POV-Ray supports unions, intersections 
            and differences in CSG.
            -Multiple objects can be combined into one object using 
            the composite feature
            -Objects and shapes are assigned materials, these 
            materials are called textures.
             (A texture describes the coloring and surface 
            properties of a shape, its material.)
            
            -Many built-in textures such as...
            Marble, Checkerboard, Wood, Bumpy, Agate, Clouds, 
            Granite, Ripples, Waves, Leopard, Wrinkled, 
            -Users can create their own textures or use pre-defined 
            textures such as...
            Mirror, Metals like Chrome, Brass, Gold and Silver, 
            Bright Blue Sky with Clouds, Sunset with Clouds, 
            Sapphire Agate, Jade, Shiny, Brown Agate, Apocalypse, 
            Blood Marble, Glass, Brown Onion , Pine Wood, Cherry Wood
            -Combine textures for sophisticated or novel effects

       
                                                  POV-Ray V1.0 Page   7
       
       
            -Display image while computing (not available on all 
            computers)
            -Halt rendering when part way through
            -Continue rendering a halted partial scene later
       
       
       Which Version of POV-Ray Should You Use?
       
       There are specific versions of POV-Ray available for three 
       different computers, the IBM-PC, the Apple Macintosh, and 
       the Commodore Amiga.
       
       
       IBM-PC and compatibles
       The IBM-PC version is called POVRAY.EXE and is found in the 
       archive POVIBM.ZIP. It can be run on any IBM-PC with a 386 
       or 486 CPU and 2 megabytes of memory. A math co-processor is 
       not required, but it is recommended. This version of POV-Ray 
       may be run under DOS, OS\2, and Windows. It will not run 
       under Desqview at this time. A version that runs on IBM-PC's 
       using the 286 CPU will be available soon.
       
       
       Apple Macintosh
       The Apple Macintosh version can be found in the file 
       POVMAC.SIT. It requires a 68020 or better processor, 32 bit 
       Color Quickdraw, and a math co-processor or software 
       emulation of a math co-processor to run.
       
       The math co-processor emulator is needed on the Mac LC and 
       Powerbook 140. The documentation included with the 
       executable describes where to find a math co-processor 
       emulator.
       
       32 bit Color Quickdraw is part of System 7's automatic 
       installation on color Macs. Owners of Mac SE/30 and other 
       non-color Macs will need to use custom installation options 
       to add 32 bit Color Quickdraw. 
       
       The installation of QuickTime will enhance POV-Ray's ability 
       to save pictures by allowing it to save in QuickTime 
       compressed formats. 
       
       Commodore Amiga
       The Commodore Amiga version of POV-Ray can be found in the
       file POVAMI.LZH. Two executables are supplied, one for 
       computers with a math co-processor, and one for computers 
       without a math co-processor. This version will run on Amiga 
       500, 1000, 2000, and 3000's and should work under AmigaDOS 
       1.3 or 2.xx.  The Amiga version supports HAM mode as well as 
       HAM-E and the Firecracker.

       
                                                  POV-Ray V1.0 Page   8
       
       
       
       
       UNIX and other systems
       POV-Ray is written in highly portable C source code and it 
       can be compiled and run on many different computers. There 
       is specific source code in the source archive for UNIX, 
       X-Windows, VAX, and generic computers. If you have one of 
       these, you can use the C compiler included with your 
       operating system to compile a POV-Ray executable for your 
       own use. This executable may not be distributed. See the 
       source documentation for more details. Users on high powered 
       computers like Suns, SGI, RS-6000's, Crays, and so on use 
       this method to run POV-Ray.
       
       
       All Versions
       All versions of the program share the same ray tracing 
       features like shapes, lighting and textures. In other words, 
       an IBM-PC can create the same pictures as a Cray 
       supercomputer as long as it has enough memory.
       
       The user will want to get the executable that best matches 
       their computer hardware. See the section "Where to find 
       POV-Ray files" for where to find these files. You can 
       contact those sources to find out what the best version is 
       for you and your computer.
       
       
       Where to find POV-Ray files
       
       POV-Ray is a complex piece of software made up of many 
       files. At the time of this writing, the POV-Ray package was 
       made up of several archives including executables, 
       documentation, and example scene files. 
       
       The average user will need an executable for their computer, 
       the example scene files and the documentation. The example 
       scenes are invaluable for learning about POV-Ray, and they 
       include some exciting artwork.
       
       Advanced users, developers, or the curious may want to 
       download the C source code as well.
       
       There are also many different utilities for POV-Ray that 
       generate scenes, convert scene information from one format 
       to another, create new materials, and so on. You can find 
       these files from the same sources as the other POV-Ray 
       files. No comprehensive list of these utilities is available 
       at the time of this writing.
       
       The latest versions of the POV-Ray software are available 

       
                                                  POV-Ray V1.0 Page   9
       
       
       from these sources:
       
       Computer Art Forum on CompuServe
       POV-Ray headquarters are on CompuServe Comart forum 
       Raytracing section 16. We meet there to share info and 
       graphics and discuss raytracing, fractals and other kinds of 
       computer art. Comart is also the home of the Stone Soup 
       Group, developers of Fractint, a popular IBM-PC fractal 
       program. Everyone is welcome to join in on the action on CIS 
       Comart. Hope to see you there! You can get information on 
       joining CompuServe by calling (800)848-8990. CompuServe 
       access is also available in Japan, Europe and many other 
       countries.
       
       PC Graphics area on America On-Line
       There's an area now on America On-Line dedicated to POV-Ray 
       support and information. You can find it in the PC Graphics 
       section of AOL. Jump keyword "PCGRAPHICS". This area 
       includes the Apple Macintosh executables also.
       
       You Can Call Me Ray BBS in Chicago
       There is a ray-trace specific BBS in the (708) Area Code 
       (Chicago suburbia, United States) for all you Traceaholics 
       out there. The phone number of this BBS is (708) 
       358-5611.Bill Minus is the sysop and Aaron Collins is 
       co-sysop of that board, and it's filled with interesting 
       stuff.
       
       
       The Graphics Alternative BBS in Oakland
       For those on the West coast, you may want to find the 
       POV-Ray files on The Graphics Alternative BBS at (510) 
       524-2780. It's a great graphics BBS run by Adam Schiffman.
       
       Internet
       The POV-Ray files are also available over Internet by 
       anonymous FTP from alfred.ccs.carleton.ca (134.117.1.1).
       
       Quick Start
       
       The next section describes how to quickly install POV-Ray 
       and render a sample scene on your computer. 
       
       Installing POV-Ray
       
       Specific installation instructions are included with the 
       executable program for your computer. In general, there are 
       two ways to install POV-Ray. 
       
       [ Note that the generic word "directory" is used 
       throughout.
         Your operating system may use another word 
         (subdirectory, folder, etc.) ]
       
       1-- The messy way: Create a directory called POVRAY and copy 
       all POV-Ray files into it. Edit and run all files and 

       
                                                  POV-Ray V1.0 Page  10
       
       
       programs from this directory. This method works, but is not 
       recommended.
       
       Or the preferred way:
       2-- Create a directory called POVRAY and several 
       subdirectories called  
          INCLUDE, SAMPLES, SCENES, UTIL. 
           The file tree for this should look something like this:
           \--
             |   
             +POVRAY --
                      |
                      +INCLUDE
                      |
                      +SAMPLES
                      |  
                      +SCENES
                      |  
                      +UTIL   
       
       Copy the executable file and docs into the directory POVRAY. 
       Copy the standard include files into the subdirectory 
       INCLUDE. Copy the sample scene files into the subdirectory 
       SAMPLES. And copy any POV-Ray related utility programs and 
       their related files into the subdirectory UTIL. Your own 
       scene files will go into the SCENES subdirectory. Also, 
       you'll need to add the directories \POVRAY and \POVRAY\UTIL to 
       your "search path" so the executable programs can be run 
       from any directory.
       
             *Note that some operating systems don't 
             *have an equivalent to the
             *multi-path search command.
       
       The second method is a bit more difficult to set-up, but is 
       preferred. There are many files associated with POV-Ray and 
       they are far easier to deal with when separated into several 
       directories.
       
       Using Sample Scenes
       
       This section describes how to render a sample scene file. 
       You can use these steps to render any of the sample scene 
       files included in the sample scenes archive. 
       
       A scene file is a standard ASCII text file that contains a 
       description in the POV-Ray language of a three dimensional 
       scene.  The scene file text describes objects and lights in 
       the scene, and a camera to view the scene. Scene files have 

       
                                                  POV-Ray V1.0 Page  11
       
       
       the file extension .POV and can be created by any word 
       processor or editor that can save in standard ASCII text 
       format.
       
       Quite a few example scenes are provided with this 
       distribution in the example scenes archive. These have been 
       organized into separate archives within the main archive and 
       are grouped by complexity and category.
       
       These scene files range from a simple red ball on a tiled 
       floor, to a jade panther in a marble temple. They have been 
       created by users of POV-Ray all over the world, and were 
       picked to give examples of the variety of features in POV-Ray. 
       Many of them are stunning in their own right. 
       
       The scenes were graciously donated by the artists because 
       they wanted to share what they had created with other users. 
       Feel free to use these scenes for any purpose. You can just 
       marvel at them as-is, you can study the scene files to learn 
       the artists techniques, or you can use them as a starting 
       point to create new scenes of your own.
       
       Here's how to make these sample scenes into images you can 
       view on your computer. We'll use SIMPLE.POV as an example, 
       just substitute another filename to render a different 
       image.
       
       The file SIMPLE.POV was included with this document and 
       should now be in the POVRAY directory.
       
          Note: The sequence of commands is not the same for
                every version of POV-Ray. There should be a 
                document with the executable describing the
                specific commands to render a file.
       
       Make POVRAY the active directory, and then at the command 
       line, type:
       
         POVRAY +iSIMPLE.POV +v +w80 +h60<ENTER> 
       
       POVRAY is the name of your executable, +i<filename.pov> 
       tells POV-Ray what scene file it should use as input, and +v 
       tells the program to output its status to the text screen as 
       it's working. +w and +h set the width and height of the 
       image in pixels. This image will be 80 pixels wide by 60 pixels 
       high.
       

       
                                                  POV-Ray V1.0 Page  12
       
       
       POV-Ray will read in the text file SIMPLE.POV and begin 
       working to render the image. It will write the image to a 
       file called DATA.TGA. The file DATA.TGA contains a 24 bit 
       image of the scene file SIMPLE.POV. Because many computers 
       can't display a 24 bit image, you will probably have to 
       convert DATA.TGA to an 8 bit format before you can view it 
       on your computer. The docs included with your executable 
       lists the specific steps required to convert a 24 bit file 
       to an 8 bit file.
       
       Command Line Parameters
       The following section gives a detailed description of the 
       command-line options.
       
       The command-line parameters may be specified in any order. 
       Repeated parameters overwrite the previous values.
       Default parameters may also be specified in a file called 
       "povray.def" or by the environment variable "POVRAYOPT".
        Some examples follow this table.

       
                                                  POV-Ray V1.0 Page  13
       
       
       Table 1-1 Command Line Parameters
       Parameter.....|.....Range.....|...Description..............
       -----------------------------------------------------------
       -?            |               | Turn on/off feature off
       -?(val)       |               | Turn feature on with
                     |               | parameter val.
       +?            |               | Turn feature on.
       +i<filename>  | Varies w/ sys | Input scene file name, 
                     |               | generally ends in .pov.
       +o<filename>  | Varies w/ sys | Output image filename.
       +w#####       | 1-32,768      | Width of image in pixels.
       +h#####       | 1-32,768      | Height of image in pixels.
       +v(#)         | Varies w/sys  | Display image stats while
                     |               | rendering. 
       +d(??)        | Varies w/sys  | Display image graphically
                     |               | while rendering (Not avail
                     |               | on all vers).
       +x            |               | Allow abort with
                     |               | keypress.(IBM-PC).
       +f(?)         | t, d or r     | Output file format: 
                     |               |   Targa, dump or raw.
       -f            |               | Disable file output.
       +s#####       | 1-32,768      | Start line for tracing
                     |               | a portion of a scene.
       +e#####       | 1-32,768      | End line for tracing 
                     |               | a portion of a scene.
       +c            |               | Continue an aborted
                     |               | partial image. 
       +p            |               | Pause and wait for keypress 
       
                     |               | after tracing image.
       +b#####       | Varies w/ sys | Output file buffer size.
       +a#####       | 0.0 to 1.0    | Render picture with 
                     |               | anti-aliasing,or 
                     |               |"smoothing", on.
                     |               | Lower values cause more
                     |               | smoothing.
       +q#           |   0 to 9      | Image quality: 
                     |               | 9 highest(default) to
                     |               | 0 lowest.
       +l<path>      | Varies w/ sys | Library path: POV-Ray will
                     |               | search for files in the
                     |               | directory listed here.
                     |               | Multiple lib paths may be 
                     |               | specified.
       ----------------------------------------------------------

       
                                                  POV-Ray V1.0 Page  14
       
       
       
       Normally, you don't need to specify the +f? option. The 
       default setting will create the correct format image file 
       for your computer. The docs included with the executable 
       specify which format is used.
       
       You can disable image file output by using the command line 
       option -f. This is only useful if your computer has display 
       options and should be used in conjunction with the +p 
       option. If you disable file output using -f, there will be 
       no record kept of the image file generated. This option is 
       not normally used.
       
       Unless file output is disabled (-f) POV-Ray will create an 
       image file of the picture. This output file describes each 
       pixel with 24 bits of color information. Currently, three 
       output file formats are directly supported:
       
       +ft - Uncompressed Targa-24 format (IBM-PC Default)
       +fd - Dump format (QRT-style)
       +fr - Raw format - one file each for Red, Green and Blue. 
       
       
       If the +d option is used and your computer supports a 
       graphic display, then the image will be displayed while the 
       program performs the ray tracing. On most systems, the 
       picture displayed is not as good as the one created by the 
       post-processor because it does not try to make optimum 
       choices for the color registers. 
       
       The +d parameters are listed in the executable 
       documentation.
       
       
       -ifilename Set the input filename
       -ofilename Set output filename
       
       The default input filename is "object.pov". The default 
       output filename is "data" and the suffix for your default 
       file type.
       
       IBM-PC default file type is Targa, so the file is 
       "data.tga".
       
       Amiga uses dump format and the default outfile name is 
       "data.dis".
       

       
                                                  POV-Ray V1.0 Page  15
       
       
       Raw mode writes three files, "data.red", "data.grn" and 
       "data.blu". On IBM-PC's, the default extensions for raw mode 
       are ".r8", ".g8", and ".b8" to conform to Piclab's "raw" 
       format. Piclab is a widely used free-ware image processing 
       program. Normally, Targa files are used with Piclab, not raw 
       files.
       
       +a[xxx]   Anti-alias - xxx is an optional tolerance level    
       
                     (default 0.3) 
       -a        Don't anti-alias
       
       Anti-aliasing is a technique used to make the ray traced 
       image look smoother. Often the color difference between two 
       objects creates a "jaggy" appearance. When anti-aliasing is 
       turned on, POV-Ray attempts to "smooth" the jaggies by 
       shooting more rays into the scene and averaging the results. 
       This technique can really improve the appearance of the 
       final image. Be forewarned though, anti-aliasing drastically 
       slows the time required to render a scene since it has do 
       many more calculations to "smooth" the image. Lower numbers 
       mean more anti-aliasing and also more time. Use 
       anti-aliasing for your final version of a picture, not the 
       rough draft.
       
       The +a option enables adaptive anti-aliasing. The number 
       after the +a option determines the threshold for the 
       anti-aliasing. 
       
       If the color of a pixel differs from its neighbor (to the 
       left or above) by more than the threshold, then the pixel is 
       subdivided and super-sampled. 
       
       If the anti-aliasing threshold is 0.0, then every  pixel is  
       super-sampled. If the threshold is 1.0, then no 
       anti-aliasing is done. 
       
       The lower the contrast, the lower the threshold should be.
       Higher contrast pictures can get away with higher tolerance 
       values.
       
       Good values seem to be around 0.2 to 0.4.
       
       
       The super-samples are jittered to introduce noise and make 
       the  pictures look better. Note that the jittering "noise" 
       is non-random and repeatable in nature, based on an object's 

       
                                                  POV-Ray V1.0 Page  16
       
       
       3-D orientation in space. Thus, it's okay to use 
       anti-aliasing for animation sequences, as the anti-aliased 
       pixels won't vary and flicker annoyingly from frame to 
       frame.
       
       +bxxx     Use an output file buffer of xxx kilobytes. 
       (if 0, flush and write the output file on every line - this 
       is the  default)
       
       The +b option allows you to assign large buffers to the 
       output file. This reduces the amount of time spent writing 
       to the disk and prevents unnecessary wear. If this parameter 
       is zero, then as each scanline is finished, the line is 
       written to the file and the file is flushed. On most 
       systems, this operation insures that the file is written to 
       the disk so that in the event of a system crash or other 
       catastrophic event, at least part of the picture has been 
       stored properly and retrievably on disk.(see also the +c 
       option below.)
       +b30 is a good value to use to speed up small renderings. 
       
       +c Continue Rendering
       
       If you abort a render while it's in progress or if you used 
       the -exxx option (below)  to end the render prematurely, you 
       can use the +c option to continue the render when you get 
       back to it. This option reads in the previously generated 
       output file, displays the image to date on the screen, then 
       proceeds with the raytracing. In many cases, this feature 
       can save you a lot of rendering  time when things go wrong.
       
       +sxxx     Start tracing at line number xxx.
       +exxx     End tracing at line number xxx.
       
       
       The +s option allows you to begin the rendering of an image 
       at a specific scan line.  This is useful for rendering part 
       of a scene to see what it looks like without having to 
       render the entire scene from the top. You can also use this 
       option to render groups of scanlines on different systems 
       and concatenate them later.
       
       WARNING: Image files created on with different executables 
       on the same or different computers may not look exactly the 
       same due to different random number generators used in some 
       textures. If you need to merge image files from different 

       
                                                  POV-Ray V1.0 Page  17
       
       
       computers contact the authors for more info.
       
       If you are merging output files from different systems, make 
       sure that the random number generators are the same. If not, 
       the textures from one will not blend in with the textures 
       from the other. 
       
       +q# Rendering quality
       
       The +q option allows you to specify the image rendering 
       quality, for quickly rendering images for testing. The 
       parameter can range from 0 to 9. The values correspond to 
       the following quality levels:
       
       0,1  Just show quick colors. Ambient lighting only.
            Quick colors are specified outside the texture block
            and affect only the low quality renders.
       2,3  Show Diffuse and Ambient light
       4,5  Render shadows
       6,7  Create surface textures
       8,9  Compute reflected, refracted, and transmitted rays.
       
       The default is +q9 (maximum quality) if not specified.
       
       +l<path> - Library search path
       The +l option may be used to specify a "library" pathname to 
       look in for include, parameter and image files. Up to 10 +l 
       options may be used to specify a search path. The home 
       (current) directory will be searched first followed by the 
       indicated library directories in order.
       
       Default Parameter File and Environment Variable
       You may specify the default parameters by modifying the file 
       "povray.def" which contains the parameters in the above 
       format. This filename contains a complete command line as 
       though you had typed it in, and is processed before any 
       options supplied on the command line are recognized. You may 
       put commands on more than one line in the "povray.def" 
       file.
       
       Examples:
       
         povray +ibox.pov +obox.tga +v +x +w320 +h200 
       
            +ibox.pov = Use the scene file box.pov for input
            +obox.tga = Output the image as a 
                        Targa file to box.tga 
            +v = Show line numbers while rendering.

       
                                                  POV-Ray V1.0 Page  18
       
       
            +x = Allow key press to abort render.
            +w320 = Set image width to 320 pixels
            +h200 = Set image height to 200 pixels
       
       Some of these parameters could have been put in the 
       POVRAYOPT environment variable to save typing:
       
         SET POVRAYOPT = +v +x +w320 +h200
       
       Then you could just type:
       
         povray +ibox.pov +obox.tga 
       
       Or, you could create a file called POVRAY.DEF in the same 
       directory as the scene file box.pov that contains the 
       command line options.
       
       POVRAY.DEF contains "+v +x +w320 +h200"
       
       Then you could also type:
       
         povray +ibox.pov +obox.tga 
       
       With the same results. You could also create an option file 
       with a different name and specify it on the command line:
       
       For example, if QUICK.DEF contains "+v +x +w80 +h60"
       
       Then you could also type:
       
         povray +ibox.pov +obox.tga QUICK.DEF
       
       When POV-Ray sees QUICK.DEF, it will read it in just as if 
       you typed it on the command line.
       
       The order that the options are read in for the IBM-PC 
       version are as follows:
       
         POVRAYOPT environment variable
       
         POVRAY.DEF in current directory or,
                    if not found, in library path
       
         Command line and command line option files
       
       
       For example, +v in POVRAY.DEF would override -v in 

       
                                                  POV-Ray V1.0 Page  19
       
       
       POVRAYOPT. +x on the command line would override -x in 
       POVRAY.DEF and so on.
       
       Other computer's versions read in the POVRAY.DEF file before 
       the POVRAYOPT environment variable.
       
       
       Beginning Tutorial
       
       This section describes how to create a scene using POV-Ray's 
       scene description language and how to render this scene.
       
       Your First Image
       
       Let's create the scene file for a simple picture. Since 
       raytracers thrive on spheres, that's what we'll render 
       first.
       
       First, we have to tell POV-Ray where our camera is and where 
       it's looking. To do this, we use 3D coordinates. The usual 
       coordinate system for POV-Ray has the positive Y axis 
       pointing up, the positive X axis pointing to the right, and 
       the positive Z axis pointing into the screen as follows:
       
       ^+Y
       |   /+Z
       |  /
       | /
       |/        +X
       |-------->
       
       
       he the negative values of the axes point the other 
       direction, as follows:
       
       
                 ^+Y
                 |   /+Z
                 |  /
                 | /
         -X      |/        +X
         <-------|-------->
                /|
               / |
              /  |
           -Z/   |
                 v-Y
                   
       
       Using your personal favorite text editor, create a file 
       called "picture1.pov". Now, type in the following (note: The 

       
                                                  POV-Ray V1.0 Page  20
       
       
       input is case sensitive, so be sure to get capital and 
       lowercase letters correct):
       
       #include "colors.inc"  // The include files contain
       #include "shapes.inc"  // pre-defined scene elements
       #include "textures.inc"
       
       camera {
         location  <0 1 -3>
         direction <0 0 1.5>
         up        <0 1 0>
         right     <1.33 0 0>
         look_at   <0 1 2>
       }
       
       The first include statement reads in definitions for various 
       useful colors. The second and third include statements read 
       in some useful shapes and textures respectively. When you 
       get a chance, have a look through them to see but a few of 
       the many possible shapes and textures available.
       
       Include files may be nested, if you like but only 10 files 
       may be active at once.
       You may have as many include files as needed in a scene 
       file. Include files may themselves contain include files, 
       but you are limited to declaring includes only 10 "deep".
       
       
       Filenames specified in the include statements will be 
       searched for in the home (current) directory first, and if 
       not found, will then be searched for in directories 
       specified by any "-l" (library path) options active. This 
       would facilitate keeping all your "include" (.inc) files 
       such as shapes.inc, colors.inc, and textures.inc in an 
       "include" subdirectory, and giving an "-l" option on the 
       command line to where your library of include files are.
       
       The camera declaration describes where and how the camera 
       sees the scene. It gives X, Y, Z coordinates to indicate the 
       position of the camera and what part of the scene it is 
       pointing at. And the camera definition has direction vectors 
       to describe the properties of the camera like the aspect 
       ratio and lens length. Details can be found in the section 
       on cameras. 
       
       Briefly, "location <0 1 -3>" places the camera three units 
       back from the center of the ray-tracing universe which is at 

       
                                                  POV-Ray V1.0 Page  21
       
       
       <0 0 0>. Remember that by default +Z is into the screen and 
       -Z is back out of the screen.
       
       The line "direction <0 0 1.5>" says we're looking in the +Z 
       direction with a "lens length" of 1.5 units. 1.5 is used 
       instead of the default 1.0 to avoid "wide-angle" distortion 
       that occurs when the lens is too short. In other words, the 
       value 1.5 gives a slight "tele-photo" effect which reduces 
       perspective distortion. The default value of 1 is used for 
       historical reasons. The direction vector should be higher in 
       most cases to avoid perspective distortion.
       
       The parameter "up <0 1 0>" tells POV-Ray that "up" or the 
       top of the image is in the positive Y axis direction. 
       
       The parameter "right <1.33 0 0>" indicates that "right" or 
       the right side of the image is in the direction of the 
       positive X axis.
       
       The size of the up and right values also indicate the aspect 
       ratio of the scene. Most scenes are 1.33 times wider than 
       they are high. This corresponds to the popular computer 
       graphics image size of 640 pixels wide by 480 pixels high.
       
       Finally, "look_at <0 1 2>" rotates the camera to point at X, 
       Y, Z coordinates <0 1 2>. A point 6 units in front of and 1 
       unit higher than the camera. The look_at point should be the 
       center of attention of your image.
       
       Now that the camera is set up to record the scene, let's 
       place a red sphere into the scene:
       
       object {
         sphere { <0 1 2> 1 }
         texture {color Red } // Red is pre-defined in COLORS.INC
                              // You could also use "color red 1"
       }
       
       The center of this sphere at Z=2 is approx. 5 units in front 
       of the camera at Z=-3. It has a radius of 1 unit. Since the 
       radius is 1/2 the width of a sphere, the sphere 2 units 
       wide. 
       
       Note that any parameter that changes the appearance of the 
       surface (as opposed to the shape of the surface) is called a 
       texture parameter and must be placed into a texture { ... } 

       
                                                  POV-Ray V1.0 Page  22
       
       
       block. In this case, we are just setting the color of the 
       sphere using a pre-defined color from COLORS.INC. We could 
       manually set this color by specifying the amount of red, 
       green, and blue in the color like this:
       
           color red # green # blue #
       
       Values for red, green, and blue are between 0-1. If one is 
       not specified it is assumed to be 0. Colors are explained in 
       more detail later.
       
       One more detail, we need a light source. Until you create 
       one, there is no light in this virtual world:
       
       object { light_source { < 2 4 -3 > color White } }
       
       This white light is 2 units to our right, and 4 units above 
       the camera. The light_source is invisible, it only casts 
       light, so no texture is needed.
       
       That's it!  Close the file and render a small picture of it 
       using this command:
       
       povray -w160 -h120 +p +x +d1 -v -ipicture1.pov
       
       If your computer does not use the command line, see the 
       executable docs for the correct command to render a scene.
       
       You may set any other command line options you like, also. 
       The scene is output to the image file DATA.TGA (or some 
       suffix other than TGA if your computer uses a different file 
       format). You can convert DATA.TGA to a GIF image using the 
       commands listed in the docs included with your executable. 
       
       Phong Highlights
       
       You've now rendered your first picture. Let's add a nice 
       little specular highlight (shiny spot) to the sphere. It 
       gives it that neat "computer graphics" look. Change the 
       definition of the sphere to this:  
       
       object {
         sphere{ <0 1 2> 1 }
          texture {
           color Red 
           phong 1
          }
       }
       

       
                                                  POV-Ray V1.0 Page  23
       
       
       Now render this the same way you did before. The phong 
       keyword adds a highlight the same color of the light shining 
       on the object. It adds a lot of credibility to the picture 
       and makes the object look smooth and shiny. Lower values of 
       phong will make the highlight less bright. Phong can be 
       between 0 and 1.
       
       
       Simple Textures
       
       POV-Ray has some very sophisticated textures built-in and 
       ready to use. Change the definition of our sphere to the 
       following and then re-render it: 
       
       object {
          sphere { <0 1 3> 1 }
          texture {
            DMFWood1 // Pre-defined texture from textures.inc 
            scale <.2 .2 1> // Shrink the wood along the
                            // X & Y axes and leave
                            // the Z axis unchanged.
            phong 1
          }
       }
       
       The texture patterns are set up by default to give you one 
       "feature" across a sphere of radius 1.0. A "feature" is very 
       roughly defined as a color transition. For example, a wood 
       texture would have one band on a sphere of radius 1.0. By 
       scaling the wood by <.2 .2 1>, we shrink the texture to on 
       the X and Y axes to give us about five bands. The Z axis is 
       scaled by 1, which leaves it unchanged. 
       
       Please note that "one feature across a unit sphere" is not a 
       hard and fast rule. It's only meant to give you a rough idea 
       for the scale to use for a texture.
       
       One note about the scale operation. You can magnify or 
       shrink along each direction separately. The first term tells 
       how much to magnify or shrink on the X axis or in the 
       left-right direction. The second term controls the Y axis or 
       up-down direction and the third term controls the Z axis or 
       front-back direction. Scale values larger than 1 will 
       stretch an element. Scale values smaller than one will 
       squish an element. And scale value 1 will leave and element 
       unchanged.
       
       Look through the TEXTURES.DOC file to see what textures are 
       defined in TEXTURES.INC and try them out. Just insert the 

       
                                                  POV-Ray V1.0 Page  24
       
       
       name of the new texture where DMFWood1 is now and re-render 
       your file. 
       
       More Shapes
       
       So far, we've just used the sphere shape. There are many 
       other types of shapes that can be rendered by POV-Ray.  
       Let's try out a computer graphics standard - "The Checkered 
       Floor."  Add the following object to your .pov file:
       
       object {
          plane {<0 1 0> 0 }
          texture {
           checker
            color Red
            color Blue
          }
       }
       
       
       The object defined here is an infinite plane. The vector <0 
       1 0> is the surface normal of the plane (i.e., if you were 
       standing on the surface, the normal points straight up.)  
       The number afterward is the distance that the plane is 
       displaced along the normal from the origin - in this case, 
       the floor is placed at Y=0 so that the sphere at Y=1, 
       radius= 1, is resting on it. The texture uses the checker 
       color pattern and  specifies that the two colors red and 
       blue be used in the checker pattern.
       
       Looking at the floor, you'll notice that the wooden ball 
       casts a shadow on the floor. Shadows are calculated very 
       accurately by the ray tracer and creates precise, sharp 
       shadows.  In the real world, penumbral or "soft" shadows are 
       often seen. POV-Ray does not simulate penumbral shadows, but 
       they can be "faked." See the advanced section for tips if 
       you need soft shadows.
       
       
       Quadric Shapes
       
       Another kind of shape you can use is called a quadric 
       surface. There are many types of quadric surfaces. These are 
       all described by a certain kind of mathematical formula (see 
       the section on Quadrics in the next chapter). They include 
       cylinders, cones, paraboloids (like a satellite dish), 
       hyperboloids (saddle-shaped) and ellipsoids.
       
       All quadrics except for ellipsoids are infinite in at least 
       one direction. For example, a cylinder has no top or bottom 
       - it goes to infinity at each end. Quadrics all have one 

       
                                                  POV-Ray V1.0 Page  25
       
       
       common feature, if you draw any straight line through a 
       quadric, it will hit the surface at most twice. A torus 
       (donut), for example, is not a quadric since a line can hit 
       the surface up to four times going through. 
       
       Let's render a quadric. While we're at it, we'll add a few 
       features to the surface. Add the following definition to 
       your scene file:  
       
       object {
         quadric { Cylinder_Y }
         texture {
           color green .5 // This color is 50% green 
           reflection  .5
         }
         scale <.4  .4  .4>
         translate <2 0 5>
       }
       
       
       This object is a cylinder along the Y (up-down) axis. It's 
       green in color and has a mirrored surface, reflection 0.5, 
       this means that half the light coming from the cylinder is 
       reflected from other objects in the room. A reflection of 
       1.0 is a perfect mirror.
       
       The object has been shrunk by scaling it by <0.4 0.4 0.4>. 
       Note that since the cylinder is infinite along the Y axis, 
       the middle term is kind of pointless. One four tenths of 
       infinity is still infinity. 
       
       Note: Scene elements can't be scaled by zero, that will 
       cause a divide by zero floating point error.  Use a scale 
       value of 1 if you wish to leave a component unchanged.
       
       Finally, the cylinder has been moved back and to the right 
       by the translate command so you can see it more clearly. 
       
       Scene Description Language Reference
       
       The Scene Description Language allows the user to describe 
       the world in a readable and convenient way.
       
       Comments
       Comments are text in the scene file included to make the 
       scene file easier to read or understand. They are ignored by 
       the ray tracer and are there for humans to read.
       
       There are two types of comments in POV-Ray:
       

       
                                                  POV-Ray V1.0 Page  26
       
       
       // This line is ignored
       
       Anything on a line after a double slash // is ignored by the 
       ray tracer. You can have scene file information on the line 
       in front of the comment, as in:
       
       object { // this is an object
       
       The other type of comment is used for multiple lines.
       
       /* These lines
           Are ignored 
           By the
           Raytracer */
       
       This type of comment starts with /* and ends with */ 
       everything in-between is ignored. This can be useful if you 
       want to temporarily remove elements from a scene file. Just 
       comment them out, comments and all.
       
       Use comments liberally and generously. Well used, they 
       really improve the readability of scene files.
       
        /*...*/ comments can "comment out" lines containing the 
       other // comments, and thus can be used to temporarily or 
       permanently comment out parts of a scene.
       /*..*/ comments can be nested, the following is legal:
       
       /* This is a comment
           // This too
           /* This also */
        */
       
       
       Include Files
       The language allows include files to be specified by placing 
       the line:
       
           #include "filename.inc"
       
       at any point in the input file . The filename must be 
       enclosed in double quotes and may be up to 40 characters 
       long (or your computer's limit), including the two 
       double-quote (") characters. 
       
       The include file is read in as if it were inserted at that 
       point in the file. Using include is the same as actually 

       
                                                  POV-Ray V1.0 Page  27
       
       
       cutting and pasting the entire contents of this file into 
       your scene. 
       
       Include files may be nested. You may have at most 10 
       include'd files per scene trace, whether nested or not.
       
       Generally, include files have data for scenes, but are not 
       scenes in themselves. Scene files should end in .pov.
       
       Float
       A float is a floating point number, or a number with a 
       decimal point.
       
       Floats are represented by an optional sign (-), some digits, 
       an optional decimal point, and more digits. This version 
       supports scientific notation for exponents. The following 
       are all valid floats:
        1.0  -2.0  -4  34  3.4e6 2e-5 .3 0.6
       
       Vector
       Vectors are arrays of three or more floats. They are 
       bracketed by angle brackets ( < and > ), and the three terms 
       usually represent x, y, and z. For example:  
       
            < 1.0  3.2  -5.4578 >
       
       Vectors often refer to relative points. For example, the 
       vector:
       
            <1 2 3>
       
       means the point that's 1 unit to the right, 2 units up, and 
       3 units in front the center of the "universe" at <0 0 0>. 
       Vectors are not always points, though. They can also refer 
       to an amount to size, move, or rotate a scene element.
       
       Declare
       The parameters used to describe the scene elements can be 
       tedious to use at times. Some parameters are often repeated 
       and it seems wasteful to have to type them over and over 
       again. To make this task easier, the program allows users to 
       create synonyms for a pre-defined set of parameters and use 
       them anywhere the parameters would normally be used. For 
       example, the color white is defined in the POV-Ray language 
       as:
       
          color red 1 green 1 blue 1
       
       This can be pre-defined in the scene as:
       

       
                                                  POV-Ray V1.0 Page  28
       
       
       #declare White = color red 1 green 1 blue 1
       
       and then substituted for the full description in the scene 
       file, for example:
       
       object {
          sphere { <0 0 0> 1 }
          texture { color red 1 green 1 blue 1 }
       }
       
       becomes:
       #declare White = color red 1 green 1 blue 1
       
       object {
          sphere { <0 0 0> 1 }
          texture { color White }
       }
       
       This is much easier to type and to read. The pre-defined 
       element may be used many times in a scene.
       
       You use the keyword "declare" to pre-define a scene element 
       and give it a one-word synonym. This pre-defined scene 
       element is not used in the scene until you invoke its 
       synonym. Shapes, textures, objects, colors, numbers and more 
       can be predefined.
       
       Pre-defined elements may be modified when they are used, for 
       example:
       
       #declare Mickey = // Pre-define a union called Mickey
          union {
            sphere { <0 0 0> 2 }
            sphere { <-2 2 0> 1}
            sphere { <2 2 0> 1}
          }
       
       // Use Mickey
       object{
          union {
             Mickey
             scale <3 3 3>
             rotate <0 20 0>
             translate <0 8 10>
          }
          texture {
            color red 1

       
                                                  POV-Ray V1.0 Page  29
       
       
            phong .7
          }
       }
       
       This scene will only have one "Mickey", the Mickey that is 
       described doesn't appear in the scene. Notice that Mickey is 
       scaled, rotated, translated, and a texture is added to it. 
       The Mickey synonym could be used many times in a scene file, 
       and each could have a different size, position, orientation, 
       and texture.
       
       Declare is especially powerful when used to create a complex 
       shape or object. Each part of the shape or object is defined 
       separately using declare. These parts can be tested, 
       rotated, sized, positioned, and textured separately then 
       combined in one shape or object for the final sizing, 
       positioning, etc. For example, you could define all the 
       parts of a car like this:
       
       #declare Wheel = shape_type {...}
       #declare Seat = shape_type {...}
       #declare Body = shape_type {...}
       #declare Engine = shape_type {...}
       #declare Steering_Wheel = shape_type {...}
       
       #declare Car = 
         union {
            shape_type { Wheel translate <1 1 2>}
            shape_type { Wheel translate <-1 1 2>}
            shape_type { Wheel translate <1 1 -2>}
            shape_type { Wheel translate <-1 1 -2>}
            shape_type { Seat translate <.5 1.4 1>}
            shape_type { Seat translate <-.5 1.4 1>}
            shape_type { Steering_Wheel translate <-.5 1.6 1.3>}
            shape_type { Body texture { Brushed_Steel } }
            shape_type { Engine translate <0 1.5 1.5> 
          }
       
       and then it like this:
       
       // Here is a car
       object {
          union { Car }
          translate <4 0 23>
       }
       
       Notice that the Wheel and Seat are used more than once. A 

       
                                                  POV-Ray V1.0 Page  30
       
       
       declared element can be used as many times as you need. 
       Declared elements may be placed in "include" files so they 
       can be used with more than one scene.
       Declare can be used anywhere in a scene or include file.
       
       There are several files included with POV-Ray that use 
       declare to pre-define many shapes, colors, and textures. See 
       the archive INCLUDE for more info.
       
       NOTE: Declare is not the same as the C language's define. 
       Declare creates an internal object of the type specified 
       that POV-Ray can recognize when it is prefaced by the object 
       type, while define substitutes like a macro. The only 
       declared object type that doesn't need to be prefaced with a 
       keyword is numeric, which can be used wherever a number is 
       expected.
       
       What can be declared?
       Here's a list of what can be declared, how to declare the 
       element, and how to use the declaration. See the reference 
       section for element syntax.
       
       Objects:
         #declare Tree = object {...}
          
         object {
           Tree
           (object_modifiers) 
         }
       
       Composite Objects:
         #declare Duck = composite {...}
       
         composite {
           Duck
           (object_modifiers) 
         }
       
       Shapes:
         (Any shape type may be declared, sphere, box, 
       height_field, blob,
          etc.)
         #declare Disk = shape_type {...}
       
         object {
           shape_type { Disk (shape_modifiers) }
           (object_modifiers) 
         }

       
                                                  POV-Ray V1.0 Page  31
       
       
        
        Specific Shape Example:
         #declare BigBox = box {<0 0 0> <10 10 10>}
       
         object {
           box { BigBox (shape_modifiers) }
           (object_modifiers) 
         }
       
       
       CSG Shapes:
         Declare and use these just like a normal shape type. The 
       CSG shape types are union, intersection, and difference.
       
         #declare Moose = csg_shape_type {...}
       
         object {
           shape_type { Moose (shape_modifiers) }
           (object_modifiers) 
         }
       
       Textures:
         #declare Fred = texture {...} 
       
         object {
           sphere { <0 0 0> 1 }
           texture {
             Fred 
             (texture_modifiers) 
           }
         }
       
       Layered textures:
         #declare Fred = 
            texture {...} 
            texture {...} 
            texture {...} (etc.)
       
         object {
           sphere { <0 0 0> 1 }
           texture {
             Fred 
             (texture_modifiers) 
           }
         }
       
       

       
                                                  POV-Ray V1.0 Page  32
       
       
       Colors:
         #declare Fred = color red # green # blue # alpha # 
       
         object {
           sphere { <0 0 0> 1 }
           texture {
              color Fred 
           }
         }
       
       Numeric Values:
         #declare Fred  = 3.45
         #declare Fred2 = .02
         #declare Fred3 = .5
       
       object { // Use the numeric value synonym 
                // anywhere a number would go
          sphere { <-Fred 2 Fred> Fred }
          texture { 
             color red 1
             phong Fred3
          }
       }
       
       Camera:
         #declare Fred = camera {..}
       
         camera { Fred }
       
       Vectors:
          #declare Fred = <9 3 2>
          #declare Fred2 = <4 4 4>
       
          object {
            sphere { Fred 1 }
            scale Fred2
          }
       
       Light sources:
          #declare Light1 = light_source {...}
       
          object {
            light_source { Light1 (modifiers) }
          } 
          
       
       Camera
       Every scene in POV-Ray must have one and only one camera 

       
                                                  POV-Ray V1.0 Page  33
       
       
       definition. The camera definition describes the position, 
       angle and properties of the camera viewing the scene. 
       POV-Ray uses this definition to do a simulation of the 
       camera in the ray-tracing universe and "take a picture" of 
       your scene.
       
       The camera simulated in POV-Ray is a pinhole camera. Pinhole 
       cameras have a fixed focus so all elements of the scene will 
       always be perfectly in focus. The pinhole camera is not able 
       to do soft focus or depth of field effects.
       
       The camera block tells the ray tracer the location and 
       orientation of the camera or viewpoint. The camera is 
       described by several vectors - 
       Location, Direction, Up, and Right, Sky, and Look_at.
       
       Location specifies the position of the camera in X, Y, Z 
       coordinates. The camera can be positioned at any point in 
       the ray-tracing universe.
       
         Telephoto and Wide-Angle
       Direction serves two purposes. It is a vector describing 
       what direction the camera is pointing. The direction vector 
       is usually set to point straight ahead. The look_at vector 
       described below is used to point the camera. It is also used 
       as a kind of lens length setting. Shorter is more wide 
       angle, longer is more telephoto.
       
       Be careful with short direction vector lengths like 1.0 and 
       less. You'll end up with distortion on the edges of your 
       images. Objects will appear to be shaped strangely. If this 
       happens, move the location back and make the direction 
       vector longer.
       
       The Up vector describes the "up" direction of the camera to 
       POV-Ray. It tells POV-Ray where the top of your screen is.
       
       The Right vector describes the direction to the right of the 
       camera. It tells POV-Ray where the right side of your screen 
       is.The sign of the right vector also determines the 
       "handedness" of the coordinate system in use. A normal 
       (left-handed) right statement would be:
       
       right <1.33 0 0>
       
       To use a right-handed coordinate system, as is popular in 
       some CAD programs and some other ray-tracers use a right 

       
                                                  POV-Ray V1.0 Page  34
       
       
       like:
       
       right <-1.33 0 0>
       
       Some CAD systems, like AutoCAD, also have the assumption 
       that the Z axis is the "elevation" and is the "up" direction 
       instead of the Y axis. If this is the case you will want to 
       change your "up" statement to:
       
       up <0 0 1>
       
       Together the Up and Right vectors define the aspect ratio of 
       the image being rendered. These vectors are described in 
       more detail later in this document.
       
       Here's a basic declaration of a camera:
       
       camera {
         location  <0 0 0>
         direction <0 0 1>
         up        <0 1 0>
         right     <1.33 0 0>
       }
       
       The above vectors are set to their default values. If you do 
       not specify a value then these defaults are used. For 
       instance, if your camera definition didn't have the line "up 
       <0 1 0>", the up vector would still be set to "up <0 1 0>" 
       because POV-Ray does that automatically, by default.
       
       These four vectors may be specified in any order. They 
       should be specified before the modifiers sky and look_at 
       which are described below.
       
         Sky and Look_at
       If the camera always pointed straight along an X, Y or Z 
       axis this definition format would be easy enough. In almost 
       all cases however, the camera angle is much more 
       interesting. This format becomes cumbersome then because its 
       difficult to compute the vectors by hand.
       
       Fortunately, POV-Ray doesn't require you to do any vector 
       computations. The vectors Sky and Look_at make it easy to 
       point the camera just the direction you'd like.
       
       The look_at keyword defines the specific point the camera 
       should be pointing at. The camera is rotated as required to 

       
                                                  POV-Ray V1.0 Page  35
       
       
       point the "center of the lens" directly at that point.
       
       Normally, you will use the look_at keyword, not the 
       direction vector to point the camera. The look_at command is 
       the best way to rotate the camera to point at a scene 
       element. Also, it should always be last in the camera 
       definition. Rotate and translate may be used in the camera 
       definition, but they should be used before look_at or the 
       camera will probably not remain looking at the point 
       specified.
       
       The sky keyword tells the camera where the sky in the 
       ray-tracing universe is. POV-Ray uses the sky vector to keep 
       the camera's up direction aligned as closely as possible to 
       the sky.
       
       One subtle point: the sky direction is not necessarily the 
       same as the up direction. For example, consider the 
       following situation:
       
       
                 S^
                  | /U
                  |/
                  C
                   \
                    \
                     \
                      O
       
       If you said that the camera C has a sky direction S and is 
       looking at O, the up direction will not point to the sky. 
       Imagine hanging your camera from a string attached at the 
       top of the camera. The string points to the sky. The up 
       keyword is like putting an antenna on your camera. If you 
       point the camera downwards using look_at, the antenna will 
       no longer point straight up.
       
       Note that the default value for sky is <0 1 0>. Sky affects 
       the other vectors when you use look_at.
       
       Sky must be defined before the look_at point. 
       
       
         Aspect Ratio
       As mentioned before, the length of the up and right vectors 
       controls the aspect ratio of the image. Typically computer 

       
                                                  POV-Ray V1.0 Page  36
       
       
       screens have an aspect ratio (width to height ratio) of 4:3. 
       Most of the sample images distributed with POV-Ray were 
       designed to fill the "landscape" orientation of a typical 
       screen and they generally define "up <0 1 0>" and "right 
       <1.33 0 0>". Thus the right-to-up ratio is 1.33:1 or about 
       4:3. A tall, slim picture might use "up <0 5 0> right <1 0 
       0>".
       
       Note that this is the ratio of the overall image and is 
       independent of pixel size or shape. If you assume square 
       pixels then the command line values "+w" and "+h" should 
       also have this same ratio. If you have non-square pixels you 
       should adjust the "+w" & "+h" values... not the up & right 
       values.
       
       Suppose we have "up <0 1 0> right <1.33 0 0>" giving a 4:3 
       ratio. On an IBM VGA 640x480 mode the pixels are square so 
       you would specify "+w640 +h480" on the command line. Note 
       that 640:480 = 4:3 = 1.33:1. However there is a mode on 
       Amiga that has wide, flat pixels which fills the screen when 
       320 by 400 pixels are used. You would still keep the same up 
       & right vectors because the image itself should still look 
       4:3 wide. But you would specify "+w320 +h400" on the command 
       line to compensate for non-square pixels.
       
       
         Translating and Rotating the Camera
       Also, the "translate" and "rotate" commands can re-position 
       the camera once you've defined it.
       
       For example:
         camera {
           location  <0  0  0>
           direction <0  0  1>
           up        <0  1  0>
           right     <1  0  0>
           translate <5  3  4>
           rotate   <30 60 30>
         }
       
       In this example, the camera is created, then translated to 
       another point in space and rotated by 30 degrees about the X 
       axis, 60 degrees about the Y axis, and 30 degrees about the 
       Z axis.
       
       light_source
       Syntax: light_source { <center> color ...}
       

       
                                                  POV-Ray V1.0 Page  37
       
       
       Light sources are treated like shapes, but they are 
       invisible points from which light rays stream out. They 
       light objects and create shadows and highlights. Because of 
       the way ray tracing works, lights do not reflect. You can 
       use many light sources in a scene, but each light source 
       used will increase rendering time. The brightness of a light 
       is determined by its color. A bright color is a bright 
       light, a dark color, a dark one. White is the brightest 
       possible light , Black is completely dark and Grey is 
       somewhere in the middle.
       The syntax for a light source is:
       
         light_source { <X Y Z> color red # green # blue #} 
       
       Where X, Y and Z are the coordinates of the location and 
       color , is any color or color identifier. For example,
       
         light_source { <3 5 -6> color Grey} 
       
       Is a Grey light at X=3, Y=5, Z=-6.
       
       spotlight light_source
       Syntax:   light_source {  <center> color red # green # blue 
       #
             spotlight
             point_at <point>
             radius #
             falloff #
             tightness #
            }
       
       A spotlight is a point light source where the rays of light 
       are constrained by a cone. The light is bright in the center 
       of the spotlight and falls off/darkens to soft shadows at 
       the edges of the circle. 
       
       
                  (+) Spotlight
                  /|\
                 / | \
                / ||| \
               /  |||  \
              /  |||||  \
             /   |||||   \
                  +-+       = radius
             +-----*-----+  = 
                   ^ point_at
                    

       
                                                  POV-Ray V1.0 Page  38
       
       
       The center and color of the spotlight is specified the same 
       way as a normal light_source. 
       
       Point_at <point> is the location that the cone of light is 
       aiming at. 
       
       The radius # is the radius in degrees of the bright circular 
       hotspot at the center of the spotlight's area of affect. 
       
       The falloff # is the falloff radius of the spotlight area in 
       degrees. This is the value where the light "falls off" to 
       zero brightness. Falloff should be larger than 
       the radius. Both values should be between 1 and 180.
       
       The tightness value is how fast the light falls off at the 
       edges. Low values will make the spot have very soft edges. 
       High values will make the edges sharper, the spot 
       "tighter".
       
       Spotlights may used anyplace that a normal light source is 
       used. Like normal light sources, they are invisible points. 
       They are treated as shapes and may be included in CSG 
       shapes.
       
       Example: 
       // This is the spotlight.
          light_source {
             <10 10 0>
             color red 1 green 1 blue 0.5
             spotlight
             point_at <0 1 0>
             tightness 50
             radius 11
             falloff 25
            }
       
       
       no_shadow
       Syntax: object { shape {...} texture {...} no_shadow }
       
       You may specify the no_shadow keyword in object and that 
       object will be transparent to all light sources. It will not 
       cast a shadow. This is useful for special effects and for 
       creating the illusion that a light source actually is 
       visible.
       Here are two examples of "visible" light sources using 
       no_shadow: 
       

       
                                                  POV-Ray V1.0 Page  39
       
       
       // This a light masquerading as the sun.
       // Note: The texture does not affect the light,
       //      only the sphere
        object {
          union { // the union is a CSG shape type,
                  // see CSG for more info
          sphere { <0 50 200> 100 }
          light_source { <0  50 200>  color red 1 green .5  }
         }
          texture { 
             color red 1 green .5 
             ambient 1
             diffuse 0
          }
        no_shadow
        }
       // This is the spotlight trying to be a small sphere.
        object {
          union { // the union is a CSG shape type,
                  // see CSG for more info
          sphere { <10 10 0> 0.5 }
          light_source {
             <10 10 0>
             color red 1 green 1 blue 0.5
             spotlight
             point_at <0 1 0>
             tightness 50
             radius 11
             falloff 25
          }
         }
        texture { color White ambient 1 diffuse 0 }
        no_shadow
        }
       
       If no_shadow were not used here, the light inside the 
       spheres would not escape the sphere and would not show up in 
       the scene. The sphere would, in effect, cast a shadow over 
       everything.
       
       Note that it does not mean 'this light_source casts no 
       shadow'. No_shadow affects the entire object and means 'this 
       object casts no shadow'." Although the no_shadow keyword is 
       most often used with light_sources, it can be used in any 
       object.
       

       
                                                  POV-Ray V1.0 Page  40
       
       
       
       
       Objects
       
       An object is made out of three basic elements: a shape, a 
       texture, and transformations. 
       
       The shape is the form of the object, like a sphere, a cone 
       or a cylinder. The shape can be any standard shape type or 
       it can be a CSG shape type, like union, or intersection. The 
       CSG shape types create one shape that is made up of multiple 
       shapes. Any shape may have its own texture.
       
       The texture describes what a shape or object looks like, ie. 
       its material.
       
       The transformations tell the ray tracer how to move, size or 
       rotate the shape and/or the texture in the scene.
       
       Here's the basic layout for an object:
       object {
         shape   { 
           (shape parameters)   
           [shape transformations] 
         }
         [shape only transformations] 
       
         texture { 
            (texture parameters) 
            [texture transformations] 
         }
         [object,shape and texture, transformations]  
       }
       
       For example:
       
       object {
         sphere { <1 2 3> 2 }
         texture { marble scale <2 2 2> }
         scale <5 5 5>  // This transformation scales 
                        // both shape and texture
       }
       
       CSG shapes are the same:
       
       object {
         intersection { Disk_Y }
         scale < .2 1 .2 > // This scales shape only
         texture { 

       
                                                  POV-Ray V1.0 Page  41
       
       
            marble 
            scale <2 2 2> // This scales texture only
         }
         scale <2 1 3>  // This scales both shape and texture
       }
       
       Quick Render Color 
       
       When used outside of the texture block in an object, the 
       color keyword determines what color to use for a low quality 
       rendering when textures are ignored. When the quality 
       command option is set to +q0, +q1, ..., +q5, the program 
       will use the quick color for objects instead of the texture. 
       Normally, +q is set to +q9 and the quick color won't affect 
       the object.
        
       Example:
       object {
          shape { ... }
          texture { ... }
          color red # green # blue #   // This is the quick 
                                       // render color
       }
       
       Transformations
       
       Often, vectors are used as a convenient notation but don't 
       represent a point in space. This is the case for the 
       transformations scale, rotate, and translate. Scale sizes a 
       shape, texture or object. Translate moves a shape, texture 
       or object. And rotate turns a shape, texture or object.
       
       Note: Transformations are relative to the current 
       transformation of the scene element.  That is, they are 
       additive. For example, scale <2 0 0> scale <2 0 0> actually 
       scales by 4 in X direction.
       
       Most scene elements like objects, shapes, and lights can be 
       translated, rotated, and scaled just like surfaces. 
       
       If an object is transformed, all textures attached to the 
       object at that time are transformed as well. This means that 
       if you have a translate, rotate, or scale in an object 
       before a texture, the texture will not be transformed. If 
       the scale, translate, or rotate is after the texture, the 
       texture will be transformed.
       
       For example,
          object {
            sphere { <0 0 0> 1}
            texture { marble }

       
                                                  POV-Ray V1.0 Page  42
       
       
            scale <3 3 3> // This scale affects the 
                          // shape and texture
          }
          object {
            sphere { <0 0 0> 1}
            scale <3 3 3> // This scale affects the 
                          // shape only
            texture { marble }
          }
       
       
       
       Scale
       Syntax:
       scale <xs ys zs>
       
       Scale the element by xs units in the left/right direction, 
       ys units in the up/down direction and zs units in the 
       front/back direction. Scale is used to "stretch" or "squish" 
       an element. Values larger than 1 stretch the element on that 
       axis. Values smaller than one are used to squish the element 
       on that axis. Scale is relative to the current element size. 
       If the element has been previously re-sized using scale, 
       then scale will size relative to the new size. Multiple 
       scale values may used.
       
       Rotate
       Syntax:
       rotate <xr yr zr>
       
       Rotate the element xr degrees about the X axis, then yr 
       degrees about the Y axis, then zr degrees about the Z axis. 
       Rotate turns the object relative to its current position. 
       Multiple rotate values may used.
       
       Note that the order of the rotations does matter and you 
       should use multiple rotation statements to get a correct 
       multiple rotation. You should only rotate on one axis at a 
       time. As in,
          rotate <0 30 0>  // 30 degrees around Y axis then,
          rotate <-20 0 0> // -20 degrees around X axis then,
          rotate <0 0 10>  // 10 degrees around Z axis.
       
       Note also that rotate always rotates around the point <0 0 
       0> so if you translate the object before rotating, it will 
       be rotated "in orbit" around <0 0 0>.
       
       Translate
       Syntax:
       translate <x y z>

       
                                                  POV-Ray V1.0 Page  43
       
       
       
       Move the element x units to the right, y units up, and z 
       units away from us. Translate moves the element relative to 
       it's current position. For example,
       
         object {
           sphere { <10 10 10> 1 } 
           texture { color Green }
           translate <-5 2 1>
         }
       
       Will move the sphere from <10 10 10> to <5 12 11> not <5 2 
       1>. Translating by zero will leave the element unchanged on 
       that axis. For example,
       
         object {
           sphere { <10 10 10> 1 } 
           texture { color Green }
           translate <0 0 0>
         }
       
       Will not move the sphere at all.
       
       Multiple translates may be used.
       
       
       Transformation order
       Generally, this is the order that you should perform these 
       operations in. If you scale after you translate, the scale 
       will multiply the translate amount. For example:
       
         translate < 5 6 7>
         scale <4 4 4>
       
       Will translate to 20, 24, 28 instead of 5, 6, 7. Be careful 
       when transforming to get the order correct for your 
       purposes.

       
                                                  POV-Ray V1.0 Page  44
       
       
       
       
       "Handedness" -- Rotation Direction
       To work out the rotation directions, you must perform the 
       famous "Computer Graphics Aerobics" exercise. Hold up your 
       left hand. point your thumb in the positive direction of the 
       axis you want to rotate about. Your fingers will curl in the 
       positive direction of rotation. This is the famous 
       "left-hand coordinate system". 
       
                      ^
                    +Y|   +Z/ _
                      |    /_| |_  _
                      |   _| | | |/ \
                      |  | | | | |  |
                      | /| | | | |  V
            -X        |/ | | | | |    +X
           <----------+--|-|-|-|-|------>
                     /|  |       \____
                    / |  |         ___|
                   /  |  \        /
                  /   |   |      /
               -Z/  -Y|
                /     |  
       
       In this illustration, the left hand is curling around the X 
       axis. The thumb points in the positive X direction and the 
       fingers curl over in the positive rotation direction.
       
       If you want to use a right hand system, as some CAD systems 
       such as AutoCAD do, the right vector in the camera needs to 
       be changed. See the detailed description of the camera, and 
       use your right hand for the "Aerobics". 
       
       Shapes
       
       Shapes describe the shape of an object without mentioning 
       any surface characteristics like color, surface lighting and 
       reflectivity. 
       
       Spheres
       Since spheres are so common in ray traced graphics, A sphere 
       primitive has been added to the system. This primitive will 
       render much more quickly than the corresponding quadric 
       shape. The syntax is:
       
            sphere { <center> radius }
       
       You can also add translations, rotations, and scaling to the 
       sphere. For example, the following two objects are 

       
                                                  POV-Ray V1.0 Page  45
       
       
       identical:
       
       object{
         sphere { < 0.0 25.0 0.0 > 10.0 }
           texture {
             color Blue
             phong .5
           }
       }
       
       object {
         sphere { < 0.0 0.0 0.0 > 1.0
            scale <10.0  10.0  10.0>
            translate <0.0  25.0  0.0> 
         }
         texture {
            color Blue
             phong .5
         }
       }
       
       Note that Spheres may only be scaled uniformly. You cannot 
       use:
       
            scale <10.0 5.0 2.0>
       
       on a sphere. If you need oblate (flattened) spheroids, use a 
       quadric "Ellipsoid" shape instead, as it can be arbitrarily 
       scaled in any dimension. 
       
       Planes
       Another primitive provided to speed up the raytracing is the 
       plane. This is a flat infinite plane. To declare a plane, 
       you specify the direction of the surface normal to the plane 
       (the up direction) and the distance from the origin of the 
       plane to the world's origin. As with spheres, you can 
       translate, rotate, and scale planes. 
       Examples:
       A plane in the X-Z axes 10 units below the world origin. 
       Like a floor or ceiling.
       
       plane { <0.0  1.0  0.0> -10.0 }
       
       A plane in the X-Z axes 10 units above the world origin. 
       Like a wall in front of the viewer.
       
       plane { <0.0  1.0  0.0>  10.0 }
       

       
                                                  POV-Ray V1.0 Page  46
       
       
       A plane in the X-Y axes 10 units behind the world origin. 
       Like a wall to the side of the viewer.
       
       plane <0.0  0.0  1.0>  -10.0 }
       
       Boxes
       A simple box can be defined by listing two corners of the 
       box like this:
       
         box { <corner1> <corner2> }
         box { <0 0 0> <1 1 1> }
       
       Corner1 should be smaller than corner2. That is, each 
       element of  Corner1 should be less than the corresponding 
       element in Corner2. If any elements of Corner1 are larger 
       than Corner2, the box will not appear in the scene.
       
       Corner1 and corner2 are XYZ points. Boxes are calculated 
       efficiently and make good bounding shapes. As with all 
       shapes, they can be translated, rotated and scaled.
       
       Quadric Shapes
       Quadric Surfaces can produce shapes like ellipsoids 
       (spheres), cones, cylinders, paraboloids (dish shapes), and 
       hyperboloids (saddle or hourglass shapes).
       
       The easiest way to use these shapes is to include the 
       standard file "SHAPES.INC" into your program. It contains 
       several pre-defined quadrics and you can transform these 
       pre-defined shapes (using translate, rotate, and scale) into 
       the ones you want.
       
       To be complete, here are the mathematical principles behind 
       quadric surfaces. Those who are not interested in the 
       mathematical details can skip to the next section. 
       The quadric:
             quadric {
                 <A B C>
                 <D E F>
                 <G H I>
                 J
             }
       
       defines a surface in three dimensions which satisfies the 
       following equation:
       
              A y^2   + B y^2   + C z^2
            + D xy    + E xz    + F yz
            + G x     + H y     + I z    + J = 0

       
                                                  POV-Ray V1.0 Page  47
       
       
       
       Different values of A,B,C,...J will give different shapes. 
       So, if you take any three dimensional point and use its x, 
       y, and z coordinates in the above equation, the answer will 
       be 0 if the point is on the surface of the object. The 
       answer will be negative if the point is inside the object 
       and positive if the point is outside the object. Here are 
       some examples: 
            X**2 + Y**2 + Z**2 - 1 = 0 Sphere
            X**2 + Y**2 - 1 = 0        Cylinder along the Z axis     
       
            X**2 + Y**2 - Z**2 = 0     Cone along the Z axis
       
       Quadric surfaces the easy way
       The file "shapes.inc" uses the declare command to pre-define 
       many quadric surfaces. You can invoke them by using the 
       syntax,
       
         quadric { Quadric_Name }
       
       The pre-defined quadrics are centered about the origin <0 0 
       0> and have a radius of 1. Don't confuse radius with width. 
       The radius is half the diameter or width making the standard 
       quadrics 2 units wide.
       
       Some of the pre-defined quadrics are,
       
        Ellipsoid
        Cylinder_X, Cylinder_Y, Cylinder_Z
        QCone_X, QCone_Y, QCone_Z
        Paraboloid_X, Paraboloid_Y, Paraboloid_Z
       
       For a complete list, see the file SHAPES.INC.
       
       To use the pre-defined quadrics, you describe shapes simply 
       as follows:
       
       #include "colors.inc"
       #include "shapes.inc" // The shape definitions are 
                            // in this file 
       #include "textures.inc"
       
       quadric {
         Cylinder_X  // This is the predefined quadric name
         scale     <50 50 50>
         rotate    <0 45 0>
         rotate    <30 0 0>
         translate <2 5 6>

       
                                                  POV-Ray V1.0 Page  48
       
       
         }
       
       You may have as many transformation commands (scale, rotate, 
       and translate) as you like in any order. Usually, however, 
       it's best to do a scale first, one or more rotations, then 
       finally a translation. Otherwise, the results may not be 
       what you expect.
       
       The transformations always transform the object about the 
       origin. If you have a sphere at the origin and you translate 
       it then rotate it, the rotation will spin the sphere around 
       the origin like planets about the sun.
       
       Triangles
       The triangle shape is available in order to make more 
       complex objects than the built-in shapes will permit. 
       Triangles are usually not created by hand, but are converted 
       from other files or generated by utilities. 
       
       There are two different types of triangles: flat shaded 
       triangles and smooth shaded (Phong) triangles.
       
       Flat shaded triangles are defined by listing the three 
       vertices of the triangle. For example:
       
               triangle { <0 20 0> <20 0 0> <-20 0 0> }
       
       The smooth shaded triangles use a formula called Phong 
       normal interpolation to calculate the surface normal for the 
       triangle. This makes the triangle appear to be a smooth 
       curved surface. In order to define a smooth triangle, 
       however, you must supply not only the vertices,but also the 
       surface normals at those vertices. For example:
       
            smooth_triangle {
               <  0  30 0 >    <0  .7071 -.7071>
               < 40 -20 0 >    <0 -.8664 -.5   >
               <-50 -30 0 >    <0 -.5    -.8664>
            }
       
       As with the other shapes, triangles can be translated, 
       rotated, and scaled.
       
       NOTE 1: Triangles cannot be used in CSG intersection or 
       difference types (described next) since triangles have no 
       clear "inside". The CSG union type works acceptably, but 
       with no real difference from a composite made up of TRIANGLE 
       primitives.

       
                                                  POV-Ray V1.0 Page  49
       
       
       
       Quartic Surfaces
       Quartics are just like quadrics in that you don't have to 
       understand what one is to use one. The file SHAPESQ.INC has 
       plenty of pre-defined quartics for you to play with. The 
       most common one is the torus or donut. The syntax for using 
       a pre-defined quartic is:
          
           quartic { Quartic_Name (sturm) }
       
       They may be scaled, rotated, and translated like all other 
       shape types. 
       
       Quartics use highly complex computations and will not always 
       render perfectly. If the quartic is not smooth, has 
       dropouts, or extra random pixels, try using the optional 
       keyword "sturm" in the definition. This will cause a slower, 
       but more accurate calculation method to be used. Usually, 
       but not always, this will solve the problem. If sturm 
       doesn't work, try rotating, or translating the shape by some 
       small amount. See the archive MATH for examples of quartics 
       in scenes.
       
       Here's a more mathematical description of quartics for those 
       who are interested.
       Quartic surfaces are 4th order surfaces, and can be used to 
       describe a large class of shapes including the torus, the lemniscate, 
       etc. The general equation for a quartic equation in three 
       variables is (hold onto your hat):
       
       a00 x^4 + a01 x^3 y + a02 x^3 z+ a03 x^3 + a04 x^2 y^2+     
       
       a05 x^2 y z+ a06 x^2 y + a07 x^2 z^2+a08 x^2 z+a09 x^2+  
       a10 x y^3+a11 x y^2 z+ a12 x y^2+a13 x y z^2+a14 x y z+ 
       a15 x y + a16 x z^3 + a17 x z^2 + a18 x z + a19 x+
       a20 y^4 + a21 y^3 z + a22 y^3+ a23 y^2 z^2 +a24 y^2 z+ 
       a25 y^2 + a26 y z^3 + a27 y z^2 + a28 y z + a29 y+ 
       a30 z^4 + a31 z^3 + a32 z^2 + a33 z + a34
       
       To declare a quartic surface requires that each of the 
       coefficients (a0 -> a34) be placed in order into a single 
       long vector of 35 terms. 
       
       As an example, the following object declaration is for a 
       torus having major radius 6.3 minor radius 3.5 (Making the 
       maximum width just under 10). 
       //Torus having major radius sqrt(40), minor radius sqrt(12)  

       
                                                  POV-Ray V1.0 Page  50
       
       
       object {
          quartic {
             < 1.0   0.0   0.0   0.0   2.0   0.0   0.0   2.0   0.0       
       
            -104.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0       
       
               0.0   0.0   1.0   0.0   0.0   2.0   0.0  56.0   0.0       
       
               0.0   0.0   0.0   1.0   0.0 -104.0  0.0 784.0 >
             }
             bounded_by { // bounded_by speeds up the render,
                          // see bounded_by
                          // explanation later 
                          // in docs for more info.
              sphere { <0 0 0> 10 }
             }
            }
       
       The code to calculate Ray-Surface intersections for quartics 
       is somewhat slower than that for intersections with quadric 
       surfaces. Benchmarks on a stock 8Mhz IBM-PC AT (with FPU) 
       give results of around 1400 solutions per second for 2nd 
       order equations (quadrics) vs 444 per second for 3rd order 
       equations and 123 per second for 4th order equations 
       (quartics). So clever use of bounding shapes can make a big 
       difference in processing time. 
       
       While a great deal of time has gone into debugging the code 
       for handling quartic surfaces, we know there are possible 
       bad combinations of surface equations and lighting 
       orientations that could cause math errors. If this happens 
       to you, as the joke goes, "then don't DO that."
       Here are some quartic surfaces to get you started.
       
       A Torus can be represented by the equation:
       
       x^4 + y^4 + z^4 + 2 x^2 y^2 + 2 x^2 z^2 + 2 y^2 z^2
       -2 (r0^2 + r1^2) x^2 + 2 (r0^2 - r1^2) y^2 
       -2 (r0^2 - r1^2) z^2 + (r0^2 - r1^2)^2 = 0
       
       Where r0 is the "major" radius of the torus - the distance 
       from the hole of the donut to the middle of the ring of the 
       donut, and r1 is the "minor" radius of the torus - the 
       distance from the middle of the ring of the donut to the 
       outer surface. Described another way, a torus is a circle 
       that is revolved around an axis. The major radius is the 
       distance from the axis to the center of the circle, the 

       
                                                  POV-Ray V1.0 Page  51
       
       
       minor radius is the radius of the circle. 
       
       Note that scaling surfaces like a torus scales everything 
       uniformly. In order to change the relationship between the 
       size of the hole and the size of the ring, it is necessary 
       to enter new coefficients for the torus.
       
       The only coefficients of the 35 that need to be filled in 
       are:
       
           a0  = a20 = a30 = 1,
           a4  = a7  = a23 = 2,
           a9  = a32       = -2 (r0^2 + r1^2)
           a25             = 2 (r0^2 - r1^2)
           a34             = 2 (r0^2 - r1^2)^2
       
       the torus can then be rotated and translated into position 
       once its shape has been defined. (See 'TORUS.POV')
       A generalization of the lemniscate of Gerono can be 
       represented by the equation:
       
          c^2 x^4 - a^2 c^2 x^2 + y^2 + z^2 = 0
       
       where good start values are a = 1.0 and c = 1.0, giving the 
       coefficients:
       
          a0 = a25 = a32 = 1,
          a9 = -1
       
       (See the example file "LEMNISCA.POV" for a more complete 
       example)
       
       A generalization of a piriform can be represented by the 
       equation:
          -b c^2 x^4 - a c^2 x^3 + y^2 + z^2 = 0
       where good start values are a = 4, b = -4, c = 1, giving the 
       coefficients
       
          a0 = 4,
          a3 = -4,
          a25 = a32 = 1
       
       (See the file "PIRIFORM.POV" for more on this...)
       
       There are really so many different quartic shapes, we can't 
       even begin to list or describe them all. If you are 
       interested and mathematically inclined, an excellent 

       
                                                  POV-Ray V1.0 Page  52
       
       
       reference book for curves and surfaces where you'll find 
       more quartic shape formulas is:
       
          "The CRC Handbook of Mathematical Curves and Surfaces"
          David von Seggern
          CRC Press
          1990
       
       Blob
       Syntax:
       blob {
          threshold #
          component (strength_val) (radius_val) <component center> 
       
          component (strength_val) (radius_val) <component center> 
       
          [any number of components]
          [sturm]
       }
       
       Blobs are an interesting shape type. Their components are 
       "flexible" spheres that attract or repel each other creating 
       a "blobby" organic looking shape. The spheres' surfaces 
       actually stretch out smoothly and connect, as if coated in 
       silly putty (honey? glop?) and pulled apart.
       
       Blobs can be used in CSG shapes and they can be scaled, 
       rotated and translated. They may contain any number of 
       components. Because the calculations for blobs need to be 
       highly accurate, sometimes they will not trace correctly. 
       Try using the "sturm" keyword for slower, more accurate 
       calculations if this happens.
       
       Component strength may be positive or negative. A positive 
       value will make that component attract other components. 
       Negative strength will make that component repel other 
       components. Components in different, separate blob shapes do 
       not affect each other.
       
       
       Blob example:
        blob {
             threshold 0.6
             component 1.0 1.0 <.75 0 0>
             component 1.0 1.0 <-.375  .64952 0>
             component 1.0 1.0 <-.375 -.64952 0>
             scale <2 2 2>
             sturm

       
                                                  POV-Ray V1.0 Page  53
       
       
        }
       
       
       
       How do blobs work?
       Picture each blob component as a point floating in space, 
       each point has a field around it that starts very strong at 
       the point and drops off to zero at some radius. POV-Ray 
       looks for the places that the strength of the field is 
       exactly the same as the "threshold" value that was 
       specified.
       
       If you have a single blob component then the surface you see 
       will look just like a sphere, with the radius of the surface 
       being somewhere inside the "radius" value you specified for 
       the component. The exact radius of this sphere-like surface 
       can be determined from the blob equation listed below (you 
       will probably never need to know this, blobs are more for 
       visual appeal than for exact modelling).
       
       If you have a number of blob components, then their fields 
       add together at every point in space - this means that if 
       the blob components are close together the resulting surface 
       will smoothly flow around the components.
       
       The various numbers that you specify in the blob declaration 
       interact in
       several ways.  The meaning of each can be roughly stated 
       as:
       
         Threshold:  
            This is the total density value that POV-Ray is looking 
            for. By following the ray out into space and looking at 
            how each blob component affects the ray, POV-Ray will 
            find the points in space where the density is equal to 
            the "threshold" value.
       
            1) "threshold" must be greater than 0. POV-Ray only 
            looks for positive densities.
            2) If "threshold" is greater than the strength of a 
            component, then the component will disappear.
            3) As "threshold" gets larger the surface you see gets 
            closer to the centers of the components.
            4) As "threshold" gets smaller, the surface you see 
            gets closer to the spheres at a distance of "radius" 
            from the centers of the components.
       
         Strength:

       
                                                  POV-Ray V1.0 Page  54
       
       
            Each component has a strength value - this defines the 
            density of the component at the center of the 
            component. Changing this value will usually have only a 
            subtle effect.
       
            1) "strength" may be positive or negative. Zero is a 
            bad value, as the net result is that no density was 
            added - you might just as well have not used this 
            component.
            
            2) If "strength" is positive, then POV-Ray will add its 
            density to the space around the center of the 
            component. If this adds enough density to be greater 
            than "threshold", you will see a surface.
       
            3) If "strength" is negative, then POV-Ray will 
            subtract its density from the space around the center 
            of the component. This will only do something if there 
            happen to be positive components nearby. What happens is 
            that the surface around any nearby positive components 
            will be dented away from the center of the negative component.
       
         Radius: 
            Each component has a radius of influence. The component 
            can only affect space within "radius" of its center. 
            This means that if all of the components are farther 
            than "radius" from each other, you will only see a 
            bunch of spheres.  If a component is within the radius 
            of another component, then the two components start to 
            affect each other. At first there is only a small bulge 
            outwards on each of the two components, as they get 
            closer they bulge more and more until they attach along 
            a smooth neck.  If the components are very close (i.e. 
            their centers are on top of each other), then you will 
            only see a sphere (this is just like having a component 
            of more strength. bigger than the size of each of the 
            component radii)
       
            1) "radius" must be bigger than 0.
            2) As "radius" increases the apparent size of the 
            component will increase.  
       
         Center:
            This is simply a point in space.  It defines the center 
            of a blob component.  By changing the x/y/z values of 
            the center you move the component around.

       
                                                  POV-Ray V1.0 Page  55
       
       
       
       
         The Formula
       For the more mathematically minded, here's the formula used 
       internally by POV-Ray to create blobs. You don't need to 
       understand this to use blobs. 
       
       The formula used for a single blob component is:
       
             density = strength * (1 - radius^2)^2
       
       This formula has the nice property that it is exactly equal 
       to strength" at the center of the component and drops off to 
       exactly 0 at a distance of "radius" from the center of the 
       component. The density formula for more than one blob 
       component is just the sum of the individual component 
       densities:
       
             density = density1 + density2 + ...
       
       
       Height Fields
       Syntax: 
          height_field { image_type "filename" [water_level #] }
       Examples: 
          height_field { gif "povmap.gif" water_level .1 }
          height_field { tga "sine.tga" }
          height_field { pot "fract003.pot" water_level .5 }
       
       Height fields are a very exciting feature that you may find 
       a little hard to understand at first. Read the explanation 
       below, and look in the example scene files for height field 
       examples. Once you begin to use them, they are much easier 
       to understand. Among other things, they allow you to create 
       fractal landscapes that rival the best computer graphics 
       you've ever seen.
       
       A height field is essentially a 1 unit wide by 1 unit long 
       box made up of many small triangles. The height of each 
       triangle making up the box is taken from the color number 
       (or palette index) of the pixels in a graphic image file. 
       
       The mesh of triangles corresponds directly to the pixels in 
       the image file. In fact, there are two small triangles for 
       every pixel in the image file. The Y (height) component of 
       the triangles is determined by the palette index number 
       stored at each location in the image file. The higher the 
       number, the higher the triangle. The maximum height of an 

       
                                                  POV-Ray V1.0 Page  56
       
       
       un-scaled height field is 1 unit.
       
       The higher the resolution of the image file used to create 
       the height field, the smoother the height field will look. A 
       640 X 480 GIF will create a smoother height field than a 320 
       x 200 GIF.
       
       The optional "water_level" parameter tells the program not 
       to look for the height field below that value. Default value 
       is 0, and legal values are between 0 and 1. For example, 
       "water_level .5" tells POV-Ray to only render the top half 
       of the height field. The other half is "below the water" and 
       couldn't be seen anyway. This term comes from the popular 
       use of height fields to render landscapes. A height field 
       would be used to create islands and another shape would be 
       used to simulate water around the islands. A large portion 
       of the height field would be obscured by the "water" so the 
       "water_level" parameter was introduced to allow the 
       ray-tracer to ignore the unseen parts of the height field. 
       Water_level is also used to "cut away" unwanted lower values 
       in a height field. For example, if you have an image of a 
       fractal on a solid colored background, where the background 
       color is palette entry 0, you can remove the background in 
       the height field by specifying, "water_level .001" 
       
       
       The image file used to create a height field can be a GIF, 
       TGA or POT format file. The GIF format is the only one that 
       can be created using a standard paint program.
       
       The size/resolution of the image does not affect the size of 
       the height field. The un-scaled height field size will 
       always be 1x1. Higher resolution image files will create 
       smaller triangles, not larger height fields.
       
       In a GIF file, the color number is the palette index at a 
       given point. Use a paint program to look at the palette of a 
       GIF image. The first color is palette index zero, the second 
       is index 1, the third is index 2, and so on. The last 
       palette entry is index 255. Portions of the image that use 
       low palette entries will be lower on the height field. 
       Portions of the image that use higher palette entries will 
       be higher on the height field. For example, an image that 
       was completely made up of entry 0 would be a flat 1x1 
       square. An image that was completely made up of entry 255 
       would be a 1x1x1 cube.
       

       
                                                  POV-Ray V1.0 Page  57
       
       
       The maximum number of colors in a GIF are 256, so a GIF 
       height field can have any number of triangles, but they will 
       only 256 different height values. 
       
       The color of the palette entry does not affect the height of 
       the pixel. Color entry 0 could be red, blue, black, or 
       orange, but the height of any pixel that uses color entry 0 
       will always be 0. Color entry 255 could be indigo, hot pink, 
       white, or sky blue, but the height of any pixel that uses 
       color entry 255 will always be 1.
       
       You can create height field GIF images with a paint program 
       or a fractal program like "Fractint".  If you have access to 
       an IBM-PC, you can get Fractint from most of the same 
       sources as POV-Ray.
       
       A POT file is essentially a GIF file with a 16 bit palette. 
       The maximum number of colors in a POT file is greater than 
       32,000. This means a POT height field can have over 32,000 
       possible height values. This makes it possible to have much 
       smoother height fields. Note that the maximum height of the 
       field is still 1 even though more intermediate values are 
       possible.
       
       At the time of this writing, the only program that created 
       POT files was a freeware IBM-PC program called Fractint. POT 
       files generated with this fractal program create fantastic 
       landscapes. If you have access to an IBM-PC, you can get 
       Fractint from most of the same sources as POV-Ray.
       
       The TGA file format is used as a storage device for numbers 
       rather than an image file. That is, you can't use a paint 
       program to create TGA height field files, and a scanned TGA 
       image will not make a nice smooth height field.
       
       The TGA format uses the red and green bytes of each pixel to 
       store the high and low bytes of a height value. TGA files 
       are as smooth as POT files, but they must be generated with 
       special custom-made programs. Currently, this format is for 
       programmers exclusively, though you should see TGA height 
       field generator programs arriving soon.
       There is example C source code included with the POV-Ray 
       source archive to create a TGA file for use with a height 
       field.
       
       
       Height fields may be rotated translated and scaled like any 

       
                                                  POV-Ray V1.0 Page  58
       
       
       other shape. Height fields cannot be used as true CSG 
       shapes, though they are allowed in CSG shapes. They can be 
       included in a CSG shape, but they will not be treated like 
       solid objects.
       
       Here are a few notes on height fields from their creator, 
       Doug Muir:
       
       The height field is mapped to the x-z plane, with its lower 
       left corner sitting at the origin. It extends to 1 in the 
       positive x direction and to 1 in the positive z direction. 
       It is maximum 1 unit high in the y direction. You can 
       translate it, scale it, and rotate it to your heart's 
       content. 
       
       When deciding on what water_level to use, remember, this 
       applies to the un-transformed height field. If you are a 
       Fractint user, the water_level should be used just like the 
       water_level parameter for 3d projections in Fractint.
       
       Here's a detailed explanation of how the ray-tracer creates 
       the height field. You can skip this if you aren't interested 
       in the technical side of ray-tracing. This information is not 
       needed to create or use height fields.
       
       To find an intersection with the height field, the raytracer 
       first checks to see if the ray intersects the box which 
       surrounds the height field. Before any transformations, this 
       box's two opposite vertexes are at (0, water_level, 0) and 
       (1, 1, 1). If the box is intersected, the raytracer figures 
       out where, and then follows the line from where the ray 
       enters the box to where it leaves the box, checking each 
       pixel it crosses for an intersection. 
       
       It checks the pixel by dividing it up into two triangles. 
       The height vertex of the triangle is determined by the color 
       index at the corresponding position in the GIF, POT, or TGA 
       file.
       
       If your file has a uses the color map randomly, your height 
       field is going to look pretty chaotic, with tall, thin 
       spikes shooting up all over the place. Not every GIF will 
       make a good height field.
       
       If you want to get an idea of what your height field will 
       look like, I recommend using the IBM-PC program Fractint's 

       
                                                  POV-Ray V1.0 Page  59
       
       
       3d projection features to do a sort of preview. If it 
       doesn't look good there, the raytracer isn't going to fix 
       it. For those of you who can't use Fractint, convert the 
       image palette to a gray scale from black at entry 0 to white 
       at entry 255 with smooth steps of gray in-between. The dark 
       parts will lower than the brighter parts, so you can get a 
       feel for how the image will look as a height field.
       
       Bezier/Bicubic Patches
       Syntax: 
       bicubic_patch { patch_type_# [flatness_#] u_ steps v_steps
             < Control point1>  < CP2>  <CP3>  < CP4>
             <CP5>  <CP6>   <CP7>   <CP8>
             <CP9>  <CP10>  <CP11>  <CP12>
             <CP13> <CP14>  <CP15>  <CP16>
       }
       
       Like triangles, the bicubic patch is not meant to be 
       generated by hand. These shapes should be created by a 
       special utility. You should be able to acquire utilities to 
       generate these shapes from the same source that you received 
       POV-Ray from. 
       
       A bezier or bicubic path is a 3D curved surface created from 
       a mesh of triangles. The number of triangles is u_steps * 
       v_steps. Since it's made from triangles it cannot be used as 
       a solid object in a CSG shape. It may be included in a CSG 
       shape, though. It can be scaled, rotated, translated like 
       any other shape. The 16 control points determine the shape 
       of the curve by "pulling" the curve in the direction of the 
       points. 
       
       Example:
       // Patch type 1 with 8 u steps and 8 v steps
         bicubic_patch { 1 8 8
            < 0  0  2>  < 1  0  0>  < 2  0  0>  < 3  0 -2>
            < 0  1  0>  < 1  1  0>  < 2  1  0>  < 3  1  0>
            < 0  2  0>  < 1  2  0>  < 2  2  0>  < 3  2  0>
            < 0  3  2>  < 1  3  0>  < 2  3  0>  < 3  3 -2>
       }
       
       Constructive Solid Geometry (CSG)
       
       This ray tracer supports Constructive Solid Geometry (also 
       called Boolean operations) in order to make the shape 
       definition abilities more powerful.
       
       The simple shapes used so far are nice, but not terribly 
       useful on their own for making realistic scenes. It's hard 
       to make interesting objects when you're limited to spheres, 

       
                                                  POV-Ray V1.0 Page  60
       
       
       boxes, infinite cylinders, infinite planes, and so forth. 
       
       Constructive Solid Geometry (CSG) is a technique for taking 
       these simple building blocks and combining them together. 
       You can use a cylinder to bore a hole through a sphere. You 
       can use planes to cap cylinders and turn them into flat 
       circular disks that are no longer infinite.
       
       Constructive Solid Geometry allows you to define shapes 
       which are the union, intersection, or difference of other 
       shapes.
       
       Unions superimpose two or more shapes. This has the same 
       effect as defining two or more separate objects, but is 
       simpler to create and/or manipulate.
       
       Intersections define the space where the two or more 
       surfaces meet.
       
       Differences allow you to cut one object out of another.
       
       CSG intersections, unions, and differences can consist of 
       two or more shapes. They are defined as follows:
       
       object {
          csg_shape_type {
             shape {...}
             shape {...}
             shape {...}
             (...)   
          }
          texture { ... }
       }
       
       CSG shapes may be used in CSG shapes. In fact, CSG shapes 
       may be used anyplace that a standard shape is used.
       
       The order of the shapes doesn't matter except for the 
       difference shapes. For CSG differences, the first shape is 
       visible and the remaining shapes are cut out of the first.
       
       Constructive solid geometry shapes may be translated, 
       rotated, or scaled in the same way as any shape. The shapes 
       making up the CSG shape may be individually translated, 
       rotated, and scaled as well.
       
       When using CSG, it is often useful to invert a shape so that 

       
                                                  POV-Ray V1.0 Page  61
       
       
       it's inside-out. The appearance of the shape is not changed, 
       just the way that POV-Ray perceives it. The inverse keyword 
       can be used to do this for any shape. When inverse is used, 
       the "inside" of the shape is flipped to become the 
       "outside". For planes, "inside" is defined to be "in the 
       opposite direction to the "normal" or "up" direction. 
       
       Note that performing an intersection between a shape and 
       some other inverse shapes is the same as performing a 
       difference. In fact, the difference is actually implemented 
       in this way in the code.
       
       Inside and outside
       Most shape primitives, like spheres, boxes, and blobs, 
       divide the world into two regions. One region is inside the 
       surface and one is outside.  (The exceptions to this rule 
       are triangles, height fields and bezier patches - we'll talk 
       about this later.)
       
       Given any point in space, you can say it's either inside or 
       outside any particular primitive object (well, it could be 
       exactly on the surface, but numerical inaccuracies will put 
       it to one side or the other). 
       
       Even planes have an inside and an outside. By definition, 
       the surface normal of the plane points towards the outside 
       of the plane. (For a simple floor, for example, the space 
       above the floor is "outside" and the space below the floor 
       is "inside". For simple floors this in un-important, but for 
       planes as parts of CSG's it becomes much more important).

       
                                                  POV-Ray V1.0 Page  62
       
       
       
       CSG uses the concepts of inside and outside to combine 
       shapes together. Take the following situation:
       
       Note: The diagrams shown here demonstrate the concepts in 2D 
       and are intended only as an analogy to the 3D case. 
       
       Note that the triangles and triangle-based shapes cannot be 
       used as solid objects in CSG since they have no clear inside 
       and outside.
       
       
         * = Shape A
         % = Shape B
       
                            *  0
                           * *    %
                          *   *  % %
                         *     *%   %
                        *  1   %*    %
                       *      %  * 2  %
                      *      % 3  *    %
                     *******%*******    %
                           %             %
                          %%%%%%%%%%%%%%%%%
       
       

       
                                                  POV-Ray V1.0 Page  63
       
       
       
       There are three CSG operations you can use, union, 
       intersection, and difference:
       
       union  { A B }
       A point is inside the union if it is inside A OR it's inside 
       B (or both). This gives an "additive" effect to the 
       component objects: 
       
                            *
                           * *    %
                          *   *  % %
                         *     *%   %
                        *  1       2 %
                       *       3      %
                      *                %
                     *******%           %
                           %             %
                          %%%%%%%%%%%%%%%%%
       
       
       
       intersection { A B }
       A point is inside the intersection if it's inside both A AND 
       B. This "logical AND's" the shapes and gets the common part, 
       most useful for "clipping" infinite shapes off, etc: 
       
       
                               %*
                              %  *
                             % 3  *
                            %*******
       
       
       difference { A B  }
       A point is inside the difference if it's inside A but not 
       inside B. The results is a "subtraction" of the 2nd shape 
       from the first shape: 
       
                            *
                           * *
                          *   *
                         *     *
                        *  1   %
                       *      %
                      *      %
                     *******%
       
       
       Let's give a concrete example by drilling a yellow hole 

       
                                                  POV-Ray V1.0 Page  64
       
       
       through our sphere. Go to the definition of the sphere in 
       PICTURE1.POV and change it to read the following: 
       
       object {
         difference {
           sphere { <0 1 3> 1 }
           quadric { 
             Cylinder_Z 
             scale <.2 .2 1>
             translate <0 1 0>
             texture { color Yellow }
           }
         }
            texture {
             DMFWood1
             scale <2 2 1>
             phong 1
           }
       }
       
       
       Inverse
       You can flip a shape "inside-out" by putting the keyword 
       inverse into the shape's definition. This keyword will not 
       change the appearance of the shape unless you're using CSG. 
       In the case of CSG, it gives you more flexibility. For 
       example:
       
          intersection { B {A inverse}  }
       
                          
                                  %
                                 % %
                                %   %
                                *    %
                                 * 2  %
                                  *    %
                            %*******    %
                           %             %
                          %%%%%%%%%%%%%%%%%
       
       Note: A difference is really just an intersection of one 
       shape with the inverse of another. This happens to be how 
       difference is actually implemented in the code. 
       

       
                                                  POV-Ray V1.0 Page  65
       
       
       
       
       Composite Objects
       
       Often it's useful to combine several objects together to act 
       as a whole. A car, for example, consists of wheels, doors, a 
       roof, etc. A composite object allows you to combine all of 
       these pieces into one object. This has two advantages. It 
       makes it easier to move the object as a whole and it allows 
       you to speed up the ray tracing by defining bounding shapes 
       that contain the objects. (Rays are first tested to see if 
       they intersect the bounding shape. If not, the entire 
       composite object is ignored). Composite objects are defined 
       as follows: 
       
       composite {
         object {...}
         object {...}
         object {...}
         (...)
         [transformations]
       }
       
       Composite objects can contain other composite objects as 
       well as regular objects. 
       
       NOTE: Each object in a composite object may have its own 
       texture, but the composite object may not have a texture. 
       
       NOTE: Composite objects may only be used in other composite 
       objects, not in normal objects or shapes.
       
       NOTE: Composite objects can not be used in CSG shapes. CSG 
       shapes must be in an object to be used in a composite.
       
       For example,
       
       composite { // This is legal
          object { union  {...} }
          object { sphere {...} }
          object { intersection  {...} }
       }
       
       composite { // This is legal
          object { union  {...} texture {...} }
          object { sphere {...} texture {...} }
          object { intersection  {...} texture {...} }
       }
       

       
                                                  POV-Ray V1.0 Page  66
       
       
       composite { // This is NOT legal
          object { union  {...}}
          object { sphere {...}}
          object { intersection  {...}}
          texture {...} // Texture is NOT legal in composite
       }
       
       composite { // This is NOT legal
           union {...} // Shapes not in objects are 
                       // not legal in composites
           sphere {...}
       }
       
       object { // This is NOT legal
          composite { ... } // Composites are not 
                            // allowed in objects
       }
       
       object { // This is NOT legal
          union {
            composite { ... } // Composites are not
                              // allowed in CSG shape types
          }
       }
       
       
       Example:
       #declare Abstract = 
       composite {
          object { sphere { <0 0 0> 1 } texture {color Red} }
          object { sphere { <0 1 0> 1 } texture {color Yellow} }
          composite { // This is a composite in a composite
              object { 
                 box { <2 2 2> <3 3 3> } 
                 texture {color Green} 
              }
              object {
                 box { <-3 -3 -3> <-2 -2 -2> }
                 texture {color Blue} 
              }
          }
          object { 
             quadric { Ellipsoid } 
             texture { PinkAlabaster }
             scale <3 1 3> 
             translate <0 4 0> 
           }

       
                                                  POV-Ray V1.0 Page  67
       
       
       }
       composite { Abstract translate <0 5 10> }
       
       
       Bounding Shapes
       
       NOTE: Efficient use of bounding shapes are the best way to 
       speed up the rendering of your scenes.
       
       If you use bounding shapes around any complex objects you 
       can speed up the rendering. Bounding shapes tell the ray 
       tracer that the object is totally enclosed by a simple 
       shape. When tracing rays, the ray is first tested against 
       the simple bounding shape. 
       If it strikes the bounding shape, then the ray is further 
       tested against the more complicated object inside. Otherwise 
       the entire complex shape is skipped, which greatly speeds 
       rendering.
       
       To use bounding shapes, simply include the following lines 
       in the declaration of your object or composite_ object:
       
            bounded_by {
                 shape { ... }
            }
       
       An example of a Bounding Shape:
       
             object {
                 intersection {
                      sphere <0.0 0.0 0.0> 2.0 }
                      plane <0.0 1.0 0.0> 0.0 }
                      plane <1.0 0.0 0.0> 0.0 }
                 }
                 bounded_by {
                      sphere <0.0 0.0 0.0> 2.0 }
                 }
            }
       
       The best bounding shape is a sphere or a box since these 
       shapes are highly optimized, although, any shape may be 
       used, including CSG shapes.
       
       Note that if bounding shape is too small or positioned 
       incorrectly, it may clip the object in undefined ways or the 
       object may not appear at all.  To do true clipping, use 
       Clipping Shapes below.
       
       Clipping Shapes
       
       A clipping shape is used to "cut off" part of an object. 

       
                                                  POV-Ray V1.0 Page  68
       
       
       
       For example:
       
            object {
                 sphere {<0 1 3> 1}
                 clipped_by {
                       sphere { <.5 1 2> 1 } 
                 }
            }
       
       You can use any kind of shape including CSG shapes to clip 
       an object.
       

       
                                                  POV-Ray V1.0 Page  69
       
       
       
       
       Textures
       
       Textures are the materials that the shapes and objects in 
       POV-Ray are made out of. They specifically describe the 
       surface coloring, shading, and properties like transparency 
       and reflection.
       
       You can create your own textures using the parameters 
       described below, or you can use the many pre-defined high 
       quality textures that have been provided in the files 
       TEXTURES.INC and STONES.INC. See TEXTURES.DOC for more info 
       on using these predefined materials.
       
       The textures, or materials, in POV-Ray are generally made up 
       of three portions, a color pattern, a bump pattern, and 
       surface properties. 
       
       Color Pattern
       A color pattern is where two or more colors are used to 
       create a three-dimensional pattern or design. There are many 
       built-in color patterns in POV-Ray ranging from checker, to 
       marble, to wood, to agate.
       
       For example, a checker pattern is just alternating color 
       blocks stacked on and next to each other. The marble color 
       pattern is vertical bands of colors placed next to each 
       other. The wood color pattern is cylindrical bands of color 
       like the rings of a tree, and so on.
       
       These patterns are all generated from mathematical formulas 
       and are very regular unless they are "stirred up" using the 
       turbulence parameter which is described below.
       
       The individual colors in a color pattern can be made 
       partially or completely transparent by specifying the alpha 
       color component. See the color description for more info. 
       
       The names of the patterns are only suggestions for their 
       use. Don't let those names limit you, by using different 
       colors and turbulence values, nearly infinite permutations 
       of these patterns are possible.
       
       The colors in a color pattern are usually defined in a 
       "color_map". Color maps are described below.
       
       A shape may also have a solid color instead of a color 
       pattern. This is specified by describing one color instead 
       of a color pattern type. This color may also be made 

       
                                                  POV-Ray V1.0 Page  70
       
       
       transparent by specifying the alpha component of the color.
       
       Transformations like scale, rotate, and translate will 
       affect the color pattern and bump pattern in a texture in 
       the same way. It is not currently possible to specify 
       different transformation values for the color and bump 
       patterns in the same texture.
       
       Bump Patterns
       A bump pattern makes a surface look "bumpy" without actually 
       changing the form of the shape. The bump pattern modifies 
       the way the surface reflects light so that it is shaded and 
       highlighted just like it were bumpy, but the ray-tracer 
       saves time by doing most calculations as if it were a smooth 
       shape. 
       
       A true "bumpy" shape is very complex and time consuming to 
       render. By using bump patterns you can create the appearance 
       of dents, bumps, and ripples without the penalty of 
       rendering a highly complex shape.
       
       Some bump patterns are ripples, dents, bumps, wrinkles and 
       waves. These patterns can produce very realistic looking 
       surface variations. They can be combined with color patterns 
       for more variation. If no bump pattern is specified then the 
       texture is treated as being smooth.
       
       Normally, the bump amount is kept small to enhance realism. 
       Since the bump pattern only changes the shading, the 
       silhouette of a shape is left unchanged. A bumpy sphere will 
       still have a perfectly round edge, even though its surface 
       looks very convincingly bumpy.
       
       The bump pattern never changes the colors on a shape, only 
       the shading. Bump patterns, like color patterns, are three 
       dimensional. Turbulence does not affect bump patterns.
       
       Transformations like scale, rotate, and translate will 
       affect the color pattern and bump pattern in a texture in 
       the same way. It is not currently possible to specify 
       different transformation values for the color and bump 
       patterns in the same texture.
       
       Surface Properties
       Surface properties are the miscellaneous parameters which 
       describe whether a shape is reflective, shiny, refractive, 
       and so on. 
       

       
                                                  POV-Ray V1.0 Page  71
       
       
       Some examples of surface properties are:
         phong #       -- Make surface shiny by adding highlights
         phong_size #  -- Change the size of the highlight on
                          surface
         reflection #  -- Make surface reflect the scene around it
         
       
       Texture Syntax
       The basic texture syntax is as follows:
       
        texture {
           (random dither #)
           (color_pattern_type) or (color red # green # blue #)
           (bump_pattern_type (bump_amount))
           [texture modifiers]
           [texture transformations]
        }
       
       For example:
       
        texture {
           0.05 // Random dither is not recommended
           wood
           turbulence 0.2
           phong 1   
           scale < 10.0 10.0 10.0 >
           translate < 1.0 2.0 3.0 >
           rotate < 0.0 10.0 40.0 >
       }
       
       Transformations, like translate, rotate, and scale, are 
       optional. They allow you to transform the texture 
       independent of the shape's or object's transformations. IE. 
       The texture may be in a different "location" than the shape, 
       or be a different size than the shape.
       
       Any parameter that changes the appearance of the surface 
       must be put into a texture block. Outside of the texture 
       block, the texture parameters will cause an error message to 
       be generated.
       
       
       Textures and Animation
       If you are doing animation, you should specify all object 
       transformations after the texture transformations so the 
       texture "follows" or "sticks to" the object through 3-D 
       space. For example,
       
       object {

       
                                                  POV-Ray V1.0 Page  72
       
       
          shape {}   // Shape description
          texture {} // Texture description
          scale     // transform after shape & texture
          rotate    // transform after shape & texture
          translate // transform after shape & texture
       }
       
       As in:
       
       object{
          box {<-1 -1 -1> <1 1 1>} // Box shape centered on zero
          texture { 
             agate
             phong 1
             scale <1.3 2 1.3> // scale texture to the 
                               // untransformed shape
             rotate <30 0 0>   // rotate texture to the 
                               // untransformed shape 
          }
          scale <3 3 3> // scale *both* sphere & texture
          rotate <0 40 0> // rotate *both* sphere & texture
          translate <1 5 5> // Move box & texture to final 
                            // position
       }
       
       If the transformations are done after the shape and before 
       the texture, the texture will not "stick to" the shape. In 
       an animation, this will look like the texture is constantly 
       moving on the moving shape. What is actually happening is 
       that the shape is moving and the texture is not, so the 
       texture on the shape changes whenever the shape is scaled, 
       rotated, or translated. This can be an interesting effect, 
       but is not desirable for most animations.
       
         Random Dither
       The floating-point value given immediately following the 
       texture keyword is an optional "texture randomness" value, 
       which causes a minor random scattering of calculated color 
       values and produces a sort of "dithered" appearance. This is 
       used by artists to minimize banding and to provide a more 
       chaotic, uneven look to a texture. Values are generally kept 
       quite small, like .05. This feature is different from 
       turbulence in that textures using it will look slightly 
       different each time they are rendered.
       
       NOTE: This should not be used when rendering animations. 
       This is the only truly random feature in POV-Ray, and will 

       
                                                  POV-Ray V1.0 Page  73
       
       
       produce an annoying flicker of flying pixels on any textures 
       animated with a "randomness" value used.
       
         Layered Textures
       It is possible to create layered textures. A Layered texture 
       is one where several textures that are partially transparent 
       are laid one on top of the other to create a more complex 
       texture. The different texture layers show through the 
       transparent portions to create the appearance of one 
       textures that is a combination of several textures.
       
       You create layered textures by listing two or more textures 
       one right after the other. The last texture listed will be 
       the top layer, the first one listed will be the bottom 
       layer. All textures in a layered texture other than the 
       bottom layer should have some transparency.
       
       More about Textures
       
       The textures available in POV-Ray are 3D solid textures. 
       This means that the texture defines a color for any 3D point 
       in space. Just like a real block of marble or wood, there is 
       color all through the block - you just can't see it until 
       you carve away the wood or marble that's in the way. 
       Similarly, with a 3D solid texture, you don't see all the 
       colors in the texture - you only see the colors that happen 
       to be visible at the surface of the object.
       
       As you've already seen, you can scale, translate, and rotate 
       textures. In fact, you could make an animation in which the 
       objects stay still and the textures translate and rotate 
       through the object. The effect would be like watching a 
       time-lapse film of a cloudy sky - the clouds would not only 
       move, but they would also change shape smoothly. 
       
       Turbulence or Noise
       Often, textures are perturbed by noise. This "turbulence" 
       distorts the texture so it doesn't look quite so perfect. 
       Try changing the sphere in the above example to have the 
       following texture: 
       
       texture {
         DMFWood1
         turbulence 0.0
         scale <0.2 0.2 1.0>
         phong 1.0
         }
       
       When you compare this with the original image, you'll see 
       that the grain is very regular and the pattern is much less 

       
                                                  POV-Ray V1.0 Page  74
       
       
       interesting. Turbulence can be any value, though it usually 
       ranges from 0-1.
       
       Color Maps
       Most color patterns use color maps. A color map translates a 
       number between 0.0 and 1.0 into a color. The number 
       typically represents the distance into a vein of color - the 
       further into the vein you get, the more the color changes. 
       Color patterns actually generate patterns of numbers between 
       0 and 1 for each point in space. When the ray tracer request 
       the color from the color pattern for a specific point, the 
       color pattern calculates what number between 0-1 is at that 
       point and then sends that number to the color map. The color 
       map looks to see if there is a color defined for that 
       number, if there isn't, it figures out an in-between color 
       from the colors that were defined. It returns that number to 
       the color pattern and that's the color that ends up on the 
       object. Since the color map makes these "in-between" colors, 
       you can create color maps with smooth bands of many color 
       shades by defining only a few colors.
       
       Here's a simple color map. Try it out on the sphere defined 
       above by changing the definition to this:
       
       object {
         sphere {<0 1 3> 1 }
         texture {
           wood  // This is the color pattern
           scale <.2 .2 1>
           color_map{ // This is where the pattern gets its colors
             [ 0  .3  color Red   color Green]
             [.3  .6  color Green color Blue]
             [.6   1  color Blue  color Red]
             }
           phong 1
           }
       }
       
       This means that as the texture enters into a vein of wood, 
       it changes color smoothly from red to green, from green to 
       blue, and from blue to red again. As it leaves the vein, the 
       transition occurs in reverse. (Since there is no turbulence 
       on the wood by default, the veins of color show up quite 
       well.) 
       
       Alpha
       You can get more "bang for your buck" from textures by using 
       alpha properties of color. Every color you define in POV-Ray 
       is a combination of red, green, blue and alpha. The red, green 
       and blue are simple enough. The alpha determines 
       how transparent that color is. A color with an alpha of 1.0 
       is totally transparent to that color of light. It filters 
       the light. A color with an alpha of 0.0 is totally opaque to 
       all light.
       
       Here's a neat texture to try: 
       
       texture {
         turbulence .5
         bozo
         color_map {
           // transparent to transparent 
           [ 0 .6  color red 1 green 1 blue 1 alpha 1  

       
                                                  POV-Ray V1.0 Page  75
       
       
                   color red 1 green 1 blue 1 alpha 1]
           // transparent to white 
           [.6 .8  color red 1 green 1 blue 1 alpha 1  
                   color red 1 green 1 blue 1]
           // white to grey 
           [.8 1  color red 1 green 1 blue 1
                  color red 0.8 green 0.8 blue 0.8]
           }
       scale <.4  .08  .4>
       }
       
       This is David Buck's famous cloud texture. It creates white 
       clouds with grey linings. The texture is transparent in the 
       places where the clouds disappear so you can see through it 
       to the objects that are behind.
       
       Note that light is filtered through alpha colors. Red can't 
       pass through a blue filter no matter how high the alpha 
       value. Green can't get through a completely blue filter and 
       so on. To make a completely clear color that all light can 
       pass through, use color red 1 green 1 blue 1 alpha 1. This 
       is defined in COLORS.INC as Clear.
       
       Layering Textures
       You can layer textures one on top of another to create more 
       sophisticated textures. For example, suppose you want a 
       wood-colored cloudy texture. What you do is put the wood 
       texture down first followed by the cloud texture. Wherever 
       the cloud texture is transparent, the wood texture shows 
       through. Change your sphere to the following and you'll see. 
       
       
       object {
         sphere <0 1 3> 1 }

       
                                                  POV-Ray V1.0 Page  76
       
       
         texture{  //This is the wood texture we used earlier.
           DMFWood1
           scale <.2 .2 1>
           phong 1
           }
         texture {
           turbulence .5
           bozo
           color_map {
             // transparent to transparent 
             [ 0 .6  color red 1 green 1 blue 1 alpha 1  
                     color red 1 green 1 blue 1 alpha 1]
             // transparent to white 
             [.6 .8  color red 1 green 1 blue 1 alpha 1  
                     color red 1 green 1 blue 1]
             // white to grey 
             [.8 1  color red 1 green 1 blue 1
                    color red 0.8 green 0.8 blue 0.8]
             }
           scale <.4  .08  .4>
         }
       }
       
       Each successive texture is layered on top of the previous 
       textures. In the places where you can see through the upper 
       texture, you see through to the lower textures.

       
                                                  POV-Ray V1.0 Page  77
       
       
       
       
       Texture Surface Properties
       
       
       Color
       A color consists of a red component, a green component, a 
       blue component, and possibly an alpha component. All four 
       components are numbers in the range 0.0 to 1.0. 
       
       The syntax for colors is the word "color" followed by any or 
       all of the red, green, blue or alpha components in any 
       order. If a parameter is not specified it is assumed to be 
       0. For example:
       
         color  red 1.0  green 1.0  blue 1.0
         color  blue 0.56
         color  green 0.45 red 0.3 blue 0.1 alpha 0.3
       
       Alpha is a transparency indicator. If an object's color 
       contains some transparency, then you can see through it. If 
       Alpha is 0.0, the object is totally opaque. If it is 1.0, it 
       is totally transparent. Note that light is filtered, so 
       color red 0 green 0 blue 0 alpha 1 is totally black and 
       non-transparent. Color red 1 green 1 blue 1 alpha 1 is 
       totally clear. Color red 1 alpha 1 filters out all but red 
       light.
       
       The Canadian spelling colour may be used in place of color.
       
       ambient value
       In real life, ambient light is light that is scattered 
       everywhere in the room. It bounces all over the place and 
       manages to light objects up a bit even where no light is 
       directly shining.
       
       Computing real ambient light would take far too much time, 
       so we simulate ambient light by adding a small amount of 
       white light to each texture whether or not a light is 
       actually shining on that texture.
       
       This means that the portions of a shape that are completely 
       in shadow will still have a little bit of their surface 
       color. It's almost as if the texture glows, though the 
       ambient light in a texture only affects the shape it is used 
       on.   
       
       The default value is very little ambient light (0.1). The 
       value can range from 0.0 to 1.0. Higher ambient values in a 
       texture will make a shape using that texture look flat and 
       plastic.

       
                                                  POV-Ray V1.0 Page  78
       
       
       
       diffuse value
       
       The diffuse value specifies how much the texture will react 
       to light directly shining on it. High values of diffuse 
       (.7-.9) make the colors in a texture very bright, lower 
       values (.1-.4) will make the colors in the texture seem more 
       subdued. The default value for diffuse is .6. The value can 
       range from 0.0 to 1.0. Diffuse does not affect the 
       highlights or shadowed portions of the texture.
       
       brilliance value
       Objects can be made to appear more metallic by increasing 
       their brilliance. This controls the tightness of the basic 
       diffuse illumination on objects and minorly adjusts the 
       appearance of surface shininess. The default value is 1.0. 
       Higher values from 3.0 to about 10.0 can give objects a 
       somewhat more shiny or metallic appearance. There are no 
       limits to the brilliance value. Experiment to see what works 
       best for a particular situation. This is best used in 
       concert with either the specular or phong highlighting.
       
       reflection value
       By setting the reflection value to be non-zero, you can give 
       the object a mirrored finish. It will reflect all other 
       elements in the scene.
       
       The value can range from 0.0 to 1.0. By default there is no 
       reflection.
       
       Reflection is one of the strongest features of ray tracing. 
       Try making the sphere in PICTURE1.POV mirrored by adding 
       reflection 1.0 to its texture. 
       
       Note: Adding reflection to a texture makes it take much 
       longer to render.
       
       refraction value
       Example:
         texture {
           color White alpha .9
           refraction 1
           ior 1.5
           phong 1
         }
       The refraction value attenuates the color of the refracted 
       light through a transparent texture. Lower values of 
       refraction will make the transparent portion less 
       transparent. Higher values will make the transparent portion 
       more transparent. This value is usually 1 and transparency 
       amounts are controlled with the alpha in a color. Legal 

       
                                                  POV-Ray V1.0 Page  79
       
       
       values for refraction are from 0-1. By default there is no 
       refraction. If there is no alpha in a color, then it will 
       not be transparent.
       
       The ior value, described below, is used in conjunction with 
       refraction and alpha to create textures that bend light 
       passing through them. This is used to simulate glass, water, 
       diamonds, etc.
       
       Use "refraction 1" and an ior value with a transparent 
       texture when you want to create a texture that bends light 
       like water and glass do.
       
       NOTE: In layered textures, the refraction and ior keywords 
       MUST be in the last texture, otherwise they will not take 
       effect.
       
       NOTE: If a texture has an alpha component and no value for 
       refraction and ior are supplied, the renderer will simply 
       transmit the ray through the surface with no bending. 
       
       ior value
       Example:
         texture {
           color red .5 green .7 blue 1 alpha .9
           refraction 1
           ior 1.33
           phong 1
         }
       
       The ior or Index of Refraction determines how dense a 
       transparent texture is or how far the light will bend as it 
       passes through the texture. 
       
       For ior to have an affect, the texture must have some 
       transparent colors that use alpha and the refraction value 
       should be set to 1.
       
       A value of 1.0 will give no refraction. The Index of 
       Refraction for air is 1.0, water is 1.33, glass is 1.5, and 
       diamond is 2.4. The file IOR.INC pre-defines several useful 
       values for ior.
       
       phong value
       Controls the amount of Phong specular reflection 
       highlighting on the texture. Causes bright shiny spots on 
       the element that are the color of the light source being 
       reflected.
       

       
                                                  POV-Ray V1.0 Page  80
       
       
       Phong highlighting is simulating the fact that slightly 
       reflective objects, especially metallic ones, have 
       microscopic facets, some of which are facing in the mirror 
       direction. The more that are facing that way, the shinier 
       the object appears, and the tighter the specular highlights 
       become. Phong measures the average of facets facing in the 
       mirror direction from the light sources to the viewer. 
       
       Phong's value is typically from 0.0 to 1.0, where 1.0 causes 
       complete saturation of the object's color to the light source's color at the 
       brightest area (center) of the highlight. There is no phong 
       highlighting given by default. 
       
       The size of the highlight spot is defined by the phong_size 
       value described below.
       
       phong_size value
       Controls the size of the phong Highlight on the object, sort 
       of an arbitrary "glossiness" factor. Think of it as a 
       "tightness" value. The larger the phong_size, the tighter, 
       or smaller, the highlight. The smaller the phong_size, the 
       looser, or larger, the highlight.
       
       Typical values range from 1.0 (Very Dull) to 250 (Highly 
       Polished) though any values may be used. Default phong_size 
       is 40 (plastic) if phong_size is not specified.
       
       specular value
       Very similar to Phong specular highlighting, but a different 
       model is used for determining light ray/object intersection, 
       so a more credible spreading of the highlights occur near 
       the object horizons, supposedly. 
       
       Specular's value is typically from 0.0 to 1.0, where 1.0 
       causes complete saturation of the object's color to the 
       light source's color at the brightest area (center) of the 
       highlight. There is no specular highlighting given by 
       default. 
       
       The size of the spot is defined by the value given for 
       roughness, described below.
       
       Note that Specular and Phong highlights are NOT mutually 
       exclusive. It is possible to specify both and they will both 
       take effect. Normally, however, you will only specify one or 
       the other.
       
       roughness value
       Controls the size of the specular Highlight on the object, 

       
                                                  POV-Ray V1.0 Page  81
       
       
       relative to the object's "roughness". Typical values range 
       from 1.0 (Very Rough -- large highlight) to 0.0005 (Very 
       Smooth -- small highlight). The default value, if roughness 
       is not specified, is 0.05 (Plastic).
       
       It is possible to specify "wrong" values for roughness that 
       will generate an error when you try to render the file. 
       Don't use 0 and if you get errors, check to see if you are 
       using a very, very small roughness value that may be causing 
       the error.
       
       
       metallic
       This keyword indicates that the color of the specular and 
       phong highlights will be the surface color instead of the 
       light_source color. This creates a metallic appearance. See 
       the Metal texture in the TEXTURES.INC file for an example of 
       metallic.
       

       
                                                  POV-Ray V1.0 Page  82
       
       
       
       
       Color Pattern Texture Types
       
       Before the color patterns are listed, here is a description 
       of color maps which are essential to color patterns.
       
       Color Maps
       For wood, marble, spotted, agate, granite, gradient and other color 
       patterns, you may specify a set of colors to use for the 
       pattern. This is done by a color map or "color spline".
       
       When the object is being textured, a number between 0.0 and 
       1.0 is generated which is then used to form the color of the 
       point. A color map specifies the mapping used to change 
       these numbers into colors. The syntax is as follows:
       
       color_map {
         [start_value end_value color1 color2]
         [start_value end_value color1 color2]
         [start_value end_value color1 color2]
          ... 
         }
       
       For example,
       
       color_map {
         [ 0 .3 color Red    color Yellow]
         [.3 .6 color Yellow color Blue]
         [.6  1 color Green  color Clear]
         }
       
       
       The numeric value between 0.0 and 1.0 is located in the 
       color map and the final color is calculated by a linear 
       interpolation (a smooth blending) between the two colors in 
       the located range. 
       
       The easiest way to see how it works is to try it. With a 
       good choice of colors the bozo color pattern produces some 
       of the most realistic looking cloudscapes you've ever seen 
       indoors! Try a cloud color map such as:
       
       texture {
          bozo
          turbulence 1  // A blustery day. 
                        // For a calmer one, try 0.2 
          color_map {
             [ 0 .5 color red .5 green .5 blue  1  // blue to blue
                    color red .5 green .5 blue  1]

       
                                                  POV-Ray V1.0 Page  83
       
       
             [.5 .6 color red .5 green .5 blue  1  // blue to 
       white
                    color red  1 green  1 blue  1]
             [.6  1 color red  1 green  1 blue  1 // white to grey}
                    color red .5 green .5 blue .5]
           }
       }
       
       The color map above indicates that for small values of the 
       pattern, use a sky blue color solidly until about halfway 
       turbulent, then fade through to white on a fairly narrow 
       range. As the white clouds get more turbulent and solid 
       towards the center, pull the color map toward grey to give 
       them the appearance of holding water vapor (like typical 
       clouds). 
       
       Don't let yourself be limited by the color pattern names, 
       try different color schemes on them and see what you can 
       come up with.
       
               ---------------------------------------------
       
       The following color patterns are available. They may be 
       scaled, rotated and translated. They may be applied to any 
       shape or object. Turbulence may be used except where noted.
       
       
       checker - Color Pattern.
       Syntax: 
         checker color red # green # blue # color red # green # 
       blue #
       Example: 
         checker color Red color Yellow
       
       checker pattern gives a checker-board appearance. This 
       option works best on planes. When using the checker 
       texturing, you must specify two colors immediately following 
       the word checker. These colors are the colors of alternate 
       squares in the checker pattern. This is a ray tracing 
       classic and cliche.
       
       bozo - Color Pattern.
       Syntax: 
         bozo color_map {...} 
       
       The bozo color pattern basically takes a noise function and 
       maps it onto the surface of an object. This "noise" is 
       well-defined for every point in space. If two points are 
       close together, they will have noise values that are close 

       
                                                  POV-Ray V1.0 Page  84
       
       
       together. If they are far apart, their noise values will be 
       fairly random relative to each other. 
       
       
       spotted - Color Pattern.
       Syntax: 
         spotted color_map {...} 
       
       Spotted pattern is a sort of swirled random spotting of the 
       color of the object. If you've ever seen a metal organ pipe 
       up close you know about what it looks like (a galvanized 
       garbage can is close...) Play with this one, it might render 
       a decent cloudscape during a very stormy day. No extra 
       keywords are required. With small scaling values, looks like 
       masonry or concrete. 
       
       marble - Color Pattern.
       Syntax: 
         marble color_map {...} 
       
       Marble uses the color map to create parallel bands of color. 
       Add turbulence to make it look more like marble, jade or 
       other types of stone. By default, marble has no turbulence.
       
       wood - Color Pattern.
       Syntax: 
         wood color_map {...} 
       
       Wood uses the color map to create concentric cylindrical 
       bands of color centered on the Z axis. Add small amounts of 
       turbulence to make it look more like real wood. By default, 
       wood has no turbulence.
       
       agate - Color Pattern.
       Syntax: 
         agate color_map {...}
       
       This pattern is very beautiful and similar to marble, but uses 
       a different turbulence function. The turbulence 
       keyword has no effect, and as such it is always very 
       turbulent. 
       
       gradient - Color Pattern.
       Syntax: 
         gradient <axis_vector> color_map {...}
       
       This is a specialized pattern that uses approximate local 
       coordinates of an object to control color map gradients. 
       This texture does not have a default color_map, so one must 
       be specified. 
       
       It has a special <X Y Z> triple called the axis vector given 
       after the gradient keyword, which specifies any (or all) 

       
                                                  POV-Ray V1.0 Page  85
       
       
       axes to perform the gradient action on. 
       
       Example: a Y gradient <0.0 1.0 0.0> will give an "altitude 
       color map", along the Y axis. 
       
       In the axis vector, values given other than 0.0 are taken as 
       1.0. 
       
       For smooth repeating gradients, you should use a "circular" 
       color map, that is, one in which the first color value (0.0) 
       is the same as the last one (1) so that it "wraps around" 
       and will cause smooth repeating gradient patterns. 
       
       Scaling the texture is normally required to achieve the 
       number of repeating shade cycles you want. 
       
       Transformation of the texture is useful to prevent a 
       "mirroring" effect from either side of the central 0 axes.
       
       Here is an example of a gradient texture which uses a sharp 
       "circular" color mapped gradient rather than a smooth one, 
       and uses both X and Y gradients to get a diagonally-oriented 
       gradient. It produces a dandy candy cane texture! 
       
         texture {
           gradient < 1.0 1.0 0.0 >
           color_map {
             [  0 .25  color red 1 green 0 blue 0
                       color red 1 green 0 blue 0]
             [.25 .75  color red 1 green 1 blue 1
                       color red 1 green 1 blue 1]
             [.75   1  color red 1 green 0 blue 0
                       color red 1 green 0 blue 0]
           }
           scale <30 30 30>
           translate <30 -30 0>
        }
       
       You may also specify a turbulence value with the gradient to 
       give a more irregular color gradient. This may help to 
       simulate things like fire or corona effects. By default, 
       gradient has no turbulence.
       
       granite - Color Pattern.
       Syntax: granite color_map {...}
       
       This pattern uses a simple 1/f fractal noise function to 

       
                                                  POV-Ray V1.0 Page  86
       
       
       give a pretty darn good granite pattern. Typically used with 
       small scaling values (2.0 to 5.0).  This pattern is used 
       with creative color maps in STONES.INC to create some 
       gorgeous layered stone textures. By default, granite has no 
       turbulence.
       
       onion - Color Pattern.
       Syntax: onion color_map {...}
       
       onion is a pattern of concentric spheres. By default, onion 
       has no turbulence.
       
       leopard - Color Pattern.
       Syntax: leopard color_map {...}
       
       leopard creates a pattern from stacked spheres. The color of 
       the spheres and the colors in between them is taken from the 
       color map. Turbulence works very effectively with this 
       texture. By default, leopard has no turbulence.
       
       
       tiles - A texture pattern
       This isn't exactly a color pattern, but this is the best 
       place for it at the moment.
       We've had many requests for a checker pattern to allow you 
       to alternate between wood and marble or any other two textures. 
       So, we've added a texture called tiles that takes two textures 
       and tiles them instead of two colors.
       
       In order to support layered textures in the future, the 
       syntax is a bit more verbose than it would be otherwise. The 
       syntax is:
       
       texture{
         tiles {
           texture {... put in a texture here ... }       
           texture {... add optional layers on top of that one ...}
         tile2
           texture {... this is the second tile texture } 
           texture  {... a texture layered on top of the 2nd tile}
         }   
       }
       
       Example:
       
           texture{
              tiles {
                 texture { Jade }
              tile2
                 texture { Red_Marble }

       
                                                  POV-Ray V1.0 Page  87
       
       
               }   
           }
       
       
       Note that the textures in tiles only use the surface 
       coloring texture information. Information about ambient, 
       diffuse, reflection, etc. and surface normal information 
       (waves, ripples) are ignored inside the tiles.
       
       You may use layered textures with tiles, but only the top 
       layer will show. 

       
                                                  POV-Ray V1.0 Page  88
       
       
       
       
       Bump Patterns
       
       Bump patterns or surface normal perturbation patterns change 
       the way a surface reflects light and make it look bumpy. The 
       actual shape of the surface is not changed, but shading, 
       highlights, and reflections will make it look as if it 
       were.
       
       ripples - Bump Pattern
       Syntax: 
         ripples (ripple size #) [frequency #]  [phase #]
       Example : 
         ripples 0.5
       
       The ripples bump pattern make a surface look like ripples of 
       water. The ripples option requires a value to determine how 
       deep the ripples are:
       
            texture {
                 wood
                 ripples 0.3
                 phong 1
                 translate < 1.0 2.0 3.0 >
                 rotate < 0.0 10.0 40.0 >
                 scale < 10.0 10.0 10.0 >
            }
       
       The ripple size may be any number. Larger values create 
       larger ripples. The frequency and phase parameters change 
       the distance between ripples and the position of the ripple, 
       respectively.
       
       waves - Bump Pattern
       Syntax: 
         waves (wave size #) [frequency #] [phase #]
       Example : 
         waves 0.5 frequency 10 phase 0.3
       
       This works in a similar way to ripples except that it makes 
       waves with different frequencies. The effect is to make 
       waves that look more like deep ocean waves. 
       
       Both waves and ripples respond to a parameter called phase. 
       The phase option allows you to create animations in which 
       the water seems to move. This is done by making the phase 
       increment slowly between frames. The range from 0.0 to 1.0 
       gives one complete cycle of a wave.
       
       The waves and ripples textures also respond to a parameter 

       
                                                  POV-Ray V1.0 Page  89
       
       
       called frequency. If you increase the frequency of the 
       waves, they get closer together. If you decrease it, they 
       get farther apart. 
       
       bumps - Bump Pattern
       Syntax: 
         bumps (bump size #) 
       Example : 
         bumps .4
       
       Approximately the same turbulence function as spotted, but 
       uses the derived value to perturb the surface normal or, in 
       other words, make the surface look bumpy. This gives the 
       impression of a "bumpy" surface, random and irregular, sort 
       of like an orange. After the bumps keyword, supply a single 
       floating point value for the amount of surface perturbation. 
       Values typically range from 0.0 (No Bumps) to 1.0 or 
       greater(Extremely Bumpy). 
       
       dents - Bump Pattern
       Syntax: 
         dents (dent size #) 
       Example : 
         dents .4
       
       Interesting when used with metallic textures, it gives 
       impressions into the metal surface that look like dents. A 
       single value is supplied after the dents keyword to indicate 
       the amount of denting required. Values range from 0.0 
       (Showroom New) to 1.0 (Insurance Wreck). Use larger values 
       at your own risk, they will raise your rates, anyway. Scale 
       the pattern to make the pitting more or less frequent.
       
       wrinkles - Bump Pattern
       Syntax: wrinkles (wrinkle size #) 
       Example : wrinkles .7
       
       This is sort of a 3-D bumpy granite. It uses a similar 1/f 
       fractal noise function to perturb the surface normal in 3-D 
       space. With a transparent color pattern, could look like 
       wrinkled cellophane. Requires a single value after the 
       wrinkles keyword to indicate the amount of wrinkling 
       desired. Values from 0.0 (No Wrinkles) to 1.0 (Very 
       Wrinkled) are typical. 
       

       
                                                  POV-Ray V1.0 Page  90
       
       
       
       
       Mapping Textures
       
       Mapping textures apply a picture to the surface of a shape 
       or object. Maps are used to color objects, make them look 
       bumpy, and to apply different textures to an object, all 
       based on the color of the pixels in the mapped image.
       
       There are several different types of mapping, and several 
       different methods to apply the map.
       
       
       Mapping Types:
       image_map:
            Applies the colors in the image to the surface of the 
            shape.
       bump_map:
            Makes the surface look bumpy based on the color of the 
            pixels in the mapped image.
       material_map:
            Changes the texture on the surface based on the color 
            of the pixels in the mapped image.
       
       Mapping Method:
       0 - Planar:
            Like a slide projector, it casts and image onto the 
            surface from 0,0 to 1,1.
       1 - Spherical:
            Wraps the image once around a sphere with radius 1.
       2 - Cylindrical: 
            Wraps the image once around a cylinder with radius 1, 
            length 1.
       3 - Torus:
            Wraps the image around a torus (donut) with inner and 
            outer radius of 1.
       
       The documentation for image_map explains the basic options 
       which are true for all mapping types.
       
       image_map - Color Pattern.
       Syntax:
       image_map { [map_type #] [<gradient>] image_type "filename" 
       [alpha # #] [once] [interpolate #] }
       
       This is a special color pattern that allows you to import a 
       bitmapped image file in GIF, TGA, IFF, or DUMP format and 
       map that bitmap onto an object. 
       
       For example:
       
       // Use planar (type 0) mapping to project falwell.gif 

       
                                                  POV-Ray V1.0 Page  91
       
       
       // onto the shape in a repeating pattern.
       // Set interpolation to 2 (bilinear) so the mapped GIF will 
       
       // be smoothed and not look jaggy.
       image_map {   
         map_type 0 <1 0 -1> gif "falwell.gif" interpolate 2 
       }
       
       or
       
       // Use spherical (type 1) mapping to 
       // wrap earth.tga once onto a unit sphere
       // No interpolation is used, so it may look 
       // jaggy
       image_map {   
         map_type 1 tga "earth.tga" 
       }
       or
       // Use cylindrical (type 2) mapping to wrap 
       // cambells.gif once onto a unit cylinder.
       // Set interpolation to 4 (normalized distance)
       // so the mapped GIF will be smoothed and not look jaggy.
       //  Norm dist isn't as good as bi-linear, but it's faster.
       image_map {   
         map_type 2 <1 -1 0> gif "cambells.gif" interpolate 4
       }
       
       The texture in the first example will be mapped onto the 
       object as a repeating pattern. The once keyword places only 
       one image onto the object instead of an infinitely repeating 
       tiled pattern. When once is used, the color outside the 
       mapped texture is set to transparent. You can use the 
       layered textures to place other textures or colors below the 
       image.
       
       The image map methods sphere, cylinder, and torus, wrap the 
       image once and only once around a unit shape of the same name. The 
       map may be scaled uniformly to apply to larger shapes. The maps 
       may be applied to any shapes, but the results are undefined.
       
       The planar image map method is like a slide projector and 
       will work the same for any shape.
       
       You can specify the alpha values for the color 
       palette/registers of GIF or IFF pictures (at least for the 
       modes that use palettes/colormaps). You can do this by 

       
                                                  POV-Ray V1.0 Page  92
       
       
       putting the keyword alpha immediately following the filename 
       followed by the register/color number value and 
       transparency. If the all keyword is used instead of a 
       register/color number, then all colors in that colormap get 
       that alpha value.
       
       Eg.
          image_map { 
            map_type 0 <1.0 -1.0 0.0> gif "mypic.gif"
            alpha all 0.2 // Make all colors 20% transparent 
            ...
       
             or
           alpha 0   0.5 // Make color 0 50% transparent
           alpha 1   1.0 // Make color 1 100% transparent
           alpha 2   0.3 // Make color 2 30% transparent
           ...
           once
           ...
           }
       
       NOTE: Alpha works as a filter, so adding alpha to the color 
       black still leaves you with black no matter how high alpha 
       is. If you want a color to be clear, add alpha 1 to the 
       color white.
       
       By default, the image is mapped onto the X-Y plane in the 
       range (0.0, 0.0) to (1.0, 1.0). If you would like to change 
       this default, you may use an optional gradient <x, y, z> 
       vector after the word image_map. This vector indicates which 
       axes are to be used as the u and v (local surface X-Y) axes. 
       The vector should contain one positive number and one 
       negative number to indicate the "u" and "v" axes, 
       respectively. You may translate, rotate, and scale the 
       texture to map it onto the object's surface as desired. Here 
       is an example:
       
            object {
                 plane { < 0 0 1 > -20 } 
                  // make this texture use the x and z axes for 
       the
                  // image mapping. 
                 texture {   
                    image_map { 0 <1.0  0.0  -1.0> gif "image.gif" }
                    scale <40.0 40.0 40.0>
                 }
             }

       
                                                  POV-Ray V1.0 Page  93
       
       
       
       The gradient vector and scaling will not affect a spherical 
       image map. Nor will the "once" keyword. Spherical image maps 
       auto-scale so that they wrap once around the sphere.
       
       Filenames specified in the image_map statements will be 
       searched for in the home (current) directory first, and if 
       not found, will then be searched for in directories 
       specified by any "-l" (library path) options active. This 
       would facilitate keeping all your image maps (.dis, .gif or 
       .iff) files in a "textures" subdirectory, and giving an "-l" 
       option on the command line to where your library of image 
       maps are. Turbulence will affect image maps.
       
       bump_map - A Bump Pattern
       Syntax:
       bump_map { [map_type #]  [<gradient>] image_type  "filename"  
       [bump_size #] [once] [interpolate #] [use_color] 
       [use_index]}
       
       Instead of placing the color of the image on the shape, 
       bump_map perturbs the surface normal based on the color of 
       the image at that point. By default, bump_map uses the 
       actual color of the pixel. This can also be specifically 
       directed by using the use_color keyword. 
       
       The height of the bump is based on how bright the pixel is. 
       Black is not bumpy, white is very bumpy. Colors are 
       converted to grey scale internally before calculating 
       height.
       
       If you specify use_index, bump_map uses the color's palette 
       number as the height of the bump at that point. So, color #0 
       would not be bumpy and color #255 would be very bumpy. The 
       actual color of the pixels doesn't matter when using the 
       index.
       
       The relative bump_size can be scaled using bump_size #. The 
       bump_size number can be any number other than 0. Valid 
       numbers are 2, .5, -33, 1000, etc.
       Examples:
       //  Use planar (type 0) mapping to project falwell.gif
       // onto the shape in a repeating pattern.
       //  Set interpolation to 2 (bilinear) so the mapped GIF
       //  will be smoothed and not look jaggy.
       // Black and white pictures make interesting bump_maps. 
       bump_map {   
         map_type 0 <1 0 -1> gif "falwell.gif" 

       
                                                  POV-Ray V1.0 Page  94
       
       
         interpolate 2 bump_size 5
       }
       
       or
       
       // Use spherical (type 1) mapping to wrap 
       // earth.tga once onto a unit sphere
       // No interpolation is used, so it may look jaggy
       bump_map {   
         map_type 1 tga "earth.tga" bump_size -3
       }
       
       or
       
       // Use cylindrical (type 2) mapping to wrap cambells.gif
       // once onto a unit cylinder.
       //  Use color number of pixel for bump height 
       //  instead of actual color.
       bump_map {   
         map_type 2 <1 -1 0> gif "cambells.gif" use_index
       }
       
       General information on maps can be found above in the 
       section on image_map.
       
       material_map - A texture pattern
       Syntax: 
       material_map { map_type #  [<gradient>] image_type  
       "filename"  [once] [interpolate #]  
           texture{... } // First used for color 0
           texture {...} // Second texture used for color 1
           texture {...} // Third texture used for color 2
           texture {...} // Fourth texture used for color 3
                         // Color 4 will use texture 5
                         // Color 5 will use texture 6 and so on.
          }
       
       Like the tiles texture pattern, material_map applies other 
       textures to a surface. It maps the image to the surface, and 
       then picks the texture for each point on the surface based 
       on the color index in the mapped image.
       
       Imagine a GIF image of blue squiggles on a black background, 
       we'll call it SQUIG.GIF. Looking at the image's palette you 
       can see that black is color 0 and blue is color 1. You can 
       view the palette using a paint program. So, we make a 
       material map for it like this:
       

       
                                                  POV-Ray V1.0 Page  95
       
       
       material_map { 
           map_type 0  gif "squig.gif"  
           texture { DMFWood2 } // First texture used 
                                // for color 0 Black
           texture { Gold_Metal } // Second texture used 
                                  // for color 1 Blue
          }
       
       This map applied to a sphere would put DMFWood1 everywhere 
       the black would be and Gold_Metal everywhere it finds blue 
       squiggles. The effect is of gold inlaid metal on a wooden 
       sphere! It can be very effective when used correctly. 
       
       NOTE: Layered textures don't work properly with material 
       maps. Only the top layer of layered textures will show on 
       them.
       
       General information on maps can be found above in the 
       section on image_map.
       
       
       Interpolation
       Interpolation smooths the jaggies on an image or bump map by 
       using a technique similar to anti-aliasing. Basically, when 
       POV-Ray asks for the color from a bump or image map, it 
       often asks for a point that is not directly on top of one 
       pixel, but sort of between several different colored pixels. 
       Interpolations returns an "in-between" value so that the 
       steps between the pixels in the image or bump map will look 
       smoother.
       
       There are currently two types of interpolation:
       
          Normalized Distance -- interpolate 4
          Bilinear            -- interpolate 2
       
       Default is no interpolation. Normalized distance is the 
       slightly faster of the two, bilinear does a better job of 
       picking the between color. Normally, bilinear is used.
       
       If your bump or image map looks jaggy, try using 
       interpolation instead of going to a higher resolution image. 
       The results can be very good.
       

       
                                                  POV-Ray V1.0 Page  96
       
       
       Misc Features
       
       
       Fog
       The ray tracer includes the ability to render fog. To add 
       fog to a scene, place the following declaration outside of 
       any object definitions: 
       
            fog {
                 color White // the fog color
                 200.0       // the fog distance
            }
       
       The fog to color ratio is calculated as:
       
          1-exp(- depth/distance)
       
       So at depth 0, the color is pure (1.0) with no fog (0.0). 
       At the fog distance, you'll get 63% of the color from the 
       object's color and 37% from the fog color.
       

       
                                                  POV-Ray V1.0 Page  97
       
       
       
       Default Texture
       When a texture is first created, POV-Ray initializes it with 
       default values for all options. The default values are:
       
       color red 0 green 0 blue 0 alpha 0
       ambient .1
       diffuse .6
       phong 0
       phong_size 40
       specular 0
       roughness .05
       brilliance 1
       metallic FALSE
       reflection 0
       refraction 0
       ior 1
       turbulence 0
       octaves 6
       texture randomness (dither) 0
       phase 0
       frequency 1
       color map NONE
       
       These values can be changed with the default texture 
       feature. After the parser reads a default texture, it will 
       initialize new textures with the new default values. The 
       syntax of the default texture is:
       
       #default { 
         texture {..} 
       }
       
       Any texture values may be used. A Common use for the default 
       texture is to change the ambient and diffuse values through 
       the entire scene. For example:
       
       #default { texture { ambient .5 diffuse .9} }
       
       Would make any textures created after this line use ambient 
       .5 and diffuse .9. All other values will remain at their old 
       default values. Ambient .5 diffuse .9 won't look good, but 
       it'll brighten up the scene if you need help positioning 
       objects.
       
       Any textures that specifically list a value will override 

       
                                                  POV-Ray V1.0 Page  98
       
       
       the default value. Default textures may be used more than 
       once in a scene. The new defaults will affect every texture 
       that is created following the default definition.
       
       Max trace level
       Syntax: max_trace_level #    (default = 5)
       
       Max_trace_level sets the number of levels that POV-Ray will 
       trace a ray. This is used when a ray is reflected or is 
       passing through a transparent object. When a ray hits a 
       reflective surface, it spawns another ray to see what that 
       point reflects, that's trace level 1. If it hits another 
       reflective surface, then another ray is spawned and it goes 
       to trace level 2. The maximum level by default is 5. 
       
       If max trace level is reached before a non-reflecting 
       surface is found, then the color is returned as black. Raise 
       max_trace_level if you see black in a reflective surface 
       where there should be a color.
       
       The other symptom you could see is with transparent objects. 
       For instance, try making a union of concentric spheres with 
       the Cloud_Sky texture on them. Make ten of them in the union 
       with radius's from 1-10 then render the Scene. The image 
       will show the first few spheres correctly, then black. Raise 
       max_trace_level to fix this problem.
       
       Note: Raising max_trace_level will use more memory and time 
       and it could cause the program to crash with a stack 
       overflow error. Values for max_trace_level are not 
       restricted, so it can be set to any number as long as you 
       have the time and memory. 
       
       

       
                                                  POV-Ray V1.0 Page 99
       
       
       
       
       Advanced Lessons
       
       The information in this section is designed for people who 
       are reasonably familiar with the raytracer and want more 
       information on how things work. You probably don't need this 
       level of detail to make interesting scene files, but if you 
       suddenly get confused about something the program did, this 
       section may help you figure it out. 
       

       
                                                  POV-Ray V1.0 Page 100
       
       
       
       Camera
       
       Cameras are internally defined by the four vectors: 
       Location, Direction, Up and Right. The other keywords in a 
       camera block are used to modify some or all of those four 
       values.
       
       The location is simply the X, Y, Z coordinates of the 
       camera. The camera can be located anywhere in the 
       ray-tracing universe.
       
       The direction vector describes the distance from the 
       location of the camera to the viewplane. It also specifies 
       the angle of view. Specifically, it's a vector that starts 
       at the location and points to the center of the viewplane.
       
       The up vector defines the height of the viewplane.
       The right vector defines the width of the viewplane.
       
       This figure illustrates the relationship of these vectors:
       
                                     |\
                                     | \
                                     |  \
                                     |   \
                                     |  ^ \
                                     |  |  |Up=Height of viewplane
                                     |\ |  |
                (Camera)             | \|  |
           Location *------------------->  |          THE SCENE
                       Direction     |  |\ |
                       = Distance    |  | \|Right= Width of 
       viewplane
                       from camera   \  |  |
                       to viewplane   \ |  |
                                       \|  |
                                        \  |
                                         \ |
                                          \|
       
       The viewplane is divided up according to the image 
       resolution specified and rays are fired through the pixels 
       out into the scene.
       
       This camera model is very flexible. It allows you to use 
       left-handed or right-handed coordinate systems. It also 

       
                                                  POV-Ray V1.0 Page 101
       
       
       doesn't require that the direction, up, and right vectors be 
       mutually orthogonal. If you want, you can distort the camera 
       to get really bizarre results.
       
       For an eye ray, therefore, the equation of the ray is: 
       
         Location + t (Direction + ((height - y)*up) + (x*right))
       
       where "t" is a parameter that determines the distance from 
       the eye to the object being tested. The Y coordinate is 
       inverted by subtracting it from height because most graphics 
       systems put 0,0 in the top left corner of the screen.
       
       
       Once the basic four vectors are specified, it's possible to 
       use the sky and look_at vectors to point the camera. You 
       must specify the sky vector first, but let's describe the 
       look_at vector first. look_at tells the camera to rotate in 
       such a way that the look_at point appears in the center of 
       the screen. To do this, the camera first turns in the 
       left-to-right direction (longitude in Earth coordinates) 
       until it's lined up with the look_at point. It then turns in 
       the up/down direction (latitude in Earth coordinates) until 
       it's looking at the desired point.
       
       Ok, now we're looking at the proper point. What else do we 
       have to specify? If you're looking at a point, you can still 
       turn your camera sideways and still be looking at the same 
       spot. This it the orientation that the sky direction 
       determines. The camera will try to position itself so that 
       the camera's up direction lines up as closely as possible to 
       the sky direction.
       
       Put another way - in airplane terms, the look_at vector 
       determines your heading (north, south, east, or west), and 
       your pitch (climbing or descending). The sky vector 
       determines your banking angle.
       
       Ray-Object Intersections
       For every pixel on the screen, the raytracer fires at least 
       one ray through that pixel into the world to see what it 
       hits. For each hit it calculates rays to each of the light 
       sources to see if that point is shadowed from that light 
       source. For reflecting objects, a reflected ray is traced. 
       For refracting objects, a refracting ray is traced. That all 
       adds up to a lot of rays. 
       
       Every ray is tested against every object in the world to see 

       
                                                  POV-Ray V1.0 Page 102
       
       
       if the ray hits that object. This is what slows down the 
       raytracer. You can make things easier by using simple 
       bounding shapes on your objects.
       
       When you use the anti-aliasing option (+a) on your image, 
       the ray tracer will send out multiple rays through each 
       pixel and average the results. This will make the image 
       smoother, but tracing more rays also makes it take longer to 
       render.
       

       
                                                  POV-Ray V1.0 Page 103
       
       
       
       
       Textures, Noise, and Turbulence
       
       Here's how some of the texture features work. If you want 
       some good reading material, check out "An Image Synthesizer" 
       by Ken Perlin in the SIGGRAPH '84 Conference Proceedings.
       
       Let's start with a marble texture. Real marble is created 
       when different colors of sediments are laid down one on top 
       of another and compressed to form solid rock.
       
       With no turbulence, a cube textured with marble looks like 
       this:
       
                        ---------------
                      /   /   /   /   /|
                    /   /   /   /   /  |
                   ----------------    |
                   |   |   |   |   |   |
                   |   | W |   | W |   |
                   | R | H | R | H |   |
                   | E | I | E | I |   |
                   | D | T | D | T |  /
                   |   | E |   | E |/
                   ----------------
       
       If you carve a shape put of this block of marble, you will 
       get red and white bands across it.
       

       
                                                  POV-Ray V1.0 Page 104
       
       
       
       Now, consider wood. The rings in wood are created when the 
       tree grows a new outer shell every year. Hence, we have 
       concentric cylinders of colors:
       
                       ______
                      /      /
                     /      / \
                    /      /   \
                   /      /     \
                  /      /      |
                 /______/       |
                / _____ \       |
               / / ___ \ \      |
              / / / _ \ \ \     /
             / / / / \ \ \ \   /
             | | | | | | | |  /
             | | | |O| | | | /
             | | | | | | | |/
             \ \ \ \_/ / / /
              \ \ \___/ / /
               \ \_____/ /
                \_______/
       
       Cutting a shape out of a piece of wood will tend to give you 
       rings of color. This is fine, but the textures are still a bit boring. For the next step, we blend the colors 
       together to create a nice smooth transition. This makes the 
       texture look a bit better. The problem, though, is that it's 
       too regular - real marble and wood aren't so perfect. Before we make our wood and 
       marble look any better, let's look at how we make noise. Noise (in 
       raytracing) is sort of like a random number generator, but 
       it has the following properties:
       
         1) It's defined over 3D space i.e., it takes x, y, and z 
       and returns the noise value there.
         2) If two points are far apart, the noise values at those 
       points are relatively random.
         3) If two points are close together, the noise values at 
       those points are close to each other.
       
       You can visualize this as having a large room and a 
       thermometer that ranges from 0.0 to 1.0. Each point in the 
       room has a temperature. Points that are far apart have 
       relatively random temperatures. Points that are close 
       together have close temperatures. The temperature changes 
       smoothly, but randomly as we move through the room. 

       
                                                  POV-Ray V1.0 Page 105
       
       
       
       Now, let's place an object into this room along with an 
       artist. The artist measures the temperature at each point on 
       the object and paints that point a different color depending 
       on the temperature. What do we get? bozo texture!
       
       Another function used in texturing is called DNoise. This is 
       sort of like noise except that instead of giving a 
       temperature, it gives a direction. You can think of it as 
       the direction that the wind is blowing at that spot.
       
       Finally, we have a function called turbulence which uses 
       DNoise to push a particle around a few times - each time 
       going half as far as before.
       
                P ------------------------->
                         First Move        /
                                          /
                                         /
                                        /Second
                                       /  Move
                                      /
                               ______/
                               \
                                \
                                 \
                                  Q - Final point.
       
       This is what we use to create the "interesting" marble and wood 
       texture. We locate the point we want to color (P), 
       then push it around a bit using Turbulence to get to a final 
       point (Q) then look up the color of point Q in our ordinary 
       boring wood and marble textures. That's the color that's used 
       for the point P.
       
       Octaves
       In conjunction with the turbulence function, is the 
       "octaves" value. The octaves value tells the turbulence 
       function exactly how many of these "half-moves" to make.  
       The default value of 6 is fairly close to the upper limit; 
       you won't see much change by setting it to a higher value, 
       but you can achieve some very interesting effects by 
       specifying lower values in the range of 2-5. Setting octaves 
       higher than around 10 can cause a "stack overflow" error 
       (crash) on some machines.
       
       
       Layered Textures
       POV-Ray supports layered textures. They can be used to 
       create very sophisticated materials. Here's how they work.
       

       
                                                  POV-Ray V1.0 Page 106
       
       
       Each object and each shape has a texture that may be 
       attached to it. By default, shapes have no texture, but 
       objects have a default texture. Internally, textures are 
       marked as being constant or variable. A constant texture is 
       one that was declared as a texture and is being shared by 
       many shapes and objects. Variable textures are textures that 
       have been declared totally within the object or have used a 
       declared texture and modified it in a destructive way. The 
       idea here is that we want to save on memory by sharing 
       textures if possible. 
       
       If you have several texture blocks for an object or a shape, 
       they are placed into a linked list (First-in Last-out). For 
       example, take the following definition:
       
           object {
             sphere <0 0 0> 1 }
             texture { Wood }
             texture { Clouds }
          }
       
       Here's what happens while parsing this object: Since this is 
       an object (as opposed to a shape - sphere, plane, etc.), it 
       starts out with the default texture attached.
       
          ________      _________
          |      |      |       |
          |      |----->|Default|
          |Object|      |Texture|
          |      |      |_______|
          |      |
          |______|
       
       When the parser sees the first texture block, it looks to 
       see what it has linked. Since the thing that's linked is the 
       default texture (not a copy), it discards it and puts in the 
       new texture.
       
          ________      _________
          |      |      |       |
          |      |----->| Wood  |
          |Object|      |Texture|
          |      |      |_______|
          |      |
          |______|
       
       On the next texture, it sees that the texture isn't the 

       
                                                  POV-Ray V1.0 Page 107
       
       
       default one, so it adds the second texture into the linked 
       list.
          ________      _________      _________
          |      |      |       |      |       |
          |      |----->|Clouds |----->| Wood  |
          |Object|      |Texture|      |Texture|
          |      |      |_______|      |_______|
          |      |
          |______|
       
       
       If you want to specify the refraction of the texture, the 
       raytracer must first calculate the surface color. It does 
       this by marching through the texture list and mixing all the 
       colors. When it's finished, it checks the alpha value of the 
       surface color and decides whether it should trace a 
       refracting ray. Where does it get the refraction value and 
       the index of refraction? It simply takes the one in the 
       topmost (the last one defined) texture.
       
       

       
                                                  POV-Ray V1.0 Page 108
       
       
       Parallel Image Mapping
       
       One form of image mapping that POV-Ray supports is called a 
       "parallel projection" mapping. This technique is simple, but 
       it's not perfect. It works like a slide projector casting 
       the desired image onto the scene. The difference, however, 
       is that the image never gets larger as you move further away 
       from the slide projector. In fact, there is no real slide 
       projector. 
       
       Note that an object cannot shadow itself from the image 
       being mapped. This means that the image will also appear on 
       the back of the object as a mirror image.
       
       The mapping takes the original image (regardless of the 
       size) and maps it onto the range 0,0 to 1,1 in two of the 3D 
       coordinates. Which two coordinates to use is specified by 
       the gradient vector provided after the image. This vector 
       must contain one positive number, one negative number, and 
       one zero. The positive number identifies the u axis (the 
       left right direction in the image) and the negative number 
       represents the v axis (the picture's up-down direction). 
       Note that the magnitude of the number is irrelevant. 
       
       For example:
           image_map { <1 -1 0> gif "filename" }
       
       will map the gif picture onto the square from <0 0 0> to <1 
       1 0> like this:
       
               Y
               ^
               |
               |
               |          
             1 |----------
               |   Top  R|
               |L       i|
               |e       g|
               |f       h|
               |t       t|
               | Bottom  |
               ----------------> X
                         1
       
       If we reversed the vector, the picture would be transposed:
       

       
                                                  POV-Ray V1.0 Page 109
       
       
           image_map { <-1 1 0> gif "filename" }
       
       produces:
       
               Y
               ^
               |
               |
               |          
             1 |----------
               |B Right  |
               |o       T|
               |t       o|
               |t       p|
               |o        |
               |m  Left  |
               ----------------> X
                         1
       
       Once the image orientation has been determined, it can be 
       translated, rotated, and scaled as desired to map properly 
       onto the object.
       
       Common Questions and Answers
       
       Q: I keep running out of memory. What can I do?
       
       A: Buy more memory. But seriously, you can decrease the 
       memory requirements for any given picture in several ways:
       1) declare texture constants and use them ( textures are 
       shared). 
       2) Don't modify the texture that you are sharing by scaling, 
       rotating or translating. On the first modify, the texture is 
       copied and (therefore) takes up more space.     
       3) Put the object transformations before the texture 
       structure. This prevents the texture from being transformed 
       (and hence, copied. This may not always be desirable, 
       though).
       4) Use union instead of composite objects to put pieces 
       together.
       5) Use fewer or smaller image maps.
       6) Use GIF or IFF (non-HAM) images for image maps. These are 
       stored internally as 8 bits per pixel with a color table instead of 
       24 bits per pixel.
       
       Q: I get a floating point error on certain pictures. What's 
       wrong?
       

       
                                                  POV-Ray V1.0 Page 110
       
       
       A: The raytracer performs many thousands of floating point 
       operations when tracing a scene. If checks were added to 
       each one for overflow or underflow, the program would be 
       much slower. If you get this problem, first look through 
       your scene file to make sure you're not doing something 
       like:
       
       - Scaling something by 0 in any dimension. 
         Ex: scale <34 2 0> will generate an error.
       - Making the look_at point the same as the location in the 
       camera
       - Looking straight down at the look_at point
       - Defining triangles with two points the same (or nearly the 
       same)
       - Using the zero vector for normals.
       - Using a roughness value of zero (0).
       
       If it doesn't seem to be one of these problems, please let 
       us know. If you do have such troubles, you can try to 
       isolate the problem in the input scene file by commenting 
       out objects or groups of objects until you narrow it down to 
       a particular section that fails. Then try commenting out the 
       individual characteristics of the offending object.
       
       Q: No matter how much I scale a Cylinder, I can't make it 
       fit on the screen. How big is it and how much do I have to 
       scale it? 
       
       A: Cylinders (like most quadrics) are infinitely long. No 
       matter how much you scale them, they still won't fit on the 
       screen. To make a disk out of a cylinder, you must use CSG:
       
                  intersection {
                     quadric { Cylinder_Y }
                     plane {<0.0 1.0 0.0> 1.0 }
                     plane {<0.0 -1.0 0.0> 1.0 }
                  }
       
       This object is defined in SHAPES.INC as a Disk. Try using a 
       Disk instead. There are three disk types, Disk_X, Disk_Y, 
       and Disk_Z.
       
       Cylinders CAN be scaled in cross-section, the two vectors 
       not in the name of the cylinder (X and Z, in our example 
       above) can be scaled to control the width and thickness of 
       the cylinder. Scaling the Y value (which is normally 
       infinite) is meaningless, unless you have "capped" it as 

       
                                                  POV-Ray V1.0 Page 111
       
       
       above, then scaling the entire intersection object in the Y 
       dimension will control the height of the cylinder.
       
       Q: Are planes 2D objects or are they 3D but infinitely thin? 
       
       
       A: Neither. Planes are 3D objects that divide the world into 
       two half-spaces. The space in the direction of the surface 
       normal is considered outside and the other space is inside. 
       In other words, planes are 3D objects that are infinitely 
       thick. For the plane, plane { <0 1 0> 0 }, every point with a 
       positive Y value is outside and every point with a negative 
       Y value is inside.
                                   ^
                                   |
                                   |
                                   |  Outside
                            _______|_______
                                Inside
       
       Q: Can POV-Ray render soft shadows?
       
       A: Not directly. You can use a spotlight to get soft edges 
       on the spot light. You can also create multiple copies of 
       the same scene with the light sources in a slightly 
       different location in each copy and average them together 
       with Piclab or DTA15b to get a soft shadow.
       
       Q: I'd like to go through the program and hand-optimize the 
       assembly code in places to make it faster. What should I 
       optimize? 
       
       A: Don't bother. With hand optimization, you'd spend a lot 
       of time to get perhaps a 5-10% speed improvement at the cost 
       of total loss of portability. If you use a better 
       ray-surface intersection algorithm, you should be able to 
       get an order of magnitude or more improvement. Check out 
       some books and papers on raytracing for useful techniques. 
       Specifically, check out "Spatial Subdivision" and "Ray 
       Coherence" techniques.
       
       Q: Objects on the edges of the screen seem to be distorted. 
       Why? 
       
       A: If the direction vector of the camera is not very long, 
       you may get distortion at the edges of the screen. Try 
       moving the location back and raising the value of the 

       
                                                  POV-Ray V1.0 Page 112
       
       
       direction vector. 
       
       
       Q: How do you position planar image maps without a lot of 
       trial and error?
       
       A: By default, images will be mapped onto the range 0,0 to 
       1,1 in the appropriate plane. You should be able to 
       translate, rotate, and scale the image from there.
       
       Q: What's the difference between alpha and refraction?   
       
       A: The difference is a bit subtle. Alpha is a component of a 
       color that determines how much light can pass through that 
       color. Refraction is a property of a surface that determines 
       how much light can come from inside the surface. See the 
       section above on Transparency and Refraction for more 
       details.
       
       Q: How do you calculate the surface normals for smooth 
       triangles? 
       
       A:  There are two ways of getting another program to 
       calculate them for you. There are now several utilities to 
       help with this.
       
       1) Depending on the type of input to the program, you may be 
       able to calculate the surface normals directly. For example, 
       if you have a program that converts B-Spline or Bezier 
       Spline surfaces into POV-Ray format files, you can calculate 
       the surface normals from the surface equations.
       
       2) If your original data was a polygon or triangle mesh, 
       then it's not quite so simple. You have to first calculate 
       the
       surface normals of all the triangles. This is easy to do - 
       you just use the vector cross-product of two sides (make 
       sure you get the vectors in the right order). Then, for 
       every vertex, you average the surface normals of the 
       triangles that meet at that vertex. These are the normals 
       you use for smooth triangles. Look for the utilities 
       SANDPAPER and TXT2POV.
       
       Q: When I render parts of a picture on different systems, 
       the textures don't match when I put them together. Why?
       
       A: The appearance of a texture depends on the particular 

       
                                                  POV-Ray V1.0 Page 113
       
       
       random number generator used on your system. POV-Ray seeds 
       the random number generator with a fixed value when it 
       starts, so the textures will be consistent from one run to 
       another or from one frame to another so long as you use the 
       same executables. Once you change executables, you will 
       likely change the random number generator and, hence, the 
       appearance of the texture. There is an example of a standard 
       ANSI random number generator provided in IBM.C, include it 
       in your machine-specific code if you are having consistency 
       problems.
       
       Q: What's the difference between a color declared inside a 
       texture and one that's in a shape or an object and not in a 
       texture?   
       
       A: The color in the texture specifies the color to use for 
       qualities 5 and up. The color on the shape and object are 
       used for faster rendering in qualities 4 and lower and for 
       the color of light sources. See the -q option for details on 
       the quality parameter.
       
       Q: I created an object that passes through its bounding 
       volume. At times, I can see the parts of the object that 
       are
       outside the bounding volume. Why does this happen? 
       
       A: Bounding volumes are not designed to change the shape of 
       the object. They are strictly a realtime improvement 
       feature. The raytracer trusts you when you say that the 
       object is enclosed by a bounding volume. The way it uses 
       bounding volumes is very simple: 
       If the ray hits the bounding volume (or the ray's origin is 
       inside the bounding volume),when the object is tested 
       against that ray. Otherwise, we ignore the object. If the 
       object extends beyond the bounding volume, anything goes. 
       The results are undefined. It's quite possible that you 
       could see the object outside the bounding volume and it's 
       also possible that it could be invisible. It all depends on 
       the geometry of the scene. If you want this effect use a 
       clipped_by volume instead of bounded_by.
       
       Tips and Hints
       
       To see a quick version of your picture, render it very 
       small. With fewer pixels to calculate the ray tracer can 
       finish more quickly. --w80 -h60 is a good size.
       
       
       When animating objects with solid textures, the textures 

       
                                                  POV-Ray V1.0 Page 114
       
       
       must move with the object, i.e. apply the same rotate or 
       translate functions to the texture as to the object itself. 
       This is now done automatically if the transformations are 
       placed _after_ the texture block. Example:
       
       object {
         shape { ... }
         texture { ... }
         scale < 1 2 3 >
       }
       
       Will scale the shape and texture by the same amount.
       
       object {
         shape { ... }
         scale < 1 2 3 >
         texture { ... }
       }
       
       Will scale the shape, but not the texture. 
       
       You can declare constants for most of the data types in the 
       program including floats and vectors. By combining this with 
       include files, you can easily separate the parameters for an 
       animation into a separate file.
       
       You can declare constants for most of the data types in the 
       program including floats and vectors.  By combining this 
       with include files, you can easily separate the parameters 
       for an animation into a separate file.
              
       Some examples of declared constants would be:
          #declare Y_Rotation = 5.0
          #declare ObjectRotation = <0 Y_Rotation 0>
          #declare MySphere = sphere { <0 0 0> 1.1234 }
              
       Other examples can be found scattered throughout the sample 
       scene files.
       
       Wood is designed like a "log", with growth rings aligned 
       along the z axis.  Generally these will look best when 
       scaled down by about a tenth (to a unit-sized object). Start 
       out with rather small value for the turbulence, too (around 
       0.05 is good for starters).
              
       See the file "textures.doc" in the STDINC.ZIP file for more 

       
                                                  POV-Ray V1.0 Page 115
       
       
       pointers about advanced texture techniques.
       
       You can compensate for non-square aspect ratios on the 
       monitors by making the right vector equal to (pixel 
       width/pixel height). On an IBM-PC VGA that is 
       (640/480)=1.333. A good value for the Amiga & IBM-PC is 
       about 1.333. If your spheres and circles aren't round, try 
       varying it. Macintoshes use 1.0 for this value.
       
       If you are importing images from other systems, you may find 
       that the shapes are backwards (left-to-right inverted) and 
       no rotation can make them correct. All you have to do is 
       negate the terms in the right vector of the camera to flip 
       the camera left-to-right (use the "right-hand" coordinate 
       system).
       
       By making the direction vector in the camera longer, you can 
       achieve the effect of a tele-photo lens. Shorter direction 
       vectors will give a kind of wide-angle affect, but you may 
       see distortion at the edges of the image.
       
       Suggested Reading
       
       First, a shameless plug for two new books coming out soon 
       that are specifically about POV-Ray:
       
            The Waite Group's Ray Tracing Creations
            By Drew Wells
            Waite Group Press
            1992
       and
            The Waite Group's Image Lab
            By Tim Wegner
            Waite Group Press
            1992
       
       Image Lab by Tim Wegner will be out in the summer of '92 and 
       contains a chapter about POV-Ray. Tim is the co-author of 
       the best selling book, Fractal Creations, also from the 
       Waite Group. 
       
       Ray Tracing Creations by Drew Wells will be out later in '92 and is 
       an entire book about ray tracing with POV-Ray. 
       
       This section lists several good books or periodicals that 
       you should be able to locate in your local computer book 
       store or your local university library. 
       
           "An Introduction to Raytracing"

       
                                                  POV-Ray V1.0 Page 116
       
       
           Andrew S. Glassner (editor)
           Academic Press
           1989
       
           "3D Artist" Newsletter
           ("The Only Newsletter about Affordable 
             PC 3D Tools and Techniques")
           Publisher: Bill Allen
           P.O. Box 4787
           Santa Fe, NM 87502-4787
           (505) 982-3532
       
           "Image Synthesis:  Theory and Practice"
           Nadia Magnenat-Thalman and Daniel Thalmann
           Springer-Verlag
           1987
       
           "The RenderMan Companion"
           Steve Upstill
           Addison Wesley
           1989
       
           "Graphics Gems"
           Andrew S. Glassner (editor)
           Academic Press
           1990
       
           "Fundamentals of Interactive Computer Graphics"
           J. D. Foley and A. Van Dam
           Addison-Wesley
           1983
       
           "Computer Graphics:  Principles and Practice (2nd Ed.)"     
       
           J. D. Foley, A. van Dam, J. F. Hughes
           Addison-Wesley,
           1990
       
           "Computers, Pattern, Chaos, and Beauty"
           Clifford Pickover
           St. Martin's Press
       
           "SIGGRAPH Conference Proceedings"
           Association for Computing Machinery
           Special Interest Group on Computer Graphics
       
           "IEEE Computer Graphics and Applications"

       
                                                  POV-Ray V1.0 Page 117
       
       
           The Computer Society
           10662, Los Vaqueros Circle
           Los Alamitos, CA 90720
       
           "The CRC Handbook of Mathematical Curves and Surfaces"
           David von Seggern
           CRC Press
           1990
       
           "The CRC Handbook of Standard Mathematical Tables"
           CRC Press
           The Beginning of Time
       
       Legal Information
       
       For full details see POVLEGAL.DOC, the following information 
       does not supersede the document POVLEGAL.DOC. 
       
       The gist of that document is that POV-Ray and its related 
       files are copyrighted software that may not be modified or 
       distributed without the express written permission of the 
       POV-Ray development team. POV-Ray and its related files may 
       not be used in any commercial or non-commercial program 
       without the express written permission of the POV-Ray 
       development team. In particular, the user may not modify and 
       re-distribute the POV-Ray software for any reason. Nor may 
       the user distribute an executable created by the user from 
       the POV-Ray source code.
       
       Scene and image files created by the user with POV-Ray are 
       the user's property for the user to do as they see fit. The 
       user is free to sell, display, distribute, or consume any 
       scene files or image files created solely by the user for 
       use with POV-Ray.
       
       The POV-Ray development team does not offer any warranty or 
       guarantee for the software for any use. The POV-Ray team is 
       not responsible for any loss incurred by the use of the 
       software.
       
       If there is any question about the use or distribution of 
       POV-Ray, please contact Drew Wells for clarification. See 
       contacting the authors for info. 

       
                                                  POV-Ray V1.0 Page 118
       
       
       
       
       Contacting the Authors
       
       We love to hear about how you're using and enjoying the 
       program. We also will do our best try to solve any problems 
       you have with POV-Ray and incorporate good suggestions into 
       the program.
       
       If you have a question regarding commercial use of, 
       distribution of, or anything particularly sticky, please 
       contact Drew Wells, the development team leader. Otherwise, 
       spread the mail around. We all love to hear from you!
       
       The best method of contact is e-mail through Compuserve for 
       most of us. America On-Line and Internet can now send mail 
       to Compuserve, also, just use the Internet address and the 
       mail will be sent through to Compuserve where we read our 
       mail daily. 
       
       Please do not send large files to us through the e-mail 
       without asking first. We pay for each minute on Compuserve 
       and large files can get expensive. Send a query before you 
       send the file, thanks!
       
       Drew Wells 
       (Development team leader. Worked on everything.)
       CIS: 73767,1244
       Internet: [email protected]
       AOL: Drew Wells
       Prodigy: SXNX74A (Not used often)
       US Mail:
         905 North Ave 66
         Los Angeles, CA
         90042
       Phone: (213) 254-4041 
       
       Other authors and contributors in alphabetical order:
       -----------------------------------------------------
       David Buck
       (Original author of DKBTrace)
       (Primary developer, quadrics, docs)
       INTERNET:(preferred) [email protected]
       CIS: 70521,1371
       
       Aaron Collins
       (Co-author of DKBTrace 2.12)
       (Primary developer, IBM-PC display code,phong, docs) 
       CIS: 70324,3200

       
                                                  POV-Ray V1.0 Page 119
       
       
       
       Alexander Enzmann
       (Primary developer, Blobs, quartics, boxes, spotlights) 
       CIS: 70323,2461
       INTERNET: [email protected]
       
       Dan Farmer
       (Primary developer, docs, scene files)
       CIS:70703,1632
       
       Douglas Muir
       (Bump maps and height fields)
       CIS: 76207,662
       Internet:[email protected]
       
       Bill Pulver
       (Time code and IBM-PC compile)
       CIS: 70405,1152

       Chris Young
       (Primary developer, docs, scene files)
       CIS: 76702,1655
       
       Charles Marslette
       (IBM-PC display code)
       CIS: 75300,1636
       
       Mike Miller
       (Artist, scene files, stones.inc)
       CIS: 70353,100

       Jim Nitchals
       (Mac version, scene files)
       CIS: 73117,3020

       Eduard Schwan
       (Mac version, docs)
       Internet: [email protected]
       
       Randy Antler
       (IBM-PC display code enhancements)
       CIS: 71511,1015
       
       David Harr
       (Mac balloon help)
       CIS: 72117,1704
       

       
                                                  POV-Ray V1.0 Page 120
       
       
       Scott Taylor
       (Leopard and Onion textures)
       CIS: 72401,410
       

       
                                                  POV-Ray V1.0 Page 121
       
       

                             Index of Authors


Bill Allen:         116
Randy Antler:       119
David Buck:         5 74 75 118
Aaron Collins:      5 9 118
A. Van Dam:         116
Alexander Enzmann:  119
Dan Farmer:         119
J. D. Foley:        116
Andrew Glassner:    116
J. F. Hughes:       116
Charles Marslette:  119
Mike Miller:        119
Bill Minus:         9
Douglas Muir:       58 119
Jim Nitchals:       119
Ken Perlin:         103
Clifford Pickover:  116
Bill Pulver:        119
Adam Schiffman:     9
Eduard Schwan:      119
David von Seggern:  52 117
Scott Taylor:       120
Daniel Thalmann:    116
Nadia Magnenat-Thalmann: 116
Steve Upstill:      116
Tim Wegner:         115
Drew Wells:         115 117 118
Chris Young:        119

       
                                                  POV-Ray V1.0 Page 122
       
                                 INDEX
       
abort:              13 16 18
abstract:           66 67
adaptive:           15
Addison Wesley:     116
advanced:           6 8 24 99 115
aerobics:           44
agate:              6 69 72 82 84
aiming:             38
air:                79
airplane:           101
alfred.ccs.carleton.ca:  9
algorithm:          111
anti-aliasing:      13 15 16 95 102
alpha:              32 69 70 74 75 76 77 78
                    79 90 91 92 97 107 112
altitude:           85
ambient:            17 39 77 87 97
America On-Line:    9 118
Amiga:              7 14 36 115
analogy:            62
angle:              21 27 33 34 100 101 115
animation:          16 71 72 73 78 113 114
anonymous ftp:      9
ansi:               113
antenna:            35
apocalypse:         6
Apple:              7 9 119
archive:            7 8 10 11 30 49 57
art:                9
artist:             5 11 72 105 116 119
artwork:            8
ascii:              5 10 11
aspect ratio:       20 21 34 35 36 115
assembly:           111
attention:          21
attenuates:         78
attract:            52
author:             4 17 115 117 118
autocad:            34 44
average:            8 80 102 111 112
averaging:          15
axis:               19 21 23 25 34 36 42 43
                    44 45 46 47 50 84 85 92
                    108 114
background:         56 94
backwards:          115
ball:               11 24
balloon:            119
banding:            72
bands:              23 69 74 84 103

       
                                                  POV-Ray V1.0 Page 123
       
       
benchmarks:         50
bend:               79
bezier:             6 59 61 112
bicubic:            59
bigbox:             31
bilinear:           91 93 95
bitmap:             90
black:              37 57 59 77 92 93 94 95
                    98
blend:              17 82 104
blobs:              6 30 52 53 54 55 60 61 119
block:              17 22 33 41 69 71 73 100
                    103 106 114
blood:              6
blowing:            105
blu:                15
blue:               6 14 22 24 27 28 32 37 38
                    39 41 45 57 66 71 74 75
                    76 77 79 82 83 85 94 95
                    97
blustery:           82
board:              9 83
body:               29
book:               52 111 115
boolean:            59
bore:               60
bounces:            77
bounding:           46 50 65 67 102 113
box:                6 17 18 30 31 46 55 58 66
                    67 72 116
boxes:              46 60 61 119
bozo:               74 76 82 83 105
bracket:            27
brass:              6
bright:             6 23 37 38 59 78 79 80 93
brighten:           97
brightness:         37 38
brilliance:         78 97
brown:              6
brushed:            29
buffer:             13 16
building:           60
built-in:           6 23 48 69
bulge:              54
bump:               69 70 71 88 89 90 93 94
                    95 119
bumps:              70 89
bumpy:              6 70 88 89 90 93
bunch:              54

       
                                                  POV-Ray V1.0 Page 124
       
       
cad:                33 34 44
calmer:             82
cambells:           91 94
camera:             10 19 20 21 22 32 33 34
                    35 36 44 100 101 110 111
                    115
Canadian:           77
candy cane:         85
cap:                60
capped:             110
car:                29 65
carve:              73 103
catastrophic:       16
ceiling:            45
cellophane:         89
chaos:              116
chaotic:            58 72
checker:            24 69 83 86
checkerboard:       6
cherry wood:        6
Chicago:            9
chrome:             6
circle:             37 50 51 115 117
circular:           38 60 85
clip:               63 67 68 113
clouds:             6 73 75 82 83 84 98 106 107
coated:             52
code:               8 9 50 57 61 64 111 113
                    117 118 119
coefficients:       49 51
coherence:          111
color:              6 7 14 15 21 22 23 24 25
                    27 28 32 36 37 38 39 41
                    43 44 45 55 56 57 58 64
                    66 69 70 71 72 73 74 75
                    76 77 78 79 80 81 82 83
                    84 85 86 89 90 91 92 93
                    94 95 96 97 98 104 105
                    107 109 112 113
colormap:           91 92
colors:             5 6 17 20 21 22 24 28 30
                    32 47 57 69 70 73 74 75
                    77 78 79 82 83 86 90 91
                    92 93 103 104 107
colour:             77
COMART:             9
command:            10 11 12 13 14 17 18 19
                    20 22 25 35 36 41 47 48 93
comment:            25 26 110

       
                                                  POV-Ray V1.0 Page 125
       
       
Commodore Amiga:    7
compile:            8 119
component:          25 52 53 54 55 63 69 70
                    77 79 112
composite:          6 30 48 65 66 67 109
Compuserve:         9 118
concatenate:        16
concentric:         84 86 98 104
cone:               6 24 37 38 40 46 47
constant:           106
constants:          109 114
constructive:       6 59 60
contact:            8 17 117 118
contacting:         4 117 118
contrast:           15
convert:            8 12 22 59
converted:          48 93
converts:           112
coordinate:         19 33 44 100 101 115
coordinates:        19 20 21 33 37 47 84 100
                    101 108
copyrighted:        5 117
corner:             46 58 101
corners:            46
corona:             85
cpu:                7
crash:              16 98 105
cray:               8
crays:              8
csg:                6 31 38 39 40 48 52 58 59
                    60 61 62 63 64 65 66 67
                    68 110
cube:               56 103
curve:              59
curved:             48 59
curves:             52 117
cylinder:           6 24 25 40 47 60 64 90 91
                    94 110 111
cylinders:          24 46 60 104 110
cylindrical:        69 84 90 91 94
dark:               37 59
darkens:            37
debugging:          50
decimal:            27
declaration:        20 30 34 49 53 67 96
declare:            27 28 29 30 31 32 45 47
                    49 66 109 114
declared:           30 106 113 114
declaring:          20

       
                                                  POV-Ray V1.0 Page 126
       
       
default:            12 13 14 15 16 17 21 23
                    34 35 56 74 77 78 79 80
                    81 84 85 86 92 93 95 97
                    98 105 106 107 112
defaults:           34 98
define:             6 28 29 30 34 36 47 48 60
                    74
defined:            6 20 21 22 23 24 27 28 29
                    35 36 46 47 48 49 51 60
                    61 65 69 74 75 80 83 100
                    104 107 110
defines:            34 46 54 73 79 100
defining:           60 65 74 110
degrees:            36 38 42
dense:              79
densities:          53 55
density:            53 54 55
dent:               89
dented:             54
denting:            89
dents:              70 89
depth:              5 33 96
Desqview:           7
developer:          118 119
developers:         8 9
diameter:           47
diamond:            79
diamonds:           79
difference:         15 31 48 50 60 61 63 64
                    108 112 113
differences:        6 60
diffuse:            17 39 78 87 97
digits:             27
dimension:          45 110 111
dimensional:        5 10 47 69 70
dimensions:         46
directories:        10 17 20 93
directory:          9 10 11 13 17 18 20 93
dish:               24 46
disk:               16 30 40 110
disks:              60
distance:           24 45 50 53 55 74 88 91
                    95 96 100 101
distort:            101
distorted:          111
distortion:         21 33 111 115
distorts:           73
distribution:       11 117 118
dither:             71 72 97

       
                                                  POV-Ray V1.0 Page 127
       
       
dithered:           72
DKBTrace:           5 118
dmfwood:            23 24 64 73 76 95
dnoise:             105
doc:                23 69 114 117
docs:               10 12 14 22 50 118 119
document:           5 11 34 117
documentation:      7 8 14 90
donut:              6 25 49 50 90
doors:              65
dos:                7
double:             26
drilling:           63
dropouts:           49
drops:              53 55
duck:               30
dull:               80
dump:               6 13 14 90
earth:              91 94 101
edge:               70
edges:              33 37 38 111 115
elevation:          34
ellipsoid:          6 45 47 66
ellipsoids:         24 46
emulator:           7
engine:             29
equation:           46 47 49 50 51 53 101
equations:          50 112
error:              25 71 81 98 105 109 110
                    112
errors:             50 81
Europe:             9
example:            6 8 11 18 23 24 25 27 28
                    29 31 35 36 37 38 40 41
                    43 44 48 49 51 52 55 56
                    57 59 61 63 64 65 66 67
                    68 69 71 73 75 77 78 79
                    81 82 83 85 86 88 89 90
                    91 92 97 106 108 110 112
                    113 114
examples:           11 12 17 38 45 47 49 55
                    71 93 114
executable:         7 8 9 10 11 12 14 22 117
executables:        7 8 9 16 113
exercise:           44
experiment:         78
exponents:          27
eye:                101
facets:             80

       
                                                  POV-Ray V1.0 Page 128
       
       
fade:               83
faked:              24
falloff:            37 38 39
falwell:            90 91 93
famous:             44 75
fantastic:          5 57
field:              30 33 53 55 56 57 58 59
fields:             6 53 55 56 57 58 61 119
file:               6 7 10 11 12 13 14 16 17
                    18 19 20 22 23 24 25 26
                    27 28 29 30 46 47 49 51
                    55 56 57 58 79 81 90 110
                    114 118
filename:           11 13 14 17 26 55 90 92
                    93 94 108 109
filenames:          20 93
files:              5 6 8 9 10 11 13 15 16 17
                    18 20 26 27 30 48 55 56
                    57 69 93 99 112 114 117
                    118 119
film:               73
filter:             75 92
filtered:           75 77
filters:            74 77
fingers:            44
flat:               36 45 48 56 60 77
flatness:           59
flattened:          45
flicker:            16 73
flip:               64 115
flipped:            61
float:              27
floating:           25 27 53 72 89 109 110
floats:             27 114
floor:              11 24 45 61
floors:             61
flying:             73
focus:              33
fog:                96
folder:             9
fpu:                50
fract:              55
fractal:            6 9 55 56 57 85 89 115
fractals:           9
fractint:           9 57 58 59
frame:              16 113
frames:             88
freeware:           5 57
frequencies:        88

       
                                                  POV-Ray V1.0 Page 129
       
       
frequency:          88 89 97
front:              21 23 26 27 42 45
fundamentals:       116
future:             86
galvanized:         84
garbage:            84
geometry:           6 59 60 113
Gerono:             51
gif:                22 55 56 57 58 90 91 92
                    93 94 95 108 109
glass:              6 79
glop:               52
glossiness:         80
glows:              77
gold:               6 95
gradient:           82 84 85 90 92 93 94 108
gradients:          84 85
grain:              73
granite:            6 82 85 86 89
gray:               59
green:              14 22 25 27 28 32 37 38
                    39 41 43 57 66 71 74 75
                    76 77 79 82 83 85 97
grey:               37 75 76 83 93
halt:               7
halted:             7
ham:                7 109
hand:               34 44 48 59 111 115
handbook:           52 117
handed:             33 100
handedness:         33 44
hardware:           8
heading:            101
headquarters:       9
height:             6 11 13 18 30 36 55 56 57
                    58 59 61 93 94 100 101
                    111 115 119
hicolor:            6
highlight:          22 23 71 80 81
highlighted:        70
highlighting:       6 78 79 80
highlights:         6 22 37 71 78 80 81 88
hints:              4 5 113
historical:         21
hole:               50 51 60 63
home:               9 17 20 93
honey:              52
horizons:           80
hotspot:            38

       
                                                  POV-Ray V1.0 Page 130
       
       
hourglass:          46
humans:             25
hyperboloid:        6
hyperboloids:       24 46
ibm:                6 7 8 9 13 14 15 18 36 50
                    57 58 113 115 118 119
identifier:         37
iff:                90 91 93 109
image:              4 5 6 7 11 12 13 14 15 16
                    17 18 19 21 22 34 35 36
                    55 56 57 59 73 90 91 92
                    93 94 95 98 100 102 103
                    108 109 112 115 116 117
inaccuracies:       61
include:            5 6 8 10 17 20 24 26 27
                    30 46 47 67 113 114
included:           7 8 9 10 11 12 14 22 25
                    30 38 57 58 59
includes:           5 9 20 96
index:              55 56 58 79 93 94 107
indigo:             57
indoors:            82
infinite:           24 25 45 60 63 69 110
infinitely:         91 110 111
infinity:           24 25
inlaid:             95
input:              11 13 14 17 20 26 110 112
inside:             39 47 48 53 61 62 63 64
                    67 87 111 112 113
install:            9
installation:       7 9
installing:         9
instance:           34 98
intermediate:       57
internet:           9 118 119
interpolate:        90 91 93 94 95
interpolation:      48 82 91 93 94 95
interpolations:     95
intersect:          65
intersected:        58
intersection:       31 40 48 58 60 61 63 64
                    65 66 67 80 110 111
intersections:      6 50 60 101
intersects:         58
inverse:            61 64
invert:             60
inverted:           101 115
invisible:          22 37 38 113
ior:                78 79 97

       
                                                  POV-Ray V1.0 Page 131
       
       
islands:            56
jade:               6 11 84 86
jaggies:            15 95
jaggy:              15 91 93 94 95
japan:              9
jittered:           15
jittering:          15
key:                18
keypress:           13
keyword:            9 23 28 30 34 35 38 39 41
                    49 52 61 64 72 81 84 89
                    91 92 93
keywords:           79 84 100
kilobytes:          16
landscape:          36
landscapes:         6 55 56 57
language:           5 6 10 19 25 26 27 30
latitude:           101
layer:              73 75 87 95
layered:            4 31 73 76 79 86 87 91 95
                    105
layering:           75
layers:             73 86
lemnisca:           51
lemniscate:         49 51
lens:               20 21 33 35 115
leopard:            6 86 120
library:            6 13 17 18 20 93 115
light:              5 17 22 23 25 32 36 37 38
                    39 70 74 75 77 78 79 80
                    81 88 101 111 112 113
lighting:           5 6 8 17 44 50
lights:             10 37 41
location:           20 33 34 36 37 38 55 71
                    100 101 110 111
longitude:          101
lowercase:          20
Macintosh:          7 9 115 119
macro:              30
mactech:            119
magnenat:           116
magnify:            23
magnitude:          108 111
mail:               118
map:                58 69 74 76 82 83 84 85
                    86 90 91 92 93 94 95 97
                    108 109
mapped:             58 85 90 91 92 93 94 108
                    112

       
                                                  POV-Ray V1.0 Page 132
       
       
mapping:            4 82 90 91 92 93 94 108
maps:               69 74 82 83 86 90 91 93
                    94 95 108 109 112 119
marble:             6 11 40 41 42 69 73 82 84
                    86 103 104 105
marching cubes:     107
masonry:            84
material:           6 40 90 94 95 103
materials:          6 8 69 105
math:               7 49 50
mathematical:       24 46 49 52 69 117
mathematically:     5 51 55
metal:              81 84 89 95
metallic:           78 80 81 89 97
metals:             6
mickey:             28 29
microscopic:        80
mirror:             6 25 80 108
mirrored:           25 78
mirroring:          85
model:              80 100
modelling:          53
modes:              91
monitors:           115
moose:              31
mountains:          6
moving:             5 72 111
mypic:              92
mysphere:           114
nature:             15
negate:             115
negative:           19 47 52 54 92 108 111
neighbor:           15
nested:             20 26 27
newsletter:         116
noise:              15 73 83 84 85 89 103 104
                    105
normalized:         91 95
normals:            48 110 112
north:              101 118
number:             9 15 16 17 24 27 30 32 52
                    53 55 56 57 59 74 82 85
                    88 92 93 94 98 104 108
                    113
numbers:            15 17 28 53 57 74 77 82
                    93
numeric:            30 32 82
numerical:          61
object:             6 14 15 21 22 23 24 25 26

       
                                                  POV-Ray V1.0 Page 133
       
       
                    28 29 30 31 32 38 39 40
                    41 42 43 44 45 47 48 49
                    50 59 60 61 64 65 66 67
                    68 71 72 73 74 75 77 78
                    80 81 82 83 84 90 91 92
                    96 98 101 102 105 106 107
                    108 109 110 111 113 114
objectrotation:     114
objects:            6 10 15 25 28 30 33 37 40
                    41 44 48 58 59 60 62 63
                    65 66 67 69 73 75 77 78
                    80 90 97 98 101 102 106
                    109 110 111 113
oblate:             45
ocean:              88
octaves:            97 105
onion:              6 86 120
opaque:             74 77
operating:          8 9 10
optimization:       111
optimize:           111
optimized:          67
optimum:            14
option:             14 15 16 17 18 20 41 83
                    88 93 102 113
optional:           15 27 49 56 71 72 86 92
options:            7 12 14 17 18 20 22 90 93
                    97
orange:             57 89
organ:              84
organic:            52
orientation:        16 29 33 36 101 109
orientations:       50
oriented:           85
origin:             24 45 46 47 48 58 113
orthogonal:         101
overflow:           98 105 110
override:           18 19 97
overwrite:          12
paint:              56 57 94
paints:             105
palette:            55 56 57 59 91 93 94
palettes:           91
panther:            11
papers:             111
paraboloid:         6 47
paraboloids:        24 46
parameter:          13 16 17 21 56 58 69 71
                    77 88 101 113

       
                                                  POV-Ray V1.0 Page 134
       
       
parameters:         12 13 14 17 18 27 40 69
                    70 71 88 114
parser:             97 106
parsing:            106
particle:           105
pathname:           17
pattern:            24 69 70 71 73 74 82 83
                    84 85 86 88 89 90 91 93
                    94 116
patterns:           23 69 70 74 82 83 85 88
pause:              13
PCGRAPHICS:         9
penumbral:          24
periodicals:        115
perspective:        5 21
perturb:            89
perturbation:       88 89
perturbed:          73
perturbs:           93
phase:              88 97
phone:              9 118
phong:              6 22 23 29 32 45 48 64 71
                    72 73 74 76 78 79 80 81
                    88 97 118
Piclab:             15 111
pine:               6
pinhole:            33
pink:               57
pinkalabaster:      66
pipe:               84
piriform:           51
pitch:              101
pixel:              14 15 36 55 57 58 93 94
                    95 101 102 109 115
pixels:             6 11 13 16 18 21 36 49 55
                    73 90 93 95 100 113
planar:             90 91 93 112
plane:              6 24 45 46 58 61 67 92
                    106 110 111 112
planes:             45 60 61 83 111
planets:            48
plastic:            77 80 81
point:              11 19 21 25 26 27 33 34
                    35 36 37 38 39 41 42 44
                    47 53 54 56 59 61 63 72
                    73 74 82 83 89 93 94 95
                    98 101 104 105 109 110
                    111
points:             24 27 35 37 38 44 46 53

       
                                                  POV-Ray V1.0 Page 135
       
       
                    59 61 83 100 104 110
polished:           80
polygon:            112
portability:        111
portable:           8
pot:                55 56 57 58
povibm:             7
povlegal:           117
povmap:             55
povray:             7 9 10 11 12 17 18 19 22
povrayopt:          12 18 19
preview:            59
primitive:          44 45 61
primitives:         6 48 61
prodigy:            118
project:            90 93
projection:         59 108
projections:        58
projector:          90 91 108
publisher:          116
putty:              52
qcone:              47
QRT:                14
quadric:            24 25 44 45 46 47 50 64
                    66 110
quadrics:           24 46 47 49 50 110 118
qualities:          113
quality:            6 13 17 41 69 113
quartic:            49 50 51 52
quartics:           6 49 50 119
radii:              54
radius:             21 23 24 37 38 39 44 47
                    49 50 51 52 53 54 55 90
                    98
random:             15 16 17 49 71 72 84 89
                    104 113
randomly:           58 104
randomness:         72 73 97
range:              6 11 13 17 77 78 80 81 82
                    83 88 89 92 105 108 112
ranges:             74 104
ranging:            69
raw:                6 13 14 15
raytracer:          26 58 59 99 101 102 107
                    110 113
raytracers:         19
raytracing:         9 16 45 104 111 115
readability:        26
readable:           25

       
                                                  POV-Ray V1.0 Page 136
       
       
realtime:           113
red:                11 14 15 21 22 24 27 28
                    32 37 38 39 41 57 66 71
                    74 75 76 77 79 82 83 85
                    86 97 103
reflect:            37 71 78
reflected:          17 25 79 98 101
reflecting:         98 101
reflection:         25 69 71 78 79 87 97
reflections:        5 88
reflective:         70 80 98
reflectivity:       44
reflects:           70 88 98
refracted:          17 78
refracting:         101 107
refraction:         78 79 97 107 112
refractive:         70
register:           92
registers:          14 91
Renderman:          116
repeatable:         15
requirements:       109
requires:           7 49 88 89
resolution:         56 95 100
reverse:            74
reversed:           108
revolved:           50
right:              11 19 20 21 22 23 25 27
                    33 34 35 36 42 43 44 73
                    100 101 108 109 112 115
ring:               50 51
rings:              69 104 114
ripple:             88
ripples:            6 70 87 88
rock:               103
roof:               65
room:               25 77 104 105
rotate:             27 28 35 36 40 41 42 44
                    45 46 47 48 58 70 71 72
                    73 88 92 101 112 114
rotated:            29 34 36 41 42 46 48 49
                    51 52 57 59 60 72 83 109
rotates:            21 42
rotating:           36 42 49 109
rotation:           42 44 48 114 115
rotations:          42 44 48
rough:              15 23 81
roughly:            23 53
roughness:          80 81 97 110

       
                                                  POV-Ray V1.0 Page 137
       
       
round:              70 115
rule:               23 61
saddle:             24 46
sandpaper:          112
sapphire:           6
satellite:          24
saturation:         80
scale:              23 25 28 32 40 41 42 43
                    45 46 47 48 52 58 59 64
                    66 70 71 72 73 74 75 76
                    85 88 89 92 93 110 112
                    114
scaled:             23 25 29 41 45 46 48 49
                    52 56 57 59 60 72 83 91
                    93 109 110 114
scales:             40 41 51
scaling:            23 25 44 51 84 85 86 93
                    109 110 111
scan:               16
scanline:           16
scanlines:          16
scanned:            57
scene:              5 6 7 8 9 10 11 12 13 15
                    16 17 18 19 20 21 22 25
                    26 27 28 29 30 32 33 35
                    37 39 40 41 46 55 71 78
                    96 97 98 99 100 108 110
                    111 113 114 117 119
scenes:             5 6 8 10 11 21 27 49 59
                    67
screen:             11 16 19 21 33 36 101 110
                    111
screens:            36
SGI:                8
shade:              85
shaded:             6 48 70
shades:             74
shading:            5 69 70 88
shadow:             24 38 39 77 108 111
shadowed:           78 101
shadows:            17 24 37 111
shape:              6 21 24 29 30 31 36 38 39
                    40 41 42 44 45 47 48 49
                    51 52 56 58 59 60 61 62
                    63 64 65 66 67 68 69 70
                    71 72 73 77 83 88 90 91
                    93 103 104 106 113 114
shapes:             5 6 8 20 24 28 30 31 37
                    38 40 41 44 46 47 48 49

       
                                                  POV-Ray V1.0 Page 138
       
       
                    50 51 52 58 59 60 61 62
                    63 65 66 67 68 69 91 102
                    106 110 115
shapesq:            49
shell:              104
shinier:            80
shininess:          78
shining:            23 77 78
shiny:              6 22 23 70 71 78 79
sideways:           101
Sierra:             6
SIGGRAPH:           103 116
sign:               27 33
sine:               55
sky:                6 33 34 35 57 73 83 98
                    101
slash:              26
slide:              90 91 108
smooth:             6 15 23 48 49 54 57 59 70
                    74 81 82 85 104 112
smoothed:           91 93
smoother:           15 56 57 95 102
smoothing:          13
smoothly:           52 53 73 74 104
smooths:            95
soft:               24 33 37 38 111
software:           5 7 8 117
solid:              6 56 58 59 60 62 69 73 83
                    103 113
solidly:            83
south:              101
spatial:            111
specular:           6 22 78 79 80 81 97
speed:              16 45 65 67 111
speeds:             50 67
spelling:           77
sphere:             6 21 22 23 24 28 30 31 32
                    39 40 41 42 43 44 45 47
                    48 50 53 54 60 64 65 66
                    67 68 70 72 73 74 75 78
                    90 91 93 94 95 106 114
spheres:            19 39 44 45 46 52 53 54
                    59 61 86 98 115
spherical:          90 91 93 94
spheroids:          45
spikes:             58
spin:               48
spline:             82 112
spotlight:          37 38 39 111

       
                                                  POV-Ray V1.0 Page 139
       
       
spotlights:         6 38 119
spotted:            82 84 89
sqrt:               49
square:             36 56 108 115
squares:            83
squig:              94 95
squiggles:          94 95
squish:             23 42
stack:              98 105
stdinc:             114
steel:              29
steering:           29
stone:              9 84 86
stones:             69 86 119
storage:            57
stormy:             84
Sturm:              49 52
subdirectories:     10
subdirectory:       9 10 20 93
sunset:             6
supercomputer:      8
superimpose:        60
surface:            6 17 21 24 25 44 45 46 47
                    48 49 50 53 54 59 61 69
                    70 71 73 77 78 79 81 83
                    87 88 89 90 92 93 94 98
                    107 111 112
surfaces:           6 24 41 46 47 49 50 51 52
                    60 112 117
swirled:            84
syntax:             30 36 37 38 42 44 47 49
                    52 55 59 71 77 82 83 84
                    85 86 88 89 90 93 94 97
                    98
Targa:              6 13 14 15 17
telephoto:          33
temperature:        104 105
temperatures:       104
temple:             11
texture:            6 17 21 22 23 24 25 28 29
                    31 32 38 39 40 41 42 43
                    45 60 64 65 66 70 71 72
                    73 74 75 76 77 78 79 81
                    82 84 85 86 87 88 90 91
                    92 94 95 97 98 103 104
                    105 106 107 109 112 113
                    114 115
textured:           29 82 103
textures:           4 5 6 8 16 17 20 23 28 30

       
                                                  POV-Ray V1.0 Page 140
       
       
                    31 41 47 69 71 72 73 74
                    75 76 79 81 86 87 88 89
                    90 91 93 94 95 97 98 103
                    104 105 106 109 112 113
                    114 120
texturing:          83 105
thermometer:        104
thick:              111
thickness:          110
thin:               58 111
threshold:          15 52 53 54
tile:               86
tiled:              11 91
tiles:              86 87 94
tips:               4 5 24 113
tolerance:          15
torus:              6 25 49 50 51 90 91
trace:              9 27 52 98 107
traceaholics:       9
traced:             15 44 101
tracer:             5 24 25 26 33 40 56 58 59
                    67 70 74 96 102 113
tracers:            33
tracing:            5 8 13 14 16 20 33 35 37
                    58 65 67 78 83 100 102
                    110 115
transform:          46 48 71 72
transformation:     40 41 43 48 70 85
transformations:    40 41 48 58 65 70 71 72
                    109 114
transformed:        41 58 109
transforming:       43
translate:          25 28 29 35 36 41 42 43
                    45 46 47 48 58 64 66 67
                    70 71 72 73 85 88 92 112
                    114
translated:         29 36 41 46 48 49 51 52
                    57 59 60 72 83 109
translates:         43 74
translating:        36 43 49 109
translation:        48
translations:       44
transmit:           79
transmitted:        17
transparency:       69 73 77 78 92 112
transparent:        38 69 70 73 74 75 76 77
                    78 79 89 91 92 98
transposed:         108
tree:               10 30 69 104

       
                                                  POV-Ray V1.0 Page 141
       
       
triangle:           6 48 55 58 62 112
triangles:          6 48 55 56 57 58 59 61 62
                    110 112
turbulent:          83 84
tutorial:           5 19
undefined:          67 91 113
underflow:          110
union:              28 29 31 39 40 48 60 63
                    65 66 98 109
unions:             6 60
unit:               21 23 27 55 56 58 91 94
                    114
units:              20 21 22 27 42 43 45 46
                    47
universe:           20 27 33 35 100
unix:               8
utilities:          8 48 59 112
utility:            10 59
vapor:              83
vaqueros:           117
variable:           12 17 18 19 106
variables:          49
vax:                8
vector:             21 24 27 33 34 35 44 49
                    84 85 92 93 100 101 108
                    110 111 112 115
vectors:            20 27 32 33 34 35 36 41
                    100 101 110 112 114 115
vein:               74
veins:              74
verbose:            86
verlag:             116
vertex:             58 112
vertexes:           58
vertical:           69
vertices:           48
VGA:                36 115
viewplane:          100
viewpoint:          33
virtual:            22
visible:            38 60 73
vision:             5
visual:             53
visualize:          104
volume:             113
volumes:            113
Waite Group:        115
wall:               45 46
water:              55 56 58 79 83 88

       
                                                  POV-Ray V1.0 Page 142
       
       
wave:               88
waves:              6 70 87 88 89
west:               9 101
wheel:              29
wheels:             65
white:              22 27 28 37 39 57 59 75
                    76 77 78 83 92 93 96 103
wide:               6 11 21 33 36 47 55 115
width:              11 13 18 21 36 47 49 100
                    110 115
wind:               105
windows:            7 8
wood:               6 23 69 71 73 74 75 76 82
                    84 86 88 104 105 106 107
                    114
wooden:             24 95
wrinkle:            89
wrinkled:           6 89
wrinkles:           70 89
wrinkling:          89
yellow:             63 64 66 82 83
zero:               16 25 38 43 53 54 56 72
                    78 108 110
zip:                7 114