|
This document is available in: English Castellano Deutsch Francais Nederlands Russian Turkce |
by Antonio Castro <acastro(at)ctv.es> About the author: Computer Science is my profession and also part of my free time. I like to share my hobby, as everyone probably does. I admit it! I am one of those strange characters who dislikes windoze. Translated to English by: David Escorial <descor(at)opera.dia.fi.upm.es> Content: |
Povray I: Beginning with PovrayAbstract:
This article begins a series about the Povray raytracer. The purpose of
the current article is to help novice Linux users to get started with
POV-Ray.
|
When possible POV-Ray tries to imitate nature. Sometimes POV-Ray has to settle for just imitating or simulating a natural effect. Without such shortcuts it would be impossible to render an image in a reasonable amount of time. Raytracing algorithms work by computing a large amount of rays (like light beams), however these rays do not behave like real optical rays. In nature, rays originate in light sources, move in space and whenever they encounter a physical obstacle (i.e a surface) they scatter, generating a new ray that goes from the point on impact to the retina's viewer or the camera's film. On the other hand, in a raytracer rays move backwards, from the viewer or film to the objects and then back to the light sources. We will leave a detailed explanation as to why and how of this algorithm for the next article.
The quality of Povray is excellent and is comparable to most commercial raytracers. Commercial design products based on raytracing do have integrated tools for designing comfortably all sort of objects.
In the case of Povray, it is possible to use modelers from different independent companies or format filters, and in general the user has a great variety of tools available. This does not mean that it is impossible to achieve a beautiful or even fantastic design using exclusively Povray. Imagination is all that is required.
Another important point is that the source code is public, allowing us to examine the various techniques used. Povray's copyright is described in Appendix A of the manual, as Linux it is a freeware license. Check out the details in the original license.
There is a Povray manual available in a text version (easy for fast browsing), in HTML and postscript formats. If you think to print out the postscript file, you should prepare about 600 sheets; huge because of the great possibilities of Povray, but do not feel intimidated. In the present article you will be able to try out Povray and in next articles we will learn basic concepts.
With Povray we enter the world of computer science through the front door, all thanks to its wonderful technical capabilities. My concept of computer science is based on the notion that although pure technologies can help us to obtain images with high realism, nevertheless artistic value does not equal realism nor technology itself. Technology is a valuable assistant, but everything that has real artistic value has to be conceived in our minds first. The idea is the main goal.
Many times I like to play with the concepts of realism and fantasy.
Computer science allows us to play this game of one and a thousand
shapes creating an interesting conflict for the viewer.
I keep a small image gallery created using Povray at:
http://slug.ctv.es/~acastro/infograf/catalog.htm
Here is an example, a hybrid design: an airplane, a sailing ship and a seagull.
The object has the silhoulette of a seagull. In the upper part, it has a transparent cockpit and two pilots are easily visible. The pigmentation is strange but with the raytracing these pictures can achieve a degree of astonishing realism.
If you show these pictures to a 5-year old child, and ask him what he sees, he will likely answer that it is a photo, not a drawing. Showing the same pictures to an adult, would perhaps reveal that the person has some difficulties to classify it. The person will say that it is clearly neither a drawing nor a photo. Maybe he will know that it was produced by a computer, but how can a machine create this strange and beautiful scene?
This kind of effect is the one I seek in my designs. Conflicting images where synthetic and artificial are put together in harmony with several realistic features. For this to do you need without a doubt imagination and a good knowledge of the technique. On the other hand, to get very realistic images, you should have a complete control over the technique, but maybe this can not be necessarily called art.
I have truly spent many very good times with Povray and I'm sure that anyone that gets to know it will enjoy it the same.
http://www.povray.org
ftp://ftp.povray.org
There is also an electronic magazine about povray, however, it looks abandoned, it keeps some good issues that first appeared when the Povray 3.0 was released.
http://www.povray.org/pub/povray/ezine
There are lots of MIRRORS but none of them are official.
Index: (15-January-1998) ftp.povray.org
Here, we enclose a short listing of the contents of the official
site.
pub lrwxr-xr-x 1 povray vuser 15 Aug 24 11:12 HEADER -> povray/.message drwxr-xr-x 5 povray vuser 512 Aug 24 13:13 povray pub/povray -rw-r--r-- 1 povray vuser 305 Jan 9 01:30 .message lrwxr-xr-x 1 povray vuser 8 Aug 24 13:13 HEADER -> .message dr-xr-xr-x 2 povray vuser 1536 Aug 24 13:13 Hall-Of-Fame -r--r--r-- 1 povray vuser 3262 Aug 24 10:52 MIRRORS dr-xr-xr-x 10 povray vuser 512 Aug 24 11:14 Official-3.0 -r--r--r-- 1 povray vuser 3262 Aug 24 10:52 README.MIRRORS -r--r--r-- 1 povray vuser 3731 Aug 24 10:52 README.MIRRORS.HTML dr-xr-xr-x 2 povray vuser 1024 Aug 24 13:13 Ray-Tracing-News pub/povray/Hall-Of-Fame -r--r--r-- 1 1017 1017 235235 May 14 1996 6x86.jpg -r--r--r-- 1 1017 1017 393630 Sep 30 1994 6z4.jpg -r--r--r-- 1 1017 1017 308 Sep 30 1994 6z4jpg.txt -r--r--r-- 1 1017 1017 154256 Oct 13 1995 astplant.jpg -r--r--r-- 1 1017 1017 2991 Oct 13 1995 astplant.txt -r--r--r-- 1 1017 1017 110322 Sep 30 1994 ballz5.gif -r--r--r-- 1 1017 1017 287164 Dec 8 1994 bell_jar.jpg -r--r--r-- 1 1017 1017 57111 Oct 13 1995 bkntools.jpg -r--r--r-- 1 1017 1017 610 Oct 13 1995 bkntools.txt -r--r--r-- 1 1017 1017 331058 Sep 30 1994 brass.jpg -r--r--r-- 1 1017 1017 254 Sep 30 1994 brass.txt -r--r--r-- 1 1017 1017 284250 Sep 30 1994 bug1.gif -r--r--r-- 1 1017 1017 279273 Sep 30 1994 camera.jpg -r--r--r-- 1 1017 1017 367490 Oct 13 1995 crane.jpg -r--r--r-- 1 1017 1017 2650 Oct 13 1995 crane.txt -r--r--r-- 1 1017 1017 101473 Sep 30 1994 dragons.jpg -r--r--r-- 1 1017 1017 295129 Sep 30 1994 frosty.gif -r--r--r-- 1 1017 1017 777531 Sep 30 1994 frosty.tga.zip -r--r--r-- 1 1017 1017 88350 Sep 30 1994 geodome.jpg -r--r--r-- 1 1017 1017 2252 Sep 30 1994 geodome.txt -r--r--r-- 1 1017 1017 11801 Sep 30 1994 geosmall.gif -r--r--r-- 1 1017 1017 356889 Oct 13 1995 gofood1.jpg -r--r--r-- 1 1017 1017 483 Oct 13 1995 gofood1.txt -r--r--r-- 1 1017 1017 375781 Oct 13 1995 gogadget.jpg -r--r--r-- 1 1017 1017 825 Oct 13 1995 gogadget.txt -r--r--r-- 1 1017 1017 72337 Oct 13 1995 info_hwy.jpg -r--r--r-- 1 1017 1017 1796 Oct 13 1995 info_hwy.txt -r--r--r-- 1 1017 1017 109462 Oct 13 1995 jmwarmup.jpg -r--r--r-- 1 1017 1017 3346 Oct 13 1995 jmwarmup.txt -r--r--r-- 1 1017 1017 628 Sep 30 1994 julia.txt -r--r--r-- 1 1017 1017 50762 Sep 30 1994 kettle.jpg -r--r--r-- 1 1017 1017 295555 Sep 30 1994 kkteaset.jpg -r--r--r-- 1 1017 1017 96 Sep 30 1994 kkteaset.txt -r--r--r-- 1 1017 1017 151503 Sep 30 1994 lionfish.gif -r--r--r-- 1 1017 1017 112 Sep 30 1994 mindmaz1.txt -r--r--r-- 1 1017 1017 341101 Sep 30 1994 museum.jpg -r--r--r-- 1 1017 1017 564 Sep 30 1994 museum.txt -r--r--r-- 1 1017 1017 364856 Aug 19 1995 pcktwtch.gif -r--r--r-- 1 1017 1017 580 Aug 19 1995 pcktwtch.txt -r--r--r-- 1 1017 1017 590679 Jan 29 1996 pcktwtch.zip -r--r--r-- 1 1017 1017 417 Sep 30 1994 pclock.txt -r--r--r-- 1 1017 1017 213426 Sep 30 1994 plntscap.gif -r--r--r-- 1 1017 1017 2558 Sep 30 1994 plntscap.txt -r--r--r-- 1 1017 1017 125648 Oct 13 1995 springeq.jpg -r--r--r-- 1 1017 1017 1129 Oct 13 1995 springeq.txt -r--r--r-- 1 1017 1017 239594 Sep 30 1994 studying.jpg -r--r--r-- 1 1017 1017 244179 Oct 13 1995 subrace.jpg -r--r--r-- 1 1017 1017 2681 Oct 13 1995 subrace.txt -r--r--r-- 1 1017 1017 191332 Sep 30 1994 sundae.gif -r--r--r-- 1 1017 1017 162140 Sep 30 1994 woild2.gif pub/povray/Official-3.0 -r--r--r-- 1 povray vuser 80 Jul 20 01:47 .message drwxr-xr-x 2 povray vuser 512 Dec 16 03:53 Amiga dr-xr-xr-x 2 povray vuser 512 Aug 24 10:31 Docs lr-xr-xr-x 1 povray vuser 11 Aug 24 11:14 HEADER -> ../.message dr-xr-xr-x 2 povray vuser 512 Aug 24 10:31 Linux dr-xr-xr-x 2 povray vuser 512 Aug 24 10:31 MS-Dos dr-xr-xr-x 2 povray vuser 512 Aug 24 10:36 Macintosh -r--r--r-- 1 povray vuser 83 Jul 20 01:48 README -r--r--r-- 1 povray vuser 222 Feb 6 1997 README.HTML-DOCS dr-xr-xr-x 2 povray vuser 512 Aug 24 10:31 SunOS dr-xr-xr-x 2 povray vuser 512 Aug 24 10:32 Unix dr-xr-xr-x 3 povray vuser 512 Aug 24 10:32 Windows -r--r--r-- 1 povray vuser 15055 Jul 19 1996 gamma.gif -r--r--r-- 1 povray vuser 1776 Jul 19 1996 gamma.gif.txt -r--r--r-- 1 povray vuser 3735 Feb 6 1997 news.3.01.txt -r--r--r-- 1 povray vuser 18452 Feb 5 1997 povlegal.doc -r--r--r-- 1 povray vuser 24060 Feb 1 1997 povwhere.get -r--r--r-- 1 povray vuser 110 Aug 24 11:01 www.html pub/povray/Official-3.0/Docs -r--r--r-- 1 1017 1017 413 Feb 7 1997 README -r--r--r-- 1 1017 1017 286517 Feb 7 1997 povdoc.zip -r--r--r-- 1 1017 1017 764628 Feb 7 1997 povdocps.zip -r--r--r-- 1 1017 1017 1601733 Feb 7 1997 povhtml.zip -r--r--r-- 1 1017 1017 18452 Feb 7 1997 povlegal.doc -r--r--r-- 1 1017 1017 24060 Feb 2 1997 povwhere.get pub/povray/Official-3.0/Linux * * * * * -r--r--r-- 1 povray vuser 786 Jul 20 01:41 00_index.txt -r--r--r-- 1 povray vuser 442 Jul 20 01:42 README -r--r--r-- 1 povray vuser 1506794 Feb 2 1997 povdoc.html.tgz -r--r--r-- 1 povray vuser 908752 Aug 1 1996 povdoc.ps.gz -r--r--r-- 1 povray vuser 1678592 Jul 18 13:02 povlinux.tgz |
Linux users will be specially interested in two directories: 'pub/povray/Official-3.0/Linux' and 'pub/povray/Hall-Of-Fame' In latter we will find what we can not find in the great Povray handbook: Examples.
The Povray handbook is really good but an image is better than thousand words. First the handbook is not illustrated in the proper way. And second in the other directory we can find several images that are an ideal complement for the handbook. I'm not saying that the handbook hasn't got enough examples, on the contrary it shows many. Every example explains a concept, and it is all right to acquire technical knowledge. Some handbook's examples are very beautiful, but 'Hall-Of-Fame' contains a selection of the best images ever created: a real Computer Science gallery of images. Every picture has attached a text explaining the tools and techniques used to obtain the incredible result.
We have to be aware that many of the tools mentioned (in the handbook) as modellers, filters, etc. as a general rule are not available for Linux yet.
We advise to download ftp.povray.org/pub/povray/Official-3.0/Linux and also ftp.povray.org/pub/povray/Hall-Of-Fame not only to enjoy the pictures, but as an important starting point for your design.
We will describe how to execute a typical installation (it should
work in every Linux version, but it has been only completely tested
with Debian).
# mkdir
/usr/local/sbin # mkdir /usr/local/apli # mkdir /usr/local/apli/povray # cp "/incoming/pub/povray/Official-3.0/Linux" /usr/local/povray # cd /usr/local/povray # tar -xzf povlinux.tgz # tar -xzf povdoc.html.tgz # cd /usr/local/sbin # ln -s /usr/local/apli/povray/povray3/x-povray x-povray # ln -s /usr/local/apli/povray/povray3/s-povray s-povray |
Instead of explaining questions that are very well detailed in the handbook (Quick start), we will consider a generic configuration that will allow Linux users to use Povray in an easy, comfortable and immediate way.
Povray can display in SVGA mode but this is a card-dependent issue. We will consider that you have an installation with Xwindows and you are using 'xv' to display images.
The Linux configuration in the newer versions of povray can be simplified. It is possible to use environment variables, but it is more practical to create a config file *.ini with all you need.
There are several *.ini sample files for general purposes. This provides several possibilities to set up the configuration. It is possible to refer to our default configuration file in a environment file, or to use variables to locate the default include library, etc.. It also could be a good idea to pass as arguments a number of options, but we pass almost everything in a configuration file (*.ini) that at the same time we will specify as an argument on the command line. If you do not like this method, check out the handbook and you will see that there are several options to obtain the same result, however it is not a question for an introductory article to detail each option, but only the most useful.
There is also a shell script for generating the images corresponding to all the examples 'allscene.sh'.
Maybe instead of generating all the scenes with a low resolution, you would like to choose one and render it with the highest resolution.
In this case, go to the example directory and execute povray using the following 'ini' file:
-------------------------8<------------(ini.ini)---------------- Width=640 Height=480 Quality=8 Library_Path=/usr/local/apli/povray/povray3/include Output_to_File=on Output_File_Type=t Output_File_Name=out.tga verbose=on -------------------------8<--------------------------------------The first two lines will determine the resolution of the final image.
$ s-povray ini.ini +i source.pov
The file 'source.pov' is the name of the file that we would like to process, obtaining an image 'out.tga' that we can display with, for example, 'xv out.tga'.
------------------------8<----------------------------------- #!/bin/bash ##################################################################### # Autor: Antonio Castro Snurmacher (1.998) # # pov (ver 1.0) # # Esta versión esta dedicada a su inclusión en la # revista LinuxFocus (freeware) # # Este programa puede ser utilizado, distribuido, y modificado # libremente pero siempre se deberá respetar la propiedad # intelectual de su autor. Esta cabecera debe ser conservada # tal cual en todas las modificaciones. # # En caso de traducción deberá conservarse el texto original de # esta cabecera y añadirse la traducción a continuación de ella. # # El autor renuncia a todo tipo de beneficio económico y no se hace # responsable de los posibles perjuicios derivados del uso del mismo. # # E-mail ([email protected]) # ##################################################################### # Author: Antonio Castro Snurmacher (1.998) # # pov (ver 1.0) # # This version has been written to be included in # the LinuxFocus magazine (freeware) # # This program can be used, distributed, and modified # freely but always has to respect the intellectual # property of the author. This header should be kept # untouched in every modification. # # In case of translation the text of this header should be kept # and the translation will be added after it. # # The author renounces to any kind of economic benefit # and he is not responsible for any damage derived from # the use of this script. # # E-mail ([email protected]) # ##################################################################### usage(){ echo "Usage: pov (project) (size=0..6) (quality=1..11)" echo echo "0) 40x30 (STD/20) No backup" echo "1) 80x60 (STD/10) No backup" echo "2) 100x75 (STD/8) No backup" echo "3) 200x150 (STD/4)" echo "4) 266x200 (STD/3)" echo "5) 320x200 *" echo "6) 400x300 (STD/2)" echo "7) 640x480 *" echo "8) 800x600 * (STD)" echo "9) 1024x768 *" echo echo "The projects should be located in the directory pointed by" echo "${HOMEPOV} and will use the same name for it and for" echo "the main source file *.pov" echo "(STD) is the standard resolution chosen." echo exit 1 } newversion(){ mv ${PREFIX}.pov.8.gz ${PREFIX}.pov.9.gz 2> /dev/null mv ${PREFIX}.pov.7.gz ${PREFIX}.pov.8.gz 2> /dev/null mv ${PREFIX}.pov.6.gz ${PREFIX}.pov.7.gz 2> /dev/null mv ${PREFIX}.pov.5.gz ${PREFIX}.pov.6.gz 2> /dev/null mv ${PREFIX}.pov.4.gz ${PREFIX}.pov.5.gz 2> /dev/null mv ${PREFIX}.pov.3 ${PREFIX}.pov.4 2> /dev/null mv ${PREFIX}.pov.2 ${PREFIX}.pov.3 2> /dev/null mv ${PREFIX}.pov.1 ${PREFIX}.pov.2 2> /dev/null cp ${PREFIX}.pov ${PREFIX}.pov.1 gzip ${PREFIX}.pov.4 2> /dev/null } ################################################# size(){ export SAVE="yes" case $1 in 0) Width=40 ; Height=30; SAVE="no" ;; 1) Width=80 ; Height=60 SAVE="no" ;; 2) Width=100; Height=75 SAVE="no" ;; 3) Width=200; Height=150;; 4) Width=266; Height=200;; 5) Width=320; Height=200;; 6) Width=400 ;Height=300;; 7) Width=640 ;Height=480;; 8) Width=800 ;Height=600;; 9) Width=1024;Height=768;; *) usage esac } quality(){ case $1 in 1) ;; 2) ;; 3) ;; 4) ;; 5) ;; 6) ;; 7) ;; 8) ;; 9) ;; 10) ;; 11) ;; *) usage esac export Quality=$1 } ####################### main #################### export HOMEPOV=`pwd` export PROYECT=$1 export PREFIX=${HOMEPOV}/${PROYECT} if [ $# != 3 ] then usage fi # This should point to the installation directory # of povray. Change it if needed: export POVRAY=/usr/local/apli/povray/povray3 size $2 quality $3 if [ $SAVE = "yes" ] then newversion fi cat <<-FIN > ${PREFIX}.ini Width=$Width Height=$Height Quality=$Quality Library_Path=${POVRAY}/include Input_File_Name=${PREFIX}.pov Output_to_File=on Output_File_Type=t Output_File_Name=${PREFIX}.tga verbose=on Post_Scene_Command=xv ${PREFIX}.tga FIN # Output_File_Type=t ## Others height performace options ## # Antialias_Depth=3 # Antialias=On # Antialias_Threshold=0.1 # Jitter_Amount=0.5 # Jitter=On # Low priority, maybe I want to do other things. nice -20 x-povray ${PREFIX}.ini if [ $SAVE != "yes" ] then echo "Warning !! There is no backup of this version." fi ------------------------8<-----------------------------------When we are designing, we often have to test ideas many times, and we get closer to our ideal step by step.
To simplify the execution we are going to implement a shell-script that generates a *.ini file, executes Povray tracer and after that displays the result. We assume that we are working in the directory $HOMEPOV (set to pwd=current directory in the pov script) and that the name of the main file is (project name.pov)
This script generates *.ini-files that usually are enough for most situations. It is oriented to a specific way of working, but if you prefer another, it is easy to change.
This utility backups the last changes on the source files because very often we would like to revert to a previous version; after making many changes looking for different results, often we decide to go back to a previous design path. As we mentioned above, the creative process looks like brush painting, we decide step by step how to continue.
If we execute the script with the lowest resolutions, it generates no backup copy nor new version number: low resolution is an uniteresting test. With this kind of tests, you can just get an idea on the relative positions of the objects. This is a personal way of working, very easy. If your are not familiar with Povray it will be a good starting methodology. Maybe later you would like to adapt this tool to your particular necessities.
Some of the available resolutions are the same as the standards modes of some video resolutions. Others are fractions of the 800x600 resolution. Type in 'pov' without arguments to ge a short help menu.
Create an appropriate directory structure to work with it within your $HOME directory and you will see how easy is to work from the first day. We will base our exercises in the use of this tool. However it is not necessary to use it, it will more comfortable for you.
We will begin with a simple example to check that everything works:
------------------------8<----------------------------------- #include "colors.inc" #include "textures.inc" #include "glass.inc" // Author: Antonio Castro // The camera will look towards the contact point // of both spheres camera { location <0, 15, 35> look_at <0, 10, 0> } // Source of white light object { light_source { <20, 100, 50> color White } } // Sky with white clouds object { sphere { <0, 0, 0> 200000} // Great vault of heaven // We strecht the clouds texture { pigment {Blue_Sky} scale <50000, 6000, 50000>} } // Golden ball sphere { <-10, 10, 0> 10 texture { Gold_Metal } } // Mirror ball sphere { <10, 10, 0> 10 texture { finish {Mirror }} } // Glass ball sphere { <0, 5, 10> 5 texture { T_Glass1 } } // Floor // It is made with a great sphere that touches the center <0,0,0> // but it could be implemented with a plane. sphere {<0, -1000000, 0> 1000000 // Checker texture pigment {checker color Red color Yellow scale 2 } } ------------------------8<-----------------------------------Copy it in $HOME/pov1/sample1.pov
$ ./pov sample1 4 9
You should launch 'xv' to display it. When you plan to implement your own scenes, we recommend to open another 'xterm' window with the text verion of the handbook in the 'vi' for example, in read only mode to search in a fast way the keywords of the language, consulting its syntax, and some example of its use.
Webpages maintained by the LinuxFocus Editor team
© Antonio Castro, FDL LinuxFocus.org |
Translation information:
|
2002-11-02, generated by lfparser version 2.34