Documentation:Tutorial Section 1

From POV-Wiki
Revision as of 01:45, 16 December 2010 by Jholsenback (talk | contribs) (couple of last minute updates)
Jump to navigation Jump to search

This document is protected, so submissions, corrections and discussions should be held on this documents talk page.


Introduction

This book provides a tutorial for the Persistence of Vision Ray-Tracer (POV-Ray). The documentation applies to all platforms to which this version of POV-Ray is ported. The platform-specific documentation is available for each platform separately.

This book is divided into five main parts:

  1. This introduction which explains what POV-Ray is and what ray-tracing is. It gives a brief overview of how to create ray-traced images.
  2. A Beginning Tutorial which explains step by step how to use the different features of POV-Ray.
  3. An Advanced Tutorial which contains more advanced tutorial topics.
  4. POV-Ray questions and tips gives answers to many frequently-asked questions about POV-Ray.
  5. In the Appendices you will find some tips and hints, where to get the latest version and versions for other platforms, the POV-Ray licence, information on compiling custom versions of POV-Ray, suggested reading, contact addresses and legal information.

POV-Ray runs on Windows 9x/ME/NT/2000/XP/Vista/7, Macintosh Mac OS and Mac OS X, x86 Linux, UNIX, and other platforms.

We assume that if you are reading this document then you already have POV-Ray installed and running. However the POV-Team does distribute this file by itself in various formats including online on the Internet. If you do not have POV-Ray or are not sure you have the official version or the latest version, see appendix What to do if you don't have POV-Ray.

This book covers only the generic parts of the program which are common to each version.

Note: Each version has platform-specific documentation not included here.

We recommend you finish reading this introductory section then read the platform-specific information before reading this tutorial.

The platform-specific docs will show you how to render a sample scene and will give you detailed description of the platform-specific features.

The Windows version documentation is available on the POV-Ray program's Help menu or by pressing the F1 key while in the program.

The Mac platform documentation is available via the Help menu as well as for viewing using a regular web browser. Details may be found in the POV-Ray MacOS Read Me which contains information specific to the Mac version of POV-Ray. It is best to read this document first.

The Unix / Linux version documentation can be found at the same place as the platform independent part. Usually that is /usr/local/share/povray-3.?/html

Program Description

The Persistence of Vision Ray-Tracer creates three-dimensional, photo-realistic images using a rendering technique called ray-tracing. It reads in a text file containing information describing the objects and lighting in a scene and generates an image of that scene from the view point of a camera also described in the text file. Ray-tracing is not a fast process by any means, but it produces very high quality images with realistic reflections, shading, perspective and other effects.

What is Ray-Tracing?

Ray-tracing is a rendering technique that calculates an image of a scene by simulating the way rays of light travel in the real world. However it does its job backwards. In the real world, rays of light are emitted from a light source and illuminate objects. The light reflects off of the objects or passes through transparent objects. This reflected light hits our eyes or perhaps a camera lens. Because the vast majority of rays never hit an observer, it would take forever to trace a scene.

Ray-tracing programs like POV-Ray start with their simulated camera and trace rays backwards out into the scene. The user specifies the location of the camera, light sources, and objects as well as the surface texture properties of objects, their interiors (if transparent) and any atmospheric media such as fog, haze, or fire.

For every pixel in the final image one or more viewing rays are shot from the camera, into the scene to see if it intersects with any of the objects in the scene. These "viewing rays" originate from the viewer, represented by the camera, and pass through the viewing window (representing the final image).

Every time an object is hit, the color of the surface at that point is calculated. For this purpose rays are sent backwards to each light source to determine the amount of light coming from the source. These "shadow rays" are tested to tell whether the surface point lies in shadow or not. If the surface is reflective or transparent new rays are set up and traced in order to determine the contribution of the reflected and refracted light to the final surface color.

Special features like inter-diffuse reflection (radiosity), atmospheric effects and area lights make it necessary to shoot a lot of additional rays into the scene for every pixel.

What is POV-Ray?

The Persistence of Vision Ray-Tracer(tm) was developed from DKBTrace 2.12 (written by David K. Buck and Aaron A. Collins) by a bunch of people (called the POV-Team™) in their spare time. The headquarters of the POV-Team is on the internet (see Where to Find POV-Ray Files for more details).

The POV-Ray package includes detailed instructions on using the ray-tracer and creating scenes. Many stunning scenes are included with POV-Ray so you can start creating images immediately when you get the package. These scenes can be modified so you do not have to start from scratch.

In addition to the pre-defined scenes, a large library of pre-defined shapes and materials is provided. You can include these shapes and materials in your own scenes by just including the library file name at the top of your scene file, and by using the shape or material name in your scene.

Features

Here are some highlights of POV-Ray's features:

Changes and New Features Summary

This section covers version 3.7 Changes and New Features that apply no matter what platform you are using. Changes and information pertaining to your particular installation are covered in the platform specific documentation that's included with the distribution.

The categorized list below outlines the additions, changes and improvements along with links (when appropriate) to their relevant passages in the Reference Section.

Look Here First

These items definitely deserve your attention, because some of them represent key changes or enhancements to the way POV-Ray operates or behaves.

  1. POV-Ray now supports Symmetric MultiProcessing.
  2. The addition of the mesh_camera makes texture baking possible.
  3. See the Images and Image Related category below for important changes and additions.
  4. Redistribute the workload to render threads by specifying a render block size.
  5. Binary Space Partitioning or BSP tree bounding is now available.
  6. An overall review of the entire radiosity section is probably a good idea some of the highlights are:
    1. the new maximum_reuse parameter
    2. also of interest the adaptive pretrace mode added to the nearest_count parameter
    3. the loading and saving of radiosity data has changed
    4. these command line options can help to further customize radiosity features
  7. There have been several important changes and additions to gamma handling:
    1. changes in the global_settings section
    2. assumed_gamma has been deprecated
    3. don't forget the section on Backward Compatibility
    4. gamma correction for image input files has been implemented
    5. also of interest these changes dealing with scene file gamma
    6. the gamma keyword can be used to specify gamma pre-corrected colors
    7. an Antialias_Gamma feature has been added
    8. lastly you can also change the input file gamma for individual input files
  8. The ovus object was added, along with support for uv_mapping
  9. Added multiple-thread support to photon shooting code.
  10. A provisional Real-Time Raytracing feature was added, some restrictions apply!
  11. New thread-safe random number generator was added.

Patterns Pigments and Textures

This category deals with items that are the building blocks of materials and textures and their appearance.

  1. Added diffuse backside illumination capability.
  2. Alpha stage (experimental) subsurface scattering was added.
  3. Support for area_light diffuse and specular illumination was implemented.
  4. These list patterns, a warp, and a slope pattern extensions were added:
    1. aoi pattern
    2. cubic pattern
    3. cubic warp
    4. pavement pattern
    5. square pattern
    6. tiling pattern
    7. triangular pattern
    8. slope pattern extension
  5. Improvements to iterations and two new exterior types were added. See Fractal Patterns for more details.
  6. The finish block now supports the emission keyword.
  7. A sky_sphere layered pigment related behavior change.
  8. A new Slope Map Tutorial has been added.

Images and Image Related

Image formats and handling issues are covered in this section.

  1. Get your display gamma correct! See the new gamma handling tutorial.
  2. There have been various changes regarding output file types these are the highlights:
    1. cross platform default output file type is PNG
    2. BOTH input and output support for two High Dynamic Range file types has been added
    3. JPEG default quality and chroma sub-sampling changes
    4. output file type "s" has been deprecated
  3. The interpolate option now supports bicubic interpolation.
  4. Use of the hf_gray_16 keyword has been deprecated in the global_settings block.
  5. A couple of important changes and additions regarding Alpha Channel usage.
  6. Added "out-of-the-box" transparency support for GIF input files.

Language Basics and Directives

A macro, a few functions and some programming directives completes this summary.

  1. Now you can declare an identifier as deprecated.
  2. Several bitwise functions were added.
  3. A string function datetime() has also been added.
  4. Added a new pre-declared variable input_file_name.
  5. New string relational operators have been added.
  6. Added binary #write capability, see the ARRAYS_WriteDF3 macro for usage.
  7. The #break directive behavior has changed.
  8. An atand function has been added to the math.inc file.
  9. The max_extent function can now return the pixel resolution of an image map.
  10. See the notes concerning the #version directive.
  11. The #if directive now supports an #elseif clause.
  12. A new #for loop directive has been added.
  13. The CPU Utilization Histogram feature has been deprecated. See the Note at the end of that section for more details.

The Early History of POV-Ray

OK, here's a not-so brief history of POV-Ray (from the horse's mouth, so to speak):

Back in 1986 or so, I had an Amiga. A friend who also has an Amiga downloaded the C code for a raytracer for Unix from the Internet and brought it over. I thought it looked interesting and I ported it to the Amiga and wrote the drivers to display it with Amiga graphics. The program only rendered untextured spheres with a planar floor in black and white, but I was still impressed by it. I played with it a bit adding support for color, but I eventually decided that I could do a better job writing a raytracer from scratch, so I scrapped the C program and started my own - DKBTrace had begun.

I decided to start with general quadric surfaces since they could represent spheres, ellipsoids, cylinders, planes, and more. I worked out the ray-quadric intersection calculations and used some calculus to work out the surface normal to a quadric surface at a point. For the program structure, I decided to use an object-oriented style since I had learned Smalltalk at university and it fit nicely. To make modeling more flexible, I added CSG and procedural textures. In the end, I had an interesting little raytracer and I decided to release it as freeware since I was planning to return to university to start my Master's degree and didn't have time to develop a commercial raytracer. Besides, there were already commercial renders for the Amiga that had user interfaces (not just text files) and I felt I couldn't sell it as a commercial product. I called it DKBTrace and released it to local BBS'es and to the Internet.

DKBTrace was an Amiga-only program, but it attracted quite a lot of interest. I released several versions of it adding in new features, better primitives, more texturing options, etc. Eventually I released version 2.01.

Sometime around 1987 or 1988, I was contacted by Aaron Collins. He had found the C code for DKBTrace and ported it to the PC. He also added a Phong lighting model and a few more goodies. I was interested in what he had done, so I contacted him to see if he wanted to help develop a new version of the program. This one would be portable across more platforms (at university I had access to Unix workstations). We eventually came up with version 2.12 which was the last version of DKBTrace ever released (1989).

While Aaron and I were working up to version 2.12, there was a group of people on CompuServe who were very excited about DKBTrace and were creating all sorts of neat scenes for it. They were also expressing frustration that Aaron and I weren't able to add new features into DKBTrace fast enough. They started talking about building a whole new raytracer from scratch that they could control and add the features they wanted. At that time, I was starting to pursue other areas and was starting to drift away from raytracing. So, I posted a message on CompuServe with the following offer: We could form a team to develop a new raytracer using DKBTrace as a base. I had three requirements for this team. The resulting code had to be freeware with the source code freely available, it had to remain portable between different platforms, and it had to have a different name than DKBTrace.

The name DKBTrace was, of course, based on my initials: David Kirk Buck (there's some little known trivia for you). With a package developed by a team of people, it was inappropriate to use my initials. I was also starting to drift away from raytracing (as I mentioned) and I didn't want people thinking that I was the head of the team forever. The name that was proposed was "Persistance Of Vision Raytracer" which was shortened to POV-Ray. It worked in three ways. It was the result of a persistent vision of the developers, it was a reference to the Salvador Dali work which depicted a distorted but realistic world, and the term "persistance of vision" in biology referred to the ability to see an image that was presented briefly - almost an after image.

In 1989, then, DKBTrace 2.12 was officially released and the POV-Ray project had begun. I worked with the team for a few years after that. I was responsible for the Amiga port among other things. Drew Wells was the project leader. Aaron Collins dropped out of the project around that time as well. Other early members included Chris Young, Steve Anger, Tim Wegner, Dan Farmer, Bill Pulver (IBM drivers), and Alexander Enzmann (quartics and cool math stuff). Chris Cason joined shortly after (my apologies if I left anyone out - lots of people were involved). The reference to Robert Skinner in the credits for POV-Ray was because we had a hard time finding a good noise function. In another raytracer, he had a great noise function written by Robert Skinner, so we asked for and received permission to use it in POV-Ray.

There was so much demand for us to release a new version that we created POV-Ray 0.5 and released it. It was basically an enhanced DKBTrace with a similar grammar but many more features. Eventually, we released POV-Ray 1.0 which had the new grammar and lots of new stuff. Drew dropped out later and Chris Young took over as project leader.

It was around that time that I started to drift away from the POV-Ray team. The project had momentum and could continue on without me. I was getting into different areas (physically based modeling and animation) and no longer had the time to continue with POV-Ray. Around the release of version 2.0, I left the project and the POV-Ray team developed it to its current state. Chris Cason is now the project leader.

Even though I'm no longer on the POV-Ray development team, I still like to follow its progress. I haven't built my own scene by hand for years now (although I occasionally use Moray). I still enjoy the one thing that drove me back in the DKBTrace days - I love seeing the works of other people who used my software. Even though I can no longer call POV-Ray "my software", I still enjoy admiring the artwork people create with it. I'm constantly amazed at what people can do. It was always the feedback from user community that drove me.

David Buck,
david [at] simberon.com

august 2001


Introduction The Original Creation Message


This document is protected, so submissions, corrections and discussions should be held on this documents talk page.