FBHFµI╙'" 
                       ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
                       █ PovShell Version 3.0 █
                       ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
                         Welcome to PovShell -
                      The Development Environment
                         to the POV-Raytracer!
/
                         Online-help contents
<
                   1 How to use the Help system
                   2 Menu overview
                     2.1 File menu
                     2.2 Edit menu
                     2.3 Search menu
                     2.4 Windows menu
                     2.5 Options menu
                     2.6 Setup menu
                     2.7 Templates command
                     2.8 Utilities menu
                     2.9 Run command
                     2.10 Help menu
                   3 The editor
                   4 Help Index
                   5 POVRay reference
           
                   A Legal Information
                   B Frequently Asked Questions
                   C Command line parameters
                   D Warnings and Errors
                   E Technical notes  
                   F Contacting the author
h┐	Γ	*P	v

Ü┼φ
	2
FR
Φr@ñA╦B√C(DQEx'
 Dragmode ▄
 ▀▀▀▀▀▀▀▀▀▀
U
Use the Cursor-keys to drag the window around and Shift + Cursor-keys to resize it. 
See also: Windows│Size/Move $z'!
 Help on Help ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀
D
Use the cursor-keys and PgUp/PgDn to scroll through the Help text. ┴
Some words of the text may appear in a different color. These are cross-references to other help topics. Use the TAB-key to highlight these keywords, then press ENTER to switch to that topic. Ç
Like the editor-windows Help-windows may be resized, zoomed and moved across the screen (see the help on the Windows-command). E
For a list of all PovShell help topics refer to the PovShell Index. òF▄'

 The Editor ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀
D
The Editor uses WordStar-compatible keys. Here is a complete list: )
  Cursor-movement:
   Up         or Ctrl-E:   one line up
   Down       or Ctrl-X:   one line down
   Left       or Ctrl-S:   one column left
   Right      or Ctrl-D:   one column right
   PgUp       or Ctrl-R:   one page up
   PgDown     or Ctrl-C:   one page down
   Ctrl-Left  or Ctrl-A:   one word left
   Ctrl-Right or Ctrl-F:   one word right
   Home       or Ctrl-Q-S: go to line start
   End        or Ctrl-Q-D: go to the end of the line
   Ctrl-PgUp  or Ctrl-Q-R: go to the top of the text
   Ctrl-PGDn  or Ctrl-Q-C: go to the end of the text
g
  Delete-keys:
   Delete    or Ctrl-G:   delete character under the cursor
   Backspace or Ctrl-H:   delete character left of the cursor
                Ctrl-T:   delete word beginning at cursor position
                Ctrl-Y:   delete actual line
                Ctrl-Q-H: delete line up to cursor
                Ctrl-Q-Y: delete line beginning at cursor

  Block keys:
                Ctrl-K-B: activate select mode
   Shift-Ins or Ctrl-K-C: paste block from Clipboard
                Ctrl-K-H: toggle block-highlight
   Ctrl-Ins  or Ctrl-K-K: copy block to Clipboard
   Ctrl-Del  or Ctrl-K-Y: cut block to Clipboard
σ
  Other keys:
   Ins   or Ctrl-V:   toggle Insert mode
   Enter or Ctrl-M:   new line
            Ctrl-Q-A: replace a text string
            Ctrl-Q-F: find a string
            Ctrl-L:   search again
            Ctrl-U:   undo
ƒ
You may insert PovRay-command templates in the current text at the actual cursor position by selecting the Template-Command of the Top- menu. Or press Alt-M. »
Other key combinations have nothing to do with editing but let you control the PovRay- options which is normally done by using the Top-menu-item Options. They are called the √
  Option keys:
   Ctrl-O-A: AntiAliasing
   Ctrl-O-B: Buffersize
   Ctrl-O-C: Continue
   Ctrl-O-D: Display-Adapter
   Ctrl-O-E: End-Row/-Column
   Ctrl-O-F: Outputformat
   Ctrl-O-H: ImageHeight
   Ctrl-O-J: AAJitter
   Ctrl-O-K: Clock-Value
   Ctrl-O-L: Library-paths
   Ctrl-O-M: Bounding slabs
   Ctrl-O-P: Pause when finished
   Ctrl-O-Q: Quality
   Ctrl-O-R: Number of AA-rays (to be squared)
   Ctrl-O-S: Start-Row/-Column
   Ctrl-O-V: Verbose
   Ctrl-O-W: Image Width
   Ctrl-O-X: Allow early exit
g
Finally you can influence the size and position of the editor-windows by using the Windows- commands. 
J{	'
 File ▄  (Alt-F)
 ▀▀▀▀▀▀
[
Use the 'File'-menu to execute file-related commands. It consists of the following items: R
  Open a file   New file
  Save file     Save as...
  DOS Shell     Exit program
yçÆá
¡	╗'
 Edit ▄  (Alt-E)
 ▀▀▀▀▀▀
2
The 'Edit'-menu consists of the following items: P
    Undo             Cut
    Copy             Paste
    Show Clipboard   Clear
d
Except of 'Show clipboard' these commands may also be executed by certain keystrokes (see Editor). Rck|å ù°'
 Search ▄  (Alt-S)
 ▀▀▀▀▀▀▀▀
^
The 'Search'-menu is for finding or replacing strings in your text. It consists of the items  
 Find   Replace   Search Again
!"å#É' 
 Windows ▄  (Alt-W)
 ▀▀▀▀▀▀▀▀▀
U
The 'Window'-menu contains commands concerning windows like closing or moving them. 
Note that you can perform most of these tasks by using hotkeys or by mouse-clicking on the window symbols ( [■] [] [] ─┘ ). T
 Size/Move        Zoom
 Tile             Cascade
 Next             Previous
 Close
$≈	%&'(()9*C' 
 Options ▄  (Alt-O)
 ▀▀▀▀▀▀▀▀▀
v
By this menu you can control all the PovRay tracing-options and save them into DEF-files or restore them from there. s
The control panels can also be reached by using the Ctrl-O Quick key (see Option keys in the Editor-description). 
Control panels: 5  Output    Display
  Trace     Library-paths
  Misc

File commands: :  Save Options    Save Default Options
  Retrieve Options
	⌡+,'-1.;
/K0b1r2ë'
 Setup ▄  (Alt-T)
 ▀▀▀▀▀▀▀
u
The 'Setup'-menu is for setting up the PovShell-program. For more information see the description of the menu-items +
   Directories
   Editor
   Colors
   Run
3û4Ñ9»;╣'$
 Templates ▄  (Alt-M)
 ▀▀▀▀▀▀▀▀▀▀▀
y
The 'Templates'-menu gives you a list of all the templates defined in the file POVSHELL.TPL in your PovShell-directory. t
If you select one of the templates it will be inserted in the current editor window at the actual cursor position. ╢
This command was designed to have quick access to PovRay command-templates, however, you may put *any* kind of text in a template, e.g. Copyright-notes, standard headers and so on. k
It is recommended that you use the editor autoindent-mode when inserting templates (see Editor settings). ü
For information on how to define your own templates look at the description of the Template file format in the Technical notes. 4!Dú'&
 Utilities ▄  (Alt-U)
 ▀▀▀▀▀▀▀▀▀▀▀
 
ôThe Utils-menu includes two tools to create Batch-Files and Clock Animation runs. Here you can also define and call your own application programs. 3
For further explanations see the following items: C  Create Batch
  Clock Animation
  Define Apps
  Call Applications
<∩=■>?'#
 Run ▄  (Alt-R or Ctrl-F9)
 ▀▀▀▀▀
w
'Run' will launch the POV-Raytracer with the POV-file you are currently editing and the tracing-options you have set. f
If you have chosen to produce an output-file you will be prompted for its name in a file select box. :≡'
 Help ▄  (Alt-H)
 ▀▀▀▀▀▀
ì
The help menu offers a more direct access to the context-sensitive help topics and also includes a command to popup the System Info Window. 
It consists of the items a  Contents
  PovShell Index
  Help on Help
  Last Topic
  PovRay reference
  About
  System Info
─╧α∩
ⁿ'#
 Help│Contents ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
O
This command will display the contents page of POVShell's online help system. ':
 Help│PovShell Index ▄ (Shift-F1)
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
R
This command will display a complete list of the available PovShell help topics. '+
 Help│Help on Help ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
K
This command displays information on how to use the PovShell Help system. '0
 Help│Last Topic ▄ (Alt-F1)
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
è
Pressing Alt-F1 outside or inside the PovShell Help system will display the previous help topic. PovShell remembers the last 100 topics. '=
 Help│PovRay reference ▄ (Ctrl-F1)
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
┘
Pressing Ctrl-F1 will display the contents page of the PovRay reference system. The PovRay reference topics were generated from the official PovRay documentation file POVRAY.DOC supplied with the raytracing program. '
 Help│About ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀
p
The 'About'-box displays informations on the PovShell-program such as author, version number and release date. '2
 Help│System Info ▄  (Alt-0)
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
m
The System Info Window displays some useful information on your computer hard- and software configuration:  √
 - Processor type
 - Co-Processor type (if present)
 - Primary video board
 - DOS version
 - Windows version (if POVShell was launched from Windows)
 - Free space on Harddisk C:
 - Program heap (s. Technical notes for detail)
 - Free Extended Memory
Dg''
 File│Open... ▄  (F3)
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀
X
Use the File│Open-command to open a POV-file (or any other text file) with the editor. -
The command will display a File select-box. :£'
 File│New ▄
 ▀▀▀▀▀▀▀▀▀▀
@
This command will open a new empty and untitled editor window. '!
 File│Save ▄  (F2)
 ▀▀▀▀▀▀▀▀▀▀▀
Ä
The File│Save-command will save the file of the current editor window. If this file is still untitled Save will work exactly like Save as... Ñ
''
 File│Save As... ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
à
This command lets you save the current editor file using a new name. You will prompted to choose the new name in a File select-box. :£'%
 File│DOS Shell ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
¼
The File│DOS Shell-command will exit PovShell temporarily and open a DOS-shell. To leave the DOS-shell and resume the PovShell-program again enter EXIT at the DOS-prompt. '$
 File│Exit ▄  (Alt-X)
 ▀▀▀▀▀▀▀▀▀▀▀
.
This command will end your PovShell session. '%
 Edit│Undo ▄  (Ctrl-U)
 ▀▀▀▀▀▀▀▀▀▀▀
C
The Edit│Undo-command lets you undo your last deletion/insertion. '&
 Edit│Cut ▄  (Shift-Del)
 ▀▀▀▀▀▀▀▀▀▀
_
The Cut-command deletes the selected text block from the file and places it in the Clipboard. "
See also Edit│Copy    Edit│Paste *         Edit│Clear   Edit│Show Clipboard
É	¥
 ▒
╛''
 Edit│Copy ▄  (Ctrl-Ins)
 ▀▀▀▀▀▀▀▀▀▀▀
A
The Copy-command copy the selected text block to the Clipboard. "
See also Edit│Cut     Edit│Paste *         Edit│Clear   Edit│Show Clipboard
sÇ
 ö
í'*
 Edit│Paste ▄  (Shift-Ins)
 ▀▀▀▀▀▀▀▀▀▀▀▀
]
The Paste-command will insert a text block from the Clipboard to the current editor window. !
See also Edit│Cut     Edit│Copy *         Edit│Clear   Edit│Show Clipboard
Æƒ	 ▓
┐'/
 Edit│Show Clipboard ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
╧
This command will show you a special editor window which is reserved for interchanging text blocks between multiple file editor windows. It is normally hidden and may be accessed by the following commands: 5
   Edit│Cut     Edit│Copy
   Edit│Paste   Edit│Undo
	
*	')
 Edit│Clear ▄  (Ctrl-Del)
 ▀▀▀▀▀▀▀▀▀▀▀▀
;
This command will clear the selected text from your file. c
Attention: The text block will *not* be moved to the Clipboard, Undo will *not* work after Clear! ª'	1
 Search│Find... ▄  (Ctrl-Q-F)
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
Ç
In the Search│Find-dialogbox you may specify a text string to be find in the current text and options to influence the search. 3
The dialogbox consists of the following elements: c
    Text to find
   ┌─────────────────────┐
   │                     │
   └─────────────────────┘
.Enter the text to be found in this inputline. 
   [ ] Case sensitive
P
Mark this checkbox if you want to distinguish between uppercase and lowercase. 
   [ ] Whole words only
╫
Mark this checkbox if you only want to search for whole words. Example: If you are searching for the string 'light' and have this checkbox marked the string 'light' will be found but not the string 'light_source'. '7
 Search│Replace... ▄  (Ctrl-Q-A)
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
f
In the Search│Replace-dialogbox you may specify a string to be found and replaced by another string. 3
The dialogbox consists of the following elements: c
    Text to find
   ┌─────────────────────┐
   │                     │
   └─────────────────────┘
1Enter the text to be replaced in this inputline. _
    New text
   ┌─────────────────────┐
   │                     │
   └─────────────────────┘
|
Enter the new text in this inputline. You can also leave this line blank to delete the occurence(s) of the search strings. 

   [ ] Case sensitive
P
Mark this checkbox if you want to distinguish between uppercase and lowercase. 
   [ ] Whole words only
╫
Mark this checkbox if you only want to replace whole words. Example: If you are replacing for the string 'light' and have this checkbox marked the string 'light' will be replaced but not the string 'light_source'. 
   [X] Prompt on replace
v
Mark this checkbox if you want to be asked each time the string is found before it is replaced. This is the default. 
   [ ] Replace all
ë
Mark this checkbox if you want all matching strings to be replaced. By default only the first occurence of the string will be replaced. '9
 Search│Search Again ▄  (Ctrl-L)
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
=
This command will repeat the last Find- or Replace-command. !]"f'4
 Window│Size/Move ▄  (Ctrl-F5)
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
M
By this command you can change the size and position of the current window. 
 ▄▄▄▄▄▄
  Size
 ▀▀▀▀▀▀
e
By using the cursor-keys while holding down the shift-key you change the size of the active window. {
If the active window has got a mouse corner (─┘) you can also use the mouse to resize the window by dragging this corner. 
 ▄▄▄▄▄▄
  Move
 ▀▀▀▀▀▀
▓
By using the cursor-keys after selecting the Window│Size/Move-command you move the window across the screen. Press Enter to confirm the new position and finish moving/resizing. H
You can also use the mouse to move a window by dragging its title bar. '%
 Window│Zoom ▄  (F5)
 ▀▀▀▀▀▀▀▀▀▀▀▀▀
ï
The Zoom-command will expand the active window to its maximum size, resp. will restore its original size if it has already been expanded. Ö
This can also be done by double-clicking on the window's title bar or by clicking on the symbols [] resp. [] in the upper right corner of the window. '
 Window│Tile ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀
M
After tiling the editor-windows you will see them altogether on the screen. L
 ┌────────────────────────────────────┐
 │ ╔════════════1══╗┌────────────2──┐ │
 │ ║               ║│               │ │
 │ ║               ║│               │ │
 │ ║               ║│               │ │
 │ ║               ║│               │ │
 │ ╚═══════════════╝└───────────────┘ │
 │ ┌────────────3──┐┌────────────4──┐ │
 │ │               ││               │ │
 │ │               ││               │ │
 │ │               ││               │ │
 │ │               ││               │ │
 │ └───────────────┘└───────────────┘ │
 └────────────────────────────────────┘
             Tiled windows
'%
 Window│Cascade ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
b
The Window│Cascade-command will stack all the editor windows beginning in the upper left corner. Y
 ┌──────────────────────────1─┐
 │┌─────────────────────────2─┐
 ││┌────────────────────────3─┐
 │││╔═══════════════════════4═╗
 │││║                         ║
 │││║                         ║
 │││║                         ║
 │││║                         ║
 │││║                         ║
 └└└╚═════════════════════════╝
        Stacked windows
'%
 Window│Next ▄  (F6)
 ▀▀▀▀▀▀▀▀▀▀▀▀▀
.
By 'Next' you select the next editor window. '3
 Window│Previous ▄  (Shift-F6)
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
6
By 'Previous' you select the previous editor window. '+
 Window│Close ▄  (Alt-F3)
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀
,
This command will close the active window. u
You can also use the mouse to do this by clicking on the close-button ([■]) in the upper left corner of the window. '+
 Options│Output... ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
x
In the Options│Output-dialogbox you can control all the PovRay-options that deal with the production of an outputfile. 
 ▄▄▄▄▄▄▄▄
  Format
 ▀▀▀▀▀▀▀▀
5These radiobuttons control the format of the output: Ω  ( ) none  : no outputfile
  () TGA   : 24-bit Targa format
              (This is the default)
  ( ) Dump  : The Atari DIS format
  ( ) RAW   : produces 3 outputfiles
              with the extensions
              .R8, .G8 and B8
$
 ▄▄▄▄▄▄▄▄▄▄
  Continue
 ▀▀▀▀▀▀▀▀▀▀
FControl the continuation of an aborted trace with these radiobuttons:   ( ) yes   : If the output-file already exists
              PovRay will assume that an aborted
              trace is to be continued
  () no    : If the output-file already exists
              it will be overwritten
              (This is the default)
*
 ▄▄▄▄▄▄▄▄▄▄▄▄
  Buffersize
 ▀▀▀▀▀▀▀▀▀▀▀▀
4Enter the size of the outputfile-buffer in KB here. k Note: Entering -1 will disable buffering, entering 0
       uses the default. The maximum amount is 8192.
'	-
 Options│Display... ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
u
In the Options│Display-dialogbox you can control the PovRay-options that concern the display of the traced picture. !
 ▄▄▄▄▄▄▄▄▄
  Adapter
 ▀▀▀▀▀▀▀▀▀
xSelect the Display-Adapter and -mode to use with the Adapter-radiobuttons. The default is *not* to display the picture. !
 ▄▄▄▄▄▄▄▄▄
  Palette
 ▀▀▀▀▀▀▀▀▀
!Select the palette model to use: <  () 332          : the standard 8 bits 256-color VGA-mode
                     (this is the default)
  ( ) HighColor    : 15/16 bits  32,768/65,536 colors
  ( ) HSV          : use the HSV model in VGA-mode
  ( ) GrayScale    : use Grayscale palette with VGA-display
  ( ) TrueColor    : 24 bits  16,777,216 colors
?
 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  Size/Width/Heigth
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
πHere you can control the image size. The most common adapter resolutions are directly selectable. If you want to use different values select the 'Custom'-button and enter the 'Width' and 'Height' on the appropiate input-lines. ')
 Options│Trace... ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
g
In the Options│Trace-dialogbox you can control the PovRay-options that influence the tracing process. !
 ▄▄▄▄▄▄▄▄▄
  Quality
 ▀▀▀▀▀▀▀▀▀
kValues from 0 to 9 are allowed. The higher the value the better the quality. The default is the maximum 9. ?
 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  [ ] Anti-Aliasing
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
ìMark this checkbox to enable Anti-Aliasing. The input-line following right is for controling the Anti-Aliasing amount. The lower the better. 3
 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  [X] AA-Jitter
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
╥If anti-aliasing is used jittering is also used by default with a default jittering scale of 1.0. Unmark the checkbox to disable jittering or enter a different scaling amount on the input-line following right. o
 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  Number of AA-Rays (to be squared)
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
âFor anti-aliasing a square of n x n rays is used whereas n is in the range of 1 to 9. The default value is 3 (meaning 3x3=9 rays). B
 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  [X] Bounding Slabs
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
¬Bounding slabs are enabled by default with a threshold of 25. Unmark this checkbox to prevent the use of bounding slabs or enter a different threshold on the input-line. K
 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  Version Compatibility
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
pThis checkbox is for selecting the PovRay version compatibility mode. Select V1.0 or V2.0 which is the default. '9
 Options│Library-paths... ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▓
The Options│Library-paths-dialogbox consists of a single input-line where you can enter the PovRay-library-paths. Up to 10 directories are allowed, separate them by semicolons. ''
 Options│Misc... ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
¬
In the Options│Misc-dialogbox you can control all the 'miscellaneous' PovRay-options that do not fit in one of the main categories output, display, trace and Lib-paths. B
 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  [ ] Verbose Output
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
ëMark this checkbox to enable verbose output, PovRay will then display the number of the image-line currently processed during the trace. K
 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  [ ] Pause after trace
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
MUse this option to have PovRay wait for a keyhit after completing the trace. H
 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  [ ] Allow early exit
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
ïMarking this checkbox enables you to abort a trace by keyhit. An aborted trace may be continued later if you have produced an output-file. N
 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  [ ] Enable clock value
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
gMark this checkbox to pass a clock value to PovRay. Enter the value on the input-line following right. 0
 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  Image Window
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀
╜If you want only a part of the image to be rendered enter the start-row/-column- and the end-row/-column-values in the appropiate input-lines. By default the whole image will be processed. 
 ▄▄▄▄▄▄▄▄
  Custom
 ▀▀▀▀▀▀▀▀
¡In this inputline you can specify additional options that are not currently supported by the original POV-Raytracer, but by various modified re-compilations of the program. '7
 Options│Save Options... ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
ª
Use the Options│Save Options-command to save the currently selected PovRay-options in a standard DEF-file. You will be prompted for a filename in a file select box. 
See also Retrieve options. :═2Φ'A
 Options│Save Default Options ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
∙
This command will save the currently selected PovRay-options in the file DEFAULT.DEF in the PovShell-directory. Each time you start PovShell it will retrieve the options stored in that file, so these values will override the PovRay default values. '?
 Options│Retrieve Options... ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
╨
Use the Options│Retrieve Options-command to retrieve the PovRay-options that were once saved in a DEF-file using the Save Options-command. You will be prompted for the name of the file in a file select box. 0╢: '1
 Setup│Directories... ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
ú
Here you have to specify some DOS-paths for the use with PovShell. If you are running PovShell for the very first time this dialog-box will pop up automatically. K
 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  Default POV-file-path
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
╞This is the directory where PovShell will first look for POV-files when you choose to open one using the File│Open-command. Note that you can change to a different directory in the file select box. E
 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  Default output-path
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
╟This is the directory where PovShell will suggest to write the output-files. If you leave this line blank, PovShell will suggest to write the output-file to the directory where the POV-file resides. B
 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  Path to Executable
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
PEnter the full filename of the PovRay-executable here (e.g. C:\POV\POVRAY.EXE). ë	:╒''
 Setup│Editor... ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
FIn the Setup│Editor-dialogbox you can control various editor options. Q
 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  [X] Create Backup files
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
╣Mark this checkbox to make the editor create backup copies of each file you edit (i.e. change and save). The backup files will have a .BAK extension. This option is enabled by default. 9
 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  [X] Insert Mode
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
»If this checkbox is marked the editor-cursor will be in insert-mode on startup. You may toggle between insert-mode and overwrite-mode any time by using the Ins-key or Ctrl-V. E
 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  [ ] Autoindent mode
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
Mark this checkbox to place the editor cursor in autoindent-mode. If you start a new line in autoindent-mode by pressing Enter the cursor will be automatically placed under the first non-blank character of the line above, so you may easily write indented paragraphs. ò
 Note: If you insert Templates in your
       script while using the autoindent
       mode the text of the templates will
       also be indented.
T
 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  [X] Save Desktop on exit
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
#If this option is enabled PovShell will save the filenames and positions of all open editor windows whenever you exit the program. The next time you start PovShell these informations will be used to restore the desktop, so you can immediately continue you work where you have once left off. 9
 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  [ ] 43/50 lines
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
ÆIf you enable this checkbox the screen will be switched to  43 lines mode (EGA) resp. 50 lines mode (VGA). By default 25 lines will be displayed. !
 ▄▄▄▄▄▄▄▄▄
  TabSize
 ▀▀▀▀▀▀▀▀▀
äHere you may control the number of blanks to display a TAB-character. Values in the range of 2 to 16 are allowed, the default is 3. 
╞	'

 OK ▄
 ▀▀▀▀
+
Press the OK-button or ENTER to continue! '#
 Yes/No/Cancel ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
.
Answer 'Yes', 'No' or 'Cancel' your request! '
 OK/Cancel ▄
 ▀▀▀▀▀▀▀▀▀▀▀
2
Answer 'OK' to confirm or 'Cancel' your request! '7
 Overwrite/Append/Cancel ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
r
Answer 'Overwrite' to overwrite the specified file, 'Append' to append to it or 'Cancel' to cancel your request. '
'
 Setup│Colors... ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
F
In the Setup│Colors-dialogbox you can change the colors of PovShell. Å
Note: This command is NOT available if you have told PovShell to use the Black&White-palette by calling it with the commandline-switch '/b' ! y
The dialogbox consists of two lists (groups and items), two color palettes (background and foreground) and a text area. ╔
 ┌─ Group ─────────────┐
 │   Desktop           │
 │   Menues           ■│
 │   Dialog boxes     ▒│
 │   Editor windows   ▒│
 │   Help windows      │
 │                     │
 └─────────────────────┘
LThe group list contains the names of the views whose colors can be changed. e
 ┌─ Item ──────────────┐
 │   Color             │
 │                    ■│
 │                    ▒│
T
If you choose a group from the group list its items will be shown in the itemlist. ╣
 ┌─ Foreground ─┐   ┌─ Background ─┐
 │ ░▒▓░▒▓░▒▓░▒▓ │   │ ▓░▒▓░▒▓░▒▓░▒ │
 │ ▓░▒▓░▒▓░▒▓░▒ │   │ ░▒▓░▒▓░▒▓░▒▓ │
 │ ▒▓░▒▓░▒▓░▒▓░ │   └──────────────┘
 │ ░▒▓░▒▓░▒▓░▒▓ │
 └──────────────┘
eFinally you can select a different fore- and background-color for each item from the palette panels. Q
 ┌────────────────┐
 │ Text Text Text │
 │ Text Text Text │
 └────────────────┘
8The current selection is shown in the sample text area. d
Note: The changes you make in this dialogbox will not apply until you close it with the OK-button. '
'
 File select box ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
╡
A file select box contains a filename-inputline, a file list, an information field, an Open-button, a Cancel-button and a history-list which is assigned to the filename-inputline. |
 ┌─ Name ──────────────────────────┐ ┌─┐
 │                                 │ ││
 └─────────────────────────────────┘ └─┘
sIn the filename-inputline enter the name of the file to be opened or a wildcard-mask for the file list (e.g. *.*). ^
Use the history-list button or the Cursor-Down key to pick a filename from the history-list. ╜
 ┌ Files ──────────────────────────┐
 │                                 │
 │  FILENM01.POV  │  FILENM09.POV  │
 │  FILENM02.POV  │  FILENM10.POV  │
 │  FILENM03.POV  │  FILENM11.POV  │
 │  FILENM04.POV  │  FILENM12.POV  │
 │  FILENM05.POV  │  ..\           │
 │  FILENM06.POV  │  LEVEL1\       │
 │  FILENM07.POV  │  LEVEL2\       │
 │  FILENM08.POV  │  LEVEL3\       │
 │  ▒▒▒■▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒   │
 └─────────────────────────────────┘
úThe file list includes the files of the current directory, the upper directory (..) and all the sub-directories as far as their names match the current file mask. ╜
 ┌───────────────────────────────────────────┐
 │ C:\POV\SCENES\LEVEL1\*.POV                │
 │ BALLBOX1.POV  2469  Jan  6, 1994  12:00pm │
 └───────────────────────────────────────────┘
_The information field displays the path, the name, the creation date and the size of the file. 4
 ┌──────────┐
 │ [ Open ] │ or Enter
 └──────────┘
▓The Open-button will open the currently selected file. If you have entered just a wildcard mask in the filename-inputline the open-button will cause the file list to be updated. ;
 ┌────────────┐
 │ [ Cancel ] │ or Escape
 └────────────┘
LThe Cancel-button cancels the current operation and removes the dialog-box. '!
 Setup│Run... ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀
S
Here are some options that influence PovShell's behaviour after launching PovRay. K
 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  [X] Pause after stats
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
╙If this checkbox is enabled PovShell will stop and wait for a keyhit after POVRay has finished tracing and displays its statistics. You should not use this option together with the 'Log stats to window'-option. S
 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  [X] Display exit status
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
░If this option is enabled PovShell will display PovRay's DOS exit code (and its meaning) after the trace. Note: This option has NO effect if you enabled 'Log stats to window'! S
 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  [ ] Log stats to window
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
QEnabling this option means that PovRay's messages and statistical output will be captured into a file (and not displayed on the screen). After the trace PovShell opens an editor window where this file is displayed. Note: If 'Log stats to window' is enabled 'Display exit status' won't work, and 'Pause after trace' won't make any sense. '3
 Utils│Create Batch... ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
≡
This utility lets you create Batch-Files containing one or more commands to render an image with POVRay. These Batch-Files can be run from the DOS-commandline and are useful when you want to render multiple images in batch-mode overnight. $
 ▄▄▄▄▄▄▄▄▄▄
  BAT-File
 ▀▀▀▀▀▀▀▀▀▀
¬This button opens a file select box and lets you specify the location and name of the Batch-File to be produced. The actual selection is displayed right from the button. $
 ▄▄▄▄▄▄▄▄▄▄
  POV-File
 ▀▀▀▀▀▀▀▀▀▀
ôBy pressing this button you can choose a POV-scene-file to be used by the Batch-command. The actual selection is displayed right from this button. 
 ▄▄▄▄▄▄▄▄
  Output
 ▀▀▀▀▀▀▀▀
▒This button enables you to choose the location and name of the output-file to be produced by the Batch-command. Again, the actual selection is displayed right from the button.  '
 ▄▄▄▄▄▄▄▄▄▄▄
  Save Only
 ▀▀▀▀▀▀▀▀▀▀▀
YThis button finishes this dialog and writes the command to the Batch-file you specified. *
 ▄▄▄▄▄▄▄▄▄▄▄▄
  Save & Run
 ▀▀▀▀▀▀▀▀▀▀▀▀
_This button is like 'Save Only', but additionally the Batch-File will be immediately executed. 
 ▄▄▄▄▄▄▄▄
  Cancel
 ▀▀▀▀▀▀▀▀
GPressing 'Cancel' will finish the dialog without writing a Batch-File.  
 
:\'9
 Utils│Clock Animation... ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
└The Clock value feature of the POV-Raytracer lets you create simple animations by varying a single float value named 'clock' (for details see the appropriate section in the PovRay reference).  
{The dialog elements are basically the same than in the Create Batch dialog, except from the following additional elements: 
 ▄▄▄▄▄▄▄
  From:
 ▀▀▀▀▀▀▀
}Put the clock-variable's start value here. This and the following values must be in the range of -9999999.99 to 99999999.99. 
 ▄▄▄▄▄
  To:
 ▀▀▀▀▀
The clock-variables end-value. 
 ▄▄▄▄▄▄▄
  Step:
 ▀▀▀▀▀▀▀
aThe difference from one clock-value to the next. It may be negative for descending clock values. 
EXAMPLE: if you specify % From: -1.00   To: 3.50   Step: 1.50
cfour commands will be written to the Batch-File using the clock values -1.00, 0.50, 2.00 and 3.50. ╗
NOTE: The output-files produced by the Clock Animation Run with be numbered in the order of their creation. Thus their names will always end with three digits representing their number.   
τ<3'
1
 Utils│Define Apps... ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
¬
In this dialog you can define up to five application programs that can then be called from the Utils-menue or via the Hotkeys Alt-1 to Alt-5 (s.Utils│Call Application). +
An application definition is given by a name and a command-line. The name will appear in the Utils-menu, choose a unique and descriptive string for that. The command-line must be a valid DOS-program call and thus must consist of the name of an executable program with optional parameters appended. @
For the parameters there are three pre-defined special tokens: ! %i  will be substituted with the name of the
     current editor file.
 %o  stands for the output-file that was produced
     by the last trace or that is supposed to
     be produced by the next trace.
 %?  will ask you for a parameter each time you call
     the application.
         
iOf course you may use more than one of these tokens, and you can also mix them with constant parameters. 
Commandline-examples: £
  EDIT.COM %i
    will call the MS-DOS Editor with the current
    editor file. Note, that for this example your
    DOS-directory has to be in your PATH!
Ü
  C:\BATCH\DISPLAY.BAT %o   
    will call the Batch-file DISPLAY in the directory
    C:\BATCH and pass the name of the current output 
    file to it.
╛
  COMMAND.COM /Ccopy %o %?                          
    This command will spawn COMMAND.COM to copy the
    current output file to a location that you have to
    specify when calling it.
?├'G
 Utils│Call Application ▄  (Alt-1 .. Alt-5)
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
ú
In the Utils-menue you will find up to five commands to call the user-definable applications. These commands can also be activated by the Hotkeys Alt-1 to Alt-5. H
See Utils│Define Apps to find out how to define your own applications! >≡'+
 Legal Information ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
b
 PovShell version 3.0 is FREEWARE. Explaining my understanding
 of the term FREEWARE this means:
o
 1. This program may be used, copied and distributed by anyone
    if the following conditions are fulfilled:
D
   a) The distribution of PovShell must include ALL files
      that come with the program. None of the files may be
      modified in any way before distributing them. The easiest
      way to fulfil this condition is to distribute only the
      original archived version of the program as published by
      the author.
π
   b) PovShell itself may not be sold by anyone. However, it
      is legal to charge a minimal fee for the distribution of
      the program (including the costs for distribution media
      and shipping, resp. downloading).
ú
 2. PovShell must not be "bundled" with any other product without
    the explicit permission of the author, especially when there
    is a fee for that product.
▌
 PovShell 3.0 includes a customized version of the file POVRAY.DOC
 which is provided as part of the POV-Ray package. For legal
 information on the distribution of the POV-Ray package please read
 the file POVLEGAL.DOC!
'=
 Frequently Asked Questions ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
╛
   Q. Sometimes I get the message "Not enough memory for
      this operation". What does it mean? How can I avoid it?
   A. PovShell is a DOS-program and thus runs entirely in the
      so called conventional memory of your PC. Unfortunately,
      the conventional memory is always limited in size to
      640 KB, regardless of how many total RAM your PC has built
      in. So PovShell itself and all the files you open with the
      PovShell editor have to fit into these 640 KB (or whatever
      DOS has left of them after booting). There is NO way around
      this. I don't plan to add XMS/EMS-support to PovShell in
      the near future!
      Workaround: To save memory close all the files you don't
      need anymore! The PovShell-editor has another sometimes
      annoying limitation: The size of a single editor-file must
      not be larger than 64 KB. This is due to built-in limitations
      of Borland's Turbo Pascal which I use to program PovShell.
      Of course, I could code around that splitting up larger
      files, using dynamic data structures and so on. However,
      if I really wanted to do this I would have to re-write the
      editor-code from scratch...
      Workaround: If you want to trace a file that is larger than
      64 KB then simply create a new POV-file SMALL.POV which 
      includes a single line:
        #include "TOOLARGE.POV"
      Tracing SMALL.POV will have the same effect as tracing
      TOOLARGE.POV!
╧
   Q. POV-Ray won't run when launched from POVShell. It displays
      the error message
      "DOS Extender: Error X0131: Insufficient DOS memory".
      What can I do?
   A. This error message means that after starting POVShell there
      is not enough conventional memory left to run POV-Ray.
      Try to free up some DOS memory by removing drivers from
      your CONFIG.SYS and AUTOEXEC.BAT that you do not necessarily
      need or try to load them into the High Memory Area.
      Alternatively you could run POVShell with the commandline-
      switch /L. POVShell will then use 16 KB less conventional
      memory. However, this will reduce the number of files you
      can open with the POVShell-editor.
╦
   Q. After rendering a scene I get a message box saying
      "POVRAY.EXE terminated with ExitCode 75". What does that mean?
   A. After PovRay's execution it returns an exitcode to the
      calling program which is PovShell in this case. Since PovRay
      version 2.0 these exitcodes are documented to have one of the
      values 0, 1 or 2. Older versions of PovRay obviously have
      different, undocumented or meaningless exitcodes, e.g. 75.
      Solution: Upgrade PovRay to version 2.0 or later. If you are
      stuck to PovRay 1.0 there is a workaround for you: Make sure
      that you have PovShell version 2.3 or later. In the Setup|Run-
      dialog unmark the checkbox "[X] Display exit status".

   Q. I'm using FTPov (or another PovRay-derivative) that provides
      additional commandline-options. How can I use them with PovShell?
   A. Since version 2.2 of PovShell there is an input-line in the
      Options|Misc-dialog for such additional options!

   Q. I'd like to render multiple files overnight in batch mode.
      How do I do this?
   A. Since version 3.0 of PovShell there is a utility that will
      automatically create batch files especially for this purpose.
      Have a look at the Utils|Create Batch...-command!
à
   Q. Where can I usually find the latest version of PovShell?
   A. When I finish a new release of PovShell I upload it at once
      a. to CompuServe's GraphDev-forum (GO GRAPHDEV)
         Search the library "POV sources" for the file POVSHE.ZIP!
      b. to wuarchive.wustl.edu on the Internet. Note that this site
         is mirrored to a lot of other servers. Europeans should check
         out ftp.informatik.uni-oldenburg.de!
      From these sites PovShell spreads out to a variety of ftp-
      servers and BBSs. If you are on the Internet ask your favorite
      archie for POVSH*.ZIP!
      The actual release of PovShell is 3.0.
'5
 Commandline parameters ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
$
POVShell's full calling syntax is: 5
      POVSHELL [file1 [file2 [...]]] [/B] [/Q] [/L]

file1, file2 etc. will be automatically opened by PovShell. This can be used to automatically start PovShell from the Windows-filemanager or the MS-DOSShell by associating it with the .POV file-extension. Double-clicking on a POV-file will then launch PovShell with that POV-file. 
Switches: ù  /B       Run PovShell with a black&white color-palette
           (for monochrome monitors and LCD-displays)
  /Q       Don't display About-box at program startup
  /L       Use less memory for the program heap
           (This will save 16 KB of conventional memory.
           However, you should only use this option when
           you are not able to launch POV-Ray from within
           POVShell).
'
/
 Warnings and Errors ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
2
1. Output-file exists and CONTINUE is set to NO!    OK to overwrite?
FThis message occurs when the output-file you have specified already exists, and the continue flag is set to NO, preventing you from unintentionally overwriting the output-file. If you really want to overwrite it, just press RETURN. If you want to keep it, press ESCAPE, select Run again and enter a different outputfile-name. >
2. DOS-Error xxx occured on execute! Check execution path in    SETUP|DIRECTORIES...
¥This message occurs when POVRAY.EXE could not be executed properly. A possible reason is a wrong execution path entered in the Setup|Directories-dialog-box. e
3. PovRay completed successfully. Just an informational message. It says that ... (you guessed it!) ╡
4. Error(s) reported by PovRay! Possible reasons: Syntax errors in the script, unaccessible include files  or bitmaps, ... Look at PovRay's error messages, check the include-path. w
5. Trace aborted. This message pops up when you had the +x option enabled and interrupted the trace by hitting a key. ª
6. Not enough memory for this operation. Occurs when you opened too many files, or when you try to open a file that is too big. Note: File-size is limited to 64 KB. o
7. Can't open help file. The help file POVSHELL.HLP is missing. Be sure to copy it to the PovShell-directory. J
There are a lot more error messages, but they are all self-explaining... '#'
 Technical notes ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
(
1. The configuration file POVSHELL.CFG ┬
POVSHELL will store the Default-POV-file-path, the output-path, the path to the executable, its editor settings, color informations and run-options in the file POVSHELL.CFG. DO NOT EDIT THIS FILE! Use the appropiate commands and menus in POVSHELL to change the parameters. POVSHELL.CFG will be stored in the directory where POVSHELL.EXE resides. It will be read by the program every time it is started and it will be written every time you exit it. *

2. The startup options file DEFAULT.DEF $
On startup, POVSHELL will scan the directory where POVSHELL.EXE resides for a file named DEFAULT.DEF. If it is found the options stored in it will be loaded. There is no need to edit this file! If you want to save or change startup options, select the Options|Save default options-menuitem. 

3. How to use DEF-Files A
Note: a. If you have DEF-files written on your own you can load ┴   them into POVSHELL via the Options|Retrieve Options...-
   menuitem! You can also use the DEF-files that are distributed
   by the Pov-Team with the latest version 2.2 of the Pov-Raytracer.
3b. If you have saved options from POVSHELL via the ╝   Options|Save Options...- menuitem into a DEF-file you
   can also use these files outside POVSHELL by typing
       POVRAY +i<inputfile> +o<outputfile> <DEF-file>
   at the DOS-prompt.
=c. If you save options only those parameter settings will be L   written into the DEF-file which are NOT the POV-Ray
   DEFAULT settings!
$

4. The Template file POVSHELL.TPL Æ
Since version 2.2 this file is used to store *all* the Template-definitions. You are encouraged to edit this file to meet your own requirements! 
File format: 8
a. Each template starts with a line containing a colon    in the first column which is followed directly by the
   name of the template (and nothing else!)
   Example:
     :Light_Source
     ...
   The Template name will occur in PovShell's Template
   selection-box. It is case-sensitive and limited to
   12 characters.
8b. All lines that start with a semicolon are ignored by ¬   PovShell. Those lines may be used to store template-
   related comments. They are only visible when editing
   POVSHELL.TPL. Don't mix these comments with the PovRay-
   comment-lines starting with // or embraced by /* ... */.
   PovRay-comments that are part of a template will be
   inserted by PovShell if you select that template!
   Example:
     ; This line will not be inserted.
     // This line will be inserted.
:c. Any line that does not define a new template (s.1) and    does not start with ; belongs to the template itself 
   and will be inserted in the current editor if the 
   appropiate template is chosen from the template selection-
   box. A template definition ends where the next template
   starts or where the file POVSHELL.TPL ends.
#

5. The Desktop file POVSHELL.DSK .
If you have chosen the 'Save Desktop on exit'-item in the Setup|Editor...-dialog-box all open files (i.e. their names) will be saved in the Desktop-file when you exit the program. On the next PovShell-startup the files listed in the Desktop-file will be automatically reopened. NEVER EDIT this file!   

6. The help-file POVSHELL.HLP ∩
This is the PovShell-helpfile. It includes all the help texts and binary coded information on indices and hyper-links. NEVER EDIT this file! PovShell will still work when the help file gets lost, but it *will* crash if it gets corrupted! 

7. Temporary files M
Every time you call 'Run' from the POVSHELL-menu the following will happen:  a. The contents of the active editor-window will be
    saved in a temporary file named $SHELL$.POV.
 b. The actual parameter settings will be saved in a
    temporary file named $SHELL$.DEF.
 c. POVRAY.EXE is called using the temporary files.
 d. The temporary files are deleted.
ⁿNormally the temporary files are stored in the PovShell-directory. However, if you have a DOS-environment-variable TEMP defined, the files will be written to the directory where TEMP is pointing to. If you want to use this feature place a command like   SET TEMP=C:\TEMP
Hin your AUTOEXEC.BAT and make sure that the specified directory exists! +

8. A word about memory: The program heap ╙
POVShell reserves an amount of conventional memory to store dynamically created data structures. By default 32 KB are reserved, but you can force POVShell to use only 16 KB by using the commandline- switch /L. ª
The free space on the program heap will decrease with every new dialog- or editor window you open (but of course it will increase again when you close the windows). Ü
In the System Info Window you can check the free space on the program heap. After startup (with no open files) it should show 27000 to 28000 free bytes. '3
 Contacting the author ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
å
If you have questions or comments on PovShell feel free to contact me! For information on how to do this read the file FEEDBACK.DOC! '
 Help Index ▄
 ▀▀▀▀▀▀▀▀▀▀▀▀
,
Help is available on the following topics: ^
   About                  Contents
   Edit menu              Editor
   Edit│Clear             Edit│Copy
   Edit│Cut               Edit│Paste 
   Edit│Show Clipboard    Edit│Undo
   File menu              File select box
   File│DOS Shell         File│Exit
   File│New               File│Open
   File│Save              File│Save As
   Help│Last Topic        Help│PovRay reference
   Help│System Info       How to use Help
   Options menu           Options│Display
   Options│Library-paths  Options│Misc
   Options│Output         Options│Retrieve
   Options│Save Default   Options│Save
   Options│Trace          Run command
   Search menu            Search│Find
   Search│Replace         Search│Search Again
   Setup menu             Setup│Colors
   Setup│Directories      Setup│Editor
   Setup│Run              Templates menu
   Utils menu             Utils│Create Batch
   Utils│Clock Animation  Utils│Define Apps
   Utils│Call Application Windows menu        
   Window│Cascade         Window│Close        
   Window│Next            Window│Previous     
   Window│Size/Move       Window│Tile         
   Window│Zoom
æ
   Contacting the Author
   Commandline parameters
   Frequently Asked Questions
   Legal Information
   Technical notes
   Warnings and Errors
=Neq	ê Æ
⌐	╢═
▄≤		:*A	Ne	r	ëÖ░╔α≤,
./4+D2[1o0å-û
¡╝!╙"Γ#∙	
9'374N;^	
uç
<₧=┤>╦?α≈'*&(>)U$m&ä%£E¼B┼A▀@²DC%'ÿ
                Persistence of Vision Ray Tracer (POV-Ray)
                                Version 2.0
                           User's Documentation
5
                        Copyright 1993 POV-Ray Team
0
                             Table of Contents
f
   
 1.0 INTRODUCTION
 2.0 ABOUT POV-Ray
     2.1 PROGRAM DESCRIPTION -- WHAT IS RAY TRACING?
     2.2 WHICH VERSION OF POV-Ray SHOULD YOU USE?
     2.3 WHERE TO FIND POV-Ray FILES
 3.0 QUICK START
     3.1 INSTALLING POV-Ray
     3.2 USING SAMPLE SCENES
     3.3 COMMAND LINE PARAMETERS
     3.4 DEFAULT PARAMETER FILE AND ENVIRONMENT VARIABLE
 4.0 BEGINNING TUTORIAL
     4.1 YOUR FIRST IMAGE
     4.2 MORE TEXTURE OPTIONS
     4.3 MORE SHAPES
 5.0 SCENE DESCRIPTION LANGUAGE REFERENCE
     5.1 LANGUAGE BASICS
     5.2 OBJECTS
     5.3 OBJECT MODIFIERS
     5.4 TEXTURES
     5.5 CAMERA
     5.6 MISC FEATURES
⌐
 APPENDIX A  COMMON QUESTIONS AND ANSWERS
 APPENDIX B  TIPS AND HINTS
 APPENDIX C  SUGGESTED READING
 APPENDIX D  LEGAL INFORMATION
 APPENDIX E  CONTACTING THE AUTHORS
ΘΩ
δ1+∞f(≥ÿ∙╣·╬√Ωⁿ(/]yô▒!┬$"≡/	LP4ôF£V
órú£½╕¼╫¡÷'&1.0   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. V
The next section is a quick start that helps you quickly begin to use the  software. Q
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. D
POV-Ray is based on DKBTrace 2.12 by David Buck & Aaron A. Collins '(2.0   ABOUT POV-Ray =================== ô
This section describes POV-Ray and explains what a ray tracer does.  It  also describes where to find the latest version of the POV-Ray software. ì
     2.1 PROGRAM DESCRIPTION -- WHAT IS RAY TRACING?
     2.2 WHICH VERSION OF POV-Ray SHOULD YOU USE?
     2.3 WHERE TO FIND POV-Ray FILES
δ╞+∞√(≥-'c2.1   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 from it  with near perfect shading, perspective, reflections and lighting.  ï
The standard POV-Ray package also includes a collection of sample scene  files that illustrate the program's features.  Additionally the POV-Ray  Team distributes several volumes of scenes that have been created by other  artists using the program. These scenes can be rendered and enjoyed even  before learning the scene description language. They can also be modified  to create new scenes.  1
Here are some highlights of POV-Ray's features: (  *   Easy to use scene description language
  *   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.)
  *   15 and 24 bit color display on IBM-PC's using appropriate hardware
  *   Create landscapes using smoothed 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, Quadric, 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, merges, intersections and differences in CSG.
  *   Objects are assigned materials called textures.  (A texture describes
       the coloring and surface properties of a shape.)
  *   Built-in color patterns: Agate, Bozo, Checker, Granite, Gradient,
       Leopard, Mandel, Marble, Onion, Spotted, Radial, Wood and image file
       mapping.
  *   Built-in surface bump patterns: Bumps, Dents, Ripples, Waves,
       Wrinkles and mapping.
  *   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 using layering of semi-transparent textures or tile
       or material map files.
  *   Display preview of image while computing (not available on all
       computers)
  *   Halt rendering when part way through
  *   Continue rendering a halted partial scene later
'^2.2   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. ¼
        2.2.1   IBM-PC AND COMPATIBLES
        2.2.2   APPLE MACINTOSH
        2.2.3   COMMODORE AMIGA
        2.2.4   UNIX AND OTHER SYSTEMS
        2.2.5   ALL VERSIONS
φⁿε#∩C≡c±è'2.2.1 IBM-PC AND COMPATIBLES ═
The IBM-PC version is called POVRAY.EXE and is found in the self-extracting  archive POVIBM.EXE. 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 is also available in the self-extracting  archive POV286.EXE. '2.2.2 APPLE MACINTOSH L
The Apple Macintosh version of POV-Ray can be found in the archive  POVMAC.SEA or POVMNF.SEA.  POVMAC.SEA contains the preferred "high- performance" executable for Macs with a floating point coprocessor (FPU).   POVMNF.SEA contains the slower more universal executable, which will run on  any 68020 or better Mac without an FPU.   
The Macintosh version of POV-Ray needs a 68020 or better CPU (Mac II  series, SE/30, Quadras, some Powerbooks, etc.)  It will run under Sytem  6.0.4 or newer (System 7 preferred.)  It also requires 32 bit Color  Quickdraw, which is built into System 7, and is an optional init in System  6.  The init can be found on the System 6 System disk "Printing", under the  "Apple Color" folder.  It should also be available from any authorized  Apple Service Center, or CompuServe or local Macintosh bulletin boards.   QuickTime 1.5 or newer is preferred but not required.  If installed, it  will allow compression of the final PICT images.  It will also allow adding  custom System 7 Thumbnail icons to the PICT files in the Finder.  Of  course, a color monitor is preferred, but not required. '2.2.3 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. '2.2.4 UNIX AND OTHER SYSTEMS 8
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 except under the terms specified in the file  POVLEGAL.DOC.  Users on high powered computers like Suns, SGI, RS-6000's,  Crays, and so on use this method to run POV-Ray. '2.2.5 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. 'D2.3   WHERE TO FIND POV-Ray FILES --------------------------------- ┤
POV-Ray is a complex piece of software made up of many files. The POV-Ray  package is 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. D
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. P
The latest versions of the POV-Ray software are available from these  sources: !
        2.3.1   GRAPHICS DEVELOPER'S FORUM ON COMPUSERVE
        2.3.2   PC GRAPHICS AREA ON AMERICA ON-LINE
        2.3.3   YOU CAN CALL ME RAY BBS IN CHICAGO
        2.3.4   THE GRAPHICS ALTERNATIVE BBS IN EL CERRITO, CA
        2.3.5   PI SQUARED BBS MARYLAND
        2.3.6   INTERNET
≤╨(⌠	#⌡="÷p.≈»°╫'/2.3.1 GRAPHICS DEVELOPER'S FORUM ON COMPUSERVE g
POV-Ray headquarters are on CompuServe Graphics Developer's Forum (GO  GRAPHDEV) sections 8 POV Sources and 9 POV Images. We meet there to share  info and graphics and discuss ray tracing. The forum is also home to  development projects on fractals, animation and morphing.  It is 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 GraphDev. 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. '*2.3.2 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. ')2.3.3 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. '52.3.4 THE GRAPHICS ALTERNATIVE BBS IN EL CERRITO, CA 
For those on the West coast, you may want to find the POV-Ray files on The  Graphics Alternative BBS. It's a great graphics BBS run by Adam Shiffman.   TGA is high quality, active and progressive BBS system which offers both  quality messaging and files to its 1300+ users. u
       510-524-2780 (PM14400FXSA v.32bis 14.4k, Public)
       510-524-2165 (USR DS v.32bis/HST 14.4k, Subscribers)
'2.3.5 PI SQUARED BBS MARYLAND %
For those on the East coast you may want to try th Pi Squared BBS in  Maryland.  The sysop Alfonso Hermida CIS: 72114,2060 is the creator of  POVCAD.  He carries the latest POV files and utilities, plus supports his  software.  Call (301)-725-9080 in Maryland USA running @ 14.4K bps 24 hrs. '2.3.6 INTERNET q
The POV-Ray files are also available over Internet by anonymous FTP from  alfred.ccs.carleton.ca (134.117.1.1). '$3.0   QUICK START ================= i
The next section describes how to quickly install POV-Ray and render a  sample scene on your computer.  ö
     3.1 INSTALLING POV-Ray
     3.2 USING SAMPLE SCENES
     3.3 COMMAND LINE PARAMETERS
     3.4 DEFAULT PARAMETER FILE AND ENVIRONMENT VARIABLE
·ÿ√┤ⁿ╤≥/'	23.1   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 programs from this directory.  This method works, but is not recommended. 6
Or the preferred way: 2-- Create a directory called POVRAY and several subdirectories called   INCLUDE, DEMO, SCENES, UTIL. The self-extracting archives used in some  versions of the program will create subdirectories for you.  If you create  your own, the file tree for this should look something like this: ┴    \--
      |   
      +POVRAY --
               |
               +INCLUDE
               |
               +DEMO
               |
               +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 SCENES. 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. s
      *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. '43.2   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.  k
A scene file is a standard ASCII text file that contains a description of a  three dimensional scene in the POV-Ray language.  The scene file text  describes objects and lights in the scene, and a camera to view the scene.  Scene files have the file extension .POV and can be created by any word  processor or editor that can save in standard ASCII text format. 8
Quite a few example scenes are provided with this distribution in the  example scenes archive. The scenes in the standard archives are designed to  illustrate and teach you the features of the program.  Additionally the  POV-Ray Team distributes several volumes of scenes in its ongoing series  "The POV-Ray Scene Library"  These scene files range from very simple to  very complex. 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.  W
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. ╬
   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.
░
The file SIMPLE.POV was included with the standard scene files and should  now be in the DEMO directory.  Make that the active directory, and then at  the command line, type: $
  POVRAY +Isimple.pov +V +W80 +H60
3
POVRAY is the name of your executable, +Ifilename.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 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. '<3.3   COMMAND LINE PARAMETERS ----------------------------- R
The following section gives a detailed description of the command-line  options. O
The command-line parameters may be specified in any order. Repeated  parameters overwrite the previous values except for the +L switch which  defines include file library paths.  Up to 10 +L paths may be specified.   Default parameters may also be specified in a file called "povray.def" or  by the environment variable "POVRAYOPT".  $
Switches may be specified in upper or lower case.  Switches must be  preceded by a + (plus) or - (minus).  In switches which toggle a feature,  the plus turns it on and minus turns it off.  For example +P turns on the  "pause for keypress when finished" option while -P turns it off.  Other  switches are used to specify values and do not toggle a feature.  Either  plus or minus may be used in that instance.  For example +W320 sets the  width to 320 pixels.  You could also use -W320 and get the same results.   More examples follow this table. !
Table 1 Command Line Parameters τ
 Parameter......|.....Range........|...Description........................
 -------------------------------------------------------------------------
 +Annn          | 0.0 to 3.0       | Render picture with anti-aliasing,or
                |                  | "smoothing", on.  Lower values cause
                |                  | more smoothing.
 +A             |                  | Use default 0.3 anti-aliasing
 -A             |                  | Turn anti-aliasing off (default)
 +Bnnn or -Bnnn | Varies w/ sys    | Output file buffer size.
 +C             |                  | Continue an aborted partial image.
 -C             |                  | Start rendering from first line.
 +Dxxx          | Varies w/sys     | Display image graphically while
                |                  | rendering (Not available on all vers).
 +Enn or +ERnn  | 1 to 32,767      | End row for tracing
                |  or 0.0 to 1.0   | a portion of a scene.
 +ECnn          | 1 to 32,767      | End column for tracing
                |  or 0.0 to 1.0   | a portion of a scene.
 +FT            |                  | Output Targa format file
 +FD            |                  | Output dump format file
 +FR            |                  | Output raw format file
 -F             |                  | Disable file output.
 +Hnnn          | 1 to 32,767      | Height of image in pixels.
 +Ifilespec     | Varies w/ sys    | Input scene file name, generally ends
                |                  | in .pov.
 +Jnnn.nnn      | 0.0 to 1.0       | Set amount of jitter for anti-aliasing
 +J             |                  | Use anti-aliasing jitter 1.0 (default)
 -J             |                  | Turn off anti-aliasing jitter
 +Knnn.nnn      | any real value   | Set "clock" float value for animation
 +Lpathspec     | Varies w/ sys    | Library path: POV-Ray will search for
                |                  | files in the directory listed here.
                |                  | Multiple lib paths may be specified.
 -MB            |                  | Turn off bounding slabs
 +MBnnn         | 0 to 32,767      | Use bounding slabs if more than nnn
                |                  | objects in scene.
 +MSnnn         | 300 or more      | Set symbol table size (default 1000)
 +MVn.m         | 1.0 or 2.0       | Set version compatibility mode
 +Ofilespec     | Varies w/ sys    | Output image filename.
 +P             |                  | Pause and wait for keypress after
                |                  | tracing image.
 -P             |                  | Don't pause
 +Qn            |   0 to 9         | Image quality: 9 highest(default) to
                |                  | 0 lowest.
 +Rn or -Rn     |   1 to 9         | Use n*n rays for anti-aliasing. Default
                |                  | of 3 gives 9 rays; 4 gives 16 rays etc.
 +Snn or +SRnn  | 1-32,768         | Start row for tracing
                |  or 0.0 to 1.0   | a portion of a scene.
 +SCnn          | 1-32,768         | Start column for tracing
                |  or 0.0 to 1.0   | a portion of a scene.
 +Vnn           | Varies w/sys     | Display verbose image stats while
                |                  | rendering.
 -V             |                  | No stats during rendering
 +Wnnn          | 1-32,768         | Width of image in pixels.
 +X             |                  | Allow abort with keypress.(IBM-PC).
 -X             |                  | Disable abort with keypress.(IBM-PC).
 -------------------------------------------------------------------------
y
        3.3.1   ANTI-ALIASING
        3.3.2   BUFFERING
        3.3.3   CONTINUING INTERRUPTED TRACE
        3.3.4   DISPLAY PREVIEW IMAGE
        3.3.5   RENDER PARTIAL IMAGE
        3.3.6   FILE OUTPUT TYPE
        3.3.7   HEIGHT AND WIDTH OF IMAGE
        3.3.8   INPUT AND OUTPUT FILE NAMES
        3.3.10  ANIMATION CLOCK VARIABLE
        3.3.11  LIBRARY SEARCH PATH
        3.3.12  BOUNDING SLABS CONTROL
        3.3.13  SYMBOL TABLE SIZE
        3.3.14  VERSION COMPATIBILITY MODE
        3.3.15  PAUSE WHEN FINISHED
        3.3.16  QUALITY SETTINGS
        3.3.17  VERBOSE STATISTICS
        3.3.18  ALLOW ABORTED RENDERING
²
■9	 SÇª╦∞BkÅ╢	╪
'H
k'3.3.1 ANTI-ALIASING `
      +Annn       Anti-alias with tolerance level nnn.
      +A          Anti-alias with tolerance level 0.3
      -A          Don't anti-alias (default)
      +Jn.nn      Scale factor for jittering
      +J          Jitter AA with scale 1.0 (default)
      -J          Turn off jittering
      +Rn or -Rn  Use n*n rays when anti-aliasing (default 3)
æ
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  r1,g1,b1 and r2,g2,b2 are the rgb components of two pixels then the  difference between pixels is computed by: +
    diff=abs(r1-r2)+abs(g1-g2)+abs(b1-b2)
▐
The rgb values are in the range 0.0 to 1.0 thus the most two pixels can  differ is 3.0.  If the anti-aliasing threshold is 0.0, then every pixel is  super-sampled. If the threshold is 3.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. Y
The super-samples are jittered to introduce noise and to eliminate moire  interference patterns. Note that the jittering "noise" is non-random and  repeatable in nature, based on an object's 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.  The +Jnn.nn  switch scales down the amount of jitter from its default value 1.0.  For  example +J0.5 uses half the normal jitter.  Values over 1.0 jitter outside  the pixel bounds and are not recommended.  Use -J to turn off jittering. Å
The +R switch controls the number of rows and columns of rays per pixel  with anti-aliasing.  The default value 3 gives 3x3=9 rays per pixel. >
The jittering and multiple rays are only used when +A is on. '3.3.2 BUFFERING `
      +Bnnn       Use an output file buffer of nnn kilobytes. 
      -Bnnn       Same as +Bnnn

The +B option allows you to assign large buffers to the output file. This  reduces the amount of time spent writing to the disk. If this parameter is  not specified, 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 retrievable on disk. (see also the +C option below.)  A value  of +B30 is a good value to use to speed up small renderings.  A value of  +B0 defaults to a small system-dependent buffer size.  Note neither +B0 nor  -B turns this feature off.  Once a buffer is set, subsequent +B commands  can change its size but cannot turn it off. '#3.3.3 CONTINUING INTERRUPTED TRACE k
      +C          Continue partially complete rendering
      -C          Render from beginning (default)
┐
If you abort a render while it's in progress or if you used the +E or +ER  options 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 ray tracing. This option cannot be used if file  output is disabled with -F.  It does not work with +S, +SR, +SC or +EC  switches. '3.3.4 DISPLAY PREVIEW IMAGE \
      +D          Use preview display
      -D          Turn preview display off (default)
B
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.  Y
The +D parameters are system-dependent and are listed in the executable  documentation. '3.3.5 RENDER PARTIAL IMAGE τ
      +Snnn or +SRnnn   Start tracing at row number nnn.
      +SCnnn            Start tracing at column number nnn.
      +Ennn or +ERnnn   End tracing at row number nnn.
      +ECnnn            End tracing at column number nnn.

When doing test rendering it is often convenient to define a rectangular  section of the whole screen so you can quickly check out one area of the  image.  The +S and +E switches let you define starting and ending rows and  columns for partial renderings. ┬
The +S and +E options also allow you to begin and end the rendering of an  image at a specific scan line so you can 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 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.  î
Note if the number following +SR, +SC, +ER or +EC is a greater 1 then it is  interpreted as a number of pixels.  If it is a decimal value between 0.0  and 1.0 then it is interpreted as a percent of the total width or height of  the image.  For example: +SR0.75 +SC0.75 starts on a row 75% down from the  top at a column 75% from the left and thus renders only the lower-right 25%  of the image. '3.3.6 FILE OUTPUT TYPE 
      +FT         Uncompressed Targa-24 format (IBM-PC Default)
      +FD         Dump format (QRT-style)
      +FR         Raw format - one file each for Red, Green and Blue. 
      +F          Use default file type for your system
      -F          Turn off file output
╙
Normally, you don't need to specify any form of +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.   They are +FT - Uncompressed Targa-24 format (IBM-PC Default), +FD - Dump  format (QRT-style) and +FR - Raw format - one file each for Red, Green and  Blue.  ' 3.3.7 HEIGHT AND WIDTH OF IMAGE l
      +Hnnn or -Hnnn    Set height of image in pixels
      +Wnnn or -Wnnn    Set width of image in pixels
)
These switches set the height and width of the image in pixels.  This  specifies the image size for file output.  The preview display with the +D  option will generally attempt to pick a video mode to accommodate this size  but the +D settings do not in any way affect the resulting file output. '"3.3.8 INPUT AND OUTPUT FILE NAMES P
      +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.  The +O switch has no  effect unless file output is turned on with +F ?
IBM-PC default file type is Targa, so the file is "data.tga". D
Amiga uses dump format and the default outfile name is "data.dis". 2
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. ' 3.3.10 ANIMATION CLOCK VARIABLE 5
      +Knnn or -Knnn    Set the "clock" float value
L
The +K switch may be used to pass a single float value to the program for  basic animation.  The value is stored in the float identifier "clock".  If  an object had a "rotate <0,clock,0>" attached then you could rotate the  object by different amounts over different frames by setting +K10, +K20...  etc. on successive renderings. '3.3.11 LIBRARY SEARCH PATH 9
      +Lpathspec  Specify on of 10 library search paths
\
The +L option may be used to specify a "library" pathname to look in for  include, parameter and image files. Multiple uses of the +L switch do not  override previous settings.  Up to ten +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. '3.3.12 BOUNDING SLABS CONTROL s
      -MB         Turn off bounding slabs
      +MBnnn      Use bounding slabs if more than nnn objects in scene.

New in POV-Ray 2.0 is a spatial sub-division system called bounding slabs.   It compartmentalizes all of the objects in a scene into rectangular slabs  and computes which slabs a particular ray hits before testing the objects  within the slab.  This can greatly improve rendering speed.  However for  scenes with only a few objects the overhead of using slabs is not worth the  effort.  The +MB switch sets the minimum number of objects before slabs are  used.  The default is +MB25.  The -MB switch turns off slabs completely. '3.3.13 SYMBOL TABLE SIZE E
      +MSnnn or -MSnnn        Sets symbol table size (default 1000)
▒
POV-Ray allocates a fixed number of spaces in its symbol table for declared  identifiers.  The default of 1000 may be increased if you get a "Too many  symbols" error message. '"3.3.14 VERSION COMPATIBILITY MODE >
      +MVn.n or -MVn.n        Set version compatibility mode
┘
While many language changes have been made for POV-Ray 2.0, most version  1.0 syntax still works.  One new feature in 2.0 that is incompatible with  any 1.0 scene files is the parsing of float expressions.  Setting +MV1.0  turns off expression parsing as well as many warning messages so that  nearly all 1.0 files will still work.  The "#version" language directive  also can be used to change modes within scene files.  The +MV switch  affects only the initial setting. '3.3.15 PAUSE WHEN FINISHED ï
      +P          Pause when image is complete so preview image can
                  be seen.
      -P          Do not pause.  (default)
º
Normally when preview display is on you want to look at the image awhile  before continuing.  The +P switch pauses and waits for you to press a key  before going on. '3.3.16 QUALITY SETTINGS )
      +Qn or -Qn  Set rendering quality
⌠
The +Q option allows you to specify the image rendering quality, for  quickly rendering images for testing. You may also use -Q with no  difference.  The parameter can range from 0 to 9. The values correspond to  the following quality levels: 5
0,1  Just show quick colors. Ambient lighting only. /     Quick colors are used only at 5 or below.
▓2,3  Show Diffuse and Ambient light 4,5  Render shadows, use extended lights at 5 but not 4 6,7  Create surface textures 8,9  Compute reflected, refracted, and transmitted rays. 8
The default is +Q9 (maximum quality) if not specified. '3.3.17 VERBOSE STATISTICS R
      +V          Verbose statistics on
      -V          Verbose statistics off
╧
When the +D option is not used, it is often desirable to monitor progress  of the rendering.  The +V switch turns on verbose reporting while -V turns  it off.  The format of the output is system dependent. '3.3.18 ALLOW ABORTED RENDERING [
      +X          Allow abort with keypress
      -X          Disable abort with keypress
î
On the IBM-PC versions only, when you specify the +X switch then any  keypress will abort rendering.  The -X switch disables this feature. 'l3.4   DEFAULT PARAMETER FILE AND ENVIRONMENT VARIABLE ----------------------------------------------------- f
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: 1
  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.
     +X = Allow key press to abort render.
     +W320 = Set image width to 320 pixels
     +H200 = Set image height to 200 pixels
e
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.  If POVRAY.DEF contains "+V +X +W320 +H200" then you could also  type: 
  POVRAY +Ibox.pov +Obox.tga 
x
With the same results. You could also create an option file with a  different name and specify it on the command line: Q
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. P
The order that the options are read in for the IBM-PC version are as  follows: "
  POVRAYOPT environment variable
R
  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 POVRAYOPT. +X on the  command line would override -X in POVRAY.DEF and so on. Å
Other computer's versions may read in the POVRAY.DEF file before the  POVRAYOPT environment variable.  See the documentation on your version. '24.0   BEGINNING TUTORIAL ======================== x
This section describes how to create a scene using POV-Ray's scene  description language and how to render this scene. N
     4.1 YOUR FIRST IMAGE
     4.2 MORE TEXTURE OPTIONS
     4.3 MORE SHAPES
╡╧φ'.4.1   YOUR FIRST IMAGE ---------------------- y
Let's create the scene file for a simple picture. Since ray tracers thrive  on spheres, that's what we'll render first. ∙
        4.1.1   THE POV-Ray COORDINATE SYSTEM
        4.1.2   ADDING STANDARD INCLUDE FILES
        4.1.3   PLACING THE CAMERA
        4.1.4   DESCRIBING AN OBJECT
        4.1.5   ADDING TEXTURE TO AN OBJECT
        4.1.6   DEFINING A LIGHT SOURCE
╣τ8]ë'$4.1.1 THE POV-Ray COORDINATE SYSTEM '
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: F
    ^+Y
    |   /+Z
    |  /
    | /
    |/        +X
    |-------->
I

The negative values of the axes point the other direction, as follows: ⌐

          ^+Y
          |   /+Z
          |  /
          | /
  -X      |/        +X
  <-------|-------->
         /|
        / |
       /  |
    -Z/   |
          v-Y
'$4.1.2 ADDING STANDARD INCLUDE FILES ╦
Using your personal favorite text editor, create a file called  "picture1.pov". Now, type in the following (note: The 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"
R
      camera {
        location  <0, 2, -3>
        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. ╢
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 nested 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. '4.1.3 PLACING THE CAMERA v
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. You describe X, Y, Z coordinates  using a 3-part "vector".  A vector is specified by putting 3 numeric values  between a pair of angle brackets and separating the values with commas. δ
Briefly, "location <0, 2, -3>" places the camera up two units and back  three units from the center of the ray tracing universe which is at <0, 0,  0>. Remember that by default +Z is into the screen and -Z is back out of  the screen. ▄
Also "look_at <0, 1, 2>" rotates the camera to point at X, Y, Z coordinates  <0, 1, 2>.  A point 5 units in front of and 1 unit lower than the camera.  The look_at point should be the center of attention of your image. '4.1.4 DESCRIBING AN OBJECT ê
Now that the camera is set up to record the scene, let's place a red sphere  into the scene.  Type the following into your scene file: Æ
      sphere {
        <0, 1, 2>, 2
        texture {
          pigment {color Yellow}  // Yellow is pre-defined in COLORS.INC
        }
      }
á
The first vector specifies center of the sphere.  In this example the X  coordinate is zero so it is centered left and right.  It is also at Y=1 or  1 unit up from the origin. The Z coordinate is 2 which is 5 units in front  of the camera at Z=-3. After the center vector is a comma followed by the  radius which in this case is 2 units. Since the radius is 1/2 the width of  a sphere, the sphere is 4 units wide.  '	"4.1.5 ADDING TEXTURE TO AN OBJECT ô
Now that we've defined the location and size of the sphere, we need to  describe the appearance of the surface.  The texture {...} block specifies  these parameters.  Texture blocks describe the color, bumpiness and finish  properties of an object.  In this example we will specify the color only.   This is the minimum we must do.  All other texture options except color  will use the default values. 
The color you define is the way you want it to look if fully illuminated.   If you were painting a picture of a sphere you would use dark shades of a  color to indicate the shadowed side and bright shades on the illuminated  side.  However ray tracing takes care of that for you.  You pick the basic  color inherent in the object and POV-Ray brightens or darkens it depending  on the lighting in the scene.  Because we are defining the basic color the  object actually IS rather than how it LOOKS the parameter is called  "pigment". 9
Many types of color patterns are available for use in a pigment {...}  statement.  The keyword "color" specifies that the whole object is to be  one solid color rather than some pattern of colors.  The word "Yellow" is a  color identifier which was previously defined in the standard include file  "colors.inc". 
If no standard color is available for your needs, you may define your own  color by using the color keyword followed by "red", "green" and "blue"  keywords specifying the amount of red, green and blue to be mixed.  For  example a nice shade of pink can be specified by: (
      color red 1.0 green 0.8 blue 0.8
┘
The values after each keyword should be in the range 0.0 to 1.0.  Any of  the three components not specified will default to 0.  A shortcut notation  may also be used.  The following produces the same shade of pink: !
      color rgb <1.0, 0.8, 0.8>
,
Colors are explained in more detail later. '4.1.6 DEFINING A LIGHT SOURCE ░
One more detail is needed for our scene.  We need a light source. Until you  create one, there is no light in this virtual world.  Add the following  text to your scene file: .
      light_source { <2, 4, -3> color White}
╙
The vector specifies the location of the light as 2 units to our right, 4  units above the origin and 3 units back from the origin. The light_source  is invisible, it only casts light, so no texture is needed. R
That's it!  Close the file and render a small picture of it using this  command: 6
      POVRAY +W160 +H120 +P +X +D0 -V -Ipicture1.pov
u
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.  '64.2   MORE TEXTURE OPTIONS -------------------------- s
You've now rendered your first picture but it is somewhat boring.  Let's  add some fancy features to the texture. É
        4.2.1   SURFACE FINISHES
        4.2.2   ADDING BUMPINESS
        4.2.3   CREATING COLOR PATTERNS
        4.2.4   PRE-DEFINED TEXTURES
╗▄²%'4.2.1 SURFACE FINISHES *
One of the main features of a ray tracer is its ability to do interesting  things with surface finishes such as highlights and reflection.  Let's add  a nice little phong highlight (shiny spot) to the sphere. To do this you  need a "finish" parameter. Change the definition of the sphere to this: ¡
      sphere {
        <0, 1, 2>, 2
        texture {
          pigment {color Yellow}  // Yellow is pre-defined in COLORS.INC
          finish {phong 1}
        }
      }
9
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. '4.2.2 ADDING BUMPINESS ⌠
The highlight you've added illustrates how much of our perception depends  on the reflective properties of an object.  Ray tracing can exploit this by  playing tricks on our perception to make us see complex details that aren't  really there. 
Suppose you wanted a very bumpy surface on the object.  It would be very  difficult to mathematically model lots of bumps.  We can however simulate  the way bumps look by altering the way light reflects off of the surface.   Reflection calculations depend on a vector called a "surface normal"  vector.  This is a vector which points away from the surface and is  perpendicular to it.  By artificially modifying (or perturbing) this normal  vector you can simulate bumps.  Change the scene to read as follows and  render it: «
      sphere {
        <0, 1, 2>, 2
        texture {
          pigment {color Yellow}
          normal {bumps 0.4   scale 0.2}
          finish {phong 1}
        }
      }
0
This tells POV-Ray to use a bump pattern to modify the surface normal.  The  value 0.4 controls the apparent depth of the bumps.  Usually the bumps are  about 1 unit wide which doesn't work very well with a sphere of radius 2.   The scale makes the bumps 1/5th as wide but does not affect their depth.  '4.2.3 CREATING COLOR PATTERNS ë
You can do more than assign a solid color to an object.  You can create  complex patterns in the pigment block.  Consider this example: e
      sphere {
        <0, 1, 2>, 2
        texture {
          pigment {
            wood
            color_map {
              [0.0 color DarkTan]
              [0.9 color DarkBrown]
              [1.0 color VeryDarkBrown]
            }
            turbulence 0.05
            scale <0.2, 0.3, 1>
          }
          finish {phong 1}
        }
      }
¢
The keyword "wood" specifies a pigment pattern of concentric rings like  rings in wood.  The color_map specifies that the color of the wood should  blend from DarkTan to DarkBrown over the first 90% of the vein and from  DarkBrown to VeryDarkBrown over the remaining 10%.  The turbulence slightly  stirs up the pattern so the veins aren't perfect circles and the scale  factor adjusts the size of the pattern. n
The most of the 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. In this example we scale the pattern using the  "scale" keyword followed by a vector.  In this case we scaled 0.2 in the x  direction, 0.3 in the y direction an the z direction is scaled by 1, which  leaves it unchanged. Scale values larger than 1 will stretch an element.  Scale values smaller than one will squish an element. And scale value 1  will leave an element unchanged. '4.2.4 PRE-DEFINED TEXTURES O
POV-Ray has some very sophisticated textures pre-defined in the standard  include files "textures.inc" and "stones.inc".  Some are entire textures  with pigment, normal and/or finish parameters already defined.  Some are  just pigments or just finishes.   Change the definition of our sphere to  the following and then re-render it:  H
      sphere {
        <0, 1, 2>, 2
        texture {
          pigment {
            DMFWood4    // Pre-defined from textures.inc
            scale 4     // Scale by the same amount in all
                        // directions
          }
          finish {Shiny}      // This finish defined in textures.inc
        }
      }

The pigment identifier DMFWood4 has already been scaled down quite small  when it was defined.  For this example we want to scale the pattern larger.   Because we want to scale it uniformly we can put a single value after the  scale keyword rather than a vector of x,y,z scale factors. δ
Look through the file TEXTURES.INC to see what pigments and finishes are  defined and try them out. Just insert the name of the new pigment where  DMFWood1 is now or try a different finish in place of Shiny and re-render  your file.  Y
Here is an example of using a complete texture identifier rather than just  the pieces. O
      sphere {
        <0, 1, 2>, 2
        texture { PinkAlabaster }
      }
'$4.3   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.  First let's make some room in the  image by changing the sphere from a radius of 2 to a radius of 1 like this: F
      sphere {
        <0, 1, 2>, 1
        texture { ... and so on.
u
        4.3.1   PLANE OBJECT
        4.3.2   BOX OBJECT
        4.3.3   CONE OBJECT
        4.3.4   CYLINDER OBJECT
^{
û ▓'
4.3.1 PLANE OBJECT s
Let's try out a computer graphics standard - "The Checkered Floor."  Add  the following object to your .pov file: ç
      plane {
        <0, 1, 0>, 0
        pigment {
          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.  ▐
Notice that there is no "texture{...}" statement.  There really is an  implied texture there.  You might find that continually typing statements  that are nested like "texture {pigment {...}}" can get to be a tiresome so  POV-Ray lets you leave out the "texture{...}" under many circumstances.  In  general you only need the texture block surrounding a texture identifier  (like the PinkAlabaster example above), or when creating layered textures  (which are covered later).   m
This pigment uses the checker color pattern and specifies that the two  colors red and blue should be used. ╓
Because the vectors <1,0,0>, <0,1,0> and <0,0,1> are used frequently, POV- Ray has 3 built-in vector identifiers "x", "y", and "z" respectively that  can be used as shorthand.  Thus the plane could be defined as: 6
      plane { 
        y,0
        pigment {... etc.
D
Note that you do not use angle brackets around vector identifiers. =
Looking at the floor, you'll notice that the 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. Later you'll learn how to use extended light sources to soften  the shadows. '4.3.2 BOX OBJECT £
There are several other simple shapes available in POV-Ray.  The most  common are the box, cylinder and cone.  Try these examples in place of the  sphere: l
      box {
        <-1,0  ,-1>,     // Near lower left corner
        < 1,0.5, 3>      // Far upper right corner
        pigment {
          DMFWood4      // Pre-defined from textures.inc
          scale 4       // Scale by the same amount in all
                        // directions
        }
        rotate y*20     // Equivalent to "rotate <0,20,0>"
      }
⌡
In this example you can see that a box is defined by specifying the 3D  coordinates of opposite corners.  The first vector must be the minimum  x,y,z coordinates and the 2nd vector must be the maximum x,y,z values.  Box  objects can only be defined parallel to the axes.  You can later rotate  them to any angle.  Note that you can perform simple math on values and  vectors.  In the rotate parameter we multiplied the vector identifier "y"  by 20.  This is the same as "<0,1,0>*20" or "<0,20,0>".   '4.3.3 CONE OBJECT 
Here's another example: ┬
      cone {
        <0,1,0>,0.3    // Center and radius of one end
        <1,2,3>,1.0    // Center and radius of other end
        pigment {DMFWood4  scale 4 }
        finish {Shiny}
      }
╞
The cone shape is defined by the center and radius of each end.  In this  example one end is at location <0,1,0> and has radius of 0.3 while the  other end is centered at <1,2,3> with radius 1.  If you want the cone to  come to a sharp point then use a 0 radius.  The solid end caps are parallel  to each other and perpendicular to the cone axis.  If you want a hollow  cone with no end caps then add the keyword "open" after the 2nd radius like  this: φ
      cone {
        <0,1,0>,0.3    // Center and radius of one end
        <1,2,3>,1.0    // Center and radius of other end
        open           // Removes end caps
        pigment {DMFWood4  scale 4 }
        finish {Shiny}
      }
'4.3.4 CYLINDER OBJECT +
You may also define a cylinder like this: √
      cylinder {
        <0,1,0>,       // Center of one end
        <1,2,3>,       // Center of other end
        0.5            // Radius
        open           // Remove end caps
        pigment {DMFWood4  scale 4 }
        finish {Shiny}
      }
▓
Finally the standard include file "shapes.inc" contains some pre-defined  shapes that are about the size of a sphere with a radius of one unit.  You  can invoke them like this: Ñ
      object {
        UnitBox
        pigment {DMFWood4  scale 4 }
        finish {Shiny}
        scale 0.75
        rotate <-20,25,0>
        translate y
      }
Ü
That's the end of our brief tutorial.  We've only scratched the surface.   The rest of this document provides a reference to all of POV-Ray's  features. 'V5.0   SCENE DESCRIPTION LANGUAGE REFERENCE ========================================== 
The Scene Description Language allows the user to describe the world in a  readable and convenient way.  Files are created in plain ASCII text using  an editor of your choice.  POV-Ray reads the file, processes it by creating  an internal model of the scene and the renders the scene. ~
     5.1 LANGUAGE BASICS
     5.2 OBJECTS
     5.3 OBJECT MODIFIERS
     5.4 TEXTURES
     5.5 CAMERA
     5.6 MISC FEATURES
"/ÿL⌐P├ô╒£σ
',5.1   LANGUAGE BASICS --------------------- w
The POV-Ray language consists of identifiers, reserved keywords, floating  point literals, string literals, special symbols and comments.  The text of  a POV-Ray scene file is free format.  You may put statements on separate  lines or on the same line as you desire.  You may add blank lines, spaces  or indentations as long as you do not split any keywords or identifiers. ▐
        5.1.1   IDENTIFIERS AND KEYWORDS
        5.1.2   COMMENTS
        5.1.3   INCLUDE FILES
        5.1.4   FLOAT EXPRESSIONS
        5.1.5   VECTOR EXPRESSIONS
        5.1.6   TRANSFORMATIONS
        5.1.7   DECLARE
#╡$▐%≈
&'7(Z.z'5.1.1 IDENTIFIERS AND KEYWORDS C
POV-Ray allows you to define identifiers for later use in the file.  An  identifier may be 1 to 40 characters long.  It may consist of upper or  lower case letters, the digits 0 through 9 or an underscore character.  The  first character must be an alphabetic character.  The declaration of  identifiers is covered later. 
POV-Ray has a number of reserved words which are used in the language.  All  reserved words are fully lower case.  Therefore it is recommended that your  identifiers contain at least 1 upper case character so it is sure to avoid  conflict with reserved words. 1
The following keywords are reserved in POV-Ray: Γ	
 adaptive               height_field           rgbf
 agate                  hexagon                right
 agate_turb             iff                    ripples
 all                    image_map              rotate
 alpha                  include                roughness
 ambient                interpolate            scale
 area_light             intersection           sky
 background             inverse                smooth
 bicubic_patch          ior                    smooth_triangle
 blob                   jitter                 specular
 blue                   lambda                 sphere
 bounded_by             leopard                spotlight
 box                    light_source           spotted
 bozo                   location               sturm
 brilliance             looks_like             texture
 bumps                  look_at                tga
 bump_map               mandel                 threshold
 bump_size              map_type               tightness
 camera                 marble                 tile2
 checker                material_map           tiles
 clipped_by             max_intersections      torus
 clock                  max_trace_level        translate
 color                  merge                  triangle
 color_map              metallic               turbulence
 colour                 normal                 type
 colour_map             no_shadow              union
 component              object                 up
 composite              octaves                use_color
 cone                   omega                  use_colour
 crand                  once                   use_index
 cubic                  onion                  u_steps
 cylinder               open                   version
 declare                phase                  v_steps
 default                phong                  water_level
 dents                  phong_size             waves
 difference             pigment                wood
 diffuse                plane                  wrinkles
 direction              point_at               x
 disc                   poly                   y
 distance               pot                    z
 dump                   quadric
 falloff                quartic
 filter                 quick_color
 finish                 quick_colour
 flatness               radial
 fog                    radius
 frequency              raw
 gif                    red
 gradient               reflection
 granite                refraction
 green                  rgb
'
5.1.2 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. ë
Two slashes are used for single line comments.  Anything on a line after a  double slash // is ignored by the ray tracer.  For example: 
  // This line is ignored
R
You can have scene file information on the line in front of the comment, as  in: +
  object { FooBar }  // this is an object
ƒ
The other type of comment is used for multiple lines.  This type of comment  starts with /* and ends with */ everything in-between is ignored.  For  example: 
/* These lines -    Are ignored 
    By the
    Raytracer */
+
This can be useful if you want to temporarily remove elements from a scene  file.   /*...*/ 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 */
 */
h
Use comments liberally and generously. Well used, they really improve the  readability of scene files. '5.1.3 INCLUDE FILES H
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 cutting and pasting the entire  contents of this file into your scene.  |
Include files may be nested. You may have at most 10 nested include files.   There is no limit on un-nested include files. ¢
Generally, include files have data for scenes, but are not scenes in  themselves. By convention scene files end in .pov and include files end  with .inc. '5.1.4 FLOAT EXPRESSIONS 
Many parts of the POV-Ray language require you to specify one or more  floating point numbers.  A floating point number is a number with a decimal  point.  Float literals are represented by an optional sign (-), some  digits, an optional decimal point, and more digits.  If the number is an  integer you may omit the decimal point and trailing zero.  If it is all  fractional you may omit the leading zero.  POV-Ray supports scientific  notation for very large or very small numbers.  The following are all valid  float literals: A
      1.0   -2.0  -4    34    3.4e6       2e-5        .3    0.6
z
Float identifiers may be declared and used anywhere a float can be used.   See section 5.1.7 on declaring identifiers.   ╨
Complex float expressions can be created using + - * / ( ) with float  literals or identifiers.  Assuming the identifiers have been previously  declared as floats, the following are valid float expressions: =
      1+2+3       2*5         1/3         Row*3       Col*5
5
      (Offset-5)/2            This/That+Other*Thing
Ö
Expressions are evaluated left to right with innermost parenthesis  evaluated first, then unary + or -, then multiply or divide, then add or  subtract. O
There are two built-in float identifiers.  The identifier "version" is the  current setting of the version compatibility switch (See +MV under command- line switches).  This allows you to save and restore the previous version  switch.  For example suppose MYSTUFF.INC is in version 1.0 format.  At the  top of the file you could put: r
  #declare Temp_Vers = version    // Save previous value
  #version 1.0                    // Change to 1.0 mode
+
  ...   // Version 1.0 stuff goes here...
?
  #version Temp_Vers              // Restore previous version
α
The other float identifier is "clock".  Its value is set by the +K command- line switch. (See +K under command-line switches).  This allows you to do  limited animation control.  For example you could move an object using: 
   translate <0.1*clock,0,0>
n
and render successive frames with +K1, +K2, +K3 etc.  In each frame the  object would move 1/10th of a unit. '
5.1.5 VECTOR EXPRESSIONS D
POV-Ray operates in a 3D x,y,z coordinate system.  Often you will need to  specify x, y and z values.  A "vector" is a set of three float values used  for such specification.  Vectors consist of three float expressions that  are bracketed by angle brackets < and >.  The three terms are separated by  commas.  For example: 
     < 1.0, 3.2, -5.4578 >

The commas are necessary to keep the program from thinking that the 2nd  term is "3.2-5.4578" and that there is no 3rd term.  If you see an error  message "Float expected but '>' found instead" it probably means two floats  were combined because a comma was missing. T
The three values correspond to the x, y and z directions respectively. 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. -
Vectors may also be combined in expressions the same as float values.  For  example <1,2,3>+<4,5,6> evaluates as <5,7,9>.  Subtraction, multiplication  and division are also performed on a term-by-term basis.  You may also  combine floats with vectors.  For example 5*<1,2,3> evaluates as <5,10,15>. ÷
Sometimes POV-Ray requires you to specify floats and vectors side-by-side.   Thus commas are required separators whenever an ambiguity might arise.  For  example <1,2,3>-4 evaluates as <-3,-2,-1> but <1,2,3>,-4 is a vector  followed by a float. z
Vector identifiers may be declared and used anywhere a vector can be used.   See section 5.1.7 on declaring identifiers. !
Because vectors almost always refer to the x, y and z coordinates, POV-Ray  has three built-in vector identifiers "x "y" and "z".  Like all POV-Ray  keywords they must be lower case.  The vector identifier x is equivalent to  the vector <1,0,0>.  Similarly y is <0,1,0> and z is <0,0,1>. ç
Thus an expression like 5*x evaluates to 5*<1,0,0> or <5,0,0>.  The use of  these identifiers can make the scene file easier to read. '5.1.6 TRANSFORMATIONS ∩
Vectors are used not only as a notation for a point in space but are used  in the transformations scale, rotate, and translate. Scale sizes a texture  or object. Translate moves a texture or object. And rotate turns a texture  or object. ƒ
        5.1.6.1 Translate
        5.1.6.2 Scale
        5.1.6.3 Rotate
        5.1.6.4 Transforming Textures and Objects
        5.1.6.5 Transformation Order
)	*1+G,^!-É'5.1.6.1     Translate A
An object or texture pattern may be moved by adding a "translate"  parameter.  It consists of the keyword "translate" followed by a vector.   The terms of the vector specify the number of units to move in each of the  x, y, and z directions.  Translate moves the element relative to it's  current position. For example, P
  sphere { <10, 10, 10>, 1 
    pigment { Green }
    translate <-5, 2, 1>
  }
┐
Will move the sphere from <10, 10, 10> to <5, 12, 11>.  It does not move it  to absolute location <5, 2, 1>. Translating by zero will leave the element  unchanged on that axis. For example, O
  sphere { <10, 10, 10>, 1 
    pigment { Green }
    translate <0, 0, 0>
  }
"
Will not move the sphere at all. '5.1.6.2     Scale {
You may change the size of an object or texture pattern by adding a "scale"  parameter.  It consists of the keyword "scale" followed by a vector or a  single float value.  If a vector is used, terms of the vector specify the  amount of scaling in each of the x, y, and z directions.  If a float value  is used, the item is uniformly scaled by the same amount in all directions. l
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. '	5.1.6.3     Rotate 
You may change the orientation of an object or texture pattern by adding a  "rotate" parameter.  It consists of the keyword "rotate" followed by a  vector.  The three terms of the vector specify the number of degrees to  rotate about each of the x, y, and z axes.   1
Note that the order of the rotations does matter.  Rotations occur about  the x axis first, then the y axis, then the z axis.  If you are not sure if  this is what you want then you should use multiple rotation statements to  get a correct 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.
φ
Rotation is always performed relative to the axis.  Thus if an object is  some distance from the axis of rotation, its will not only rotate but it  will "orbit" about the axis as though it was swinging around on an  invisible string.   ┬
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 of rotation. Your fingers will curl in  the positive direction of rotation. Similarly if you point your thumb in  the negative direction of the axis your fingers will curl in the negative  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 specification needs to be changed. See  the detailed description of the camera.  In a right handed system you use  your right hand for the "Aerobics".  '.5.1.6.4     Transforming Textures and Objects τ
When 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 then  the texture will be transformed with the object.  If the transformation is  INSIDE the "texture { }" statement then ONLY THE TEXTURE is affected.  The  shape remains the same.  For example: ┘
   sphere { <0, 0, 0>, 1
     texture { White_Marble }  // texture identifier from TEXTURES.INC
     scale 3                   // This scale affects both the 
                               // shape and texture
   }
}
   sphere { <0, 0, 0>, 1
     scale 3             // This scale affects the shape only
     texture { White_Marble }  
   }
Æ
   sphere { <0, 0, 0>, 1
     texture { 
       White_Marble      
       scale 3           // This scale affects the texture only
     }  
   }
Φ
Transformations may also be independently applied to pigment patterns and  surface normal (bump) patterns.  Note scaling a normal pattern affects only  the width and spacing.  It does not affect the height or depth.  For  example: 
   box { <0, 0, 0>, <1, 1, 1>
     texture { 
       pigment {
         checker color Red color White
         scale 0.25  // This affects only the color pattern
       }
       normal {
         bumps 0.3   // This specifies apparent height of bumps
         scale 0.2   // Scales diameter and space between bumps but not
                     //  not the height. Has no effect on color pattern.
       }
       rotate y*45   // This affects the entire texture but not
     }               //  the object. 
   }
'!5.1.6.5     Transformation Order Ω
Because rotations are always relative to the axis and scaling is relative  to the origin, you will generally want to create an object at the origin  and scale and rotate it first.  Then you may translate it into its proper  position.  It is a common mistake to carefully position an object and then  to decide to rotate it.  Because a rotation of an object causes it to orbit  the axis, the position of the object may change so much that it orbits out  of the field of view of the camera! º
Similarly scaling after translation also moves an object unexpectedly. If  you scale after you translate, the scale will multiply the translate  amount. For example: "
  translate <5, 6, 7>
  scale 4 
|
Will translate to 20, 24, 28 instead of 5, 6, 7. Be careful when  transforming to get the order correct for your purposes. 'B5.1.7 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 identifiers as 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: 0
   #declare White = color red 1 green 1 blue 1
P
and then substituted for the full description in the scene file, for  example: Q
   sphere { 
     <0, 0, 0>, 1
     pigment { color red 1 green 1 blue 1 }
   }

becomes: 0
   #declare White = color red 1 green 1 blue 1
B
   sphere { 
     <0, 0, 0>, 1
     pigment { color White }
   }
f
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 identifier. This pre-defined scene element is not used in the  scene until you invoke its identifier. Textures, objects, colors, numbers  and more can be predefined. ¡
In most cases when you invoke an identifier you simply use the form  "keyword{identifier}" where the keyword used is the type of statement that  was declared. For example: D
  #declare Shiny = finish {phong 0.8 phong_size 50 reflection 0.2}
V
  sphere {
     <0, 0, 0>, 1
     pigment { color White }
     finish { Shiny }
   }
r
The identifier "Shiny" was declared as a "finish" and is invoked by placing  it inside a "finish { }" statement. ╘
One exception is object identifiers.  If you declare any object of any kind  such as sphere, box, union, intersection etc. you should invoke it by  placing it in an "object { }" statement.  Thus you might have: '
  #declare Thing = intersection {...}
0
  object {Thing}  // not "intersection{Thing}"
G
Pre-defined elements may be modified when they are used, for example: ┤
  #declare Mickey = // Pre-define a union object called Mickey
     union {
       sphere { < 0, 0, 0>, 2 }
       sphere { <-2, 2, 0>, 1 }
       sphere { < 2, 2, 0>, 1 }
     }
█
  // Use Mickey
     object{        // Note use of "object", not "union" keyword
       Mickey
       scale 3
       rotate y*20
       translate <0, 8, 10>
       pigment {color red 1}
       finish {phong .7}
     }
B
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 identifier could be  used many times in a scene file, and each could have a different size,  position, orientation, and texture. c
Declare is especially powerful when used to create a complex object. Each  part of the 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 = object {...}
  #declare Seat = object {...}
  #declare Body = object {...}
  #declare Engine = object {...}
  #declare Steering_Wheel = object {...}
╠
  #declare Car = 
    union {
       object { Wheel translate < 1, 1, 2>}
       object { Wheel translate <-1, 1, 2>}
       object { Wheel translate < 1, 1,-2>}
       object { Wheel translate <-1, 1,-2>}
       object { Seat translate < .5, 1.4, 1>}
       object { Seat translate <-.5, 1.4, 1>}
       object { Steering_Wheel translate <-.5, 1.6, 1.3>}
       object { Body texture { Brushed_Steel } }
       object { Engine translate <0, 1.5, 1.5> 
    }

and then it like this: F 
  // Here is a car
  object {
    Car 
    translate <4, 0, 23>
  }
╓
Notice that the Wheel and Seat are used more than once. A 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. Ü
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 copy for later  use.  The "define" used in C creates a text substitution macro. ô
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. L
Objects: (Any type may be declared, sphere, box, height_field, blob, etc.) Ä  #declare Tree = union {...}
  #declare Ball = sphere {...}
  #declare Crate= box {...}
 
  object {
    Tree
    (OBJECT_MODIFIERS...) 
  }
4
  object {
    Ball
    (OBJECT_MODIFIERS...) 
  }
5
  object {
    Crate
    (OBJECT_MODIFIERS...) 
  }

Textures: !  #declare Fred = texture {...} 
Y
  sphere { <0, 0, 0>, 1 
    texture {
      Fred 
      (texture_modifiers) 
    }
  }

Layered textures: U  #declare Fred = 
     texture {...} 
     texture {...} 
     texture {...} (etc.)
Y
  sphere { <0, 0, 0>, 1 
    texture {
      Fred 
      (texture_modifiers) 
    }
  }

Pigment: ;  #declare Fred = pigment {checker color Red color White} 
Y
  sphere { <0, 0, 0>, 1 
    pigment {
      Fred 
      (pigment_modifiers) 
    }
  }
	
Normal: &  #declare Fred = normal {bumps 0.5} 
k
  sphere { <0, 0, 0>, 1 
    pigment {White}
    normal {
      Fred 
      (normal_modifiers) 
    }
  }
	
Finish: 5  #declare Fred = finish {phong 0.7 reflection 0.2} 
g
  sphere { <0, 0, 0>, 1 
    pigment {White}
    finish {
      Fred 
      (finish_items) 
    }
  }
	
Colors: .  #declare Fred = color red 1 green 1 blue 1 
9
  sphere { <0, 0, 0>, 1 
    pigment { color Fred }
  }

Color_map: ì  #declare Rainbow = 
    color_map {
      [0.0 color Cyan]
      [1/3 color Yellow]
      [2/3 color Magenta]
      [1.0 color Cyan]
    }
T
  sphere { <0, 0, 0>, 1 
    pigment { radial color_map{Rainbow} rotate -90*x}
  }

Float Values: E  #declare Fred  = 3.45
  #declare Fred2 = .02
  #declare Fred3 = .5
ñ
 // Use the numeric value identifier 
 // anywhere a number would go
  sphere { <-Fred, 2, Fred>, Fred 
    pigment { color red 1 }
    finish { phong Fred3 }
  }
	
Camera:   #declare Fred = camera {..}

  camera { Fred }

Vectors: ;   #declare Fred = <9, 3, 2>
   #declare Fred2 = <4, 1, 4>
m
   sphere { Fred, 1  // Note do not put < > brackets
     scale Fred2     // around vector identifiers
   }
'5.2   OBJECTS ------------- S
Objects are the building blocks of your scene.  There are 20 different  types of objects supported by POV-Ray.  Seven of them are finite solid  primitives, 4 are finite patch primitives, 5 are infinite solid polynomial  primitives, 3 are types of Constructive Solid Geometry types and one is a  specialized object that is a light source. 
The basic syntax of an object is a keyword describing its type, some  floats, vectors or other parameters which further define its location  and/or shape and some optional object modifiers such as texture, pigment,  normal, finish, bounding, clipping or transformations. ö
The texture describes what the object looks like, ie. its material.   Textures are combinations of pigments, normals and finishes.  Pigment is  the color or pattern of colors inherent in the material.  Normal is a  method of simulating various patterns of bumps, dents, ripples or waves by  modifying the surface normal vector.  Finish describes the reflective and  refractive properties of a material. K
Bounding shapes are finite, invisible shapes which wrap around complex,  slow rendering shapes in order to speed up rendering time.  Clipping shapes  are used to cut away parts of shapes to expose a hollow interior.   Transformations tell the ray tracer how to move, size or rotate the shape  and/or the texture in the scene. ### ╧         5.2.1   SOLID FINITE PRIMITIVES
         5.2.2   FINITE PATCH PRIMITIVES
         5.2.3   INFINITE SOLID PRIMITIVES
         5.2.4   CONSTRUCTIVE SOLID GEOMETRY (CSG)
         5.2.5   LIGHT SOURCES
0p8Ö<┬@φ!G 
'5.2.1 SOLID FINITE PRIMITIVES 2
There are 7 different solid finite primitive shapes: blob, box, cone,  cylinder, height_field, sphere, and torus. These have a well-defined  "inside" and can be used in Constructive Solid Geometry. Because these  types are finite, POV-Ray can use automatic bounding on them to speed up  rendering time.   ¿
        5.2.1.1 Spheres
        5.2.1.2 Boxes
        5.2.1.3 Cylinders
        5.2.1.4 Cones
        5.2.1.5 Torus
        5.2.1.6 Blob
        5.2.1.7 Height Fields
1b2z3É	4¬5└6╓7δ
'5.2.1.1     Spheres ╟
Since spheres are so common in ray traced graphics, POV-Ray has a highly  optimized sphere primitive which renders much more quickly than the  corresponding polynomial quadric shape. The syntax is: "
     sphere { <CENTER>, RADIUS }

Where <CENTER> is a vector specifying the x,y,z coordinates of the center  of the sphere and RADIUS is a float value specifying the radius.  You can  also add translations, rotations, and scaling to the sphere. For example,  the following two objects are identical: 2
  sphere { <0, 25, 0>, 10
    pigment {Blue}
  }
R
  sphere { <0, 0, 0>, 1.0
    pigment {Blue}
    scale 10
    translate y*25
  }
F
Note that Spheres may be scaled unevenly giving an ellipsoid shape.  ─
Because spheres are highly optimized they make good bounding shapes.  Because they are finite they respond to automatic bounding. As with all  shapes, they can be translated, rotated and scaled. '5.2.1.2     Boxes J
A simple box can be defined by listing two corners of the box like this:  
  box { <CORNER1>, <CORNER2> }
y
Where <CORNER1> and <CORNER2> are vectors defining the x,y,z coordinates of  opposite corners of the box.  For example:  
  box { <0, 0, 0>, <1, 1, 1> }
¥
Note that all boxes are defined with their faces parallel to the coordinate  axes.  They may later be rotated to any orientation using a rotate  parameter. ╢
Each element of CORNER1 should always 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. ┐
Boxes are calculated efficiently and make good bounding shapes. Because  they are finite they respond to automatic bounding. As with all  shapes, they can be translated, rotated and scaled. '5.2.1.3     Cylinders D
A finite length cylinder with parallel end caps may be defined by. (
   cylinder { <END1>, <END2>, RADIUS }
¬
Where <END1> and <END2> are vectors defining the x,y,z coordinates of the  center of each end of the cylinder and RADIUS is a float value for the  radius.  For example: $
   cylinder { <0,0,0>, <3,0,0>, 2}
_
is a cylinder 3 units long lying along the x axis from the origin to x=3  with a radius of 2. ⁿ
Normally the ends of a cylinder are closed by flat planes which are  parallel to each other and perpendicular to the length of the cylinder.   Adding the optional keyword "open" after the radius will remove the end  caps and results in a hollow tube. ~
Because they are finite they respond to automatic bounding. As with all  shapes, they can be translated, rotated and scaled. '5.2.1.4     Cones W
A finite length cone or a frustum (a cone with the point cut off) may be  defined by. .
   cone { <END1>, RADIUS1, <END2>, RADIUS2 }
┴
Where <END1> and <END2> are vectors defining the x,y,z coordinates of the  center of each end of the cone and RADIUS1 and RADIUS2 are float values for  the radius of those ends.  For example: !
   cone { <0,0,0>,2 <0,3,0>, 0}

is a cone 3 units tall pointing up the y axis from the origin to y=3.  The  base has a radius of 2.  The other end has a radius of 0 which means it  comes to a sharp point.  If neither radius is zero then the results look  like a tapered cylinder or a cone with the point cut off. %
Like a cylinder, normally the ends of a cone are closed by flat planes  which are parallel to each other and perpendicular to the length of the  cone.  Adding the optional keyword "open" after RADIUS2 will remove the end  caps and results in a tapered hollow tube like a megaphone or funnel. ~
Because they are finite they respond to automatic bounding. As with all  shapes, they can be translated, rotated and scaled. '5.2.1.5     Torus ┌
A torus is a 4th order quartic polynomial shape that looks like a donut or  inner tube.  Because this shape is so useful and quartics are difficult to  define, POV-Ray lets you take a short-cut and define a torus by: 
   torus { MAJOR, MINOR }
m
where MAJOR is a float value giving the major radius and MINOR is a float  specifying the minor radius.  The major radius extends from the center of  the hole to the mid-line of the rim while the minor radius is the radius of  the cross-section of the rim.  The torus is centered at the origin and lies  in the X-Z plane with the Y-axis sticking through the hole. ╧
        ----------- - - - - - - - ----------              +Y
       /          \              /          \              |       
      /            \            /            \             |       
     |              |          |       |<-B-->|       -X---|---+X  
      \            /            \            /             |       
       \__________/_ _ _ _ _ _ _ \__________/              |       
                         |<-----A----->|                  -Y
/
      A = Major Radius
      B = Minor Radius
÷
Internally the torus is computed the same as any other quartic or 4th order  polynomial however a torus defined this way will respond to automatic  bounding while a quartic must be manually bound if at all.  As with all  shapes, a torus can be translated, rotated and scaled.  Calculations for  all higher order polynomials must be very accurate.  If this shape renders  improperly you may add the keyword "sturm" after the MINOR value to use  POV-Ray's slower-yet-more-accurate Sturmian root solver. '.5.2.1.6     Blob 
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. 4
Picture each blob component as a point floating in space.  Each point has a  field around it that starts very strong at the center point and drops off  to zero at some radius. POV-Ray adds together the field strength of each  component and looks for the places that the strength of the field is  exactly the same as the "threshold" value that was specified.  Points with  a total field strength greater than the threshold are considered inside the  blob.  Those less than the threshold are outside.  Points equal to the  threshold are on the surface of the blob. 
A blob is defined as follows: π
  blob {
     threshold THRESHOLD_VALUE
     component STRENGTH, RADIUS, <CENTER>
     component STRENGTH, RADIUS, <CENTER>  // Repeat for any number  
     component STRENGTH, RADIUS, <CENTER>  //  of components         
  }
a
The keyword "threshold" is followed by a float THRESHOLD_VALUE.  Each  component begins with the keyword "component".  STRENGTH is a float value  specifying the field strength at its center.  The 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.  The strength tapers off to zero at the value specified by the  float RADIUS.  The vector <CENTER> specifies the x,y,z coordinates of the  component. For 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 
  }
ò
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 modeling). ▀
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: F     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. N
     1) "threshold" must be greater than 0. POV-Ray only looks for positive 
densities. J     2) If "threshold" is greater than the strength of a component, then 
the component will disappear. K     3) As "threshold" gets larger the surface you see gets closer to the 
centers of the components. M     4) As "threshold" gets smaller, the surface you see gets closer to the 
Fspheres at a distance of "radius" from the centers of the components. 
STRENGTH: L     Each component has a strength value - this defines the density of the 
gcomponent at the center of the component. Changing this value will usually  have only a subtle effect. N
     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. M     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. K     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:  G     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) o     1) "radius" must be bigger than 0.
     2) As "radius" increases the apparent size of the component will 
increase. 	
CENTER: H     This is simply a point in space.  It defines the center of a blob 
Wcomponent.  By changing the x/y/z values of the center you move the  component around. 

THE FORMULA M     For the more mathematically minded, here's the formula used internally 
Mby POV-Ray to create blobs. You don't need to understand this to use blobs.  2
The formula used for a single blob component is: -
      density = strength * (1 - radius^2)^2
0
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 + ...
_
Blobs can be used in CSG shapes and they can be scaled, rotated and  translated. Because they are finite they respond to automatic bounding.   The calculations for blobs must be very accurate.  If this shape renders  improperly you may add the keyword "sturm" after the last component to use  POV-Ray's slower-yet-more-accurate Sturmian root solver. '5.2.1.7     Height Fields ¢
Height fields are fast, efficient objects that are generally used to create  mountains or other raised surfaces out of hundreds of triangles in a mesh.   τ
A height field is essentially a 1 unit wide by 1 unit long box with a  mountainous surface on top.  The height of the mountain at each point is  taken from the color number (palette index) of the pixels in a graphic  image file.  ?

                    ________  <---- image index 255
                  /        /|
            +1y  ---------- |
                 |        | |
                 |        | |+1z <- Image upper-right
                 |        | /
            0,0,0---------- +1x
                 ^
                 |____ Image lower-left
L

    NOTE: Image resolution is irrelevant to the scale of the heightfield.
å
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 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 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. I
There are three types files which can define a height field as follows: v
   height_field { gif "filename.gif" }
   height_field { tga "filename.tga" }
   height_field { pot "filename.pot" }
⌐
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. b
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. ¢
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.  N
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. s
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. 4
The TGA file format may be used as a storage device for 16 bit numbers  rather than an image file. 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 of most use to programmers, though you  may 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.   B
It is nearly impossible to take advantage of the 16 bits of resolution  offered by the use of tga files in height fields when the tga file is  created in a paint program.  A gif file is a better choice for paint  created height fields in 8 bits.  Also see Appendix B.5 for a tip on  creating tga files for height fields. T
An optional "water_level" parameter may be added after the file name.  It  consists of the keyword "water_level" followed by a float value 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"  ë
Normally height fields have a rough, jagged look because they are made of  lots of flat triangles.  Adding the keyword "smooth" causes POV-Ray to  modify the surface normal vectors of the triangles in such a way that the  lighting and shading of the triangles will give a smooth look.  This may  allow you to use a lower resolution file for your height field than would  otherwise be needed. ÿ
Height fields can be used in CSG shapes and they can be scaled, rotated and  translated. Because they are finite they respond to automatic bounding.   U
Here are a notes and helpful hints 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 ray tracer 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 ray tracer  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 3d projection features to do  a sort of preview. If it doesn't look good there, the ray tracer 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. '5.2.2 FINITE PATCH PRIMITIVES D
There are 4 totally thin, finite objects which have NO well-defined inside.   They may be combined in CSG union but cannot be use in other types of CSG.   They are bicubic_patch, disc, smooth_triangle and triangle.  Because these  types are finite, POV-Ray can use automatic bounding on them to speed up  rendering time.   a
        5.2.2.1 Triangle and Smooth_triangle
        5.2.2.2 Bicubic_patch
        5.2.2.3 Disc
9t:í
;┐'
*5.2.2.1     Triangle and Smooth_triangle  ▐
The triangle primitive 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.  
A triangle is defined by: 1
   triangle { <CORNER1>, <CORNER2>, <CORNER3> }
]
where <CORNERn> is a vector defining the x,y,z coordinates of each corner  of the triangle. ò
Because triangles are perfectly flat surfaces it would require extremely  large numbers of very small triangles to approximate a smooth, curved  surface.  However much of our perception of smooth surfaces is dependent  upon the way light and shading is done.  By artificially modifying the  surface normals we can simulate as smooth surface and hide the sharp-edged  seams between individual triangles.  g
The smooth_triangle primitive is used for just such purposes.  The  smooth_triangles use a formula called Phong normal interpolation to  calculate the surface normal for any point on the triangle based on normal  vectors which you define for the three corners.  This makes the triangle  appear to be a smooth curved surface. A smooth_triangle is defined by: f
  smooth_triangle {
    <CORNER1>, <NORMAL1>,
    <CORNER2>, <NORMAL2>,
    <CORNER3>, <NORMAL3>
  }
æ
where the corners are defined as in regular triangles and <NORMALn> is a  vector describing the direction of the surface normal at each corner. ë
These normal vectors are prohibitively difficult to compute by hand.   Therefore smooth_triangles are almost always generated by utility programs.   To achieve smooth results, any triangles which share a common vertex should  have the same normal vector at that vertex.  Generally the smoothed normal  should be the average of all the actual normals of the triangles which  share that point. '5.2.2.2     Bicubic_patch ┤
A bicubic patch is a 3D curved surface created from a mesh of triangles.  POV-Ray supports a type of bicubic patch called a Bezier patch.  A bicubic  patch is defined as follows: 
  bicubic_patch { 
     type PATCH_TYPE
     flatness FLATNESS_VALUE
     u_steps NUM_U_STEPS
     v_steps NUM_V_STEPS
     <CP1>,  <CP2>,   <CP3>,   <CP4>,
     <CP5>,  <CP6>,   <CP7>,   <CP8>,
     <CP9>,  <CP10>,  <CP11>,  <CP12>,
     <CP13>, <CP14>,  <CP15>,  <CP16>
  }
┤
The keyword "type" is followed by a float PATCH_TYPE which currently must  be either 0 or 1.  For type 0 only the control points are retained within  POV-Ray. This means that a minimal amount of memory is needed, but POV-Ray  will need to perform many extra calculations when trying to render the  patch.  Type 1 preprocesses the patch into many subpatches.  This results  in a significant speedup in rendering, at the cost of memory. Q
These 4 parameters: type, flatness, u_steps & v_steps, may appear in any  order.  They are followed by 16 vectors that define the x,y,z coordinates  of the 16 control points which define the patch.  The patch touches the 4  corner points <CP1>, <CP4>, <CP13> and <CP16> while the other 12 points  pull and stretch the patch into shape. "
The keywords "u_steps" and "v_steps" are each followed by float values  which tell how many rows and columns of triangles are the minimum to use to  create the surface.  The maximum number of individual pieces of the patch  that are tested by POV-Ray can be calculated from the following: '
   sub-pieces = 2^u_steps * 2^v_steps
╔
This means that you really should keep "u_steps" and "v_steps" under 4 or  5.  Most patches look just fine with "u_steps 3" and "v_steps 3", which  translates to 64 subpatches (128 smooth triangles). 
As POV-Ray processes the Bezier patch, it makes a test of the current piece  of the patch to see if it is flat enough to just pretend it is a rectangle.   The statement that controls this test is: "flatness xxx".  Typical flatness  values range from 0 to 1 (the lower the slower). 
If the value for flatness is 0, then POV-Ray will always subdivide the  patch to the extend specified by u_steps and v_steps.  If flatness is  greater than 0, then every time the patch is split, POV-Ray will check to  see if there is any need to split further. e
There are both advantages and disadvantages to using a non-zero flatness.   The advantages include: à
   If the patch isn't very curved, then this will be detected and POV-Ray
   won't waste a lot of time looking at the wrong pieces.
ö
   If the patch is only highly curved in a couple of places, POV-Ray will
   keep subdividing there and concentrate it's efforts on the hard part.
Ç
The biggest disadvantage is that if POV-Ray stops subdividing at a  particular level on one part of the patch and at a different level on an  adjacent part of the patch, there is the potential for "cracking".  This is  typically visible as spots within the patch where you can see through.  How  bad this appears depends very highly on the angle at which you are viewing  the patch. ≈
Like triangles, the bicubic patch is not meant to be generated by hand.   These shapes should be created by a special utility. You may be able to  acquire utilities to generate these shapes from the same source from which  you obtained POV-Ray.  

Example:   bicubic_patch { 
     type 1 
     flatness 0.01
     u_steps 4
     v_steps 4
     <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>
  }
Θ
The triangles in a POV-Ray bicubic_patch are automatically smoothed using  normal interpolation but it is up to the user (or the user's utility  program) to create control points which smoothly stitch together groups of  patches.   q
As with the other shapes, bicubic_patch objects can be translated, rotated,  and scaled.  Because they are finite they respond to automatic bounding.   Since it's made from triangles, a bicubic_patch cannot be used in CSG  intersection or difference types or inside a clipped_by modifier because  triangles have no clear "inside". The CSG union type works acceptably. '
5.2.2.3     Disc φ
One other flat, finite object type is available with POV-Ray.  Note that a  disc is infinitely thin.  It has no thickness.  If you want a disc with  true thickness you should use a very short cylinder.  A disc shape may be  defined by: ( 
  disc { <CENTER>, <NORMAL>, RADIUS }

or  4
  disc { <CENTER>, <NORMAL>, RADIUS, HOLE_RADIUS }
W
The vector <CENTER> defines the x,y,z coordinates of the center of the  disc.  The <NORMAL> vector describes its orientation by describing its  surface normal vector.  This is followed by a float specifying the RADIUS.   This may be optionally followed by another float specifying the radius of a  hole to be cut from the center of the disc. 

Example: ¢  disc {
    <-2,-0.5, 0>,    //center location
    <0,  1,   0>,    //normal vector
    2                //radius         
    pigment { color Cyan }
  }
╬
  disc {
    <0, 1, 0>,       //center location
    <-1, 3, -2>,     //normal vector  
    1.5,             //radius         
    0.5              //hole radius (optional)
    pigment { color Yellow }
  }
.
As with the other shapes, discs can be translated, rotated, and scaled.   Because they are finite they respond to automatic bounding.  Disc cannot be  used in CSG intersection or difference types or inside a clipped_by  modifier because it has no clear "inside". The CSG union type works  acceptably. ' 5.2.3 INFINITE SOLID PRIMITIVES Γ
There are 5 polynomial primitive shapes that are possibly infinite and do  not respond to automatic bounding.  They do have a well defined inside and  may be used in CSG.  They are plane, cubic, poly, quadric, and quartic.   W
        5.2.3.1 Plane
        5.2.3.2 Quadric
        5.2.3.3 Poly, Cubic and Quartic
=>*?B'5.2.3.1     Plane  w
The plane primitive is a fast, efficient way to define an infinite flat  surface.  The plane is specified as follows:  
  plane { <NORMAL>, DISTANCE }

The <NORMAL> vector defines the surface normal of the plane.  A surface  normal is a vector which points up from the surface at a 90 degree angle.   This is followed by a float value that gives the distance along the normal  that the plane is from the origin.  For example: 
  plane { <0,1,0>,4 }
f
This is a plane where "straight up" is defined in the positive y direction.   The plane is 4 units in that direction away from the origin.  Because most  planes are defined with surface normals in the direction of an axis, you  will often see planes defined using the "x", "y", or "z" built-in vector  identifiers.  The example above could be specified as: 
  plane { y,4 }
>
The plane extends infinitely in the x and z directions.  It effectively  divides the world into two pieces.  By definition the normal vector points  to the outside of the plane while any points away from the vector are  defined as inside.  This inside/outside distinction is only important when  using planes in CSG. ▌
As with the other shapes, planes can be translated, rotated, and scaled.   Because they are infinite they do not respond to automatic bounding.  Plane  can be used freely in CSG because it has a clear defined "inside".  u
A plane is called a "polynomial" shape because it is defined by a first  order polynomial equation.  Given a plane: 
  plane { <A, B, C>, D }
'
it can be represented by the formula: 
   A*x + B*y + C*z = D
╦
Therefore our example "plane {y,4}" is actually the polynomial equation  "y=4".  You can think of this as a set of all x,y,z points where all have y  values equal to 4, regardless of the x or z values. m
This equation is a "first order" polynomial because each term contains only  single powers of x, y or z.  A second order equation has terms like x^2,  y^2, z^2, xy, xz and yz.  Another name for a 2nd order equation is a  quadric equation.  Third order polys are called cubics.  A 4th order  equation is a quartic.  Such shapes are described in the sections below. '5.2.3.2     Quadric  
Quadric surfaces can produce shapes like ellipsoids, spheres, cones,  cylinders, paraboloids (dish shapes), and hyperboloids (saddle or hourglass  shapes).  NOTE: Do not confuse "quaDRic" with "quaRTic".  A quadric is a  2nd order polynomial while a quartic is 4th order. %
A quadric is defined in POV-Ray by: ,
  quadric { <A,B,C>, <D,E,F>, <G,H,I>, J }
,
where A through J are float expressions.   D
This defines a surface of x,y,z points which satisfy the equation: l
       A x^2   + B y^2   + C z^2
     + D xy    + E xz    + F yz
     + G x     + H y     + I z    + J = 0
r
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        Infinitely long cylinder along the Z axis 
     X^2 + Y^2 - Z^2 = 0      Infinitely long cone along the Z axis
²
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. *
You can invoke them by using the syntax, 
  object { 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, u
 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. '$5.2.3.3     Poly, Cubic and Quartic ^
Higher order polynomial surfaces may be defined by the use of a poly shape.   The syntax is: )
  poly { ORDER, <T1, T2, T3, .... Tm> }
╔
Where ORDER is a whole number from 2 to 7 inclusively that specifies the  order of the equation.  T1, T2... Tm are float values for the coefficients  of the equation.  There are "m" such terms where  )
    m=((ORDER+1)*(ORDER+2)*(ORDER+3))/6
1
An alternate way to specify 3rd order polys is: 
  cubic { <T1, T2,... T20> }
1
Also 4th order equations may be specified with:  
  quartic { <T1, T2,... T35> }
6
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 let's define a torus the hard way.  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. 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) ┬
   quartic {
      < 1,   0,   0,   0,   2,   0,   0,   2,   0, 
     -104,   0,   0,   0,   0,   0,   0,   0,   0, 
        0,   0,   1,   0,   0,   2,   0,  56,   0,
        0,   0,   0,   1,   0, -104,  0, 784 >
      sturm
      bounded_by { // bounded_by speeds up the render,
                   // see bounded_by
                   // explanation later
                   // in docs for more info.
       sphere { <0, 0, 0>, 10 }
      }
   }

Poly, cubic and 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:  
    object { Quartic_Name }
µ
As with the other shapes, these shapes can be translated, rotated, and  scaled.  Because they are infinite they do not respond to automatic  bounding.  They can be used freely in CSG because they have a clear defined  "inside".  Γ
Polys use highly complex computations and will not always render perfectly.  If the surface 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 sub-directory MATH  for examples of polys in scenes. 
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 reference book for curves and surfaces where you'll  find more quartic shape formulas is: e
   "The CRC Handbook of Mathematical Curves and Surfaces"
   David von Seggern
   CRC Press
   1990
'(5.2.4 CONSTRUCTIVE SOLID GEOMETRY (CSG) Å
POV-Ray supports Constructive Solid Geometry (also called Boolean  operations) in order to make the shape definition abilities more powerful. ó
        5.2.4.1 About CSG
        5.2.4.2 Inside and outside
        5.2.4.3 Union
        5.2.4.4 Intersection
        5.2.4.5 Difference
        5.2.4.6 Merge
A╔	BπCDE9
FT'5.2.4.1     About CSG        
█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, boxes, cylinders, 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 start with solid blocks and carve away  pieces.  Objects may be combined in groups and treated as though they were  single objects.        
═Constructive Solid Geometry allows you to define shapes which are the  union, intersection, or difference of other shapes.  Additionally you may  clip sections of objects revealing their hollow interiors.        
pUnions 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.  In POV-Ray 2.0 the union keyword may be used anyplace composite was used in  previous versions of POV-Ray.  Also a new type of union called "merge" can  eliminate internal surfaces on transparent or clipped objects.        
GIntersections define the space where the two or more surfaces overlap.        
8Differences allow you to cut one object out of another.        
\CSG intersections, unions, and differences can consist of two or more  shapes. For example: Ñ       
          union {
            object{O1}
            object{O2}
            object{O3}  // any number of objects
            texture{T1}
          }
       
oCSG 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 component shapes with the CSG doesn't matter except in a  difference shape. 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 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.        
'5.2.4.2     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, disc 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). CSG uses the  concepts of inside and outside to combine shapes together. Take the  following situation:        
sNote: 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. ö
In this diagram, point 1 is inside object A only.  Point 2 is inside B  only.  Point 3 is inside both A and B while point 0 is outside everything. ┼       
         * = Object A
         % = Object B
       
                            *  0
                           * *    %
                          *   *  % %
                         *     *%   %
                        *  1   %*    %
                       *      %  * 2  %
                      *      % 3  *    %
                     *******%*******    %
                           %             %
                          %%%%%%%%%%%%%%%%%
	
       
Complex shapes may be created by combining other shapes using a technique  called "Constructive Solid Geometry" (or CSG for short).  The CSG shapes  are difference, intersection, and union. The following gives a simple 2D  overview of how these functions work.  '5.2.4.3     Union   ┌
Unions are simply "glue", used bind two or more shapes into a single entity  that can be manipulated as a single object.  The diagram above shows the  union of A and B.  The new object created by the union operation can then  be scaled, translated, and rotated as a single shape.  The entire union can  share a single texture, but each object contained in the union may also  have its own texture, which will override any matching texture statements  in the parent object: ╝
      union {
        sphere { <0, 0.5, 0> 1 pigment { Red } }
        sphere { <0, 0.0, 0> 1 }
        sphere { <0,-0.5, 0> 1 }
        pigment { Blue }
        finish { Shiny }
      }

This union will contain three spheres.  The first sphere is explicitly  colored Red while the other two will be shiny blue.  Note that the shiny  finish does NOT apply to the first sphere.  This is because the  "pigment{Red}" is actually shorthand for "texture{pigment{Red}}".  It  attaches an entire texture with default normals and finish.  The textures  or pieces of textures attached to the union apply ONLY to components with  no textures.  These texturing rules also apply to intersection, difference  and merge as well. à
Earlier versions of POV-Ray placed restrictions on unions so you often had  to combine objects with composite statements.  Those earlier restrictions  have been lifted so composite is no longer needed.  Composite is still  supported for backwards compatibility but it is recommended that union now  be used in it's place since future support for the composite keyword is not  guarantied. '5.2.4.4     Intersection ≡
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  "cutting" infinite shapes off.  The diagram below consists of only those  parts common to A and B. ₧       
       
                               %*
                              %  *
                             % 3  *
                            %*******

For example: p
     intersection {
       sphere {<-0.75,0,0>,1}
       sphere {< 0.75,0,0>,1}
       pigment {Yellow}
     }
'5.2.4.5     Difference î
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   %
                       *      %
                      *      %
                     *******%

For example: r
     difference {
       sphere {<-0.75,0,0>,1}
       sphere {< 0.75,0,-0.25>,1}
       pigment {Yellow}
     }
'5.2.4.6     Merge 

As can be seen in the diagram for union, the inner surfaces where the  objects overlap is still present.  On transparent or clipped objects these  inner surfaces cause problems.  A merge object works just like union but it  eliminates the inner surfaces like this: ç
                            *
                           * *    %
                          *   *  % %
                         *     *%   %
                        *            %
                       *              %
                      *                %
                     *******%           %
                           %             %
                          %%%%%%%%%%%%%%%%%
	
       
'5.2.5 LIGHT SOURCES ÿ
The last object we'll cover is the light source.  Light sources have no  visible shape of their own.  They are just points or areas which emit  light. s         5.2.5.1 Point Lights
         5.2.5.2 Spotlights
         5.2.5.3 Area Lights
         5.2.5.4 Looks_like
H╛I▄
J°K
'5.2.5.1     Point Lights v
Most light sources are infinitely small points which emit light.  Point  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  from a surface.  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 Gray is somewhere in the middle. #
The syntax for a light source is: <
    light_source { <X, Y, Z> color red #, green #, blue #}
r
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 Gray50}
(
is a 50% Gray light at X=3, Y=5, Z=-6. Q
Point light sources in POV-Ray do not attenuate, or get dimmer, with  distance. '5.2.5.2     Spotlights ╧
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. 
The syntax is: #
Syntax:   light_source { <CENTER> ╖              color red #, green #, blue #
              spotlight
              point_at <POINT>
              radius #
              falloff #
              tightness #
          }
ô
A spotlight is positioned using two vectors.  The first vector is the usual  <CENTER> vector that you would use to position a point light source. ÿ
The second vector is the point_at <POINT>, the vector position of the point the light is pointing at, similar to the look_at in a camera  description. f
The following illustrations will be helpful in understanding how these  values relate to each other: └

           (+) Spotlight <center>
           / \
          /   \
         /     \
        /       \
       /         \
      /           \
      +-----*-----+
            ^ point_at <point>
F
The center is specified the same way as a normal point light_source. G
Point_at <POINT> is the location that the cone of light is aiming at. O
Spotlights also have three other parameters: radius, falloff, and  tightness. D
If you think of a spotlight as two nested cones,  the inner cone would be  specified by the radius parameter, and would be fully lit.  The outer cone  would be the falloff cone and beyond it would be totally unlit.  The values  for these two parameters are specified in degrees of the half angle at the  peak of each cone: 

           (+) Spotlight <center>
            |\ <-----  angle measured here
            | \
            || \
            ||  \      shaded area = radius cone
            |||  \     outer line = falloff cone
            ||||  \
            |||||  \
            +-------+
y
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 angle of the radius of the total 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. w
The tightness value specifies how quickly the light dims, or falls off, in  the region between the radius (full brightness) cone and the falloff (full  darkness) cone.  The default value for tightness is 10.  Lower tightness  values will make the spot have very soft edges. High values will make the  edges sharper, the spot "tighter".  Values from 1 to 100 are acceptable. ±
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.  They may also be used in conjunction  with area_lights. 

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
     }
' 5.2.5.3     Area Lights ╜
Regular light sources in POV-Ray are modeled as point light sources, that  is they emit light from a single point in space. Because of this the  shadows created by these lights have the characteristic sharp edges that  most of us are use to seeing in ray traced images. The reason for the  distinct edges is that a point light source is either fully in view or it  is fully blocked by an object. A point source can never be partially  blocked. E
Area lights on the other hand occupy a finite area of space. Since it is  possible for an area light to be partially blocked by an object the shadows  created will have soft or "fuzzy" edges. The softness of the edge is  dependent on the dimensions of the light source and it's distance from the  object casting the shadow. ≥
The area lights used in POV-Ray are rectangular in shape, sort of like a  flat panel light. Rather than performing the complex calculations that  would be required to model a true area light, POV-Ray approximates an area  light as an array of "point" light sources spread out over the area  occupied by the light. The intensity of each individual point light in the  array is dimmed so that the total amount of light emitted by the light is  equal to the light color specified in the declaration. 


Syntax: 
light_source { (   <X, Y, Z> color red # green # blue #
J
   area_light <X1, Y1, Z1>, <X2, Y2, Z2>, N1, N2
   adaptive #
   jitter
$
   [optional spotlight parameters]
} Y
The light's location and color are specified in the same way as a regular light source. l
The area_light command defines the size and orientation of the area light  as well as the number of lights in the light source array.  The vectors  <X1,Y1,Z1> and <X2,Y2,Z2> specify the lengths and directions of the edges  of the light. Since the area lights are rectangular in shape these vectors  should be perpendicular to each other. The larger the size of the light the  thicker that the soft part of the shadow will be. The numbers N1 and N2  specify the dimensions of the array of point lights. The larger the number  of lights you use the smoother your shadows will be but the longer they  will take to render. 
The adaptive command is used to enable adaptive sampling of the light  source. By default POV-Ray calculates the amount of light that reaches a  surface from an area light by shooting a test ray at every point light  within the array. As you can imagine this is VERY slow. Adaptive sampling  on the other hand attempts to approximate the same calculation by using a  minimum number of test rays. The number specified after the keyword  controls how much adaptive sampling is used. The higher the number the more  accurate your shadows will be but the longer they will take to render. If  you're not sure what value to use a good starting point is 'adaptive 1'.   The adaptive command only accepts integer values and cannot be set lower  than 0. Adaptive sampling is explained in more detail later. 
The jitter command is optional. When used it causes the positions of the  point lights in the array to be randomly jittered to eliminate any shadow  banding that may occur. The jittering is completely random from render to  render and should not be used when generating animations. -
Note: It's possible to specify spotlight parameters along with area_light  parameters to create "area spotlights." Using area spotlights is a good way  to speed up scenes that use area lights since you can confine the lengthy  soft shadow calculations to only the parts of your scene that need them. 

Example: 
light_source {    <0, 50, 0> color White
C
   area_light <5, 0, 0>, <0, 0, 10>, 5, 5
   adaptive 1
   jitter
} 5
This defines an area light that extends 5 units along the x axis and 10  units along the z axis and is centered at the location <0,50,0>. The light  consists of a 5 by 5 jittered array of point sources for a total of 25  point lights. A minimum of 9 shadow rays will be used each time this light  is tested. "
                     / * * * * *
                   / * * * * *           Y
        <0,0,10> / * * * * *             |     Z
               / * * * * *               |   /
             / * * * * *                 | /
           +----------->                 +------X
              <5,0,0>
&

An interesting effect that can be created using area lights is a linear  light. Rather than having a rectangular shape, a linear light stretches  along a line sort of like a thin fluorescent tube. To create a linear light  just create an area light with one of the array dimensions set to 1. 

Example: 
light_source {    <0, 50, 0> color White
E
   area_light <40, 0, 0>, <0, 0, 1>, 100, 1
   adaptive 4
   jitter
} S
This defines a linear light that extends from <-40/2,50,0> to <+40/2,50,0>  and consists of 100 point sources along it's length. The vector <0,0,1> is  ignored in this case since a linear light has no width. Note: If the linear  light is fairly long you'll usually need to set the adaptive parameter  fairly high as in the above example. φ
When performing adaptive sampling POV-Ray starts by shooting a test ray at  each of the four corners of the area light. If the amount of light received  from all four corners is approximately the same then the area light is  assumed to be either fully in view or fully blocked. The light intensity is  then calculated as the average intensity of the light received from the  four corners.  However, if the light intensity from the four corners  differs significantly then the area light is partially blocked. The light  is the split into four quarters and each section is sampled as described  above. This allows POV-Ray to rapidly approximate how much of the area  light is in view without having to shoot a test ray at every light in the  array. ª
While the adaptive sampling method is fast (relatively speaking) it can  sometimes produces inaccurate shadows. The solution is to reduce the amount  of adaptive sampling without completely turning it off. The number after  the adaptive keyword adjusts the number of times that the area light will  be split before the adaptive phase begins. For example if you use "adaptive  0" a minimum of 4 rays will be shot at the light. If you use "adaptive 1" a  minimum of 9 rays will be shot (adaptive 2 = 25 rays, adaptive 3 = 81 rays,  etc). Obviously the more shadow rays you shoot the slower the rendering  will be so you should use the lowest value that gives acceptable results. =
The number of rays never exceeds the values you specify for rows and  columns of points.  For example: area_light x,y,4,4 specifies a 4 by 4  array of lights.  If you specify adaptive 3 it would mean that you should  start with a 5 by 5 array.  In this case no adaptive sampling is done.  The  4 by 4 array is used. '5.2.5.4     Looks_like ┘
Normally the light source itself has no visible shape.  The light simply  radiates from an invisible point or area.  You may give a light source a  any shape by adding a "looks_like{OBJECT}" statement.  For example: }
        light_source {
           <100,200,-300> color White
           looks_like {sphere{<0,0,0>,1 texture{T1}}
        }
ö
This creates a visible sphere which is automatically translated to the  light's location <100,200,-300> even though the sphere has <0,0,0> as its  center.  There is an implied "no_shadow" also attached to the sphere so  that light is not blocked by the sphere.  Without the automatic no_shadow,  the light inside the sphere would not escape. The sphere would, in effect,  cast a shadow over everything.        
xIf you want the attached object to block light then you should attach it  with a union and not a looks_like as follows: p
        union {
          light_source {<100,200,-300> color White}
          object {My_Lamp_Shade}
        }
D
Presumably parts of the lamp shade are open to let SOME light out. '.5.3   OBJECT MODIFIERS ---------------------- í
A variety of modifiers may be attached to objects.  Transformations such as  translate, rotate and scale have already been discussed.  Textures are in a  section of their own below.  Here are three other important modifiers:  clipped_by, bounded_by and no_shadow.  Although the examples below use  object statements and object identifiers, these modifiers may be used on  any type of object such as sphere, box etc. T
         5.3.1   CLIPPED_BY
         5.3.2   BOUNDED_BY
         5.3.3   NO_SHADOW
MΓ
N■
O	'
5.3.1 CLIPPED_BY    
úThe "clipped_by" statement is technically an object modifier but it  provides a type of CSG similar to CSG intersection.  You attach a clipping  object like this: R
        object {
           My_Thing
           clipped_by{plane{y,0}}
        }
-
Every part of the object "My_Thing" that is inside the plane is retained  while the remaining part is clipped off and discarded.  In an intersection  object, the hole is closed off.  With clipped_by it leaves an opening.  For  example this diagram shows our object "A" being clipped_by a plane{y,0}. ì


                       *       *
                      *         *
                     *           *
                    ***************
ó
Clipped_by may be used to slice off portions of any shape. In many cases it  will also result in faster rendering times than other methods of altering a  shape. ö
Often you will want to use the clipped_by and bounded_by options with the  same object.  The following shortcut saves typing and uses less memory. ~
        object {
           My_Thing
           bounded_by{box{<0,0,0>,<1,1,1>}}
           clipped_by{bounded_by}
        }
M
This tells POV-Ray to use the same box as a clip that was used as a bounds. '5.3.2 BOUNDED_BY f
The calculations necessary to test if a ray hits an object can be quite  time consuming.  Each ray has to be tested against every object in the  scene.  POV-Ray attempts so speed up the process by building a set of  invisible boxes, called bounding slabs, which cluster the objects together.   This way a ray that travels in one part of the scene doesn't have to be  tested against objects in another far away part of the scene.  When large  number objects are present the slabs are nested inside each other.  POV-Ray  can use slabs on any finite object.  However infinite objects such as  plane, quadric, quartic, cubic & poly cannot be automatically bound.  Also  CSG objects cannot be efficiently bound by automatic methods.  By attaching  a bounded_by statement to such shapes you can speed up the testing of the  shape and make it capable of using bounding slabs. ─
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: T       
            bounded_by {
                 object { ... }
            }
       
       An example of a Bounding Shape:
       
            intersection {
                sphere {<0,0,0>, 2}
                plane  {<0,1,0>, 0}
                plane  {<1,0,0>, 0}
                bounded_by {sphere {<0,0,0>, 2}}
            }
       
The best bounding shape is a sphere or a box since these shapes are highly  optimized, although, any shape may be used.  If the bounding shape is  itself a finite shape which responds to bounding slabs then the object  which it encloses will also be used in the slab system. v
CSG shapes can benefit from bounding slabs without a bounded_by statement  however they may do so inefficiently in intersection, difference and merge.   In these three CSG types the automatic bound used covers all of the  component objects in their entirety.  However the result of these  intersections may result in a smaller object.  Compare the sizes of the  illustrations for union and intersection in the CSG section above.  It is  possible to draw a much smaller box around the intersection of A and B than  the union of A and B yet the automatic bounds are the size of union{A B}  regardless of the kind of CSG specified. º
While it is almost always a good idea to manually add a bounded_by to  intersection, difference and merge, it is often best to NOT bound a union.   If a union has no bounded_by and no clipped_by then POV-Ray can internally  split apart the components of a union and apply automatic bounding slabs to  any of its finite parts.  Note that some utilities such as RAW2POV may be  able to generate bounds more efficiently than POV-Ray's current system.   However most unions you create yourself can be easily bounded by the  automatic system.  For technical reasons POV-Ray cannot split a merge  object.  It is probably best to hand bound a merge, especially if it is  very complex. b
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 clipped_by as explained above. Often you will want to  use the clipped_by and bounded_by options with the same object.  The  following shortcut saves typing and uses less memory. ~
        object {
           My_Thing
           clipped_by{box{<0,0,0>,<1,1,1>}}
           bounded_by{clipped_by}
        }
M
This tells POV-Ray to use the same box as a bounds that was used as a clip. '5.3.3 NO_SHADOW â
You may specify the no_shadow keyword in object and that object will not  cast a shadow.  This is useful for special effects and for creating the  illusion that a light source actually is visible.  This keyword was  necessary in earlier versions of POV-Ray which did not have the  "looks_like" statement.  Now it is useful for creating things like laser  beams or other unreal effects. '
Simply attach the keyword as follows: C
        object {
          My_Thing
          no_shadow
        }
'5.4   TEXTURES -------------- ╡
Textures are the materials from which the objects in POV-Ray are made. 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. The tutorial in section  4 above introduces the basics of defining textures and attaching them to  objects.  It explains how textures are made up of three portions, a color  pattern called "pigment", a bump pattern called "normal", and surface  properties called "finish".  >
The most complete form for defining a texture is as follows: s
  texture {
    TEXTURE_IDENTIFIER
    pigment {...}
    normal {...}
    finish {...}
    TRANSFORMATIONS...
  }
π
Each of the items in a texture are optional but if they are present, the  identifier must be first and the transformations bust be last.  The  pigment, normal and finish parameters modify any pigment, normal and finish  already specified in the TEXTURE_IDENTIFIER.  If no texture identifier is  specified then the pigment, normal and finish statements modify the current  default values.  TRANSFORMATIONs are translate, rotate and scale  statements.  They should be specified last. ^
The sections below describe all of the options available in pigments,  normals and finishes. »
         5.4.1   PIGMENT
         5.4.2   NORMAL
         5.4.3   FINISH
         5.4.4   SPECIAL TEXTURES
         5.4.5   LAYERED TEXTURES
         5.4.6   DEFAULT TEXTURE
Q░o╔Çßî∙æÆ='
5.4.1 PIGMENT r
The color or pattern of colors for an object is defined by a pigment  statement.  A pigment statement is part of a texture specification.   However it can be tedious to type "texture{pigment{...}}" just to add a  color to an object.  Therefore you may attach a pigment directly to an  object without explicitly specifying that it as part of a texture.  For  example... =
 this...                        can be shortened to this...
h
  object {                           object {                   
    My_Object                          My_Object                
    texture {                          pigment {color Purple} 
      pigment {color Purple}         }                        
    }                                  
  }                                                           
H
The color you define is the way you want it to look if fully illuminated.   You pick the basic color inherent in the object and POV-Ray brightens or  darkens it depending on the lighting in the scene.  The parameter is called  "pigment" because we are defining the basic color the object actually IS  rather than how it LOOKS. >
The most complete form for defining a pigment is as follows: f
  pigment {
    PIGMENT_IDENTIFIER
    PATTERN_TYPE
    PIGMENT_MODIFIERS
    TRANSFORMATIONS...
  }

Each of the items in a pigment are optional but if they are present, they  should be in the order shown above to insure that the results are as  expected.  Any items after the PIGMENT_IDENTIFIER modify or override  settings given in the IDENTIFIER.  If no identifier is specified then the  items modify the pigment values in the current default texture.   TRANSFORMATIONs are translate, rotate and scale statements.  They apply  only to the pigment and not to other parts of the texture.  They should be  specified last. ▓
The various PATTERN_TYPEs fall into roughly 4 categories.  Each category is  discussed below.  They are solid color, color list patterns, color mapped  patterns and image maps. ║
         5.4.1.1 Color
         5.4.1.2 Color List Patterns -- checker and hexagon
         5.4.1.3 Color Mapped Patterns
         5.4.1.4 Image Maps
         5.4.1.5 Pigment Modifiers
RαS≈*T3aZ
gv'5.4.1.1     Color Æ
The simplest type of pigment is a solid color.  To specify a solid color  you simply put a color specification inside a pigment.  For example... 
  pigment {color Orange}
╝
A color specification consists of the keyword "color" followed a color  identifier or by a specification of the amount or red, green, blue and  transparency in the surface.  For example: (
  color red 0.5   green 0.2   blue 1.0
┌
The float values between 0.0 and 1.0 are used to specify the intensity of  each primary color of light.  Note that we use additive color primaries  like the color phosphors on a color computer monitor or TV.  Thus... )
  color red 1.0   green 1.0   blue 1.0 
L
 ...specifies full intensity of all primary colors which is white light.  
gThe primaries may be given in any order and if any primary is unspecified  its value defaults to zero. ú
In addition to the primary colors a 4th value called "filter" specifies the  amount of transparency.  For example a piece of red tinted cellophane might  have... 
  color red 1.0  filter 1.0
0
Lowering the filter value would let less light through.  The default value  if no filter is specified is 0.0 or no transparency.  Note that the example  has an implied "green 0.0  blue 0.0" which means that no green or blue  light can pass through.  Often users mistakenly specify a clear object  by...  
  color filter 1.0
¥
but this has implied red, green and blue values of zero.  You've just  specified a totally black filter so no light passes through.  The correct  way is... 5
  color red 1.0   green 1.0   blue 1.0   filter 1.0
z
Note in earlier versions of POV-Ray the keyword "alpha" was used for  transparency.  However common usage of "alpha" in this context usually  means that light passes through unaffected.  In POV-Ray however, light is  filtered when it passes through a colored surface.  The program works the  same as it always did but the keyword has been changed to make its meaning  clearer. *
A short-cut way to specify a color is... 
  color rgb<0.2, 0.5, 0.9>

      or
"
  color rgbf<0.2, 0.8, 1.0, 0.7>
ñ
Color specifications are used elsewhere in POV-Ray.  Unless stated  otherwise, all of the above information on color specs given above applies  to any color spec. ╜
Color identifiers may be declared.  For examples see COLORS.INC.  A color  identifier contains red, blue, green and filter values even if they are not  explicitly specified.  For example: D
  color filter 1.0 My_Color // here My_Color overwrites the filter
L
  color My_Color filter 1.0 // this changes My_Color's filter value to 1.0
Ç
When using a color specification to give an object a solid color pigment,  the keyword "color" may be omitted.  For example... =
  pigment {red 1  blue 0.5}
        or
  pigment {My_Color}

are legal. '75.4.1.2     Color List Patterns -- checker and hexagon ╩
Two of the simplest color patterns available are the checker and hexagon  patterns.  These patterns take a simple list of colors one after the other.   For example a checker pattern is specified by... (
  pigment {checker color C1  color C2}
ñ
This produces a checkered pattern consisting of alternating squares of  color C1 and C2.  If no colors are specified then default blue and green  colors are used. 
All color patterns in POV-Ray are 3 dimensional.  For every x,y,z point in  space, the pattern has a unique color.  In the case of a checker pattern it  is actually a series of cubes that are one unit in size.  Imagine a bunch  of 1 inch cubes made from two different colors of modeling clay.  Now  imagine arranging the cubes in an alternating check pattern and stacking  them in layer after layer so that the colors still alternated in every  direction.  Eventually you would have a larger cube.  The pattern of checks  on each side is what the POV-Ray checker pattern produces when applied to a  box object.  Finally imagine cutting away at the cube until it is carved  into a smooth sphere or any other shape.  This is what the checker pattern  would look like on an object of any kind. g
Color patterns do not wrap around the surfaces like putting wallpaper on an  object.  The patterns exist in 3-d and the objects are carved from them  like carving stacked colored cubes.  In a later section we describe wood  and marble patterns for example.  The wood grain or stone swirls exist  through the whole object but they appear only at the surface. k
Another pattern that uses a list of colors is the hexagon pattern.  A  hexagon pattern is specified by... 2
  pigment {hexagon color C1  color C2  color C3}
═
Hex pattern generates a repeating pattern of hexagons in the XZ plane.  In  this instance imagine tall rods that are hexagonal in shape and are  parallel to the Y axis and grouped in bundles like this... ¥
           _____
          /     \
         /   C2  \_____
        |\       /     \
        | \_____/   C3  \
        | /     \       /|
         /   C1  \_____/ |
        |\       /|    | |
        | \_____/ |    | |
        | |     | |    | |
        | |     | |    | |
        | |     | |    | |
        | |     | |    | |
        | |     | |    |
        | |     | |    |
          |     |
          |     |
,

The three colors will repeat the pattern shown above with hexagon C1  centered at the origin.  Each side of the hexagon is one unit long.  The  hexagonal "rods" of color extend infinitely in the +Y and -Y directions.   If no colors are specified then default blue, green, and red colors are  used. '"5.4.1.3     Color Mapped Patterns \
Most of the color patterns do not use abrupt color changes of just two or  three colors like those in the checker or hexagon patterns.  They instead  use smooth transitions of many colors that gradually change from one point  to the next.  The colors are defined in a color map that describes how the  pattern blends from one color to the next.   H
        5.4.1.3.1   Gradient
        5.4.1.3.2   Color Maps
        5.4.1.3.3   Marble
        5.4.1.3.4   Wood
        5.4.1.3.5   Onion
        5.4.1.3.6   Leopard
        5.4.1.3.7   Granite
        5.4.1.3.8   Bozo
        5.4.1.3.9   Spotted
        5.4.1.3.10  Agate
        5.4.1.3.11  Mandel
        5.4.1.3.12  Radial
UöV▒
W╨XδYZ[:\V]o^ï_Ñ`└'5.4.1.3.1   Gradient  W
This simplest such pattern is the "gradient" pattern.  It is specified as  follows... 
  pigment {gradient VECTOR}
Z
where VECTOR is a vector pointing in the direction that the colors blend.   For example: ¬
      sphere {
        <0, 1, 2>, 2
        pigment { gradient x } // bands of color vary as you move
                               // along the "x" direction.
      }
└
This produces a series of smooth bands of color that look like layers of  color next to each other.  Points at x=0 are black.  As the X location  increases it smoothly turns to white at x=1.  Then it starts over with  black and gradually turns white at x=2.  The pattern reverses for negative  values of X.  Using "gradient y" or "gradient z" makes the colors blend  along the y or z axis.  Any vector may be used but x, y and z are most  common. '5.4.1.3.2   Color Maps ▓
The gray scale default colors of the gradient pattern isn't a very  interesting sight.  The real power comes from specifying a color map to  define how the colors should blend. ∩
Each of the various pattern types available is in fact a mathematical  function that takes any x,y,z location and turns it into a number between  0.0 and 1.0.  That number is used to specify what mix of colors to use from  the color map.  
A color map is specified by... x
      color_map {
        [ NUM_1 color C1]
        [ NUM_2 color C2]
        [ NUM_3 color C3]
         ...
        }
H
Where NUM_1, NUM_2... are float values between 0.0 and 1.0 inclusive.  C1,  C2 ... are color specifications.  NOTE: the [] brackets are part of the  actual statement.  They are not notational symbols denoting optional parts.   The brackets surround each entry in the color map.  There may be from 2 to  20 entries in the map.  
For example, 
      sphere {
        <0,1,2>, 2
        pigment {
          gradient x
          color_map {
            [0.1  color Red]
            [0.3  color Yellow]
            [0.6  color Blue]
            [0.6  color Green]
            [0.8  color Cyan]
          }
        }
      }
┬
The pattern function is evaluated and the result is a value from 0.0 to  1.0.  If the value is less than the first entry (in this case 0.1) then the  first color (Red) is used.  Values from 0.1 to 0.3 use a blend of red and  yellow using linear interpolation of the two colors.  Similarly values from  0.3 to 0.6 blend from yellow to blue.  Note that the 3rd and 4th entries  both have values of 0.6.  This causes an immediate abrupt shift of color  from blue to green.  Specifically a value that is less than 0.6 will be  blue but exactly equal to 0.6 will be green.  Moving along, values from 0.6  to 0.8 will be a blend of green and cyan.  Finally any value greater than  or equal to 0.8 will be cyan. r
If you want areas of unchanging color you simply specify the same color for  two adjacent entries.  For example: ç
      color_map {
        [0.1  color Red]
        [0.3  color Yellow]
        [0.6  color Yellow]
        [0.8  color Green]
      }
=
In this case any value from 0.3 to 0.6 will be pure yellow. '5.4.1.3.3   Marble y
A "gradient x" pattern uses colors from the color map from 0.0 up to 1.0 at  location x=1 but then jumps back to the first color for x=1.00000001 (or  some tiny fraction above 1.0) and repeats the pattern again and again.  The  marble pattern is similar except that it uses the color map from 0 to 1 but  then it reverses the map and blends from 1 back to zero.  For example: à
      pigment { 
        gradient x
        color_map {
          [0.0  color Yellow]
          [1.0  color Cyan]
        }
      }

This blends from yellow to cyan and then it abruptly changes back to yellow  and repeats.  However replacing "gradient x" with "marble" smoothly blends  from yellow to cyan as the x coordinate goes from 0.0 to 0.5 and then  smoothly blends back from cyan to yellow by x=1.0. ├
When used with a "turbulence" modifier and an appropriate color map, this  pattern looks like veins of color of real marble, jade or other types of  stone. By default, marble has no turbulence. '5.4.1.3.4   Wood 
Wood uses the color map to create concentric cylindrical bands of color  centered on the Z axis.  These bands look like the growth rings and veins  in real wood.  Small amounts of turbulence should be added to make it look  more realistic. By default, wood has no turbulence. g
Like marble, wood uses color map values 0 to 1 then repeats the colors in  reverse order from 1 to 0. '5.4.1.3.5   Onion ö
Onion is a pattern of concentric spheres like the layers of an onion.  It  uses colors from a color map from 0 to 1, 0 to 1 etc without reversing. '5.4.1.3.6   Leopard  ï
Leopard creates regular geometric pattern of circular spots.  It uses  colors from a color map from 0 to 1, 0 to 1 etc without reversing. '5.4.1.3.7   Granite  
This pattern uses a simple 1/f fractal noise function to 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.  It uses colors from a color map from 0 to 1, 0 to 1 etc  without reversing. '5.4.1.3.8   Bozo  º
The bozo color pattern takes a noise function and maps it onto the surface  of an object. It uses colors from a color map from 0 to 1, 0 to 1 etc  without reversing. g
Noise in ray tracing is sort of like a random number generator, but it has  the following properties: M
  1) It's defined over 3D space i.e., it takes x, y, and z and returns the 
noise value there. H  2) If two points are far apart, the noise values at those points are 
relatively random. M  3) If two points are close together, the noise values at those points are 
close to each other. P
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.  ≥
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? A POV-Ray  bozo texture! '5.4.1.3.9   Spotted  £
This uses the same noise pattern as bozo but it is unaffected by  turbulence.  It uses colors from a color map from 0 to 1, 0 to 1 etc  without reversing. '5.4.1.3.10  Agate  6
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. You may control the amount of the built-in  turbulence by adding the "agate_turb" keyword followed by a float value.   For example: k
      pigment { 
        agate
        agate_turb 0.5
        color_map {
          ...
        }
      }
'5.4.1.3.11  Mandel ½
The mandel pattern computes the standard Mandelbrot fractal pattern and  projects it onto the X-Y plane.  It uses the X and Y coordinates to compute  the Mandelbrot set.  The pattern is specified with the keyword mandel  followed by an integer number.  This number is the maximum number of  iterations to be used to compute the set.  Typical values range from 10 up  to 256 but any positive integer may be used.  For example: 
      sphere { 
       <0, 0, 0>, 1 
       pigment {
         mandel 25
         color_map {
           [0.0  color Cyan]
           [0.3  color Yellow]
           [0.6  color Magenta]
           [1.0  color Cyan]
         }
         scale .5
       }
      }
?
The value passed to the color map is computed by the formula: 7
        value = number_of_iterations / max_iterations
S
The color extends infinitely in the Z direction similar to a planar image  map.   '5.4.1.3.12  Radial A
The radial pattern is a radial blend that wraps around the +Y axis.  The  color for value 0.0 starts at the +X direction and wraps the color map  around from east to west with 0.25 in the -Z direction, 0.5 in -X, 0.75 at  +Z and back to 1.0 at +X.  See the "frequency" and "phase" pigment  modifiers below for examples. '5.4.1.4     Image Maps ª
When all else fails and none of the above pigment pattern types meets your  needs, you can use an image map to wrap a 2-D bit-mapped image around your  3-D objects. ▌
         5.4.1.4.1   Specifying an image map.
         5.4.1.4.2   The "once" option.
         5.4.1.4.3   The "map_type" option.
         5.4.1.4.4   The "filter" options.
         5.4.1.4.5   The "interpolate" option.
b╘cd*eVfü'%5.4.1.4.1   Specifying an image map.  
The syntax for image_map is... U
  pigment {
    image_map {
      FILE_TYPE "filename"
      MODIFIERS...
    }
  }
ê
Where FILE_TYPE is one of the following keywords "gif", "tga", "iff" or  "dump".  This is followed by the name of the file in quotes.  Several  optional modifiers may follow the file specification.  The modifiers are  described below.  Note: Earlier versions of POV-Ray allowed some modifiers  before the FILE_TYPE but that syntax is being phased out in favor of the  syntax described here. Ä
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 files in a separate  subdirectory, and giving an "-L" option on the command line to where your  library of image maps are.  ┴
By default, the image is mapped onto the X-Y plane.  The image is  "projected" onto the object as though there were a slide projector  somewhere in the -Z direction.  The image exactly fills the square area  from x,y coordinates (0,0) to (1,1) regardless of the image's original size  in pixels.  If you would like to change this default, you may translate,  rotate or scale the pigment or texture to map it onto the object's surface  as desired.  Ü
In the section 5.4.1.2 above when we explained checker pigment patterns, we  described the checks as solid cubes of colored clay from which objects are  carved.  With image maps you should imagine that each pixel is a long,  thin, square, colored rod that extends parallel to the Z axis.  The image  is made from rows and columns of these rods bundled together and the object  is then carved from the bundle. ñ
If you would like to change this default orientation, you may translate,  rotate or scale the pigment or texture to map it onto the object's surface  as desired.  '5.4.1.4.2   The "once" option. @
Normally there are an infinite number of repeating images created over  every unit square of the X-Y plane like tiles.  By adding the keyword  "once" after a file name, you can eliminate all other copies of the image  except the one at (0,0) to (1,1).  Areas outside this unit square are  treated as fully transparent. W
Note: The "once" keyword may also be used with bump_map and material_map  statements. '#5.4.1.4.3   The "map_type" option. Σ
The default projection of the image onto the X-Y plane is called a "planar  map type".  This option may be changed by adding the "map_type" keyword  followed by a number specifying the way to wrap the image around the  object. D
A "map_type 0" gives the default planar mapping already described. ≥
A "map_type 1" is a spherical mapping.  It assumes that the object is a  sphere of any size sitting at the origin.  The Y axis is the north/south  pole of the spherical mapping.  The top and bottom edges of the image just  touch the pole regardless of any scaling.  The left edge of the image  begins at the positive X axis and wraps the image around the sphere from  "west" to "east" in a -Y rotation.  The image covers the sphere exactly  once.  The "once" keyword has no meaning for this type. B
With "map_type 2" you get a cylindrical mapping.  It assumes that a  cylinder of any diameter lies along the Y axis.  The image wraps around the  cylinder just like the spherical map but the image remains 1 unit tall from  y=0 to y=1.  This band of color is repeated at all heights unless the  "once" keyword is applied. M
Finally "map_type 5" is a torus or donut shaped mapping.  It assumes that a  torus of major radius 1 sits at the origin in the X-Z plane.  The image is  wrapped around similar to spherical or cylindrical maps.  However the top  and bottom edges of the map wrap over and under the torus where they meet  each other on the inner rim. ,
Types 3 and 4 are still under development. [
Note: The "map_type" option may also be applied to bump_map and  material_map statements. '"5.4.1.4.4   The "filter" options. ╦
To make all or part of an image map transparent, you can specify filter  values for the color palette/registers of GIF or IFF pictures (at least for  the modes that use palettes/color maps). You can do this by adding the  keyword "filter" following the filename.  The keyword is followed by two  numbers.  The first number is the palette/register number value and 2nd is  the amount of transparency. The values should be separated by a comma.  For  example: ╫
   image_map { 
     gif "mypic.gif"
     map_type 0 
     filter 0, 0.5 // Make color 0 50% transparent
     filter 5, 1.0 // Make color 5 100% transparent
     filter 8, 0.3 // Make color 8 30% transparent
    }
W
You can give the entire image a filter value using "filter all VALUE".  For  example: T
   image_map { 
     gif "stnglass.gif"
     map_type 0 
     filter all 0.9
    }
±
NOTE: Transparency works by filtering light by its original color.  Adding  "filter" to the color black still leaves you with black no matter how high  the filter value is. If you want a color to be clear, add filter 1 to the  color white. '&5.4.1.4.5   The "interpolate" option. Ü
Adding the "interpolate" keyword can smooths the jagged look of an image or  bump map.  When POV-Ray asks a color or bump amount for an image or bump  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. 1
There are currently two types of interpolation: Q
   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.  For  example: P
   image_map { 
     gif "mypic.gif"
     map_type 0 
     interpolate 2
    }
'5.4.1.5     Pigment Modifiers à
After specifying the pigment type such as marble, wood etc and adding an  optional color map, you may add any of several modifiers. π
        5.4.1.5.1   Turbulence
        5.4.1.5.2   Octaves
        5.4.1.5.3   Omega
        5.4.1.5.4   Lambda
        5.4.1.5.5   Quick_color
        5.4.1.5.6   Frequency and Phase
        5.4.1.5.7   Transforming pigments
h╣
i╪j⌠kl)mInq'5.4.1.5.1   Turbulence ╤
The keyword "turbulence" followed by a float or vector may be used to stir  up the color pattern.  Typical values range from the default 0.0 which is  no turbulence to 1.0 which is very turbulent.  If a vector is specified  then different amounts of turbulence are applied in the x, y and z  directions.  For example "turbulence <1.0, 0.6, 0.1>" has much turbulence  in the x direction, a moderate amount in the y direction and a small amount  in the z direction. °
Turbulence uses a noise function called DNoise.  This is sort of like noise  used in the bozo pattern except that instead of giving a single value it  gives a direction. You can think of it as the direction that the wind is  blowing at that spot. (
Turbulence which uses DNoise to push a point around a few times.  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 textures. That's the color that's used for the point P. ═
It in effect says "Don't give me the color at this spot... take a few  random steps in a different direction and give me that color.  Each step is  typically half as long as the one before.  For example: ê
         P ------------------------->
                  First Move        /
                                   /
                                  /
                                 /Second
                                /  Move
                               /
                        ______/
                        \
                         \
                          Q - Final point.
F

The magnitude of these steps is controlled by the turbulence value. '5.4.1.5.2   Octaves ┬
The number of steps used by turbulence is controlled by the "octaves"  value.  The values may range from 1 up to 10.  The default value of  "octaves 6" is fairly close to the upper limit; you won't see much change  by setting it to a higher value because the extra steps are too small.  You  can achieve some very interesting wavy effects by specifying lower values.  Setting octaves higher can slow down rendering because more steps are  computed. '5.4.1.5.3   Omega ═
The keyword "omega" followed by a float value may be added to change the  turbulence calculations.  Each successive octave of turbulence is  multiplied by the omega value. The default "omega 0.5" means that each  octave is 1/2 the size of the previous one.  Higher omega values mean that  2nd, 3rd, 4th and up octaves contribute more turbulence giving a sharper,  "krinkly" look while smaller omegas give a fuzzy kind of turbulence that  gets blury in places. '5.4.1.5.4   Lambda ╨
The lambda parameter controls how statistically different the random move  of an octave is compared to its previous octave.  The default value for  this is "lambda 2".  Values close to lambda 1.0 will straighten out the  randomness of the path in the diagram above.  Higher values can look more  "swirly" under some circumstances.  More tinkering by POV-Ray users may  lead us to discover ways to make good use of this parameter.  For now just  tinker and enjoy. '5.4.1.5.5   Quick_color H
When developing POV-Ray scenes its often useful to do low quality test runs  that render faster.  The +Q command line switch can be used to turn off  some time consuming color pattern and lighting calculations to speed things  up.  However all settings of +Q5 or lower turns off pigment calculations  and creates gray objects. Æ
By adding a "quick_color" to a pigment you tell POV-Ray what solid color to  use for quick renders instead of a patterned pigment.  For example: ╒
   pigment {
     gradient x
     color_map{
       [0 color Yellow][0.3 color Cyan][0.6 color Magenta][1 color Cyan]
     }
     turbulence 0.5  lambda 1.5  omega 0.75  octaves 8
     quick_color Neon_Pink
   }
₧
This tells POV-Ray to use solid Neon_Pink for test runs at quality +Q5 or  lower but to use the turbulent gradient pattern for rendering at +Q6 and  higher. )
Note that solid color pigments such as: 
   pigment {color Magenta}
·
automatically set the quick_color to that value.  You may override this if  you want.  Suppose you have 10 spheres on the screen and all are Yellow.   If you want to identify them individually you could give each a different  quick_color like this: ?
   sphere {<1,2,3>,4 pigment {color Yellow  quick_color Red}}
C
   sphere {<-1,-2,-3>,4 pigment {color Yellow  quick_color Blue}}
I
 ...and so on.  At +Q6 or higher they will all be Yellow but at +Q5 or 
Alower each would be different colors so you could identify them. '	 5.4.1.5.6   Frequency and Phase C
The frequency and phase keywords were originally intended for the normal  patterns ripples and waves discussed in the next section.  With version 2.0  they were extended to pigments to make the radial and mandel pigment  pattern easier to use.  As it turned out it was simple to make them apply  to any color map pattern. ê
The frequency keyword adjusts the number of times that a color map repeats  over one cycle of a pattern.  For example gradient x covers color map  values 0 to 1 over the range x=0 to x=1.  By adding "frequency 2" the color  map repeats twice over that same range.  The same effect can be achieved  using "scale x*0.5" so the frequency keyword isn't that useful for patterns  like gradient.  ■
However the radial pattern wraps the color map around the +Y axis once.  If  you wanted two copies of the map (or 3 or 10 or 100) you'd have to build a  bigger map.  Adding "frequency 2" causes the color map to be used twice per  revolution.  Try this: »
      sphere {<0,0,0>,3
        pigment {
          radial
          color_map{[0.5 color Red][0.5 color White]}
          frequency 6
        }
        rotate -x*90
      }
X
The result is 6 sets of red and white radial stripes evenly spaced around  the sphere. :
Note "frequency -1" reverses the entries in a color_map. é
The phase keyword takes values from 0.0 to 1.0 and rotates the color map  entries.  In the example above if you render successive frames at phase 0  then phase 0.1, phase 0.2 etc you could create an animation that rotates  the stripes.  The same effect can be easily achieved by rotating the radial  pigment using "rotate y*Angle" but there are other uses where phase can be  handy.   >
Sometimes you create a great looking gradient or wood color map but you  want the grain slightly adjusted in or out.  You could re-order the color  map entries but that's a pain.  A phase adjustment will shift everything  but keep the same scale.  Try animating a mandel pigment for a color  palette rotation effect. '"5.4.1.5.7   Transforming pigments 
You may modify pigment patterns with "translate", "rotate" and "scale"  commands.  Note that placing these transforms inside the texture but  outside the pigment will transform the entire texture.  However placing  them inside the pigment transforms just the pigment.  For example: ╩
      sphere {<0,0,0>,3
        texture {
          pigment {
            checker color Red color White
            scale <2,1,3>  // affects pigment only... not normal
          }
          normal {
            bumps 0.3
            scale 0.4      // affects bump normal only... not pigment
          }
          finish {Shiny}
          translate 5*x    // affects entire texture
        }
        translate y*2      // affects object and texture
      }
o
Note that transforms affect the entire pigment regardless of the ordering  of other parameters.  For example: =
  This...                         ...is the same as this...
_
     pigment {                          pigment {                    
       bozo                               bozo                       
       turbulence 0.3                     scale 2                              
       scale 2                            turbulence 0.3   
     }                                  }                            
Ä
The scaling before or after turbulence makes no difference.  In general it  is best to put all transformations last for the sake of clarity. '
5.4.2 NORMAL ,
Ray tracing is known for the dramatic way it depicts reflection, refraction  and lighting effects.  Much of our perception depends on the reflective  properties of an object.  Ray tracing can exploit this by playing tricks on  our perception to make us see complex details that aren't really there. █
Suppose you wanted a very bumpy surface on the object.  It would be very  difficult to mathematically model lots of bumps.  We can however simulate  the way bumps look by altering the way light reflects off of the surface.   Reflection calculations depend on a vector called a "surface normal"  vector.  This is a vector which points away from the surface and is  perpendicular to it.  By artificially modifying (or perturbing) this normal  vector you can simulate bumps.   (
The "normal {...}" statement is the part of a texture which defines the  pattern of normal perturbations to be applied to an object.  Like the  pigment statement, you can omit the surrounding texture block to save  typing.  Do not forget however that there is a texture implied. For  example... =
 this...                        can be shortened to this...
ó
  object {                           object {                   
    My_Object                          My_Object                
    texture {                          pigment {color Purple} 
      pigment {color Purple}           normal {bumps 0.3}                        
      normal {bumps 0.3}             }
    }                                  
  }                                                           
º
Note that attaching a normal pattern does not really modify the surface.   It only affects the way light reflects or refracts at the surface so that  it looks bumpy. =
The most complete form for defining a normal is as follows: j
  normal {
    NORMAL_IDENTIFIER
    NORMAL_PATTERN_TYPE
    NORMAL_MODIFIERS
    TRANSFORMATIONS...
  }

Each of the items in a normal are optional but if they are present, they  should be in the order shown above to insure that the results are as  expected.  Any items after the NORMAL_IDENTIFIER modify or override  settings given in the IDENTIFIER.  If no identifier is specified then the  items modify the normal values in the current default texture.   TRANSFORMATIONs are translate, rotate and scale statements.  They apply  only to the normal and not to other parts of the texture.  They should be  specified last. 
There are 6 different NORMAL_PATTERN_TYPEs discussed below.  They are  bumps, dents, ripples, waves, wrinkles and bump_map.   ╡
         5.4.2.1 Bumps
         5.4.2.2 Dents
         5.4.2.3 Ripples
         5.4.2.4 Waves
         5.4.2.5 Wrinkles
         5.4.2.6 Bump_map
         5.4.2.7 Normal Modifiers
p
q
r/
sH
t_
uy
|ô
'5.4.2.1     Bumps 
A smoothly rolling random pattern of bumps can be created with the "bumps"  normal pattern.  Bumps uses the same random noise function as the bozo and  spotted pigment patterns, 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, you 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). For example: «
      sphere {
        <0, 1, 2>, 2
        texture {
          pigment {color Yellow}
          normal {bumps 0.4   scale 0.2}
          finish {phong 1}
        }
      }
0
This tells POV-Ray to use a bump pattern to modify the surface normal.  The  value 0.4 controls the apparent depth of the bumps.  Usually the bumps are  about 1 unit wide which doesn't work very well with a sphere of radius 2.   The scale makes the bumps 1/5th as wide but does not affect their depth.  '5.4.2.2     Dents ú
The "dents" pattern is especially interesting when used with metallic  textures, it gives impressions into the metal surface that look like dents  have been beaten into the surface with a hammer. 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). Scale the pattern  to make the pitting more or less frequent. '5.4.2.3     Ripples Y
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.   Values range from 0.0 to 1.0 or more.  The ripples radiate from 10 random  locations inside the unit cube area <0,0,0> to <1,1,1>.  Scale the pattern  to make the centers closer or farther apart.   Æ
The frequency keyword changes the spacing between ripples.  The phase  keyword can be used to move the ripples outwards for realistic animation. '5.4.2.4     Waves ▒
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.  The waves option requires a value to determine how deep the  waves are.  Values range from 0.0 to 1.0 or more.  The waves radiate from  10 random locations inside the unit cube area <0,0,0> to <1,1,1>.  Scale  the pattern to make the centers closer or farther apart.   Ä
The frequency keyword changes the spacing between waves.  The phase keyword  can be used to move the waves outwards for realistic animation. '5.4.2.5     Wrinkles m
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.  '5.4.2.6     Bump_map ¬
When all else fails and none of the above normal pattern types meets your  needs, you can use a bump map to wrap a 2-D bit-mapped bump pattern around  your 3-D objects. ≡
Instead of placing the color of the image on the shape like an image_map,  bump_map perturbs the surface normal based on the color of the image at  that point. The result looks like the image has been embossed into the  surface.  By default, bump_map uses the brightness of the actual color of  the pixel. Colors are converted to gray scale internally before calculating  height.  Black is a low spot, white is a high spot. The image's index  values may be used instead (see use_index) below.   ·
         5.4.2.6.1   Specifying a bump map.
         5.4.2.6.2   Bump_size
         5.4.2.6.3   Use_index & use_color
         5.4.2.6.4   The "once" option.
         5.4.2.6.5   The "map_type" option.
         5.4.2.6.6   The "interpolate" option.
v╞w≥	xy<zd{É'#5.4.2.6.1   Specifying a bump map. 
The syntax for bump_map is... S
  normal {
    bump_map {
      FILE_TYPE "filename"
      MODIFIERS...
    }
  }
ê
Where FILE_TYPE is one of the following keywords "gif", "tga", "iff" or  "dump".  This is followed by the name of the file in quotes.  Several  optional modifiers may follow the file specification.  The modifiers are  described below.  Note: Earlier versions of POV-Ray allowed some modifiers  before the FILE_TYPE but that syntax is being phased out in favor of the  syntax described here. ï
Filenames specified in the bump_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 bump maps files in a separate  subdirectory, and giving an "-L" option on the command line to where your  library of bump maps are.  ╗
By default, the bump is mapped onto the X-Y plane.  The bump is "projected"  onto the object as though there were a slide projector somewhere in the -Z  direction.  The bump exactly fills the square area from x,y coordinates  (0,0) to (1,1) regardless of the bump's original size in pixels.  If you  would like to change this default, you may translate, rotate or scale the  normal or texture to map it onto the object's surface as desired.  ú
If you would like to change this default orientation, you may translate,  rotate or scale the normal or texture to map it onto the object's surface  as desired.  '5.4.2.6.2   Bump_size ¡
The relative bump_size can be scaled using bump_size modifier. The  bump_size number can be any number other than 0. Valid numbers are 2, .5,  -33, 1000, etc. For example: O
  normal {
    bump_map { 
      gif "stuff.gif" 
      bump_size 5
    }
  }
'"5.4.2.6.3   Use_index & use_color 
Usually the bump_map converts the color of the pixel in the map to a  grayscale intensity value in the range 0.0 to 1.0 and calculates the bumps  based on that value.  If you specify use_index, bump_map uses the color's  palette number to compute as the height of the bump at that point. So,  color #0 would be low and color #255 would be high. The actual color of the  pixels doesn't matter when using the index.  The "use_color" keyword may be  specified to explicitly note that the color methods should be used instead. '5.4.2.6.4   The "once" option. F
Normally there are an infinite number of repeating bump_maps created over  every unit square of the X-Y plane like tiles.  By adding the keyword  "once" after a file name, you can eliminate all other copies of the  bump_map except the one at (0,0) to (1,1).  Areas outside this unit square  are treated as fully transparent. X
Note: The "once" keyword may also be used with image_map and material_map  statements. '#5.4.2.6.5   The "map_type" option. ß
The default projection of the bump onto the X-Y plane is called a "planar  map type".  This option may be changed by adding the "map_type" keyword  followed by a number specifying the way to wrap the bump around the object. D
A "map_type 0" gives the default planar mapping already described. ⁿ
A "map_type 1" is a spherical mapping.  It assumes that the object is a  sphere of any size sitting at the origin.  The Y axis is the north/south  pole of the spherical mapping.  The top and bottom edges of the bump_map  just touch the pole regardless of any scaling.  The left edge of the  bump_map begins at the positive X axis and wraps the pattern around the  sphere from "west" to "east" in a -Y rotation.  The pattern covers the  sphere exactly once.  The "once" keyword has no meaning for this type. ?
With "map_type 2" you get a cylindrical mapping.  It assumes that a  cylinder of any diameter lies along the Y axis.  The bump pattern wraps  around the cylinder just like the spherical map but remains 1 unit tall  from y=0 to y=1.  This band of bumps is repeated at all heights unless the  "once" keyword is applied. T
Finally "map_type 5" is a torus or donut shaped mapping.  It assumes that a  torus of major radius 1 sits at the origin in the X-Z plane.  The bump  pattern is wrapped around similar to spherical or cylindrical maps.   However the top and bottom edges of the map wrap over and under the torus  where they meet each other on the inner rim. ,
Types 3 and 4 are still under development. \
Note: The "map_type" option may also be applied to image_map and  material_map statements. '&5.4.2.6.6   The "interpolate" option. q
Adding the "interpolate" keyword can smooths the jagged look of a bump map.   When POV-Ray asks bump amount for a bump 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 bump map will look smoother. 1
There are currently two types of interpolation: Q
   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 map looks jaggy, try using interpolation instead of going to a  higher resolution image.  The results can be very good. '5.4.2.7     Normal Modifiers b
After specifying the normal type such as bumps, dents etc you may add any  of several modifiers. t
         5.4.2.7.1   Turbulence
         5.4.2.7.2   Frequency and Phase
         5.4.2.7.3   Transforming normals
}û
~╢▀'5.4.2.7.1   Turbulence ╨
The keyword "turbulence" followed by a float or vector may be used to stir  up the color pattern.  Typical values range from the default 0.0 which is  no turbulence to 1.0 which is very turbulent.  If a vector is specified  then different amounts of turbulence is applied in the x, y and z  directions.  For example "turbulence <1.0, 0.6, 0.1>" has much turbulence  in the x direction, a moderate amount in the y direction and a small amount  in the z direction. σ
A complete discussion of turbulence is given under Pigment Modifiers in  section 5.4.1.5 above.  The "octaves", "omega", and "lambda" options are  also available as normal modifiers.  They discussed under that section as  well. ' 5.4.2.7.2   Frequency and Phase 
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 called  frequency. If you increase the frequency of the waves, they get closer  together. If you decrease it, they get farther apart.  K
Bumps, dents, wrinkles and bump_map do not respond to frequency or phase. '!5.4.2.7.3   Transforming normals E
You may modify normal patterns with "translate", "rotate" and "scale"  commands.  Note that placing these transforms inside the texture but  outside the normal will transform the entire texture.  However placing them  inside the normal transforms just the normal.  See section 5.4.1.5.7  Transforming Pigments for examples: '	
5.4.3 FINISH Ω
The finish properties of a surface can greatly affect its appearance.  How  does light reflect?  What happens when light passes through?  What kind of  highlights are visible.  To answer these questions you need a finish  statement. ,
The "finish {...}" statement is the part of a texture which defines the  various finish properties to be applied to an object.  Like the pigment or  normal statement, you can omit the surrounding texture block to save  typing.  Do not forget however that there is a texture implied. For  example... =
 this...                        can be shortened to this...
ó
  object {                           object {                   
    My_Object                          My_Object                
    texture {                          pigment {color Purple} 
      pigment {color Purple}           finish {phong 0.3}                        
      finish {phong 0.3}             }
    }                                  
  }                                                           
=
The most complete form for defining a finish is as follows: :
  finish {
    FINISH_IDENTIFIER
    FINISH_ITEMS...
  }
à
The FINISH_IDENTIFIER is optional but should proceed all other items.  Any  items after the FINISH_IDENTIFIER modify or override settings given in the  IDENTIFIER.  If no identifier is specified then the items modify the finish  values in the current default texture.  Note that transformations are not  allowed inside a finish because finish items cover the entire surface  uniformly.   ì         5.4.3.1 Diffuse Reflection Items
         5.4.3.2 Specular Reflection Items
         5.4.3.3 Highlights
         5.4.3.4 Refraction
üå:çe
ïü
'%5.4.3.1     Diffuse Reflection Items t
When light reflects off of a surface, the laws of physics say that it  should leave the surface at the exact same angle it came in.  This is  similar to the way a billiard ball bounces off a bumper of a pool table.   This perfect reflection is called "specular" reflection.  However only very  smooth polished surfaces reflect light in this way.  Most of the time,  light reflects and is scattered in all directions by the roughness of the  surface.  This scattering is called "diffuse reflection" because the light  diffuses or spreads in a variety of directions.  It accounts for the  majority of the reflected light we see. +
In the real world, light may come from any of three possible sources.  1)It  can come directly from actual light sources which are illuminating an  object.  2)It can bounce from other objects such as mirrors via specular  reflection.  For example shine a flashlight onto a mirror.  3)It can bounce  from other objects via diffuse reflections. Look at some dark area under a  desk or in a corner.  Even though a lamp may not directly illuminate that  spot you can still see a little bit because light comes from diffuse  reflection off of nearby objects. ü
         5.4.3.1.1   Diffuse
         5.4.3.1.2   Brilliance
         5.4.3.1.3   Crand Graininess
         5.4.3.1.4   Ambient
é█â°
äà>'5.4.3.1.1   Diffuse e
POV-Ray and most other ray tracers can only simulate directly, one of these  three types of illumination.  That is the light which comes directly from  the light source which diffuses in all directions.  The keyword "diffuse"  is used in a finish statement to control how much light of this direct  light is reflected via diffuse reflection.  For example: 
      finish {diffuse 0.7}
y
means that 70% of the light seen comes from direct illumination from light  sources.  The default value is diffuse 0.6. '5.4.3.1.2   Brilliance J
The amount of direct light that diffuses from an object depends upon the  angle at which it hits the surface.  When light hits at a shallow angle it  illuminates less.  When it is directly above a surface it illuminates more.   The "brilliance" keyword can be used in a finish statement to vary the way  light falls off depending upon the angle of incidence.  This controls the  tightness of the basic diffuse illumination on objects and slightly adjusts  the appearance of surface shininess.  Objects may appear more metallic by  increasing their brilliance. The default value is 1.0. Higher values from  3.0 to about 10.0 cause the light to fall off less at medium to low angles.   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  highlighting. '5.4.3.1.3   Crand Graininess ê
Very rough surfaces, such as concrete or sand, exhibit a dark graininess in  their apparent color.  This is caused by the shadows of the pits or holes  in the surface.  The "crand" keyword can be added to cause a minor random  darkening the diffuse reflection of direct illumination.  Typical values  range from "crand 0.01" to "crand 0.5" or higher.  The default value is 0.   For example: 
      finish {crand 0.05}
á
The grain or noise introduced by this feature is applied on a pixel-by- pixel basis.  This means that it will look the same on far away objects as  on close objects.  The effect also looks different depending upon the  resolution you are using for the rendering.  For these reasons it is not a  very accurate way to model the rough surface effect, but some objects still  look better with a little crand thrown in. ╛
In previous versions of POV-Ray there was no "crand" keyword.  Any lone  float value found inside a texture{...} which was not preceded by a keyword  was interpreted as a randomness value. ▌
NOTE: This should not be used when rendering animations.  This is the one  of a few truly random features in POV-Ray, and will produce an annoying  flicker of flying pixels on any textures animated with a "crand" value.        
'5.4.3.1.4   Ambient 
The light you see in dark shadowed areas comes from diffuse reflection off  of other objects.  This light cannot be directly modeled using ray tracing.   However we can use a trick called "ambient lighting" to simulate the light  inside a shadowed area.   ü
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.  Ambient light affects both shadowed and non-shadowed  areas so if you turn up the ambient value you may want to turn down the  diffuse value. |
Note that this method doesn't account for the color of surrounding objects.   If you walk into a room that has red walls, floor and ceiling then your  white clothing will look pink from the reflected light.  POV-Ray's ambient  shortcut doesn't account for this.  There is also no way to model specular  reflected indirect illumination such as the flashlight shining in a mirror. '&5.4.3.2     Specular Reflection Items ∞
When light does not diffuse and it DOES reflect at the same angle as it  hits an object, it is called "specular reflection".  Such mirror-like  reflection is controlled by the "reflection" keyword in a finish statement.   For example: 5
      finish {reflection 1.0  ambient 0  diffuse 0}
ª
This gives 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. l
Adding reflection to a texture makes it take longer to render because an  additional ray must be traced.   ₧
NOTE: Although such reflection is called "specular" it is not controlled by  the POV-Ray "specular" keyword.  That keyword controls a "specular"  highlight. '5.4.3.3     Highlights ╘
A highlights are the bright spots that appear when a light source reflects  off of a smooth object.  They are a blend of specular reflection and  diffuse reflection.  They are specular-like because they depend upon  viewing angle and illumination angle.  However they are diffuse-like  because some scattering occurs.  In order to exactly model a highlight you  would have to calculate specular reflection off of thousands of microscopic  bumps called micro facets.  The more that micro facets are facing the  viewer, the shinier the object appears, and the tighter the highlights  become. POV-Ray uses two different models to simulate highlights without  calculating micro facets.  They are the specular and phong models. ┴
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. Ç
         5.4.3.3.1   Phong Highlights
         5.4.3.3.2   Specular Highlight
         5.4.3.3.3   Metallic Highlight Modifier
ê├ëΘè'5.4.3.3.1   Phong Highlights ┤
The "phong" keyword controls the amount of Phong highlighting on the  object.  It causes bright shiny spots on the object that are the color of  the light source being reflected. |
The Phong method measures the average of the 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 to the light source's color at the brightest area (center) of  the highlight. The default phong 0.0 gives no highlight. 
The size of the highlight spot is defined by the phong_size value.  The  larger the phong_size, the tighter, or smaller, the highlight and the  shinier the appearance. The smaller the phong_size, the looser, or larger,  the highlight and the less glossy the appearance. ╢
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.  For example: )
      finish {phong 0.9  phong_size 60}
>
If "phong" is not specified then "phong_size" has no effect. '5.4.3.3.2   Specular Highlight 
A specular highlight is very similar to Phong highlighting, but uses  slightly different model.  The specular model more closely resembles real  specular reflection and provides a more credible spreading of the  highlights occur near the object horizons.  ╤
Specular's value is typically from 0.0 to 1.0, where 1.0 causes complete  saturation to the light source's color at the brightest area (center) of  the highlight. The default specular 0.0 gives no highlight. ÷
The size of the spot is defined by the value given for 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.  For example: -
      finish {specular 0.9  roughness 0.02}
@
If "specular" is not specified then "roughness" has no effect. '(5.4.3.3.3   Metallic Highlight Modifier A
The keyword "metallic" may be used with phong or specular highlights.  This  keyword indicates that the color of the highlights will be filtered by the  surface color instead of directly using the light_source color. Note that  the keyword has no numeric value after it.  You either have it or you  don't.  For example: 3
      finish {phong 0.9  phong_size 60  metallic}
J
If "phong" or "specular" is not specified then "metallic" has no effect. '5.4.3.4     Refraction 5
When light passes through a surface either into or out of a dense medium,  the path of the ray of light is bent.  Such bending is called refraction.   Normally transparent or semi-transparent surfaces in POV-Ray do not refract  light.  Adding "refraction 1.0" to the finish statement turns on  refraction.   
Note: It is recommended that you only use "refraction 0" or "refraction 1".   Values in between will darken the refracted light in ways that do not  correspond to any physical property.  Many POV-Ray scenes were created with  intermediate refraction values before this "bug" was discovered so the  "feature" has been maintained.  A more appropriate way to reduce the  brightness of refracted light is to change the "filter" value in the colors  specified in the pigment statement.  Note also that "refraction" does not  cause the object to be transparent.  Transparency is only occurs if there  is a non-zero "filter" value in the color. n
The amount of bending or refracting of light depends upon the density of  the material.  Air, water, crystal, diamonds all have different density and  thus refract differently.  The "index of refraction" or "ior" value is used  by scientists to describe the relative density of substances.  The "ior"  keyword is used in POV-Ray to specify the value.  For example: é
      texture {
        pigment { White filter 0.9 }
        finish {
          refraction 1
          ior 1.5
        }
      }
╧
The default ior 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. '
NOTE: If a texture has a filter component and no value for refraction and  ior are supplied, the renderer will simply transmit the ray through the  surface with no bending.  In layered textures, the refraction and ior  keywords MUST be in the last texture, otherwise they will not take effect. '5.4.4 SPECIAL TEXTURES 

Most textures consist of a single pigment, normal and finish specification  which applies to the entire surface.  However two special textures have  been implemented that extend the "checker" and "image_map" concepts to  cover not just pigment but the entire texture. 6
         5.4.4.1 Tiles
         5.4.4.2 Material_Map
ì7ÄN'5.4.4.1     Tiles │
This first special texture is the "tiles" texture.  It works just like the  "checker" pigment pattern except it colors the blocks with entire textures  rather than solid colors. 
The syntax is: σ
      texture{
        tiles {
          texture {... put in a texture here ... }
        tile2
          texture {... this is the second tile texture }
        }
       // Optionally put translate, rotate or scale here
      }

For example: v
    texture{
       tiles {
          texture { Jade }
       tile2
          texture { Red_Marble }
       } 
    }

The textures used in each tile may be any type of texture including more  tiles or regular textures made from pigment, normal and finish statements.   Note that no other pigment, normal or finish statements may be added to the  texture.  This is illegal: è
      texture {
        tiles {
          texture {T1}
        tile2
          texture {T2}
        }
        finish {phong 1.0}
      }
8
The finish must be individually added to each texture. ¥
Note that earlier versions of POV-Ray used only the pigment parts of the  textures in the tiles.  Normals and finish were ignored.  Also layered  textures were not supported.  In order to correct these problems the above  restrictions on syntax were necessary.  This means some POV-Ray 1.0 scenes  using tiles many need minor modifications that cannot be done automatically  with the version compatibility mode. t
The textures within a tiles texture may be layered but tiles textures do  don't work as part of a layered texture. '5.4.4.2     Material_Map ▄
The "material_map" special texture extends the concept of "image_map" to  apply to entire textures rather than solid colors.  A material_map allows  you to wrap a 2-D bit-mapped texture pattern around your 3-D objects. 
Instead of placing a solid color of the image on the shape like an  image_map, an entire texture is specified based on the index or color of  the image at that point.  You must specify a list of textures to be used  like a "texture palette" rather than the usual color palette.   °
When used with mapped file types such as GIF, the index of the pixel is  used as an index into the list of textures you supply.  For unmapped file  types such as TGA, the 8 bit value of the red component in the range 0-255  is used as an index.   ó
If the index of a pixel is greater than the number of textures in your list  then the index is taken modulo N where N is the length of your list of  textures.   \
         5.4.4.2.1   Specifying a material map.
         5.4.4.2.2   Material_map options.
Å┐É∩'
'5.4.4.2.1   Specifying a material map. #
The syntax for material_map is... ¿
      texture {
        material_map {
          FILE_TYPE "filename"
          MODIFIERS...
          texture {...} // First used for index 0
          texture {...} // Second texture used for index 1
          texture {...} // Third texture used for index 2
          texture {...} // Fourth texture used for index 3
                        // and so on for however many used.
        }
        TRANSFORMATION...
      }
°
If particular index values are not used in an image then it may be  necessary to supply dummy textures.  It may be necessary to use a paint  program or other utility to examine the map file's palette to determine how  to arrange the texture list. ù
In the syntax above, FILE_TYPE is one of the following keywords "gif",  "tga", "iff" or "dump".  This is followed by the name of the file in  quotes.  Several optional modifiers may follow the file specification.  The  modifiers are described below.  Note: Earlier versions of POV-Ray allowed  some modifiers before the FILE_TYPE but that syntax is being phased out in  favor of the syntax described here. ù
Filenames specified in the material_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 material maps files in a separate  subdirectory, and giving an "-L" option on the command line to where your  library of material maps are.  ╠
By default, the material is mapped onto the X-Y plane.  The material is  "projected" onto the object as though there were a slide projector  somewhere in the -Z direction.  The material exactly fills the square area  from x,y coordinates (0,0) to (1,1) regardless of the material's original  size in pixels.  If you would like to change this default, you may  translate, rotate or scale the normal or texture to map it onto the  object's surface as desired.  ÿ
If you would like to change this default orientation, you may translate,  rotate or scale the texture to map it onto the object's surface as desired.  é
Note that no other pigment, normal or finish statements may be added to the  texture outside the material_map.  This is illegal: ╡
      texture {
        material_map {
          gif "matmap.gif"
          texture {T1}
          texture {T2}
          texture {T3}
        }
        finish {phong 1.0}
      }
8
The finish must be individually added to each texture. C
Note that earlier versions of POV-Ray allowed such specifications but they  were ignored.  The above restrictions on syntax were necessary for various  bug fixes.  This means some POV-Ray 1.0 scenes using material_maps many  need minor modifications that cannot be done automatically with the version  compatibility mode. 
The textures within a material_map texture may be layered but material_map  textures do don't work as part of a layered texture.  To use a layered  texture inside a material_map you must declare it as a texture identifier  and invoke it in the texture list. '"5.4.4.2.2   Material_map options. A
The "once" and "map_type" options may be used with material_maps exactly  like image_map or bump_map.  The "interpolate" keyword also is allowed but  it interpolates the map indices rather than the colors.  In most cases this  results in a worse image instead of a better image.  Future versions will  fix this problem. '5.4.5 LAYERED TEXTURES }
It is possible to create a variety of special effects using 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 texture 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.  For example: ╛
      object {
        My_Object
        texture {T1}  // the bottom layer
        texture {T2}  // a semi-transparent layer
        texture {T3}  // the top semi-transparent layer
      }
k
In this example T2 shows only where T3 is transparent and T1 shows only  where T2 and T3 are transparent. º
The color of underlying layers is filtered by upper layers but the results  do not look exactly like a series of transparent surfaces.  If you had a  stack of surfaces with the textures applied to each, the light would be  filtered twice: once on the way in as the lower layers are illuminated by  filtered light and once on the way out.  Layered textures do not filter the  illumination on the way in.  Other parts of the lighting calculations work  differently as well.  The result look great and allow for fantastic looking  textures but they are simply different from multiple surfaces.  See  STONES.INC in the standard include files for some magnificent layered  textures. █
Note layered textures must use the "texture{...}" wrapped around any  pigment, normal or finish statements.  Do not use multiple pigment, normal  or finish statements without putting them inside the texture statement. 1
Layered textures may be declared.  For example: j
      #declare Layered_Examp=
            texture {T1}
            texture {T2}
            texture {T3}

Then invoke it as follows: ╣
      object {
        My_Object
        texture {
          Layer_Examp
          // Any pigment, normal or finish here
          // modifies the bottom layer only.
        }
      }
'5.4.6 DEFAULT TEXTURE │
POV-Ray creates a default texture when it begins processing.  You may  change those defaults as described below.  Every time you specify a  "texture{...}" statement, POV-Ray creates a copy of the default texture.   Anything items you put in the texture statement override the default  settings.  If you attach a pigment, normal or finish to an object without  any texture statement then POV-Ray checks to see if a texture has already  been attached.  If it has a texture then the pigment, normal or finish will  modify that existing texture.  If no texture has yet been attached to the  object then the default texture is copied and the pigment, normal or finish  will modify that texture. z
You may change the default texture, pigment, normal or finish using the  language directive "#default {...}" as follows: ~
      #default {
        texture {
          pigment {...}
          normal  {...}
          finish  {...}
        }
      }
.
Or you may change just part of it like this: 1
      #default {
         pigment {...}
      }
1
This still changes the pigment of the default texture.  At any time there  is only one default texture made from the default pigment, normal and  finish.  The example above does not make a separate default for pigments  alone.  Note: Special textures tiles and material_map may not be used as  defaults. 

You may change the defaults several times throughout a scene as you wish.   Subsequent #default statements begin with the defaults that were in effect  at the time.  If you wish to reset to the original POV-Ray defaults then  you should first save them as follows: E
      //At top of file
      #declare Original_Default = texture {}
:
later after changing defaults you may restore it with... -
      #default {texture {Original_Default}}
║
If you do not specify a texture for an object then the default texture is  attached when the object appears in the scene.  It is not attached when an  object is declared.  For example: U
      #declare My_Object=
        sphere{<0,0,0>,1}  // Default texture not applied
:
      object{My_Object}    // Default texture added here
^
You may force a default texture to be added by using an empty texture  statement as follows: Z
      #declare My_Thing=
        sphere{<0,0,0>,1 texture{}}  // Default texture applied
u
The original POV-Ray defaults for all items are given throughout the  documentation under each appropriate section. '5.5   CAMERA ------------ T
Every scene in POV-Ray has a camera defined.  If you do not specify a  camera then a default camera is used.  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. ¿
A total of 6 vectors may be specified to define the camera but only a few  of those are needed to in most cases.  Here is an introduction to simple  camera placement. α
         5.5.1   LOCATION AND LOOK_AT
         5.5.2   THE SKY VECTOR
         5.5.3   THE DIRECTION VECTOR
         5.5.4   UP AND RIGHT VECTORS
         5.5.5   TRANSFORMING THE CAMERA
         5.5.6   CAMERA IDENTIFIERS
öò5ûUù{Üí¢╩'5.5.1 LOCATION AND LOOK_AT z
Under many circumstances just two vectors in the camera statement are all  you need: location and look_at.  For example: L
      camera {
        location <3,5,-10>
        look_at  <0,2,1>
      }
t
The location is simply the X, Y, Z coordinates of the camera. The camera  can be located anywhere in the ray tracing universe.  The default location  is <0,0,0>.  The look_at vector tells POV-Ray to pan and tilt the camera  until it is looking at the specified X, Y, Z coordinate.  By default the  camera looks at a point one unit in the +Z direction from the location.  ╪
The look_at specification should almost always be the LAST item in the  camera statement.  If other camera items are placed after the look_at  vector then the camera may not continue to look at the specified point. '5.5.2 THE SKY VECTOR Y
Normally POV-Ray pans left or right by rotating about the Y axis until it  lines up with the look_at point and then tilts straight up or down until  the point is met exactly.  However you may want to slant the camera  sideways like an airplane making a banked turn.  You may change the tilt of  the camera using the "sky" vector.  For example: e
      camera {
        location <3,5,-10>
        sky      <1,1,0>
        look_at  <0,2,1>
      }
X
This tells POV-Ray to roll the camera until the top of the camera is in  line with the sky vector.  Imagine that the sky vector is an antenna  pointing out of the top of the camera.  Then it uses the "sky" vector as  the axis of rotation left or right and then to tilt up or down in line with  the "sky" vector.  In effect you're telling POV-Ray to assume that the sky  isn't straight up.  Note that the sky vector must appear before the look_at  vector.  The sky vector does nothing on its own.  It only modifies the way  the look_at vector turns the camera.  The default value for sky is <0,1,0>. '
5.5.3 THE DIRECTION VECTOR ├
The "direction" vector serves two purposes.  It tells POV-Ray the initial  direction to point the camera before moving it with look_at or rotate  vectors.  It also controls the field of view.   Ñ
Note that this is only the initial direction.  Normally, you will use the  look_at keyword, not the direction vector to point the camera in its actual  direction.  2
The length of the direction vector tells POV-Ray to use a telephoto or  wide-angle view.  It is the distance from the camera location to the  imaginary "view window" that you are looking through.  A short direction  vector gives a wide angle view while a long direction gives a narrow,  telephoto view.   %
This figure illustrates the effect: 7
                 |\                                            |\
                 | \                                           | \
                 |  \                                          |  \
                 |   \                                         |   \
  Location       |   |            Location                     |   |
      *------------> |                *--------------------------> |
        Direction|   |                                         |   |
                 |   |                                         |   |
                 |   |                                         |   |
                  \  |                                          \  |
                   \ |                                           \ |
                    \|                                            \|
I

Short direction gives wide view...        long direction narrows view. +
The default value is "direction <0,0,1>". √
Be careful with short direction vector lengths like 1.0 and less. You may  experience 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. 
Wide angle example: g      camera {
        location  <3,5,-10>
        direction <0,0,1>
        look_at   <0,2,1>
      }

Zoomed in telephoto example: e      camera {
        location <3,5,-10>
        direction <0,0,8>
        look_at  <0,2,1>
      }
'5.5.4 UP AND RIGHT VECTORS ░
The "up" vector defines the height of the view window.  The "right" vector  defines the width of the view window.  This figure illustrates the  relationship of these vectors: A
      --------------------------
     |             ^            |
     |   up <0,1,0>|            |
     |             |            |
     |             |            |
     |             |            |
     |             |            |
     |             |            |
     |------------------------->|
     |   right<1.33,0,0>        |
     |             |            |
     |             |            |
     |             |            |
     |             |            |
     |             |            |
     |             |            |
      --------------------------
;
         5.5.4.1 Aspect Ratio
         5.5.4.2 Handedness
ÿÖ=
'5.5.4.1     Aspect Ratio │
Together these vectors define the "aspect ratio" (height to width ratio) of  the resulting image.  The default values "up <0,1,0>" and "right  <1.33,0,0>" results in an aspect ratio of about 4 to 3.  This is the aspect  ratio of a typical computer monitor.  If you wanted a tall skinny image or  a short wide panoramic image or a perfectly square image then you should  adjust the up and right vectors to the appropriate proportions. ╖
Most computer video modes and graphics printers use perfectly square  pixels.  For example Macintosh displays and IBM S-VGA modes 640x480,  800x600 and 1024x768 all use square pixels.  When your intended viewing  method uses square pixels then the width and height you set with the +W and  +H switches should also have the same ratio as the right and up vectors.   Note that 640/480=4/3 so the ratio is proper for this square pixel mode. _
Not all display modes use square pixels however.  For example IBM VGA mode  320x200 and Amiga 320x400 modes do not use square pixels.  These two modes  still produce a 4/3 aspect ratio image.  Therefore images intended to be  viewed on such hardware should still use 4/3 ratio on their up & right  vectors but the +W and +H settings will not be 4/3. 
For example: }      camera {
        location <3,5,-10>
        up       <0,1,0>
        right    <1,0,0>
        look_at  <0,2,1>
      }

This specifies a perfectly square image.  On a square pixel display like  SVGA you would use +W and +H settings such as +W480 +H480 or +W600 +H600.   However on the non-square pixel Amiga 320x400 mode you would want to use  values of +W240 +H400 to render a square image. '5.5.4.2     Handedness 	
The "right" vector also 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. The default right statement is: 
      right <1.33, 0, 0>
▓
This means that the +X direction is to the right.  It is called a "left- handed" system because you can use your left hand to keep track of the  axes.  Hold out your left hand with your palm facing to your right.  Stick  your thumb up.  Point straight ahead with your index finger. Point your  other fingers to the right.  Your bent fingers are pointing to the +X  direction.  Your thumb now points +Y.  Your index finger points +Z. ±
To use a right-handed coordinate system, as is popular in some CAD programs  and other ray tracers, make the same shape using your right hand.  Your  thumb still points up in the +Y direction and your index finger still  points forward in the +Z direction but your other fingers now say the +X is  to the left.  That means that the "right" side of your screen is now in the  -X direction. To tell POV-Ray to compensate for this you should use a  negative X value in the "right" vector like this: 
      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" and "direction" as well.  Note  that the up, right, and direction vectors must always remain perpendicular  to each other or the image will be distorted. '5.5.5 TRANSFORMING THE CAMERA [
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>
        rotate    <30, 60, 30>
        translate < 5,  3,  4>
      }                   
└
In this example, the camera is created, then rotated by 30 degrees about the X axis, 60 degrees about the Y axis, and 30 degrees about the Z axis,  then translated to another point in space. '5.5.6 CAMERA IDENTIFIERS w
You may declare several camera identifiers if you wish.  This makes it easy  to quickly change cameras.  For example: ±
      #declare Long_Lens=
            camera {
              location -z*100
              direction z*50
            }
      #declare Short_Lens=
            camera {
              location -z*50
              direction z*10
            }
d
      camera {
        Long_Lens    //edit this line to change lenses
        look_at Here
      }
'(5.6   MISC FEATURES ------------------- <
Here are a variety of other topics about POV-Ray features. ₧
         5.6.1   FOG
         5.6.2   MAX_TRACE_LEVEL
         5.6.3   MAX_INTERSECTIONS
         5.6.4   BACKGROUND
         5.6.5   THE #VERSION DIRECTIVE
¥w₧îƒ¡á╨
í∞'
5.6.1 FOG ê
POV-Ray includes the ability to render fog. To add fog to a scene, place  the following declaration outside of any object definitions: }
       fog {
         color Gray70      // the fog color
         distance 200.0    // distance for 100% fog color
       }
V
The fog color is then blended into the current pixel color at a rate  calculated as: }
          1-exp(-depth/distance) =
          1-exp(-200/200) =
          1-exp(-1) =
          1-.37... =
          0.63...
ú
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.  °
Subtle use of fog can add considerable realism and depth cuing to a scene  without adding appreciably to the overall rendering times.  Using a black  or very dark gray fog can be used to simulate attenuated lighting by  darkening distant objects. '5.6.2 MAX_TRACE_LEVEL ╝
The "#max_trace_level" directive sets a variable that defines how many  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.  This is because a new level is used every time you pass through a  transparent surface.  Raise max_trace_level to fix this problem.  For  example: 
      #max_trace_level 20
²
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.  '5.6.3 MAX_INTERSECTIONS ▀
POV-Ray uses a set of internal stacks to collect ray/object intersection  points.  The usual maximum number of entries in these "I-Stacks" is 64.   Complex scenes may cause these stacks to overflow.  POV-Ray doesn't stop  but it may incorrectly render your scene.  When POV-Ray finishes rendering,  a number of statistics are displayed.  If you see "I-Stack Overflows"  reported in the statistics, you should increase the stack size.  Add a  directive to your scene as follows: 
      #max_intersections 200
I
If the "I-Stack Overflows" remain, increase this value until they stop. '5.6.4 BACKGROUND ╣
A background color can be specified if desired.  Any ray that doesn't hit  an object will be colored with this color.  The default background is  black.  The syntax for background is: $
      background { color SkyBlue }

Using a colored background takes up no extra time for the ray tracer,  making it a very economical, although limited, feature. Only solid colors  can be specified for a background. Textures cannot be used.  No shadows  will be cast on it, which makes it very useful, but at the same time, it  has no "roundness", or shading, and can sometimes cause a scene to look  "flat".  Use background with restraint.  It's often better, although a bit  slower, to use a "sky sphere", but there are times when a solid background  is just what you need. '	5.6.5 THE #VERSION DIRECTIVE ·
Although POV-Ray 2.0 has had significant changes to the language over POV- Ray 1.0, almost all 1.0 scenes will still work if the compatibility mode is  set to 1.0.  The +MV switch described earlier, sets the initial mode.  The  default is +MV2.0.   i
Inside a scene file you may turn compatibility off or on using the  "#version" directive.  For example: B
      #version 1.0
      // Put some version 1.0 statements here
B
      #version 2.0
      // Put some version 2.0 statements here
C
Note you may not change versions inside an object or declaration. Ü
The primary purpose of the switch is to turn off float and expression  parsing so that commas are not needed.  It also turns off some warning  messages. ╔
Note some changes in tiles and material_maps cannot be fixed by turning the  version compatibility on.  It may require hand editing of those statements.   See the special texture section for details. ƒ
Future versions of POV-Ray may not continue to maintain full backward  compatibility.  We strongly encourage you to phase in 2.0 syntax as much as  possible. 'RAPPENDIX A  COMMON QUESTIONS AND ANSWERS ======================================== D
Q: I get a floating point error on certain pictures. What's wrong? )
A: The ray tracer 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.  0  Ex: scale <34, 2, 0> will generate a warning.
┘- 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 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: 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 { y, 0 }, every  point with a positive Y value is outside and every point with a negative Y  value is inside. ╞                            ^
                            |
                            |
                            |  Outside
                     _______|_______
                         Inside
é
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 ray tracing for useful techniques. Specifically, check out  "Spatial Subdivision" and "Ray Coherence" techniques. D

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 direction vector.  M

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. E

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 such as RAW2POV.  RAW2POV has an excellent bounding scheme  and the ability to specify a smoothing threshold. u

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 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: 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?  Z
A: Bounding volumes are not designed to change the shape of the object.  They are strictly a realtime improvement feature. The ray tracer 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 or use clipped_by { bounded_by } if  you wish to clip and bound with the same object. '6APPENDIX B  TIPS AND HINTS ========================== ⌐
     B.1 SCENE DESIGN
     B.2 SCENE DEBUGGING TIPS
     B.3 ANIMATION
     B.4 TEXTURES
     B.5 HEIGHT FIELDS
     B.6 FIELD-OF-VIEW
     B.7 CONVERTING "HANDEDNESS"
ñAÑWÑu	ºê¿Ü
⌐▒
¬╚'&B.1   SCENE DESIGN ------------------ σ
There are a number of excellent shareware CAD style modelers available on  the DOS platform now that will create POV-Ray scene files.  The online  systems mentioned elsewhere in this document are the best places to find  these. S
Hundreds of special-purpose utilities have been written for POV-Ray; data  conversion programs, object generators, shell-style "launchers", and more.  It would not be possible to list them all here, but again, the online  systems listed will carry most of them. Most, following the POV-Ray spirit,  are freeware or inexpensive shareware. ┼
Some extremely elaborate scenes have been designed by drafting on graph  paper.  Raytracer Mike Miller recommends graph paper with a grid divided in  tenths, allowing natural decimal conversions. K
Start out with a "boilerplate" scene file, such as a copy of BASICVUE.POV,  and edit that.  In general, place your objects near and around the "origin"  (0, 0, 0) with the camera in the negative z direction, looking at the  origin.  Naturally, you will break from this rule many times, but when  starting out, keep things simple. α
For basic, boring, but dependable lighting, place a light source at or near  the position of the camera.  Objects will look flat, but at least you will  see them.  From there, you can move it slowly into a better position. '6B.2   SCENE DEBUGGING TIPS -------------------------- ñ
To see a quick version of your picture, render it very small. With fewer  pixels to calculate the ray tracer can finish more quickly. -w160 -h100 is  a good size. /
Use the +Q "quality" switch when appropriate. ▐
If there is a particular area of your picture that you need to see in high  resolution, perhaps with anti-aliasing on (perhaps a fine-grained wood  texture), use the +SC, +EC. +SR, and +ER switches to isolate a "window". ƒ
If your image contains a lot of inter-reflections, set max_trace_level to a  low value such as 1 or 2.  Don't forget to put it back up when you're  finished! ▀
"Turn off" any unnecessary lights.  Comment out extended light and  spotlight keywords when not needed for debugging.  Again, don't forget to  put them back in before you retire for the night with a final render  running! ┘
If you've run into an error that is eluding you by visual examination, it's  time to start bracketing your file.  Use the block comment characters (  /* ... */ ) to disable most of your scene and try to render again.  If you  no longer get an error, the problem naturally lies somewhere within the  disabled area.  Slow and methodical testing like this will eventually get  you to a point where you will either be able to spot the bug, or go quietly  insane.  Maybe both. ç
If you seem to have "lost" yourself or an object (a common experience for  beginners) there are a few tricks that can sometimes help: ╒
     1) Move your camera way back to provide a long range view.
     This may not help with very small objects which tend to
     be less visible at a distance, but it's a nice trick to keep
     up your sleeve.
σ
     2) Try setting the ambient value to 1.0 if you suspect that
     the object may simply be hidden from the lights.  This will
     make it self-illuminated and you'll be able to see it even
     with no lights in the scene.
π
     3) Replace the object with a larger, more obvious "stand-in"
     object like a large sphere or box.  Be sure that all the
     same transformations are applied to this new shape so that
     it ends up in the same spot.
' B.3   ANIMATION --------------- 
When animating objects with solid textures, the textures 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: H      shape { ...
        pigment { ... }
        scale < ... >
      }
=Will scale the shape and pigment texture by the same amount. 
While: H      shape { ...
        scale < ... >
        pigment { ... }
      }
+Will scale the shape, but not the pigment. ╫
Constants can be declared for most of the data types in the program  including floats and vectors. By writing these to #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 * clock
   #declare ObjectRotation = <0, Y_Rotation, 0>
   #declare MySphere = sphere { <0, 0, 0>, 1.1234 }
J
Other examples can be found scattered throughout the sample scene files. í
DOS users: Get ahold of DTA.EXE (Dave's Targa Animator) for  creating .FLI/.FLC animations.  AAPLAY.EXE and PLAY.EXE are common viewers  for this type of file. 
When moving the camera in an animation (or placing one in a still image,  for that matter) avoid placing the camera directly over the origin.  This  will cause very strange errors.  Instead, move off center slightly and  avoid hovering directly over the scene. 'B.4   TEXTURES -------------- 	
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). ⁿ
The marble texture is designed around a pigment primitive that is much like  an x-gradient.  When turbulated, the effect is different when viewed from  the "side" or from the "end".  Try rotating it by 90 degrees on the y axis  to see the difference. {
You cannot get specular highlights on a totally black object. Try using a  very dark gray, say Gray10 or Gray15, instead. '(B.5   HEIGHT FIELDS ------------------- >
Try using POV-Ray itself to create images for height_fields: ║
      camera { location <0, 0, -2> }
      plane { z, 0
         finish { ambient 1 }    // needs no light sources
         pigment { bozo }        // or whatever.  Experiment.
      }
i
That's all you'll need to create a .tga file that can then be used as a  height field in another image! '(B.6   FIELD-OF-VIEW ------------------- D
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.   See the file "fov.inc" in the \POVRAY\INCLUDE directory for some predefined field-of-view values. ─
If your spheres and circles aren't round, try increasing the direction  vector slightly.  Often a value of 1.5 works better than the 1.0 default  when spheres appear near the edge of the screen. '<B.7   CONVERTING "HANDEDNESS" ----------------------------- ₧
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. g
Often, 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).  Some programs seem to interpret the coordinate systems  differently, however, so you may need to experiment with other camera  transformations if you want the y and z vectors to work as POV-Ray does. '<APPENDIX C  SUGGESTED READING ============================= L
First, a shameless plug for two books that are specifically about POV-Ray: ê
     The Waite Group's Ray Tracing Creations
     By Drew Wells & Chris Young
     ISBN 1-878739-27-1
     Waite Group Press
     1993
and m     The Waite Group's Image Lab
     By Tim Wegner
     ISBN 1-878739-11-5
     Waite Group Press
     1992
¢
Image Lab by Tim Wegner contains a chapter about POV-Ray. Tim is the co- author of the best selling book, Fractal Creations, also from the Waite  Group.  i
Ray Tracing Creations by Drew Wells and Chris Young 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.  y
    "An Introduction to Ray tracing"
    Andrew S. Glassner (editor)
    ISBN 0-12-286160-4
    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
y
    "Image Synthesis:  Theory and Practice"
    Nadia Magnenat-Thalman and Daniel Thalmann
    Springer-Verlag
    1987
M
    "The RenderMan Companion"
    Steve Upstill
    Addison Wesley
    1989
Q
    "Graphics Gems"
    Andrew S. Glassner (editor)
    Academic Press
    1990
ç
    "Fundamentals of Interactive Computer Graphics"
    J. D. Foley and A. Van Dam
    ISBN 0-201-14468-9
    Addison-Wesley
    1983
£
    "Computer Graphics:  Principles and Practice (2nd Ed.)" 
    J. D. Foley, A. van Dam, J. F. Hughes
    ISBN 0-201-12110-7
    Addison-Wesley,
    1990
Z
    "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"
    The Computer Society
    10662, Los Vaqueros Circle
    Los Alamitos, CA 90720
i
    "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
'A<APPENDIX D  LEGAL INFORMATION ============================= ╕
The following is legal information pertaining to the use of the Persistence  of Vision Ray Tracer a.k.a POV-Ray. It applies to all POV-Ray source files,   executable (binary) files, scene files, documentation files contained in  the official POV archives.  (Certain portions refer to custom versions of  the software,  there are specific rules listed below for these versions  also.)  All of these are referred to here as "the software".   
THIS NOTICE MUST ACCOMPANY ALL OFFICIAL OR CUSTOM PERSISTENCE OF VISION  FILES. IT MAY NOT BE REMOVED OR MODIFIED. THIS INFORMATION PERTAINS TO ALL  USE OF THE PACKAGE WORLDWIDE.  THIS DOCUMENT SUPERSEDES ALL PREVIOUS  LICENSES OR DISTRIBUTION POLICIES. 6

                        IMPORTANT LEGAL INFORMATION
ó
Permission is granted to the user to use the Persistence of Vision  Raytracer and all associated files in this package to create and render  images. The use of this software for the purpose of creating images is  free. The creator of a scene file and the image created from the scene  file, retains all rights to the image and scene file they created and may  use them for any purpose commercial or non-commercial.   b
The user is also granted the right to use the scenes files and include  files distributed in the INCLUDE and DEMO sub-directories of the POVDOC  archive when creating their own scenes.  Such permission does not extend to  files in the POVSCN archive.  POVSCN files are for your enjoyment and  education but may not be the basis of any derivative works. ò
This software package and all of the files in this archive are copyrighted  and may only be distributed and/or modified according to the guidelines  listed below.  The spirit of the guidelines below is to promote POV-Ray as  a standard ray tracer, provide the full POV-Ray package freely to as many  users as possible, prevent POV-Ray users and developers from being taken  advantage of, enhance the life quality of those who come in contact with  POV-Ray.  This legal document was created so these goals could be realized.   You are legally bound to follow these rules, but we hope you will follow  them as a matter of ethics, rather than fear of litigation. á
No portion of this package may be separated from the package and  distributed separately other than under the conditions specified in the  guidelines below.   y
This software may be bundled in other software packages according to the  conditions specified in the guidelines below. H
This software may be included in software-only compilations using media  such as, but not limited to, floppy disk, CD-ROM, tape backup, optical  disks, hard disks, or memory cards.  There are specific rules and  guidelines listed below for the provider to follow in order to legally  offer POV-Ray with a software compilation. └
The user is granted the privilege to modify and compile the source for  their own personal use in any fashion they see fit.  What you do with the  software in your own home is your business. è
If the user wishes to distribute a modified version of the software (here  after referred to as a "custom version") they must follow the guidelines  listed below.  These guidelines have been established to promote the growth  of POV-Ray and prevent difficulties for users and developers alike.  Please  follow them carefully for the benefit of all concerned when creating a  custom version.   
You may not incorporate any portion of the POV-Ray source code in any  software other than a custom version of POV-Ray.  However authors who  contribute source to POV-Ray may still retain all rights to use their  contributed code for any purpose as described below. {
The user is encouraged to send enhancements and bug fixes to the POV-Team,  but the team is in no way required to utilize these enhancements or fixes.   By sending material to the POV-Team, the contributor asserts that he owns  the materials or has the right to distribute these materials.  He  authorizes the POV-Team to use the materials any way they like.  The  contributor still retains rights to the donated material, but by donating  you grant equal rights to the POV-Team.  The POV-Team doesn't have to use  the material, but if we do, you do not acquire any rights related to POV- Ray.  We will give you credit if applicable. 9

                    GENERAL RULES FOR ALL DISTRIBUTION
Ñ
The permission to distribute this package under certain very specific  conditions is granted in advance, provided that the above and following  conditions are met. j
These archives must not be re-archived using a different method without the  explicit permission of the POV-Team.  You may rename the archives only to  meet the file name conventions of your system or to avoid file name  duplications but we ask that you try to keep file names as similar to the  originals as possible.  (For example:POVDOC.ZIP to POVDOC20.ZIP) S
You must distribute a full package of archives as described in the next  section. J
Non-commercial distribution (such as a user copying the software for a  personal friend or colleague and not charging money or services for that  copy) has no other restrictions.  This does not include non-profit  organizations or computer clubs. These groups should use the  Shareware/Freeware distribution company rules below. é
The POV-Team reserves the right to withdraw distribution privileges from  any group, individual, or organization for any reason. 6

                       DEFINITION OF "FULL PACKAGE"
½
POV-Ray is contained in 4 archives for each hardware platform.  1) An  executable archive, 2) A documentation archive, 3) Sample scene archives,  4) Source code archive. E
A "full package" is defined as one of the following bundle options: ╢   1  All archives (executable, docs, scenes, source)
   2  User archives (executable, docs, scenes but no source)
   3  Programmer archives (source, docs, scenes but no executable)
¥
POV-Ray is officially distributed for IBM-PC compatibles running MS-Dos;  Apple Macintosh; and Commodore Amiga.  Other systems may be added in the  future. ╕
Distributors need not support all platforms but for each platform you  support you must distribute a full package.  For example an IBM-only BBS  need not distribute the Mac versions. ?

              CONDITIONS FOR DISTRIBUTION OF CUSTOM VERSIONS
`
You may distribute custom compiled versions only if you comply with the  following conditions. L
     Mark your version clearly on all modified files stating this to be a 
!modified and unofficial version. D     Make all of your modifications to POV-Ray freely and publicly 
available. M     You must provide all POV-Ray support for all users who use your custom 
aversion.  The POV-Ray Team is not obligated to provide you or your users  any technical support. L     You must provide documentation for any and all modifications that you 
4have made to the program that you are distributing. J     Include clear and obvious information on how to obtain the official 
	POV-Ray. I     Include contact and support information for your version.  Include 
╓this information in the DISTRIBUTION_MESSAGE macros in the source file  FRAME.H and insure that the program prominently displays this information.   Include all credits and credit screens for the official version. &     Include a copy of this document.
9

                    CONDITIONS FOR COMMERCIAL BUNDLING
7
Vendors wishing to bundle POV-Ray with commercial software or with  publications must first obtain explicit permission from the POV-Ray Team.   This includes any commercial software or publications, such as, but not  limited to, magazines, books, newspapers, or newsletters in print or  machine readable form. ╓
The POV-Ray Team will decide if such distribution will be allowed on a  case-by-case basis and may impose certain restrictions as it sees fit.  The  minimum terms are given below. Other conditions may be imposed. J
     Purchasers of your product must not be led to believe that they are
÷paying for POV-Ray.  Any mention of the POV-Ray bundle on the box, in advertising or in instruction manuals must be clearly marked with a disclaimer that POV-Ray is free software and can be obtained for free or nominal cost from various sources. I     Include clear and obvious information on how to obtain the official
	POV-Ray. p     Include a copy of this document.
     You must provide all POV-Ray support for all users who acquired POV-
uRay through your product.  The POV-Ray Team is not obligated to provide you or your customers any technical support. î     Include a credit page or pages in your documentation for POV-Ray.
     If you modify any portion POV-Ray for use with your hardware or
Osoftware, you must follow the custom version rules in addition to these rules. v     Include contact and support information for your product.
     Must include official documentation with product.
D

         CONDITIONS FOR SHAREWARE/FREEWARE DISTRIBUTION COMPANIES
z
Shareware and freeware distribution companies may distribute the archives  under the conditions following this section.  ö
You must notify us that you are distributing POV-Ray and must provide us  with information on how to contact you should any support issues arise.  ÿ
No more than five dollars U.S. ($5) can be charged per disk for the copying  of this software and the media it is provided on. Space on each disk must  used completely.  The company may not put each archive on a separate disk  and charge for three disks if all three archives will fit on one disk. If  more than one disk is needed to store the archives then more than one disk  may be used and charged for. ▌
Distribution on high volume media such as backup tape or CD-ROM is  permitted if the total cost to the user is no more than $0.10 per megabyte  of data.  For example a CD-ROM with 600 meg could cost no more than $60.00. =

                 CONDITIONS FOR ON-LINE SERVICES AND BBS'S
o
On-line services and BBS's may distribute the POV-Ray archives under the  conditions following this section.  z
The archives must be all be easily available on the service and should be  grouped together in a similar on-line area.   ò
It is strongly requested that BBS operators remove prior versions of POV- Ray to avoid user confusion and simplify or minimize our support efforts. ▓
The on-line service or BBS may only charge standard usage rates for the  downloading of this software. A premium may not be charged for this  package. I.E. CompuServe or America On-Line may make these archives  available to their users, but they may only charge regular usage rates for  the time required to download. They must also make the all of the archives  available in the same forum, so they can be easily located by a user. ,
                                DISCLAIMER
g
This software is provided as is without any guarantees or warranty.   Although the authors have attempted to find and correct any bugs in the  package, they are not responsible for any damage or losses of any kind  caused by the use or misuse of the package. The authors are under no  obligation to provide service, corrections, or upgrades to this package. 'FAPPENDIX E  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 Chris Young, the development  team coordinator. 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! ¡
 Chris Young
 (Team Coordinator. Worked on everything.)
 CIS: 76702,1655
 Internet 76702.1655@compuserve.com
 US Mail:
  3119 Cossell Drive
  Indianapolis, IN 46224 U.S.A.
ª

 Drew Wells 
 (Former team leader. Worked on everything.)
 CIS: 73767,1244
 Internet: 73767.1244@compuserve.com
 AOL: Drew Wells
 Prodigy: SXNX74A (Not used often)
²

 Other authors and contributors in alphabetical order:
 -----------------------------------------------------
 David Buck
 (Original author of DKBTrace)
 (Primary developer, quadrics, docs)
 INTERNET:(preferred) dbuck@ccs.carleton.ca
 CIS: 70521,1371
p
 Aaron Collins
 (Co-author of DKBTrace 2.12)
 (Primary developer, IBM-PC display code,phong) 
 CIS: 70324,3200
{
 Alexander Enzmann
 (Primary developer, Blobs, quartics, boxes, spotlights) 
 CIS: 70323,2461
 INTERNET: xander@mitre.com
E
 Dan Farmer
 (Primary developer, docs, scene files)
 CIS:70703,1632
f
 Douglas Muir
 (Bump maps and height fields)
 CIS: 76207,662
 Internet:dmuir@media-lab.media.mit.edu
?
 Bill Pulver
 (Time code and IBM-PC compile)
 CIS: 70405,1152
<
 Charles Marslette
 (IBM-PC display code)
 CIS: 75300,1636
A
 Mike Miller
 (Artist, scene files, stones.inc)
 CIS: 70353,100
s
 Jim Nitchals
 (Mac version, scene files)
 CIS: 73117,3020
 AppleLink: jimn8
 Internet: 73117.3020@compuserve.com
o
 Eduard Schwan
 (Mac version, docs)
 CIS: 71513,2161
 AppleLink: JL.Tech
 Internet: 71513.2161@compuserve.com
D
 Randy Antler
 (IBM-PC display code enhancements)
 CIS: 71511,1015
2
 David Harr
 (Mac balloon help)
 CIS: 72117,1704

 Scott Taylor
 (Leopard and Onion textures)
 CIS: 72401,410
 
 Chris Cason
 (colour X-Windows display code)
 CIS: 100032,1644
E
 Dave Park 
 (Amiga support; added AGA video code)
 CIS: 70004,1764
'░½╡ui₧X╒╢òj┐╙*¿@ ┬ ê!¬"C#±$▒%&╓&ô'p(╬(B)9*+,a-<.)1 6¼6U9¡:t=c?┬?7@AMEII N÷OÜU¼V≥WY┬\%did╞de╘eOkÄrσv|`Çdå¬çhî╣£áµÑ∙╕╛╣                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    9└▄─╚t╔ƒ╓]╪S┌╪▐{α▄Γ╪Σ≡ΘÆ∞¿φ²ε╔≡≥ñ≥Φ≤4√íô'&─) ,E.649─:╚=x?7AΦCENG¬HHKÆLºM⌠U
W╫Xo[aldSg╒nΩrFtwï|╡é4êèóæ┬òwÖ╝£█₧Äí«■▓)╢┤╛÷╞┬╚▒╦╣╬┐╫└▐%Γ^ⁿ╝µÜ▀&z²3\U=WÄ^Yo╘tKvΩ~våû¥ùöó■¬R▒î│╚╡å╕╚╣∞╜(╩
σ`Θíδè≡² öXä*';*í-6|:<╩<v=?╝CyD<FßIAKM╨TòV]~aue-gδm═o╕qºsüyîüGç7ÆåûGÿUÜ╡£C₧ó=¿^⌐ÿ½d¡ß│D╖U╕0╗â╜⌡╛╡┼ ╦@═¡╨╦╒╥█ß▐.πÉτ∞ε╠⌡?≈w²¥√
jd")&k)¿-T6╖9P@├FI·J$L╝OJU║W╪ZB_åuöv·{âäkèì╢Ä⌡ÉEôH£Æ╚        