Sie sind auf Seite 1von 147

Persistence of Vision Ray-Tracer

(POV-Ray)
Documentacin del usuario 3.0
1. INTRODUCCIN ................................................................................................ 9
1.1. Notacin ....................................................................................................................................................... 9
2. DESCRIPCIN DEL PROGRAMA ................................................................... 11
2.1. Qu es el trazado de rayos? ................................................................................................................... 11
2.2. Qu es pov-ray? ...................................................................................................................................... 11
2.3. Qu versin de pov-ray debo usar? ....................................................................................................... 12
2.3.1. IBM-Pc y compatibles......................................................................................................................... 12
2.3.1.1. MS-Dos ........................................................................................................................................ 12
2.3.1.2. Windows ...................................................................................................................................... 13
2.3.1.3. Linux ............................................................................................................................................ 14
2.3.2. Apple Macintosh ................................................................................................................................. 14
2.3.3. Commodore Amiga ............................................................................................................................. 15
2.3.4. SunOS ................................................................................................................................................. 16
2.3.5. Unix genrico ...................................................................................................................................... 17
2.3.6. Todas las versiones ............................................................................................................................. 17
2.3.7. Compilando POV-Ray ........................................................................................................................ 17
2.3.7.1. Estructura de directorios .............................................................................................................. 18
2.3.7.2. Configurando el fuente de POV-Ray ........................................................................................... 19
2.3.7.3. Conclusin ................................................................................................................................... 20
2.4. Donde encontrar POV-Ray...................................................................................................................... 20
2.4.1. Foro de POV-Ray en Compuserve ...................................................................................................... 20
2.4.2. Internet ................................................................................................................................................ 20
2.4.3. Area de grficos para PC en Amrica On-Line ................................................................................... 20
2.4.4. BBS The Graphics Alternative en El Cerrito, CA ............................................................................... 20
2.4.5. PCGNet ............................................................................................................................................... 21
2.4.6. Libros y cd-roms relacionados con POV-Ray ..................................................................................... 22
3. COMIENZO RPIDO ........................................................................................ 24
3.1. Instalando POV-Ray ................................................................................................................................ 24
3.2. Utilizacin bsica ...................................................................................................................................... 25
4. TUTORIAL PARA PRINCIPIANTES ................................................................ 27
4.1. Tu primera imagen ................................................................................................................................... 27
4.1.1. El sistema de coordenadas de POV-Ray ............................................................................................. 27
4.1.2. Aadiendo archivos de inclusin estndar. ......................................................................................... 28
4.1.3. Aadiendo la cmara. .......................................................................................................................... 29
4.1.4. Describiendo un objeto. ...................................................................................................................... 29
4.1.5. Aadiendo la textura al objeto. ........................................................................................................... 29
4.1.6. Definiendo una fuente de luz. ............................................................................................................. 30
4.2. Usando la cmara ..................................................................................................................................... 31
4.2.1. Usando el desenfoque ......................................................................................................................... 31
4.3. Formas simples ......................................................................................................................................... 32
4.3.1. Caja ..................................................................................................................................................... 32
4.3.2. Cono .................................................................................................................................................... 33
4.3.3. Cilindro ............................................................................................................................................... 33
4.3.4. Plano ................................................................................................................................................... 33
4.3.5. Inclusin de objetos estndar .............................................................................................................. 34
4.4. Formas avanzadas .................................................................................................................................... 34
4.4.1. Parche bicbico ................................................................................................................................... 34
4.4.2. Burbuja ................................................................................................................................................ 34
4.4.2.1. Tipos de componentes y otras caractersticas nuevas. ................................................................. 36
4.4.2.2. Construcciones complejas con burbujas e intensidad negativa. ................................................... 37
4.4.3. Campo de alturas ................................................................................................................................. 39
4.4.4. Objeto torneado (lathe) ....................................................................................................................... 41
4.4.4.1. Entendiendo el concepto de splines ............................................................................................. 42
4.4.5. Malla de tringulos .............................................................................................................................. 46
4.4.6. Polgono .............................................................................................................................................. 47
4.4.7. Prisma ................................................................................................................................................. 50
4.4.7.1. Nuevos trucos para las curvas spline ........................................................................................... 51
4.4.7.2. Transiciones suaves ..................................................................................................................... 52
4.4.7.3. Mltiples subformas .................................................................................................................... 52
4.4.7.4. Barrido cnico y el efecto de estrechamiento .............................................................................. 53
4.4.8. Elipsoide supercudrico ...................................................................................................................... 56
4.4.9. Superficie de revolucin ..................................................................................................................... 60
4.4.10. Texto ................................................................................................................................................. 61
4.4.11. Toro ................................................................................................................................................... 64
4.5. Objetos CSG (Geometra Slida Constructiva) ..................................................................................... 69
4.5.1. Qu es CSG? ..................................................................................................................................... 69
4.5.2. Unin................................................................................................................................................... 69
4.5.3. Interseccin ......................................................................................................................................... 70
4.5.4. Diferencia ............................................................................................................................................ 71
4.5.5. Fusin .................................................................................................................................................. 73
4.5.6. Observaciones sobre los objetos CSG ................................................................................................. 73
4.5.6.1. Coincidencia de superficies ......................................................................................................... 73
4.6. Las fuentes de luz...................................................................................................................................... 74
4.6.1. La fuente de luz ambiente. ................................................................................................................. 74
4.6.2. La fuente de luz puntual. ..................................................................................................................... 74
4.6.3. La fuente de luz cnica (focos). .......................................................................................................... 75
4.6.4. La fuente de luz cilndrica. .................................................................................................................. 76
4.6.5. La fuente de luz extendida. ................................................................................................................. 76
4.6.6. Asignando un objeto a una fuente de luz. ........................................................................................... 78
4.6.7. Fuentes de luz especiales. ................................................................................................................... 79
4.6.7.1. Empleando luces sin sombra. ....................................................................................................... 79
4.6.7.2. Usando atenuacin de la luz. ....................................................................................................... 79
4.6.7.3. Las fuentes de luz y la atmsfera. ................................................................................................ 80
4.7. Opciones de textura simples .................................................................................................................... 80
4.7.1. Acabado de superficies. ...................................................................................................................... 81
4.7.2. Aadiendo abolladuras. ....................................................................................................................... 81
4.7.3. Creando patrones de colores. .............................................................................................................. 81
4.7.4. Texturas predefinidas. ......................................................................................................................... 82
4.8. Opciones avanzadas de texturas .............................................................................................................. 82
4.8.1. Patrones de pigmentacin y de normal................................................................................................ 83
4.8.2. Pigmentos ............................................................................................................................................ 83
4.8.2.1. Usando pigmentos con lista de colores ........................................................................................ 83
4.8.2.2. Usando pigmentos y patrones ...................................................................................................... 84
4.8.2.3. Usando modificadores de patrones .............................................................................................. 84
4.8.2.4. Usando pigmentos transparentes y texturas superpuestas ............................................................ 85
4.8.2.5. Usando mapas de pigmentos ........................................................................................................ 86
4.8.3. Normales ............................................................................................................................................. 87
4.8.3.1. Usando modificadores de normal bsicos .................................................................................... 88
4.8.3.2. Combinando normales ................................................................................................................. 88
4.8.4. Acabados ............................................................................................................................................. 90
4.8.4.1. Usando ambient ........................................................................................................................... 90
4.8.4.2. Usando los reflejos de superficie ................................................................................................. 91
4.8.4.3. Usando reflection y metallic ........................................................................................................ 92
4.8.4.4. Usando refraction ......................................................................................................................... 93
4.8.4.5. Aadiendo la atenuacin luminosa .............................................................................................. 93
4.8.4.6. Usando custicas simuladas ......................................................................................................... 94
4.8.4.7. Usando la iridiscencia .................................................................................................................. 97
4.8.5. Halos ................................................................................................................................................... 98
4.8.5.1. Qu son los halos?...................................................................................................................... 98
4.8.5.2. El halo emisor .............................................................................................................................. 99
4.8.5.3. El halo brillante .......................................................................................................................... 107
4.8.5.4. El halo atenuante ........................................................................................................................ 107
4.8.5.5. El halo de polvo ......................................................................................................................... 111
4.8.5.6. Dificultades de los halos ............................................................................................................ 116
4.9. Trabajar con texturas especiales ........................................................................................................... 119
4.9.1. Trabajar con mapas de pigmentos ..................................................................................................... 119
4.9.2. Trabajar con mapas de normales ....................................................................................................... 120
4.9.3. Trabajar con mapas de textura .......................................................................................................... 120
4.9.4. Trabajar con listas de texturas ........................................................................................................... 121
4.9.5. Y las baldosas? ................................................................................................................................ 122
4.9.6. Funcin promedio ............................................................................................................................. 122
4.9.7. Trabajar con texturas superpuestas ................................................................................................... 123
4.9.7.1. Declarar texturas superpuestas ................................................................................................... 125
4.9.7.2. Otro ejemplo de texturas superpuestas....................................................................................... 125
4.9.8. Cuando todo falla: mapas de materiales ............................................................................................ 128
4.9.9. Limitaciones de las texturas especiales ............................................................................................. 130
4.10. Usando los efectos atmosfricos ........................................................................................................... 131
4.10.1. Background ..................................................................................................................................... 131
4.10.2. La esfera celeste .............................................................................................................................. 131
4.10.2.1. Creando el cielo con un gradiente de colores........................................................................... 131
4.10.2.2. Aadiendo el sol ...................................................................................................................... 133
4.10.2.3. Aadiendo algunas nubes ........................................................................................................ 134
4.10.3. La niebla .......................................................................................................................................... 135
4.10.3.1. La niebla constante .................................................................................................................. 136
4.10.3.2. Especificando un mnimo de translucidez ............................................................................... 137
4.10.3.3. Creando niebla filtrante ........................................................................................................... 138
4.10.3.4. Aadiendo algo de turbulencia a la niebla ............................................................................... 138
4.10.3.5. Usando la niebla de superficie ................................................................................................. 139
4.10.3.6. Usando mltiples capas de niebla ............................................................................................ 140
4.10.3.7. La niebla y los objetos vacos .................................................................................................. 141
4.10.4. La atmsfera .................................................................................................................................... 141
4.10.4.1. Empezando con una habitacin vaca ...................................................................................... 141
4.10.4.2. Aadiendo polvo a la habitacin .............................................................................................. 143
4.10.4.3. Eligiendo una buena tasa de muestreo ..................................................................................... 144
4.10.4.4. Usando una atmsfera coloreada ............................................................................................. 145
4.10.4.5. Consejos usando la atmsfera .................................................................................................. 145

PERSISTENCE OF VISION RAYTRACER 9
1. Introduccin
Este documento detalla el uso del Trazador de Rayos Persistence of Vision, (POV-Ray). Se
compone de cuatro partes: la gua de instalacin, el tutorial, la gua de referencia y los apndices. La
primera parte (ver secciones "Descripcin del Programa" y "Comienzo Rpido") cuenta como obtener
y como instalar POV-Ray. Tambin da una breve introduccin al trazado de rayos. El tutorial explica
paso a paso como usar las diferentes caractersticas de POV-Ray (ver seccin "Tutorial para
Principiantes"). La referencia da una completa descripcin de todas las caractersticas de POV-Ray
explicando todas las opciones disponibles (activadas por parmetros de la lnea de comandos o por
sentencias en archivos INI) y del lenguaje de descripcin de escena (ver seccin "Referencia de POV-
Ray", seccin "Opciones de POV-Ray" y seccin "Lenguaje de descripcin de escena"). Los apndices
incluyen trucos y pistas, lecturas sugeridas, direcciones de contacto e informacin legal.
POV-Ray est basado en DKBTrace 2.12, de David K. Buck y Aaron A. Collins.
1.1. Notacin
A lo largo de este documento se seguir la siguiente notacin para denotar palabras clave del lenguaje
de descripcin de escena, parmetros de la lnea de comandos, palabras clave de archivos INI y
nombres de archivos.
nombre palabra clave del lenguaje de descripcin de escena
nombre opcin de la lnea de comando
nombre palabra clave de archivo INI
NOMBRE nombre de archivo
nombre direccin de Internet, grupo de noticias Usenet
En la versin ASCII del documento no hay diferencias entre las notaciones.
PERSISTENCE OF VISION RAYTRACER 11
2. Descripcin del programa
El trazador de rayos Persistence of Vision Raytracer crea imgenes tridimensionales fotorrealistas
usando una tcnica llamada trazado de rayos. Lee un archivo de texto conteniendo informacin que
describe objetos e iluminacin en una escena y genera una imagen de esa escena desde el punto de vista
de una cmara, tambin descrita en el archivo de escena. El trazado de rayos no es de ninguna manera
un proceso rpido, pero produce imgenes de muy alta calidad con reflexiones realistas, sombreado,
perspectiva y otros efectos.
2.1. Qu es el trazado de rayos?
El trazado de rayos es una tcnica que calcula una imagen de una escena disparando rayos a la escena.
La escena est construida por formas, fuentes de luz, una cmara, materiales, efectos especiales, etc.
Para cada pixel en la imagen final se disparan uno o ms rayos en la escena y se comprueba la
interseccin con cada uno de los objetos de la escena. Los rayos se originan en el observador,
representado por la cmara, y pasan a travs de la ventana de visin (que representa la imagen final).
Cada vez que el rayo golpea a un objeto, se calcula el color de la superficie en ese punto. Para ello se
determina la cantidad de luz que proviene de cada fuente luminosa para ver si el objeto permanece en la
sombra o no. Si la superficie es reflectora o traslcida se trazan nuevos rayos para determinar la
contribucin de la luz reflejada o refractada en el color final de la superficie.
Los efectos especiales como la luz difusa (radiosidad), efectos atmosfricos y luces extendidas hacen
necesario el trazado de muchos rayos adicionales por cada pixel de la escena.
2.2. Qu es pov-ray?
El Trazador de Rayos Persistence of Vision fue desarrollado a partir de DBKTrace 2.12 (escrito por
David K. Buck y Aaron A. Collins) por un puado de gente, llamado el POV-Team, en su tiempo
libre. El cuartel general del POV-Team est en el foro POVRAY de CompuServe (ver "Foro POVRAY
en CompuServe" para ms detalles).
El paquete POV-Ray incluye instrucciones detalladas para usar el trazador y crear escenas. Se han
incluido muchas escenas asombrosas con POV-Ray para que puedas empezar a crear imgenes
inmediatamente. Estas escenas pueden ser modificadas para que no tengas que empezar desde cero.
Adems de las escenas predefinidas, tambin se suministra una gran biblioteca de formas predefinidas y
de materiales. Puedes incluir estas formas y materiales en tus propias escenas simplemente incluyendo el
nombre de la forma o material y el nombre del archivo fuente correspondiente.
He aqu algunas caractersticas de POV-Ray:
Lenguaje de descripcin de escena fcil de usar
Gran biblioteca de archivos de escenas asombrosas
Archivos de inclusin estndar que predefinen muchas formas, colores y texturas
Archivos de imagen de muy alta calidad (hasta 48 bits de color)
Visualizacin en IBM-PCs de 15 y 24 bits, usando el hardware apropiado
Crea paisajes usando suaves campos elevados
Fuentes luminosas dirigidas, cilndricas y extendidas para iluminacin sofisticada
Reflejos phong y especulares para conseguir superficies ms realistas
2. DESCRIPCIN DEL PROGRAMA 12
Reflexin difusa (radiosidad) para conseguir iluminacin realista
Efectos atmosfricos como atmsfera, niebla y arco iris
Halos para modelar efectos como nubes, polvo, fuego y vapor
Varios formatos de imagen, incluyendo Targa, PNG y PPM
Primitivas para figuras bsicas, como esferas, cajas, cudricas, cilindros, conos, tringulos y
planos
Primitivas para figuras avanzadas, como toros (donuts), parches de Bezier, campos elevados
(montaas), burbujas, curticas, tringulos suavizados, texto, fractales, supercudricas, superficies
de revolucin, prismas, polgonos y tornos (lathes)
Las figuras se pueden combinar fcilmente para crear nuevas figuras complicadas usando
Geometra Constructiva Slida (CSG). POV-Ray soporta uniones, mezclas, intersecciones y
diferencias
A los objetos se les asignas materiales llamados texturas (una textura describe el color y las
propiedades de la superficie de una figura)
Distribuciones de color y de normales incluidas: Agate, Bozo, Bumps, Checker, Crakle, Dents,
Granite, Gradient, Hexagon, Leopard, Mandel, Marble, Onion, Quilted, Ripples, Spotted, Spiral,
Radial, Waves, Wood, Wrinkles y mapeado segn archivo de imagen
Los usuarios pueden crear sus nuevas texturas o usar las predefinidas, como latn, cromado,
cobre, oro, plata, piedra, madera...
Combinar texturas usando capas de texturas semitransparentes
Previsualizar la imagen mientras la crea (no disponible en todas las plataformas)
Parar el trazado de una escena y continuarlo posteriormente
2.3. Qu versin de pov-ray debo usar?
POV-Ray puede usarse bajo MS-DOS, Windows 3.x, Windows para Trabajo en Grupo 3.11, Windows
95, Windows NT, Apple Macintosh 68k, Power PC, Commodore Amiga, Linux, UNIX y otras
plataformas.
Las ultimas versiones de los archivos necesarios estn disponibles en CompuServe, Internet, Amrica
On-line y varios BBS. Vea la seccin "Donde Encontrar los archivos de POV-Ray" para obtener ms
informacin.
2.3.1. IBM-Pc y compatibles
Normalmente hay tres versiones diferentes para IBM-PC funcionando bajo diversos sistemas
operativos (MS-DOS, Windows y Linux) como se describe ms adelante.
2.3.1.1. MS-Dos
La versin para MS-DOS corre bajo MS-DOS o como una aplicacin DOS bajo Windows 95,
Windows NT, Windows 3,1 o Windows para Trabajo en Grupo 3.11. Tambin corre bajo OS/2 y
OS/2 WARP.
Requerimientos de hardware y software:
CPU 386 o superior y por lo menos 4 Mb de RAM.
Aproximadamente 6 Mb de espacio en el disco duro para la instalacin y de 2 a 10 Mb o ms
como espacio de trabajo.
PERSISTENCE OF VISION RAYTRACER 13
Un editor de texto capaz de editar archivos de texto en formato ASCII. El programa EDIT que
viene con MS-DOS trabajar para archivos de tamao moderado.
Un visor de archivos grficos capaz de visualizar archivos en formato GIF y quizs TGA y
PNG.
Archivos de POV-Ray Requeridos:
POVMSDOS.EXE: un archivo auto-extraible contiendo el programa, ejemplos de escenas, los
archivos .INC estndar y la documentacin en un formato de ayuda de hipertexto con un visor
de ayuda. Este archivo puede estar dividido en archivos ms pequeos para facilitar la descarga
del mismo. Chequee el directorio de su sitio de ftp para ver si requieren otros archivos.
Recomendado:
Pentium o 486DX, o tambin 386 o 486SX con co-procesador matemtico .
8 Mb o ms de RAM.
Monitor SVGA, preferiblemente con interface VESA y capacidad de usar los modos Hi color
(color de 16 bits ) o True color (color de 24 bits).
Optativo: el cdigo fuente no es necesario para usar POV-Ray. Se proporciona para curiosos y
aventureros.
POVMSD_S.ZIP: El cdigo fuente en C de POV-Ray para MS-DOS. Contiene partes genricas y
partes especficas MS-DOS. No incluye ejemplos de escenas, Archivos .INC estndar ni la
documentacin, por lo que debers obtener tambin el archivo ejecutable.
Un compilador de C qu pueda crear aplicaciones de 32-bit en modo protegido. Soportamos
Watcom 10.5a, Borland 4.52 con DOS Power Pack y grficos limitados bajo DJGPP 1.12maint4.
No soportamos DJGPP 2.0.
2.3.1.2. Windows
La versin para Windows corre bajo Windows 95, Windows NT y bajo Windows 3.1 o 3.11 si se
agregan las extensiones Win32s. Tambin corre bajo OS/2 WARP.
Requerimientos de hardware y software:
CPU 386 o superior y por lo menos 8 Mb de RAM.
Aproximadamente 12 Mb de espacio en el disco duro para la instalacin y de 2 a 10 Mb o ms
como espacio de trabajo.
Archivos de POV-Ray requeridos:
El archivo de usuario POVWIN3.EXE, un archivo autoextraible contiendo el programa, ejemplos de
escenas, los archivos .INC estndar y la documentacin en un formato de ayuda de Windows.
Puede estar dividido en archivos ms pequeos para facilitar la descarga del mismo. Verifique el
directorio de su sitio de ftp para ver si se requieren otros archivos.
Recomendado:
Pentium o 486DX, o tambin 386 o 486SX con co-procesador matemtico .
16 Mb o ms de RAM.
Monitor SVGA, preferiblemente con capacidad de usar los modos Hi color (color de 16 bits ) o
True color (color de 24 bits).
Optativo: el cdigo fuente no es necesario para usar POV-Ray. Se proporciona para curiosos y
aventureros.
2. DESCRIPCIN DEL PROGRAMA 14
POVWIN_S.ZIP: el cdigo fuente en C de POV-Ray para Windows Contiene partes genricas y
partes especficas Windows. No incluye ejemplos de escenas, archivos .INC estndar ni la
documentacin, por lo que tambin debers obtener el archivo ejecutable.
POV-Ray solo puede ser compilado usando compiladores qu puedan crear aplicaciones de 32
bits para Windows. Soportamos los compiladores Watcom 10.5a, Borland 4.52/5.0. El cdigo
fuente no es necesario para usar POV-Ray, se proporciona slo para los curiosos y aventureros.
2.3.1.3. Linux
Requerimientos de hardware y software:
CPU 386 o superior y por lo menos 4 Mb de RAM.
Aproximadamente 6 Mb de espacio en el disco duro para la instalacin y 2-10 Mb o ms como
espacio de trabajo.
Un editor de texto capaz de editar archivos de texto en formato ASCII.
Cualquier versin reciente (1994 en adelante)del kernel de Linux y soporte para formatos
binarios ELF. POV-Ray para Linux no esta en formato a.out.
Bibliotecas ELF libc.so.5, libm.so.5 y uno o ambos de libX11.so.6 o libvga.so.1.
Archivos de POV-Ray requeridos:
POVLINUX.TGZ o POVLINUX.TAR.GZ, un archivo que contiene el binario oficial para cada uno de los
modos SVGALib y X-Windows. Tambin contiene ejemplos de escenas, los archivos .INC
estndar y la documentacin.
Recomendado:
Pentium o 486dx o tambin 386 o 486sx con co-procesador matemtico.
8 Mb o ms RAM.
Monitor SVGA preferiblemente con capacidad de usar los modos Hi color (color de 16 bits ) o
True color (color de 24 bits).
Si quieres previsualizacin, requerir o SVGALib o X-Windows.
Un visor de archivos grficos capaz de visualizar archivos en formato PPM, TGA o PNG.
Optativo: el cdigo fuente no es necesario para usar POV-Ray. Se proporciona para curiosos y
aventureros.
POVUNI_S.TAR.GZ o POVUNI_S.TGZ, el cdigo fuente en C de POV-Ray para Linux. Contiene
partes genricas y partes especficas Linux . No incluye ejemplos de escenas, archivos .INC
estndar ni la documentacin, por lo cual tambin debes obtener el archivo ejecutable.
El compilador GNU C y (opcionalmente) archivos de inclusin y bibliotecas X y conocimiento
de como usarlo. Aunque proporcionamos el cdigo fuente genrico para sistemas Unix, no
proporcionamos apoyo tcnico sobre cmo compilar el programa.
2.3.2. Apple Macintosh
Las versiones para Macintosh corren bajo el sistema operativo Apple's MacOS versin 7.0 o superior,
en cualquier Macintosh basado en 68020/030/040 (con o sin un coprocesador de punto flotante) o en
cualquier ordenador Power Macintosh.
Requerimientos de hardware y software:
PERSISTENCE OF VISION RAYTRACER 15
Una CPU 68020 o superior sin una unidad del punto flotante (serie LC, Performa o Centris) y
por lo menos 8 Mb de RAM, o
Una CPU 68020 o superior con una unidad de punto flotante (series Mac II o Quadra) y por lo
menos 8 Mb de RAM, o
Cualquier ordenador Power Macintosh y por lo menos 8 Mb de RAM.
System 7 o ms nuevo y color QuickDraw (el System 6 ya no es soportado).
Aproximadamente 6 Mb de espacio libre en el disco para la instalacin y de 2 a 10 Mb de espacio
libre adicional como espacio de trabajo.
Una utilidad para visualizar archivos grficos que soporte los formatos Mac PICT, GIF y quizs
TGA y PNG (las aplicaciones shareware GIFConverter o GraphicConverter son buenas.)
Archivos de POV-Ray requeridos:
POVMACNF.SIT o POVMACNF.SIT.HQX, un archivo stuffit conteniendo la aplicacin para Macintosh
no-FPU 68K, ejemplos de escenas, los archivos .INC estndar y documentacin (versin ms
lenta para Macs sin unidad de punto flotante), o
POVMAC68.SIT o POVMAC68.SIT.HQX, un archivo stuffit conteniendo la aplicacin para Macintosh
FPU 68K, ejemplos de escenas, los archivos .INC estndar y documentacin (versin ms rpida
para Macs con unidad de punto flotante), o
POVPMAC.SIT o POVPMAC.SIT.HQX, un archivo stuffit conteniendo la aplicacin nativa del Power
Macintosh, ejemplos de escenas, los archivos .INC estndar y documentacin.
Recomendado:
68030/33 o ms rpido con unidad de punto flotante, o cualquier Power Macintosh.
8 Mb o ms de RAM para Macintosh 68K, 16 Mb o ms para sistemas Power Macintosh.
Monitor preferentemente en color: de 256 colores esta bien, pero de miles o millones de colores
est incluso mejor.
Optativo: el cdigo fuente no es necesario para usar POV-Ray. Se proporciona para curiosos y
aventureros. POV-Ray se puede compilar usando Apple's MPW 3.3, Metrowerks CodeWarrior 8 o
Symantec 8.
POVMACS.SIT o POVMACS.SIT.HQX, el cdigo fuente en C completo de POV-Ray para Macintosh.
Contiene partes genricas y partes especficas Macintosh. No incluye ejemplos de escenas,
archivos .INC estndar ni la documentacin por lo que tambin debers obtener el archivo
ejecutable.
2.3.3. Commodore Amiga
La versin para Amiga viene en varios sabores: 68000/68020 sin FPU (muy lenta, no se recomienda),
68020/68881(68882), 68030/68882 y 68040. Hay tambin dos sub-versiones, una slo con un interface
CLI, y otra con un interface GUI (requiere MUI 3.1). Todas las versiones corren bajo OS2.1 y
superiores. Existe soporte para pensharing y visualizacin de ventanas bajo OS3.x con paletas de 256
colores y soporte para la biblioteca CybeGFX.
Requerimientos:
Por lo menos 4 Mb de RAM.
Por lo menos 2 Mb de espacio en el disco duro, se recomiendan de 5 a 20 Mb ms para espacio
de trabajo.
Un editor de texto ASCII, GUI configurable para lanzar el editor de su eleccin.
2. DESCRIPCIN DEL PROGRAMA 16
Visor de archivos grficos: POV-Ray da como resultado archivos en formato PNG, Targa
(TGA) y PPM, convertidores desde la distribucin PPMBIN estn incluidos para convertir estas
a archivos IFF ILBM
Archivos de POV-Ray requeridos:
POVAMI.LHA, un archivo en formato .LHA conteniendo el ejecutable, ejemplos de escenas, los
archivos .INC estndar y la documentacin.
Recomendado:
8 Mb o ms de RAM.
Procesador 68030, 68882 o superior.
Tarjeta grfica de 24-bits (con soporte para la biblioteca CyberGFX)
Tan pronto como se haga pblico un compilador estable para sistemas Amiga PowerPC, los planes son
agregar este a la lista de sabores.
Optativo: el cdigo fuente no es necesario para usar POV-Ray. Se proporciona para curiosos y
aventureros.
POVLHA_S.ZIP, el cdigo fuente en C de POV-Ray para Amiga Contiene partes genricas y partes
especficas Amiga. No incluye ejemplos de escenas, archivos .INC estndar ni la documentacin
por lo que tambin debers obtener el archivo ejecutable.
2.3.4. SunOS
Requerimientos de hardware y software:
Un procesador Sun SPARC y por lo menos 4 Mb de RAM.
Aproximadamente 6 Mb de espacio en el disco duro para la instalacin y de 2 a 10 Mb o ms
para espacio de trabajo.
Un editor de texto capaz de editar archivos de texto ASCII.
SunOS 4.1.3 u otro sistema operativo capaz de correr el archivo binario (Solaris o posiblemente
Linux para Sparc).
Archivos de POV-Ray requeridos:
POVSUNOS.TGZ o POVSUNOS.TAR.GZ, archivo conteniendo un ejecutable oficial para los modos
slo texto y X-Windows. Tambin contiene ejemplos de escenas, los archivos .INC estndar y la
documentacin.
Recomendado:
8 Mb de RAM o ms.
Si quieres previsualizacin, requerir X-Windows o un terminal X.
Preferiblemente capacidad para visualizar color verdadero de 24 bits(True Color), aunque se sabe
que el cdigo X-Windows funciona con cualquier resolucin y nmero de colores.
Un visor de archivos grficos capaz de visualizar formatos PPM, TGA o PNG.
Optativo: el cdigo fuente no es necesario para usar POV-Ray. Se proporciona para curiosos y
aventureros.
POVUNI_S.TGZ o POVUNI_S.TAR.GZ, el cdigo fuente en C de POV-Ray para UNIX. Contiene
partes genricas UNIX y partes especficas Linux. No incluye ejemplos de escenas, archivos
.INC estndar ni la documentacin, por lo que tambin debers obtener el archivo ejecutable.
PERSISTENCE OF VISION RAYTRACER 17
Un compilador de C y (opcionalmente) los archivos de inclusin y bibliotecas X, y
conocimiento de cmo usarlo. Aunque proporcionamos el cdigo fuente genrico para
sistemas UNIX, no proporcionamos apoyo tcnico sobre cmo compilar el programa.
2.3.5. Unix genrico
Requerimientos:
POVUNI_S.TGZ o POVUNI_S.TAR.GZ, el cdigo fuente en C de POV-Ray para Unix. O cualquier
archivo conteniendo el cdigo fuente genrico para Unix, y el especifico para X-Windows.
POVUNI_D.TGZ o POVUNI_D.TAR.GZ, o cualquier archivo conteniendo los ejemplos de escenas, los
archivos .INC estndar y la documentacin. ste podra ser uno de los archivos ejecutables para
Linux o SunOS que se describieron antes.
Un compilador C para tu ordenador y conocimiento de como usarlo. Aunque
proporcionamos el cdigo fuente genrico para sistemas Unix, no proporcionamos apoyo
tcnico sobre cmo compilar el programa.
Un editor de texto capaz de editar archivos de texto ASCII.
Recomendado:
Co-procesador matemtico.
8 Mb o ms de memoria RAM.
Un visor de archivos grficos capaz de visualizar formatos PPM, TGA o PNG.
Opcional:
X Windows si quieres previsualizar el trazado.
Tambin necesitars los archivos de inclusin de X-Windows. Si no ests familiarizado con la
compilacin de programas para X-Windows podras necesitar algo de ayuda de alguien que
conozca tu instalacin, porque los archivos de inclusin de X-Windows y las bibliotecas no
siempre estn en el lugar habitual.
2.3.6. Todas las versiones
Cada archivo ejecutable incluye la documentacin completa de POV-Ray mismo as como instrucciones
especficas para usar POV-Ray con su tipo de plataforma.
Todas las versiones del programa comparten las mismas formas, iluminacin y texturas. En otras
palabras, un IBM-PC puede crear las mismas imgenes qu un superordenador Cray siempre que tenga
bastante memoria.
Cada usuario desear obtener el ejecutable que mejor se adapte al hardware de su ordenador. Consulta
la seccin Donde encontrar los archivos de POV-Ray para ver donde encontrar estos archivos.
Puedes contactar con estas fuentes para encontrar la mejor versin para ti y tu ordenador
2.3.7. Compilando POV-Ray
Las secciones siguientes te ayudarn a compilar el cdigo fuente en C portable en una versin
ejecutable de POV-Ray qu funcione. Son slo para sas personas qu quieren compilar una versin
personalizada de POV-Ray o portarlo a una plataforma o compilador no soportado.
La primera pregunta qu debes hacerte antes de proceder es realmente necesito compilar POV-Ray?
Las versiones ejecutables oficiales del POV-Ray Team estn disponible para MS-DOS, Windows
3.1x/95/NT, Mac 68k, Mac Power PC, Amiga, Linux para Intel x86, y SunOS. Otras compilaciones no
oficiales para otras plataformas estarn pronto disponibles. Si no piensas agregar cualquier caracterstica
2. DESCRIPCIN DEL PROGRAMA 18
personalizada o experimental al programa y si ya existe un ejecutable para tu plataforma, entonces no
necesitas compilar este programa.
Si quieres proceder debers estar muy seguro de ti mismo. Las secciones siguientes y otra
documentacin relacionada a la compilacin asumen que sabes lo qu estas haciendo. Asumen qu
tienes un compilador de C adecuado instalado y funcionando. Asumen que sabes como compilar y
enlazar programas de mltiples partes usando una utilidad make o un archivo de proyecto IDE si tu
compilador los soporta. Ya que los archivos make y los archivos de proyecto a menudo especifican
informacin sobre unidades, directorios o paths, no podemos prometerte qu nuestros archivos make o
de proyectos trabajarn en tu sistema. Asumimos que sabes hacer cambios en los archivos make y de
proyectos para especificar donde se localizan tus bibliotecas de sistema y otros archivos necesarios.
En general no debes esperar ningn apoyo tcnico del POV-Ray Team sobre cmo compilar el
programa. Todo se provee tal como esta. Todo lo qu podemos decir con certeza es qu pudimos
compilar l cdigo en nuestros sistemas. Si no trabaja para ti probablemente no podamos decirte
porqu.
No hay ninguna documentacin tcnica para el cdigo fuente mismo salvo los comentarios en los
archivos fuente. Intentamos hacer lo mejor para escribir cdigo claro y bien comentado, pero algunas
secciones estn apenas comentadas y algunos comentarios pueden estar desactualizados. No
proporcionamos ningn soporte tcnico para ayudarte a agregar caractersticas. No explicamos cmo
trabaja una caracterstica en particular. En algunos casos la persona qu escribi una parte del programa
ya no esta hace tiempo activamente en el Equipo y no sabemos exactamente cmo trabaja.
Cuando hagas cualquier versin personalizada de POV-Ray o cualquier compilacin extraoficial, por
favor asegrate de haber ledo y seguir todas las provisiones de nuestra licencia en la seccin
"Copyright". En general puedes modificar y usar POV-Ray para ti mismo, sin embargo si quieres
distribuir tu versin extraoficial debes seguir nuestras reglas. No puedes bajo cualquier circunstancia
usar porciones del cdigo fuente de POV-Ray en otros programas.
2.3.7.1. Estructura de directorios
El cdigo fuente de POV-Ray se distribuye en archivos en una jerarqua particular de directorios o
carpetas. Cuando extrae los archivos debe hacerlo de modo qu resguarde la estructura de directorios
intacta. En general sugerimos qu cree un directorio llamado povray3 y extraiga los archivos all. La
extraccin crear un directorio llamado source con muchos archivos y subdirectorios.
En general, hay archivos separados para cada plataforma de hardware y sistema operativo, pero cada
uno de estos archivos soporta ms de un compilador. Por ejemplo aqu esta la estructura de directorios
para el archivo MS-DOS.
SOURCE
SOURCE\LIBPNG
SOURCE\ZLIB
SOURCE\MSDOS
SOURCE\MSDOS\PMODE
SOURCE\MSDOS\BORLAND
SOURCE\ MSDOS\DJGPP
SOURCE\MSDOS\WATCOM
El directorio SOURCE contiene archivos fuente para las partes genricas de POV-Ray qu son comunes
a todas las plataformas. El directorio SOURCE\LIBPNG contiene archivos para compilar una biblioteca de
rutinas utilizadas en la lectura y escritura de archivos grficos en formato PNG (Portable Network
Graphic). El directorio SOURCE\ZLIB contiene archivos para compilar una biblioteca de rutinas utilizada
por libpng para comprimir y descomprimir flujos de datos. Todos estos archivos son usados por todas
las plataformas y compiladores. Estn en cada versin de los archivos fuente.
PERSISTENCE OF VISION RAYTRACER 19
El directorio SOURCE\MSDOS contiene todos los archivos fuente de la versin para MS-DOS comn a
todos los compiladores MS-DOS soportados. El subdirectorio PMODE contiene archivos fuente para
PMODE.LIB qu son necesarios para todas las versiones de MS-DOS. Los subdirectorios BORLAND,
DJGPP y WATCOM contienen fuente, archivos make y archivos de proyecto para compiladores de C de
Borland, DJGPP y Watcom.
El directorio SOURCE\MSDOS esta slo en el archivo MS-DOS. De manera semejante el archivo
Windows contiene un directorio SOURCE\WINDOWS. El archivo Unix contiene un directorio
SOURCE/UNIX etc.
El directorio SOURCE\MSDOS contiene un archivo CMPL_MSD.DOC qu contiene informacin de
compilacin especfica de la versin MS-DOS. Otros directorios especficos de plataforma contienen
archivos CMPL_XXX.DOC similares y los subdirectorios especficos del compilador tambin contienen
archivos CMPL_XXX.DOC especficos. Asegrese de leer todos los archivos CMPL_XXX.DOC pertinentes
para su plataforma y compilador.
2.3.7.2. Configurando el fuente de POV-Ray
Cada plataforma tiene un archivo de cabecera (header) llamado CONFIG.H qu generalmente est en el
directorio especfico de la plataforma, pero podra estar en el directorio especfico del compilador.
Algunas plataformas tienen versiones mltiples de este archivo y podras necesitar copiarlo o
renombrarlo como CONFIG.H. Este archivo se incluye en cada mdulo de POV-Ray. Contiene todos los
prototipos, macros y otras definiciones qu se requieren en las partes genricas de POV-Ray, pero debe
ser personalizado para una plataforma o compilador en particular.
Por ejemplo, sistemas operativos diferentes usan caracteres diferentes como separador entre directorios
y nombres del archivo. MS-DOS usa una barra invertida(\), Unix una barra normal(/) y Mac una
coma(,). El archivo CONFIG.H para MS-DOS y Windows contienen lo siguiente:
#define FILENAME_SEPARATOR '\'
qu instruye a la parte genrica de POV-Ray para usar una barra invertida(\).
Cada personalizacin que la parte genrica del cdigo requiere tiene un valor por defecto en el archivo
SOURCE\FRAME.H, qu tambin se incluye en cada mdulo despus de CONFIG.H. El archivo de cabecera
FRAME.H contiene muchos grupos de definiciones como esta:
#ifndef FILENAME_SEPARATOR
#define FILENAME_SEPARATOR '/'
#endif
el cual bsicamente dice qu si no est definido previamente en CONFIG.H, entonces este es su valor por
defecto. Verifica FRAME.H para ver qu otros valores puedes querer configurar.
Si se usa cualquier definicin para especificar una funcin especifica de una plataforma tambin se
deber incluir un prototipo para esa funcin. El archivo SOURCE\MSDOS\CONFIG.H, por ejemplo, no
slo contiene el macro:
#define POV_DISPLAY_INIT(w,h) MSDOS_Display_Init ((w), (h));
para definir el nombre de la funcin de inicializacin de visualizacin de grficos, tambin contiene el
prototipo:
void MSDOS_Display_Init (int w, int h);
Si piensas portar POV-Ray hacia una plataforma no soportada debes comenzar probablemente con la
versin ms simple para Unix sin previsualizacin. Despus agrega nuevos trozos personalizados a
travs del archivo CONFIG.H.
2. DESCRIPCIN DEL PROGRAMA 20
2.3.7.3. Conclusin
Comprendemos que las secciones anteriores son solo los primeros pasos, pero la mitad de la diversin
de trabajar en los fuentes de POV-Ray es escarbar en ellos y figurrtelo por ti mismo. As es como los
miembros del POV-Ray Team comenzaron. Hemos tratado de hacer el cdigo tan claro como
pudimos.
Asegrate de leer los archivos CMPL_XXX.DOC en los directorios de tu plataforma y compilador
especficos para obtener alguna ayuda menor ms si trabaja en una plataforma o compilador
soportados.
Buena suerte !
2.4. Donde encontrar POV-Ray
Las ultimas versiones del software POV-Ray estn disponibles de las siguientes fuentes.
2.4.1. Foro de POV-Ray en Compuserve
La oficina principal de POV-Ray est en CompuServe, en el foro POVRAY, qu es dirigido por
algunos de los miembros del equipo. Nos reunimos all para compartir informacin, programas tiles,
utilidades y grficos creados con POV-Ray. Todo el mundo es bienvenido para unirse a la accin en
CIS: POVRAY. Esperamos verte all! Puedes obtener informacin de como unirse a CompuServe
llamando al (800)848-8990 o visitando la pgina principal de CompuServe en
http://www.compuserve.com. Acceso directo a CompuServe tambin esta disponible en Japn,
Europa y muchos otros pases.
2.4.2. Internet
El hogar en Internet de POV-Ray est disponible a travs del world wide web a travs de la direccin
http://www.povray.org y va ftp como ftp.povray.org. Por favor, vistala a menudo para conocer los
ltimos archivos, utilidades, noticias e imgenes del sitio oficial de POV-Ray en Internet.
El grupo de noticias comp.graphics.rendering.raytracing es visitado por muchos usuarios
competentes de POV-Ray qu estn muy deseosos de compartir su conocimiento. Generalmente
primero te invitan a curiosear unos pocos archivos para ver si alguien ya ha contestado la misma
pregunta, y por supuesto, a qu sigas la apropiada "netiquette". Si tienes cualquier duda sobre las
calificaciones de las personas qu frecuentan el grupo, unos pocos minutos empleados en la pagina de
la Competicin de Raytracing en www.povray.org te convencern rpidamente.
2.4.3. Area de grficos para PC en Amrica On-Line
Hay ahora un rea en Amrica On-Line dedicada al soporte e informacin de POV-Ray. Puedes
encontrarla en la seccin PC Graphics de AOL. Sigue la palabra clave POV (la palabra clave
PCGRAPHICS te conducir al principio de la seccin relacionada con los grficos). Esta rea incluye
tambin los ejecutables para Apple Macintosh. Lo mejor sera qu los mensajes sean dejados en la
seccin Company Support. Normalmente, Bill Pulver (BPulver) es nuestro representante all.
2.4.4. BBS The Graphics Alternative en El Cerrito, CA
Para todos aquellos en la costa oeste
1
, podis encontrar los archivos de POV-Ray en The Graphics
Alternative BBS. Es una gran BBS grfica dirigida por Adam Shiffman. TGA es una BBS de alta
calidad, activa y progresiva que oferta mensajera y archivos de calidad a sus ms de 1300 usuarios.

1
De los Estados Unidos, obviamente (N. de los T.)
PERSISTENCE OF VISION RAYTRACER 21
510-524-2780 (PM14400FXSA v.32bis 14.4k, Pblico)
510-524-2165 (USR DS v.32bis/ HST 14.4k, Subscriptores)
2.4.5. PCGNet
La red Profesional de CAD y Grficos (PCGnet) sirve a ambas comunidades, CAD y Grficos
haciendo ampliamente disponible informacin til.
Anteriormente conocida como ADEnet, PCGnet es una red nueva que incorpora nodos nuevos y
enfoca uniformemente ambos tpicos relacionados, CAD y Grficos, incluyendo, pero no limitada a,
los temas siguientes: diseo, dibujo, ingeniera, modelado 2d y 3d, multimedia, sistemas, imagen raster,
trazado de rayos, rendering y animacin 3d.
PCGnet esta diseada para servir las necesidades de todos los visitantes estimulando el inters y
generando foros de soporte para usuarios activos qu tienen un inters en los temas relacionados al
CAD y los grficos previamente mencionados; el inters y soporte se genera a travs de las conferencias
de mensajes de PCGnet, compartiendo archivos a travs de la red, noticias de la industria y boletines de
prensa. Las conferencias de mensajes de PCGnet son foros moderados diseados acomodar
discusiones amistosas, y aun as profesionales e informativas sobre los asuntos relacionados con el
CAD y los grficos.
TGA BBS sirve como eje central para una gran red de sistemas BBS orientados a los grficos alrededor
del mundo. La siguiente es una descripcin concisa de los nodos activos de PCGNet al momento qu
este documento fue escrito. El POV-Team no puede responder sobre la validez de esta informacin, ni
verificar qu cualquiera de estas BBS distribuyan POV-Ray.
EE.UU. y Canad
411-Exchange Alpharetta GA 404-345-0008
Autodesk Global Village San Rafael CA 415-507-5921
CAD/Engineering Services Hendersonville TN 615-822-2539
Canis Major Nashville TN 615-385-4268
CEAO BBS Columbus OH 614-481-3194
CHAOS BBS Columbia MO 314-874-2930
Joes CODE BBS West Bloomfield MI 810-855-0894
John's Graphics Brooklyn Park MN 612-425-4436
PC-AUG Phoenix AZ 602-952-0638
SAUG BBS Bellevue WA 206-644-7115
Space Command BBS Kennewick WA 509-735-4894
The CAD/fx BBS Mesa AZ 602-835-0274
The Drawing Board BBS Anchorage AK 907-349-5412
The Graphics Alternative El Cerrito CA 510-524-2780
The Happy Canyon Denver CO 303-759-3598
Los New Graphics BBS Piscataway NJ 908-271-8878
The University Shrewsbury Twp NJ 908-544-8193
The virtual Dimension Oceanside CA 619-722-0746
Time-Out BBS Sadsburyville PA 610-857-2648
Australia
MULTI-CAD BBS Magazine Toowong QLD 61-7-878-2940
My Computer Company Erskineville NSW 61-2-557-1489
Sydney PCUG Compaq BBS Caringbah NSW 61-2-540-1842
The Baud Room Melbourne VIC 61-3-481-8720
Austria
Austrian AutoCAD User Group Graz 43-316-574-426
Blgica
Lucas Visions BBS Boom 32-3-8447-229
2. DESCRIPCIN DEL PROGRAMA 22
Dinamarca
Horreby SuperBBS Nykoebing Falster 45-53-84-7074
Finlandia
DH-Online Jari Hiltunen 358-9-40562248
Triplex BBS Helsinki 358-9-5062277
Francia
CAD Connection Montesson 33-1-39529854
Zyllius BBS! Saint Paul 33-93320505
Alemania
Ray BBS Munich Munich 49-89-984723
Tower of Magic Gelsenkirchen 49-209-780670
Pases Bajos
BBS Bennekom: Fractal Board Bennekom 31-318-415331
CAD-BBS Nieuwegein 31-30-6090287
31-30-6056353
Foundation One Baarn 31-35-5422143
Nueva Zelanda
The Graphics Connections Wellington 64-4-566-8450
The Graphics Connections II Nuevo Plymouth 64-6-757-8092
The Graphics Connections III Auckland 64-9-309-2237
Slovenia
MicroArt Koper 386-66-34986
Suecia
Autodesk On-line Gothenburg 46-31-401718
Reino Unido
CADenza BBS Leicester, UK 44-116-259-6725
Raytech BBS Tain, Scotland 44-1862-83-2020
The Missing Link Surrey, England 44-181-641-8593
Nmeros de pases o de larga distancia podran requerir usar nmeros adicionales. Consulta a tu
compaa telefnica local.
2.4.6. Libros y cd-roms relacionados con POV-Ray
Los artculos siguientes fueron producidos por miembros del POV-Team. Aunque slo tienen presente
a POV-Ray 2.2 todava sern tiles. El siguiente paso es actualizar el cdrom de POV-Ray a la versin 3,
con una versin nueva que se espera para la primera la mitad de 1997.
Los libros listados abajo se han sido descatalogados recientemente, pero pueden encontrarse todava en
algunas libreras o bibliotecas (Visita http://www.dnai.com:80waite/ para ms detalles).
Ray Tracing Creations, 2d Ed.
Chris Young and Drew Wells
ISBN 1-878739-69-7
Waite Group Press, 1994
700 paginas con insertos en color y POV-Ray 2.2 en discos MS-DOS de 3.5".
Ray Tracing Worlds with POV-Ray
Alexander Enzmann, Lutz Kretzschmar, Chris Young
ISBN 1-878739-64-6
Waite Group Press, 1994
PERSISTENCE OF VISION RAYTRACER 23
Incluye el modelador Moray 1.5x y POV-Ray 2.2 en discos MS-DOS de 3.5".
Ray Tracing for the Macintosh CD
Eduard Schwan
ISBN 1-878739-72-7
Waite Group Press, 1994
Viene con un CD-ROM lleno de escenas, imgenes, pelculas QuickTime, y una referencia de palabras
clave interactiva. Tambin un disco flexible con POV-Ray para aquellos que no tienen un lector de CD-
ROM.
'The Official POV-Ray CDROM'
El cdrom Oficial de POV-Ray es una recopilacin de imgenes, fuentes de escenas, fuentes de
programas, utilidades y trucos sobre POV-Ray y los grficos 3D provenientes de Internet y
CompuServe. Dirigido no slo a aquellos qu quieren crear sus propias imgenes o hacer trabajos de
programacin general en 3D, sino tambin a aquellos que quieren simplemente admirar unas imgenes
del alta calidad hechas por algunos de los mejores artistas de POV-Ray, y aprender de su cdigo fuente.
El cdrom contiene ms de 500 imgenes trazadas.
Es un buen recurso para aquellos qu estn aprendiendo sobre POV-Ray, as como aquellos que ya
tienen experiencia, y contiene un tutorial interactivo basado en Windows. El disco viene con un poster
desplegable y una hoja de referencia. El CD es compatible con los formatos DOS/Windows y
Macintosh.
El cdrom esta disponible tambin en la World Wide Web, en http://www.povray.org/pov-cdrom. Para
ms detalles visita http://www.povray.org/povcd.
3. COMIENZO RPIDO 24
3. Comienzo rpido
La siguiente seccin describe como instalar rpidamente POV-Ray y trazar escenas de ejemplo en tu
ordenador. Se asume que ests usando un ordenador compatible con IBM-PC con MS-DOS. Para otras
plataformas debes buscar la documentacin especfica incluida en el archivo que contiene POV-Ray.
3.1. Instalando POV-Ray
En el ejecutable para tu ordenador se incluyen instrucciones especficas para la instalacin. En general,
hay dos formas de instalar POV-Ray.
2

[Ten en cuenta que usamos la palabra directorio. Tu sistema operativo puede que use otro trmino
(subdirectorio, carpeta, etc.)]
1) La forma chapucera: crea un directorio llamado POVRAY y copia todos los archivos de POV-Ray en
el. Edita y ejecuta todos los archivos y programas desde este directorio. Este mtodo funciona, pero no
es el recomendado.
O la forma recomendada:
2) Crea un directorio llamado POVRAY y varios subdirectorios llamados INCLUDE, DEMO, SCENES, UTIL.
Los archivos autoextrables de algunas versiones del programa crean estos directorios por ti. Si los creas
t mismo, el rbol de directorios debera quedar parecido a esto:
\--
|
+POVRAY --
|
+INCLUDE
|
+DEMO
|
+SCENES
|
+UTIL
Copia los ejecutables y la documentacin al directorio POVRAY. Copia los archivos de inclusin estndar
en el subdirectorio INCLUDE. Copia las escenas de ejemplo en el subdirectorio SCENES. Y copia
cualquier utilidad relacionada con POV-Ray en el subdirectorio UTIL. Las escenas que crees irn en el
subdirectorio SCENES. Tambin tendrs que aadir los directorios \POVRAY y \POVRAY\UTIL a tu path,
para que los programas puedan ser ejecutados desde cualquier directorio.
Ten en cuenta que algunos sistemas operativos no tienen soporte para mltiples trayectorias de
bsqueda.
El segundo mtodo es un poco ms complicado de poner a punto, pero es el preferido. Hay muchos
archivos asociados a POV-Ray que son mucho ms fciles de manejar cuando estn separados en varios
directorios.

2
Si utilizas el programa de instalacin de POV-Ray, este se encargar de crear la estructura de directorios
necesaria. En este caso puedes omitir esta seccin (N. de los T.)
PERSISTENCE OF VISION RAYTRACER 25
3.2. Utilizacin bsica
Nota: si no instalas el programa usando INSTALL.EXE, los ejemplos e instrucciones siguientes no
funcionarn. El proceso de instalacin configura POVRAY.INI y varios archivos BATimportantes. Sin
esos archivos configurados, los ejemplos siguientes no funcionarn.
El propsito bsico de POV-Ray es leer una descripcin de una escena escrita en el lenguaje de POV y
escribir un archivo conteniendo la imagen. Estos archivos de escena son texto ASCII que puedes crear
usando un editor de texto. Con el paquete se incluyen docenas de archivos de ejemplo para ilustrar las
caractersticas.
El programa se ejecuta escribiendo un comando desde el smbolo de MS-DOS. El comando es
povray y debe ir seguido de uno o ms parmetros. Cada parmetro comienza con un signo ms o
menos, y van separados entre s por espacios. Los parmetros pueden estar en maysculas o
minsculas.
Nota: los ejemplos en esta documentacin asumen que has instalado POV-Ray en el directorio
C:\POVRAY3. El instalador te permitir instalar POV-Ray en cualquier sitio y configurar el programa
para la unidad y directorio que especifiques. Simplemente sustituye esa unidad y directorio donde te
digamos que uses C:\POVRAY3. Cmbiate a ese directorio ahora. Luego teclea la siguiente lnea de
comando y pulsa [ENTER}.
POVRAY +ISHAPES +D1
El parmetro +I (de input) le dice al programa que archivo debe leer como entrada. Si no le das una
extensin al nombre del archivo, se asume .POV. De modo que +Ishapes le dice que lea SHAPES.POV
para ser trazado.
El parmetro +D (de display) le dice al programa que active la previsualizacin grfica. El parmetro -
D la desactivara. El nmero 1 le dice que tipo de adaptador grfico usar. El tipo 1 es el antiguo
adaptador estndar VGA a 320 por 200 puntos de resolucin y 256 colores. Totalmente garantizado
que funcionar en cualquier tarjeta de vdeo VGA.
Hay otras opciones activas adems de las que especificaste en la lnea de comandos. Se guardan en un
archivo llamado POVRAY.INI que es creado por el programa de instalacin. POV-Ray busca
automticamente este archivo en el mismo directorio donde reside POVRAY.EXE. Mira las secciones
Archivos INI y Usando los archivos INI para obtener ms informacin sobre POVRAY.INI y otros
archivos INI.
Al ejecutar el comando anterior, vers aparecer brillantes formas geomtricas a medida que POV-Ray
va calculando el color de cada pixel lnea a lnea. Probablemente estars descontento con el resultado
grfico. Esto es debido a que es nicamente una previsualizacin. La imagen actual contiene 24 bits de
color pero no se puede mostrar tan alta calidad usando una simple tarjeta VGA con un conjunto de 256
colores fijos. Si tu hardware soporta el interface estndar VESA o si tienes un controlador VESA
instalado, prueba a ejecutar con el parmetro +DG en lugar de +D1. Esto te dar acceso a los varios
modos que tu tarjeta de vdeo puede usar. Si tienes capacidad para color de 15 o 16 bits prueba +DGH,
o si tienes capacidad para color de 24 bits prueba +DGT para ver la imagen en todo su esplendor.
Consulta la seccin Tipos de visualizacin ms adelante para obtener ms informacin sobre la
previsualizacin grfica.
Cuando el programa termine oirs unos pitidos. Despus de admirar la imagen pulsa [ENTER]. Vers
una pantalla de texto con estadsticas. Si el texto es demasiado largo para caber en la pantalla puedes
pulsar las teclas cursor arriba o cursor abajo para leer ms texto. Fjate en las pestaas que hay en la
parte inferior de la pantalla. Pulsa las teclas cursor derecha o cursor izquierda para leer otra
informacin interesante. Pulsa [ENTER] de nuevo para salir de POV-Ray.
PERSISTENCE OF VISION RAYTRACER 27
4. Tutorial para principiantes
El Tutorial para Principiantes explica paso a paso como usar el lenguaje de descripcin de escena de
POV-Ray para crear tus propias escenas. Se explica el uso de casi todas las caractersticas del lenguaje
de POV-Ray. Aprenders las cosas bsicas como donde colocar la cmara o las fuentes de luz. Tambin
aprenders como crear una gran variedad de objetos y como asignarles texturas. Las caractersticas mas
sofisticadas, como la radiosidad, los halos y los efectos atmosfricos tambin sern explicados con
detalle.
Las siguientes secciones explican las caractersticas de POV ms o menos en el mismo orden en que
aparecen en el captulo de Referencia.
4.1. Tu primera imagen
Vamos a crear el archivo de escena para una imagen sencilla. Como las esferas son las formas ms
comunes en los trazadores, es lo primero que usaremos.
4.1.1. El sistema de coordenadas de POV-Ray
Primero hemos de decirle a POV-Ray donde situar nuestra cmara y hacia donde apuntar. Para hacer
esto, usamos coordenadas 3D. El sistema de coordenadas habitual de POV-Ray tiene el sentido
positivo del eje Y apuntando hacia arriba, el sentido positivo del eje X hacia la derecha y el sentido
positivo del eje Z apuntando hacia el interior del monitor, tal y como muestra la figura:
Este tipo de sistema de coordenadas se llama "de mano izquierda". Si usas los dedos de tu mano
izquierda puedes ver fcilmente porque se llama as. Apunta el pulgar hacia la direccin positiva del eje
X, el dedo ndice hacia la direccin positiva del eje Y, y el dedo medio hacia la direccin positiva del eje
Z. Slo puedes hacer esto con la mano izquierda. Si hubieras usado la mano derecha no habras sido
capaz de apuntar el dedo medio hacia la direccin correcta.
La mano izquierda se puede usar tambin para determinar las direcciones de rotacin. Para hacer esto
debes practicar el famoso ejercicio de Aerobic Infogrfico. Toma tu mano izquierda, y apunta el pulgar
hacia la direccin positiva del eje de rotacin. El resto de los dedos se curvarn en la direccin positiva

Figura 1: El sistema de coordenadas de mano izquierda (el
eje Z apunta alejndose de ti)
4. TUTORIAL PARA PRINCIPIANTES 28
de rotacin. Del mismo modo, si apuntas hacia la direccin negativa del eje, los dedos se curvarn
sobre la direccin negativa de rotacin.
En la ilustracin, la mano izquierda se curva sobre el eje X. El dedo pulgar apunta hacia la direccin
positiva del eje X y los dedos se curvan sobre la direccin positiva de rotacin.
Si quieres usar un sistema de coordenadas de mano derecha, como hacen algunos sistemas de CAD
como AutoCAD, has de modificar el vector right en la especificacin de la cmara. Mira la descripcin
detallada en la seccin "Sistemas de coordenadas levgiros y dextrgiros". En un sistema de mano
derecha debes usar tu mano derecha para el Aerobic.
Ten en cuenta que hay alguna controversia sobre si el mtodo que usa POV-Ray para obtener un
sistema de coordenadas de mano derecha es realmente vlido. Si quieres evitarte problemas te
sugerimos que uses el sistema de mano izquierda, sobre el que no hay disputa.
4.1.2. Aadiendo archivos de inclusin estndar.
Usando tu editor de textos favorito, crea un archivo llamado DEMO.POV. Ahora teclea lo siguiente
(POV-Ray distingue entre maysculas y minsculas, as que asegrate de que estn correctas).
#include "colors.inc" // Los archivos de inclusin contienen
#include "shapes.inc" // elementos de escena predefinidos
#include "finish.inc"
#include "glass.inc"
#include "metals.inc"
#include "stones.inc"
#include "woods.inc"
La primera sentencia de inclusin lee las definiciones de varios colores tiles. La segunda sentencia de
inclusin las definiciones de algunas formas tiles. Las siguientes leen definiciones de acabados y
texturas de vidrios, metales, piedras y maderas.
Slo debes incluir aquellos archivos que realmente uses en tu escena. Algunos de los archivos de
inclusin que vienen con POV-Ray son bastante largos, y es mejor que ahorres memoria y tiempo de
interpretacin si no los vas a usar. En los siguientes ejemplos solo vamos a usar COLORS.INC, FINISH.INC
y STONES.INC, as que mejor que quites el resto de las lneas de tu archivo de escena.

Figura 2: Aerobic Infogrfico para determinar el sentido de
rotacin
PERSISTENCE OF VISION RAYTRACER 29
Puedes tener tantos archivos de inclusin como sea necesario. Los archivos de inclusin pueden incluso
contener a otros archivos, pero esto est limitado a diez niveles de profundidad.
Los nombres de archivos en las sentencias de inclusin se buscan primero en el directorio actual. Si no
se encuentran, se buscan en los directorios especificados por el parmetro +L o por la opcin
Library_Path. Esto facilita el tener todos los archivos de inclusin en un directorio aparte, y especificar
con el parmetro +L donde se encuentran.
4.1.3. Aadiendo la cmara.
La declaracin de la cmara describe donde y como la cmara ve la escena. Hay que especificar las
coordenadas x, y, x que sitan a la cmara y a que parte de la escena est apuntando. Para describir las
coordenadas x, y, z usamos un vector de tres componentes. Un vector se especifica poniendo tres
valores numricos entre parntesis angulares y separando los valores por comas.
Aade la siguiente sentencia a la escena.
camera {
location <0, 2, -3>
look_at <0, 1, 2>
}
Brevemente, location <0, 2, -3> sita la cmara dos unidades hacia arriba y tres unidades hacia
atrs a partir del centro del universo del trazador, que est situado en <0, 0, 0>. Recuerda que por
defecto +Z va hacia dentro del monitor, y -Z sale hacia fuera.
Tambin look_at <0, 1, 2> rota la cmara hasta apuntar a las coordenadas <0, 1, 2>. Es decir, un
punto a 5 unidades enfrente de la cmara y 1 unidad ms abajo que la cmara. El punto look_at es el
centro de atencin de tu imagen.
4.1.4. Describiendo un objeto.
Ahora que la cmara est lista para registrar la escena, vamos a poner una esfera amarilla. Aade lo
siguiente a tu archivo de escena:
sphere {
<0, 1, 2>, 2
texture {
pigment { color Yellow }
}
}
El primer vector especifica el centro de la esfera. En este ejemplo la coordenada x es cero, de modo que
estar centrada a izquierda y derecha. Tambin tenemos y=1, o una unidad por encima del origen. La
coordenada z es 2, que est a 5 unidades de la cmara, que est en z=3. Despus del vector hay una
coma seguida por el radio que en este caso es de 2 unidades. Como el radio es la mitad de la anchura de
la esfera, sta tendr un ancho de 4 unidades.
4.1.5. Aadiendo la textura al objeto.
Despus de definir la posicin y tamao de la esfera, necesitamos describir la apariencia de su
superficie. El bloque texture {...} especifica el color, la rugosidad y las propiedades del acabado
de un objeto. En este ejemplo slo vamos a especificar el color. Esto es lo mnimo que debemos hacer.
El resto de las opciones de la textura usarn los valores por defecto.
El color que tu defines es el que tendr el objeto cuando est totalmente iluminado. Si estuvieras
haciendo un dibujo de una esfera usaras tonos oscuros para indicar las zonas sombreadas, y tonos
brillantes para indicar las zonas iluminadas. Sin embargo, el trazador se ocupa ya de eso. T eliges el
color inherente al objeto y POV-Ray lo aclara u oscurece dependiendo de la iluminacin de la escena.
4. TUTORIAL PARA PRINCIPIANTES 30
Como estamos definiendo el color que el objeto tiene en lugar del color aparente, el parmetro usado se
llama pigment.
Hay muchos tipos de distribuciones de color que se pueden usar en la sentencia pigment {...}. La
palabra clave color indica que todo el objeto es de un nico color, en lugar de tener una distribucin de
colores. Puedes usar uno de los colores definidos previamente en el archivo de inclusin colors.inc.
Si no hay un color estndar disponible para tus necesidades, puedes definir tu propio color usando la
palabra clave color seguida de red, green y blue, que especifican las cantidades de rojo, verde y
azul de que se compone el color. Por ejemplo, un bonito tono rosa se puede indicar como:
color red 1.0 green 0.8 blue 0.8
Los valores despus de cada palabra han de estar comprendidos entre 0.0 y 1.0. Cualquiera de los tres
componentes no especificadas se toman como 0 por defecto. Tambin se puede usar una notacin ms
corta. Lo siguiente tambin produce el mismo tono rosa:
color rgb <1.0, 0.8, 0.8>
Los colores se explican con ms detalle en la seccin "Especificando Colores".
4.1.6. Definiendo una fuente de luz.
Un ltimo detalle falta en nuestra escena. Necesitamos una fuente de luz, hasta que crees una no habr
luz en este mundo virtual. De modo que aade esta lnea
light_source {<2, 4, -3> color White}
a tu archivo de escena. Tu primera escena con POV-Ray debera quedar as:
#include "colors.inc"

background { color Cyan }

camera {
location <0, 2, -3>
look_at <0, 1, 2>
}

sphere {
<0, 1, 2>, 2
texture {
pigment { color Yellow }
}
}

light_source { <2, 4, -3> color White}
El vector en la sentencia light_source especifica la posicin de la luz como 2 unidades a nuestra
derecha, 4 unidades sobre el origen y 3 unidades por detrs del origen. La fuente de luz es invisible, slo
emite luz, de modo que no se necesita textura.
Esto es todo. Graba el archivo y traza una pequea imagen con la orden
povray +w160 +h120 +p +x +d0 -v -idemo.pov
Si tu ordenador no usa la lnea de comandos, consulta la documentacin especfica de tu plataforma
para ver como trazar la escena.
Tambin puedes especificar otras opciones en la lnea de comandos, si quieres. La escena ser escrita al
archivo DEMO.TGA (o con otro sufijo si tu ordenador usa un formato por defecto diferente).
La escena que acabas de trazar no es ninguna obra de arte, pero tenemos que empezar por lo bsico
antes de que exploremos caractersticas y escenas mucho ms fascinantes.
PERSISTENCE OF VISION RAYTRACER 31
4.2. Usando la cmara
4.2.1. Usando el desenfoque
Vamos a construir una escena simple para ilustrar el uso del desenfoque. Para este ejemplo usaremos
una esfera rosa, una caja verde y un cilindro azul. La esfera estar en primer plano, la caja en el centro y
el cilindro al fondo. Para completar la escena pondremos un suelo ajedrezado y un par de fuentes de
luz.
Creamos un nuevo archivo llamado FOCALDEM.POV y tecleamos lo siguiente:
#include "colors.inc"
#include "shapes.inc"
#include "textures.inc"

#version 3.0

global_settings {
assumed_gamma 2.2 // para la mayora de los monitores de PC
max_trace_level 5
}

sphere { <1, 0, -6>, 0.5
finish {
ambient 0.1
diffuse 0.6
}
pigment { NeonPink }
}

box { <-1, -1, -1>, < 1, 1, 1>
rotate <0, -20, 0>
finish {
ambient 0.1
diffuse 0.6
}
pigment { Green }
}

cylinder { <-6, 6, 30>, <-6, -1, 30>, 3
finish {
ambient 0.1
diffuse 0.6
}
pigment {NeonBlue}
}

plane { y, -1.0
pigment {
checker color Gray65 color Gray30
}
}

light_source { <5, 30, -30> color White }

light_source { <-5, 30, -30> color White }
Ahora vamos a poner la cmara en una posicin apropiada, justo detrs de los tres objetos. Ajustando
el punto focal moveremos el foco a cualquier punto de la escena. Aade las siguientes lneas:
camera {
location <0.0, 1.0, -10.0>
look_at <0.0, 1.0, 0.0>
4. TUTORIAL PARA PRINCIPIANTES 32

// focal_point <-6, 1, 30> // el cilindro est enfocado
// focal_point < 0, 1, 0> // la caja esta enfocada
focal_point < 1, 1, -6> // la esfera est enfocada

aperture 0.4 // una solucin de compromiso
// aperture 0.05 // casi todo est enfocado
// aperture 1.5 // muy desenfocado

// blur_samples 4 // poco muestreo, trazado ms rpido
blur_samples 20 // ms muestras, mayor calidad de la imagen
}
El punto focal es el punto de la escena que estar totalmente enfocado, con los bordes bien definidos.
Definimos el punto focal y asignamos un valor a la apertura para ajustar la distancia a la que comenzar
a desenfocarse la imagen.
El ajuste de la apertura puede considerarse como el rea enfocada. Aumentar la apertura tiene como
efecto el hacer ms pequea el rea donde todo est enfocado, mientras de disminuirla hace que el rea
enfocada sea mayor. As es como controlamos donde comienza a desenfocarse la imagen alrededor del
punto focal.
El valor de blur_samples determina cuantos rayos se trazan para muestrear cada pixel. Bsicamente,
cuantos ms rayos se usen mayor ser la calidad de la imagen, y consecuentemente mayor tiempo
tardar en trazarse. Cada escena es diferente, as que tendremos que experimentar. En este tutorial
tenemos ejemplos de 4 y 20 muestras, pero podemos usar ms para imgenes de alta resolucin. No
deberamos usar ms muestras que las necesarias para obtener la calidad deseada, porque ms muestras
suponen ms tiempo para el trazado. Los ajustes de confidencia y varianza estn cubiertos en la seccin
"Desenfoque".
Experimenta con el punto focal, la apertura y el valor del muestreo. La escena tiene lneas con varios
valores, y puedes probarlos comentando las lneas por defecto, y quitando el comentario a la lnea que
quieras probar. Haz un cambio de cada vez para que puedas ver el efecto sobre la escena.
Dos cosas sobre el trazado de escenas con desenfoque. No necesitamos especificar antialias (el
parmetro +a) porque el desenfoque en s ya es un mtodo de sobremuestreo. El desenfoque slo
puede usarse con la cmara de perspectiva (perspective camera).
4.3. Formas simples
Hasta ahora, slo hemos usado la forma de la esfera. Hay muchas otras formas que podemos usar con
POV-Ray. Las secciones siguientes describirn cmo usar algunas de las ms sencillas en lugar de la
esfera usada anteriormente.
4.3.1. Caja
La caja es uno de los objetos ms utilizados. Sustituyamos la esfera por el texto del siguiente ejemplo:
box {
<-1, 0, -1>, // Esquina delantera inferior izquierda
< 1, 0.5, 3> // Esquina trasera superior derecha

texture {
T_Stone25 // Predefinida en stones.inc
scale 4 // Escalamos en todas las direcciones el mismo factor
}

rotate y*20 // Equivalente a "rotate <0,20,0>"
}
PERSISTENCE OF VISION RAYTRACER 33
En el ejemplo, podemos observar que una caja se define especificando las coordenadas tridimensionales
de sus esquinas opuestas. El primer vector debe contener los valores mnimos de x, y y z, y el segundo
debe contener los valores mximos. Los objetos con forma de caja slo pueden ser definidos con sus
aristas paralelas a los ejes del eje de coordenadas. Si lo deseamos, podemos rotarlos para situarlos de
otra manera. Observa que podemos construir expresiones matemticas de diverso tipo con nmeros y
vectores. El parmetro de la rotacin est expresado por el vector y multiplicado por 20. Es lo mismo
que <0, 1, 0>*20, es decir, <0, 20, 0>.
4.3.2. Cono
Aqu tenemos otro ejemplo mostrando cmo usar un cono.
cone {
<0, 1, 0>, 0.3 // Centro y radio de una base
<1, 2, 3>, 1.0 // Centro y radio de la otra base

texture { T_Stone25 scale 4 }
}
La forma del cono se define mediante el centro y el radio de cada base. En el ejemplo, una de las bases
est centrada en el <0, 1, 0> y tiene radio 0.3, mientras que la otra est centrada en el punto <1, 2, 3> y
tiene radio 1. Si queremos que el cono acabe en punta, indicaremos para esa base un radio 0. Ambas
bases son paralelas y perpendiculares al eje del cono. Si queremos que el cono sea dibujado abierto,
aadiremos la palabra open despus del segundo radio, como en el siguiente ejemplo:
cone {
<0, 1, 0>, 0.3 // Centro y radio de una base
<1, 2, 3>, 1.0 // Centro y radio de la otra base
open // Quita las bases

texture { T_Stone25 scale 4 }
}
4.3.3. Cilindro
Podemos definir tambin un cilindro como sigue:
cylinder {
<0, 1, 0>, // Centro de una base
<1, 2, 3>, // Centro de la otra base
0.5 // Radio
open // No dibuja las bases

texture { T_Stone25 scale 4 }
}
4.3.4. Plano
Probemos a crear un objeto tpico de los grficos por ordenador: el suelo ajedrezado. Aadimos el
objeto siguiente a la primera versin del archivo DEMO.POV, el que incluye la esfera.
plane { <0, 1, 0>, -1
pigment {
checker color Red, color Blue
}
}
El objeto definido aqu es un plano infinito. El vector <0, 1, 0> marca la direccin normal a la
superficie del plano (si estuvisemos de pie sobre la superficie, la direccin apuntara desde nuestros
pies hacia nuestra cabeza). El nmero situado tras el vector marca la distancia a la que el plano est
situado del origen de coordenadas medido sobre la direccin normal. En este caso, el suelo est situado
4. TUTORIAL PARA PRINCIPIANTES 34
en y=-1, una unidad por debajo del centro. Como la esfera tiene radio 2 y est centrada a una unidad de
altura, reposa sobre el suelo.
Observemos que, aunque no hay una declaracin de textura, hay una textura implcitamente declarada
aqu. Teclear continuamente instrucciones anidadas del tipo de texture{pigment{....}} es muy
agotador, de forma que POV-Ray nos permite omitir la instruccin textura en muchas ocasiones. De
hecho, slo deberemos usarla cuando englobemos una textura predefinida (como T_Stone25 del
ejemplo anterior), o cuando apilemos varias texturas (como veremos ms adelante).
Este pigmento usa el patrn de color ajedrezado y especifica que los colores usados sern el rojo y el
azul.
Como los vectores <1, 0, 0>, <0, 1, 0> y <0, 0, 1> se usan frecuentemente, POV-Ray tiene tres
identificadores reservados (x, y, z) que se pueden usar como abreviatura. As, un plano puede definirse
como
plane { y, -1
pigment { ... }
}
Observa que no usamos los smbolos < y > alrededor de los identificadores de vectores.
Mirando al suelo, descubrimos que la esfera produce una sombra en l. El trazador de rayos calcula las
sombras de forma muy precisa y esto crea sombras con bordes muy definidos. En el mundo real
habitualmente se aprecia una zona de penumbra o sombra "suave". Ms adelante aprenderemos cmo
usar luces avanzadas para suavizar el borde de las sombras.
4.3.5. Inclusin de objetos estndar
El archivo de inclusin shapes.inc contiene algunas formas predefinidas que tienen un tamao
similar a una esfera de radio uno. Podemos invocarlas desde uno de nuestros diseos as:
#include "shapes.inc"

object {
UnitBox
texture { T_Stone25 scale 4 }
scale 0.75
rotate <-20,25,0>
translate y
}
4.4. Formas avanzadas
Despus de haber conseguido cierta experiencia con las formas simples de POV-Ray, es el momento de
hablar de las formas ms avanzadas (e interesantes).
Debemos tener en cuenta que las formas definidas en adelante no son sencillas de entender. No
debemos preocuparnos por no saber usarlas, o no conocer su aspecto. Slo probaremos unos ejemplos
que juegan con las caractersticas descrita ms ampliamente en el captulo de referencias. No hay nada
mejor para aprender que practicar.
4.4.1. Parche bicbico
4.4.2. Burbuja
Las burbujas se pueden describir como esferas y cilindros que tienden a fusionarse unos con otros
cuando estn prximos. Ideales para modelar tomos y molculas, estos objetos son tambin
herramientas poderosas que nos permiten crear variadas formas orgnicas.
PERSISTENCE OF VISION RAYTRACER 35
Una manera ms matemtica de describir una burbuja es decir que es un objeto hecho de dos o ms
componentes, de forma que cada componente se comporta como un campo de fuerza invisible que
comienza con una intensidad determinada y decae a cero a cierto radio. Donde esos campos se solapan,
sus intensidades se suman (algunos de esos componentes pueden tener intensidad negativa, tambin).
Lo que nosotros vemos de este objeto es la superficie en la que esa intensidad es igual a un determinado
valor. Por supuesto, podemos tener un solo componente en una burbuja, pero su aspecto es idntico a
una esfera (o a un cilindro, si sa es la forma del campo). La verdadera belleza de este objeto es la forma
en la que unos componentes interactan con los otros.
Tomemos un ejemplo simple de burbuja para empezar. Para simplificar este primer ejemplo, slo
usaremos componentes esfricos. Escribamos el siguiente cdigo, compuesto de una cmara sencilla,
luz, y una burbuja con slo dos componentes. Esta escena se llama BLOBDEM1.POV:
#include "colors.inc"

camera {
angle 15
location <0,2,-10>
look_at <0,0,0>
}

light_source { <10, 20, -10> color White }

blob {
threshold .65
sphere { <.5,0,0>, .8, 1 pigment {Blue} }
sphere { <-.5,0,0>,.8, 1 pigment {Pink} }

finish { phong 1 }
}
El umbral (threshold) es simplemente la intensidad en la que nuestro objeto se vuelve visible.
Cualquier punto visible de la superficie del objeto rene exactamente esa cantidad de intensidad, a partir
de la suma o la diferencia de las diferentes componentes. Aquellos en los que la intensidad es menor
estn fuera del objeto, y los que tienen una intensidad mayor se encuentran en el interior.
Observemos que el componente esfrico parece una esfera. De hecho, indicamos su centro y su radio.
Pero qu es el ltimo valor numrico? Es la intensidad de ese componente, el valor que alcanza en su
centro. Decae siguiendo una progresin lineal hasta alcanzar el valor cero exactamente a una distancia
igual al radio de la esfera.

Figura 3: Una sencilla burbuja con dos componentes
4. TUTORIAL PARA PRINCIPIANTES 36
Antes de trazar esta imagen, observemos que le hemos dado a cada componente una pigmentacin
distinta. POV-Ray permite que los componentes tengan distintas texturas. Hemos hecho esto para dejar
claro cul es cada componente en la imagen. Tambin podemos aplicar texturas al final, lo que afectar
a todos los componentes, como el acabado indicado en el ejemplo, fuera de ambas esferas. Cuando
tracemos la imagen, encontraremos una burbuja tpica formada por dos esferas unidas.
La imagen que vemos muestra una esfera en cada lado, pero estn suavemente unidas por una seccin
puente en el centro. Este puente representa dnde los campos se solapan, por lo que su intensidad
aumenta con respecto a lo que valdra si slo hubiese un componente. Por si esto no est totalmente
claro, aadiremos dos objetos ms y la trazaremos de nuevo (archivo BLOBDEM2.POV). Observa que las
dos nuevas esferas se introducen como un objeto a parte, no como componentes de la burbuja.
sphere { <.5,0,0>, .8
pigment { Yellow transmit .75 }
}

sphere { <-.5,0,0>, .8
pigment { Green transmit .75 }
}
Ahora el secreto de las dos esferas unidas se pone de manifiesto. Estas esferas semitransparentes
muestran dnde estn realmente las componentes de la burbuja. Si no hemos trabajado nunca con este
tipo de objetos quiz nos sorprenda que las esferas se extiendan mucho ms all de donde vemos
nosotros realmente los componentes. Esto es debido a que lo que muestran las superficies de las esferas
es dnde la fuerza de los campos llega a cero, mientras que la burbuja marca dnde esta intensidad es
igual a 0.65. El resto de la esfera es exterior a la burbuja y, por tanto, no es visible.
Ves dnde se solapan ambas esferas? Observa que se corresponde precisamente con el "puente" entre
las dos esferas. Esta es la regin donde la intensidad de ambos componentes est contribuyendo a la
intensidad total, por lo que el puente aparece as: una regin en la que la intensidad supera el valor de
umbral (0.65), debido a que se combina la de las dos esferas.
4.4.2.1. Tipos de componentes y otras caractersticas nuevas.
La forma mostrada hasta ahora es interesante, pero limitada. POV-Ray tiene unos cuantos trucos ms
que extiende su utilidad. Por ejemplo, como hemos visto, podemos asignar valores de textura
individualmente a cada componente, podemos aplicar transformaciones individuales (traslacin,

Figura 4: Las componentes esfricas se hacen visibles
PERSISTENCE OF VISION RAYTRACER 37
rotacin y escalado) para modificar cada parte como deseemos. Y, lo que quiz es ms interesante, el
cdigo de las burbujas se ha extendido a componentes cilndricas.
Antes de empezar con los cilindros, deberamos mencionar que la forma clsica de enunciar las
componentes de anteriores versiones de POV-Ray an sirve. Entonces, todas las componentes eran
esfricas, de forma que no era necesario citar su forma. La forma clsica tiene el siguiente aspecto:
component intensidad, radio,
Esto tiene el mismo efecto que un componente esfrico, como los que hemos mostrado antes. Esto
slo se mantiene por compatibilidad. Si tenemos archivos de POV-Ray de anteriores versiones, lo
necesitaremos para que reconozca las componentes. Observa que el estilo clsico no pone llaves
encerrando la intensidad, el radio y el centro, y, por supuesto, no podemos aplicarles individualmente
texturas o transformaciones. De manera que si ests modificando un trabajo antiguo, tal vez sea
interesante cambiar la sintaxis a la actual para conseguir algunas ventajas.
Ahora intentemos crear algo con las componentes cilndricas. Se podra argumentar que podramos
hacer un cilindro con una burbuja, usando algunas componentes esfricas alineadas. Esto es cierto,
pero sera delicado calcular el valor de los centros, y deberamos teclear mucho ms.
Sustituye la burbuja del ltimo ejemplo con lo siguiente y trzalo. Podemos borrar las esferas
transparentes tambin.
blob {
threshold .65

cylinder { <-.75,-.75,0>, <.75,.75,0>, .5, 1 }

pigment { Blue }
finish { phong 1 }
}
Tenemos slo un componente cilndrico para que veamos el aspecto que tiene aislado. No es realmente
un cilindro, pues acaba en dos semiesferas. Podemos pensar en l como una esfera alargada en cierta
direccin.
En cuanto a la sintaxis, es lo que podamos esperar: el cilindro est descrito como los cilindros
anteriormente vistos: dos vectores que indican los centros de sus bases y un valor que indica el radio. El
otro nmero, por supuesto, indica la intensidad del campo en el centro del cilindro. Este valor indica
cmo interacta con otras componentes, si tiene alguna con la que interactuar.
4.4.2.2. Construcciones complejas con burbujas e intensidad negativa.
Iniciemos un archivo POV nuevo, llamado BLOBDEM3.POV, escribiendo este ejemplo algo ms
complejo:
#include "colors.inc"

camera {
angle 20
location<0,2,-10>
look_at<0,0,0>
}

light_source { <10, 20, -10> color White }

blob {
threshold .65

sphere { <-.23,-.32,0>,.43, 1 scale <1.95,1.05,.8> } //palma
sphere { <+.12,-.41,0>,.43, 1 scale <1.95,1.075,.8> } //palma
sphere { <-.23,-.63,0>, .45, .75 scale <1.78, 1.3,1> } //centro de la mano
4. TUTORIAL PARA PRINCIPIANTES 38
sphere { <+.19,-.63,0>, .45, .75 scale <1.78, 1.3,1> } //centro de la mano
sphere { <-.22,-.73,0>, .45, .85 scale <1.4, 1.25,1> } //extremo
sphere { <+.19,-.73,0>, .45, .85 scale <1.4, 1.25,1> } //extremo

cylinder { <-.65,-.28,0>, <-.65,.28,-.05>, .26, 1 } //meique (bajo)
cylinder { <-.65,.28,-.05>, <-.65, .68,-.2>, .26, 1 } //meique (alto)

cylinder { <-.3,-.28,0>, <-.3,.44,-.05>, .26, 1 } //anular (bajo)
cylinder { <-.3,.44,-.05>, <-.3, .9,-.2>, .26, 1 } //anular (alto)

cylinder { <.05,-.28,0>, <.05, .49,-.05>, .26, 1 } //medio (bajo)
cylinder { <.05,.49,-.05>, <.05, .95,-.2>, .26, 1 } //medio (alto)

cylinder { <.4,-.4,0>, <.4, .512, -.05>, .26, 1 } //ndice (medio)
cylinder { <.4,.512,-.05>, <.4, .85, -.2>, .26, 1 } //ndice (alto)

cylinder { <.41, -.95,0>, <.85, -.68, -.05>, .25, 1 } //pulgar (bajo)
cylinder { <.85,-.68,-.05>, <1.2, -.4, -.2>, .25, 1 } //pulgar (alto)

pigment { Flesh }
}
Como podemos ver por los comentarios, estamos construyendo una mano. Cuando tracemos esta
imagen, veremos que hay ciertos problemas con esta. La palma y la parte baja se pueden hacer ms
realistas si usamos una docena de componentes pequeas en lugar de media docena de componentes
grandes, y cada dedo debera tener tres segmentos en lugar de dos, pero como ejemplo nos sirve. Sin
embargo, hay una cosa que realmente debemos aadir: los dedos aparecen unidos por una especie de
membrana.
Una revisin de lo que sabemos de las burbujas nos revela rpidamente qu sucede. Esta membrana
est formada por lugares donde las componentes se solapan, por lo que la intensidad de las
componentes se suma y la superficie se extiende hacia ellos. Lo que necesitamos es aadir aqu algunas
componentes ms que tengan intensidad negativa y contrarresten parte de la intensidad combinada.
Aadiremos las siguientes componentes a nuestro objeto (ver archivo BLOBDEM4.POV):
sphere { <-.65,.28,-.05>, .26, -1 } //anula el bulto del nudillo del meique
sphere { <-.65,-.28,0>, .26, -1 } //anula el bulto de la palma junto al
meique

sphere { <-.3,.44,-.05>, .26, -1 } //anula el bulto del nudillo del anular

Figura 5: Una mano hecha con burbujas
PERSISTENCE OF VISION RAYTRACER 39
sphere { <-.3,-.28,0>, .26, -1 } //anula el bulto de la palma junto al
anular

sphere { <.05,.49,-.05>, .26, -1 } //anula el bulto del nudillo del medio
sphere { <.05,-.28,0>, .26, -1 } //anula el bulto de la palma junto al medio

sphere { <.4,.512,-.05>, .26, -1 } //anula el bulto del nudillo del ndice
sphere { <.4,-.4,0>, .26, -1 } //anula el bulto de la palma junto al
ndice

sphere { <.85,-.68,-.05>, .25, -1 } //anula el bulto del nudillo del pulgar
sphere { <.41,-.7,0>, .25, -.89 } //anula el bulto de la palma junto al
pulgar
Mucho mejor! La intensidad negativa de la componente esfrica acta aproximadamente en el punto
medio entre los dedos, de forma que la horrible membrana ya no aparece, haciendo nuestra mano
mucho ms creble. Aunque la podemos hacer an ms realista aadiendo algunas docenas de
componentes adicionales, lo que hemos conseguido ya es bastante aceptable. Por ahora, ya tenemos
algn ejemplo de la utilizacin de las burbujas para crear superficies orgnicas complejas.
4.4.3. Campo de alturas
Un campo de alturas es un objeto cuya superficie est determinada por el valor de color o de paleta de
cada pxel de una imagen diseada para este propsito. Con estos objetos podemos simular montaas
realistas y hacer fcilmente otros tipos de terreno. En primer lugar, necesitamos una imagen a partir de
la cual crearemos el campo de alturas. POV-Ray es ideal para crear tal imagen.
Abrimos un nuevo archivo llamado IMAGE.POV y escribimos lo siguiente:
#include "colors.inc"

global_settings {
assumed_gamma 2.2
hf_gray_16
}
La palabra clave hf_gray_16 hace que la salida sea codificada de un modo especial (16 bits en escala
de grises) que es ideal para generar campos de alturas. Las superficies construidas con 8 bits son mucho
menos suaves, ya que se trabaja con menos alturas diferentes (256 frente a 65536 de los 16 bits).
Ahora situamos una cmara que apunta desde la parte negativa del eje z al origen.

Figura 6: La mano sin membrana
4. TUTORIAL PARA PRINCIPIANTES 40
camera {
location <0, 0, -10>
look_at 0
}
Despus, situamos un plano como un muro en z=0, que llenar totalmente la pantalla. Lo coloreamos
con manchas con forma de arrugas grises sobre fondo blanco.
plane { z, 10
pigment {
wrinkles
color_map {
[0 0.3*White]
[1 White]
}
}
}
Finalmente, aadiremos una luz.
light_source { <0, 20, -100> color White }
Trazamos esta escena con las opciones +h480 +w640 +a0.1 +fT. Obtendremos una imagen que
producir un excelente campo de alturas. Creamos ahora un archivo llamado HFDEMO.POV y escribimos
en l lo siguiente:
#include "colors.inc"
Aadimos una cmara dos unidades sobre el origen y diez unidades por detrs...
camera{
location <0, 2, -10>
look_at 0
angle 30
}
... y una luz.
light_source{ <1000,1000,-1000> White }
Ahora aadimos el campo de alturas. En la sintaxis siguiente se especifica que usamos un archivo
Targa, que se suaviza el cambio entre alturas, se colorea de blanco, y se traslada para centrarlo en el
origen y escalarlo de forma que simule montaas y llene la pantalla.
height_field {
tga "image.tga"
smooth
pigment { White }
translate <-.5, -.5, -.5>
scale <17, 1.75, 17>
}
PERSISTENCE OF VISION RAYTRACER 41
Guardamos el archivo y trazamos a 320 por 240, sin antialias (-a). Despus, si estamos satisfechos con
el resultado, probaremos a crear una imagen de mayor resolucin y con antialias.
Uao! El Himalaya en nuestro ordenador!
4.4.4. Objeto torneado (lathe)
Estos objetos simulan lo que podemos hacer con un torno puede hacer al cortar bordeando un patrn
determinado sobre una pieza de algn material. El resultado es un artefacto elegantemente redondeado
que puede ser usado en una gran diversidad de situaciones (mesas, piezas de cermica, etc.).
Aqu incluimos algo de cdigo para crear una pieza torneada muy sencilla (llamada LATHDEM1.POV).
#include "colors.inc"

camera {
angle 10
location <1, 9, -50>
look_at <0, 2, 0>
}

light_source {
<20, 20, -20> color White
}

lathe {
linear_spline
6,
<0,0>, <1,1>, <3,2>, <2,3>, <2,4>, <0,4>
pigment { Blue }
finish {
ambient .3
phong .75
}
}

Figura 7: Un campo de alturas creado ntegramente con POV-
Ray

Figura 8: Un sencillo objeto torneado (lathe)
4. TUTORIAL PARA PRINCIPIANTES 42
Trazamos esto, y lo que veremos es un objeto muy sencillo, similar a una peonza. Veamos cmo este
cdigo produce dicho efecto.
Primero, se declaran seis puntos que el programa conecta con lneas. Observa que slo indicamos dos
componentes en los vectores que describen esos puntos. Se asume que las lneas estn trazadas sobre el
plano x-y, como si la tercera componente fuese siempre cero. Es obligatorio usar vectores de dos
componentes (usar vectores de tres componentes ocasionar un error, excepto en un caso que
exploraremos posteriormente, relacionado con la discusin de las curvas spline).
Una vez que las lneas estn determinadas, podemos imaginar que el trazador de rayos gira esta lnea
alrededor del eje y, dejando la forma del objeto al paso de la lnea (realmente, es como si cortara sobre
un cilindro de material azul usando esta lnea de patrn, y descartara todo lo que queda en el exterior de
sta).
Los puntos especificados estn unidos por trazos rectos porque usamos la clave linear_spline.
Hay otros tipos de curvas permitidas para este fin, que producen curvas ms suaves, redondeando las
transiciones entre un trazo y otro, pero volveremos a hablar de ello dentro de un momento.
Primero, estudiemos la diferencia entre un objeto torneado y una superficie de revolucin (sor). La
superficie de revolucin, descrito en un tutorial aparte, es terriblemente similar a primera vista.
Tambin declara una serie de puntos, los une mediante lneas y despus rota el resultado alrededor del
eje y. El objeto torneado tiene ciertas ventajas, como diferentes tipo de trazos de unin (lineales,
cuadrticos y cbicos) y algo ms.
Las sencillas matemticas usadas en un SOR no permiten que la curva se doble y tome por dos veces el
mismo valor de y, es decir, que todo intento de que un objeto SOR se curve hasta volver a tomar la
misma altura produce un error. Por ejemplo, supongamos que queremos tornear una curva que sube de
<0, 0> hasta <2, 2>, y despus baja hasta <4, 0>. Girado en torno al eje y, esto producira algo similar
a un molde para gelatina (un semitoro), hundido en el centro. Sin embargo, en un SOR, el intento dar
un mensaje de error debido a intentar curvarse en la direccin equivocada.
Sin embargo, los objetos SOR utilizan matemtica de inferior orden, por lo que su clculo es ms
rpido que el equivalente objeto torneado. De manera que es preferible usar un objeto SOR si sus
limitaciones no nos afectan, pero si necesitamos tornear de una forma ms flexible, slo podemos
utilizar un objeto torneado.
4.4.4.1. Entendiendo el concepto de splines
Sera til, a fin de comprender las splines, si tuviramos un ejemplo donde pudiramos practicar
manipulando puntos y tipos de splines y ver cuales son los efectos. As que, hagamos uno! Ahora que
sabemos como crear un torno bsico, ser fcil (ver archivo LATHDEM2.POV):
#include "colors.inc"

camera {
orthographic
up <0, 5, 0>
right <5, 0, 0>
location <2.5, 2.5, -100>
look_at <2.5, 2.5, 0>
}

/* Definir los puntos de control que sern usados */

#declare Red_Point = <1.00, 0.00, 0>
#declare Orange_Point = <1.75, 1.00, 0>
#declare Yellow_Point = <2.50, 2.00, 0>
#declare Green_Point = <2.00, 3.00, 0>
#declare Blue_Point = < 1.50, 4.00, 0>
PERSISTENCE OF VISION RAYTRACER 43

/* Hacer visibles los puntos de control */

cylinder { Red_Point, Red_Point - 20*z, .1
pigment { Red }
finish { ambient 1 }
}

cylinder { Orange_Point, Orange_Point - 20*z, .1
pigment { Orange }
finish { ambient 1 }
}

cylinder { Yellow_Point, Yellow_Point - 20*z, .1
pigment { Yellow }
finish { ambient 1 }
}

cylinder { Green_Point, Green_Point - 20*z, .1
pigment { Green }
finish { ambient 1 }
}

cylinder { Blue_Point, Blue_Point- 20*z, .1
pigment { Blue }
finish { ambient 1 }
}

/* Algo para hacer aparecer la curva */

lathe {
linear_spline
5,
Red_Point,
Orange_Point,
Yellow_Point,
Green_Point,
Blue_Point

pigment { White }
finish { ambient 1 }
}

Figura 9: Un simple ejemplo de spline
4. TUTORIAL PARA PRINCIPIANTES 44
Ahora, retomamos el aliento. Vemos que tiene una apariencia un poco rara, pero con algunas simples
explicaciones, podemos ver fcilmente qu es lo que hace todo esto.
En primer lugar decir que estamos usando la cmara ortogrfica. Si an no hemos ledo nada sobre ella,
aqu hay un breve resumen: traza la escena plana, eliminando la distorsin de la perspectiva para que en
una vista lateral, los objetos tengan la misma apariencia que si hubieran sido dibujado en un plano de
papel (como en la vista lateral de un modelador o programa de CAD). Hay varios usos para este
prctico nuevo tipo de cmara, pero aqu nos permitir ver nuestro torno y cilindros como si fueran
una seccin transversal de la curva que forma el torno, ms que el torno en s mismo. Para reforzar el
efecto hemos eliminado el sombreado con el acabado ambient 1 que, en efecto tambin elimina la
necesidad de una fuente de luz. Tambin hemos posicionado esta particular vista lateral para que el
punto <0, 0> aparezca en la esquina inferior izquierda de nuestra escena.
A continuacin hemos declarado un conjunto de puntos. Ntese que hemos usado vectores de tres
componentes para estos puntos, en lugar de los vectores de dos que solemos usar en un torno. Esta es
una excepcin que ya mencionamos antes. Cuando declaramos un punto 3D y lo usamos en un torno,
este solo usa las dos primeras componentes del vector y la tercera componente es ignorada. Esto es
prctico aqu, ya que hace posible este ejemplo.
Ahora hacemos dos cosas con los puntos declarados. Primeros los usamos para colocar cilindros de
pequeo dimetro con las bases apuntando a la cmara. Entonces volvemos a usar esos mismos
vectores para determinar el torno. Ya que intentar declarar vectores en 2D puede ocasionar resultados
no esperados y no es lo que necesitan nuestras declaraciones de cilindros, podemos aprovechar la
tendencia del torno a ignorar la tercera componente poniendo la coordenada z a 0 en los vectores en
3D.
El resultado final es: cuando trazamos este cdigo, vemos un torno de color blanco contra un fondo
negro mostrndonos la forma de la curva que hemos declarado y las bases circulares de los cilindros
nos muestran nuestros puntos de control sobre el plano xy. En este caso, es muy simple. La spline
lineal ha sido usada de forma que nuestra curva est compuesta por una serie de lneas conectando los
puntos. Ahora cambiamos las declaraciones de Red_Point y Blue_Point de la siguiente forma (ver
fichero LATHDEM3.POV).
#declare Red_Point = <2.00, 0.00 , 0>
#declare Blue_Point = <0.00, 4.00, 0>

Figura 10: Moviendo algunos puntos de la spline
PERSISTENCE OF VISION RAYTRACER 45
Trazamos de nuevo y lo que podemos ver es que los segmentos rectos se han movido para acomodarse
a las nuevas posiciones de los puntos rojo y azul.
Vamos a intentar algo distinto. Primero cambiamos los puntos por estos otros (ver fichero
LATHDEM4.POV).
#declare Red_Point = <1.00, 0.00, 0>
#declare Orange_Point = <2.00, 1.00, 0>
#declare Yellow_Point = <3.50, 2.00, 0>
#declare Green_Point = <2.00, 3.00, 0>
#declare Blue_Point = <1.50, 4.00, 0>
Ahora vamos a la declaracin del torno y cambiamos linear_spline por quadratic_spline.
Trazamos de nuevo y qu tenemos? Bien, esta vez hay varias cosas que comentar. Primero, vemos que,
en lugar de lneas rectas, tenemos redondeados arcos conectando los puntos. Estos arcos estn
formados a partir de curvas cuadrticas, de manera que ahora nuestro torno parece mucho ms
interesante. Tambin vemos que el punto rojo no est conectado a la curva. Qu ha pasado?
Bien, mientras que cualquier pareja de puntos puede determinar una lnea recta, se necesitan tres para
determinar una curva cuadrtica. POV-Ray no solo tiene en cuenta los dos puntos a ser conectados, si
no tambin el punto que los precede para determinar la frmula de la curva cuadrtica que ser usada
para conectarlos. El problema est al principio de la curva. Ms all de su primer punto no hay punto
previo. As que necesitamos declarar uno. Por lo tanto, cuando se usa una spline cuadrtica, debemos
recordar que el primer punto que especificamos solo est all para que POV-Ray pueda determinar la
curva para conectar los dos primeros puntos. No se mostrar como parte de la curva.
Solo hay una cosa ms acerca de este ejemplo. A pesar de que nuestra curva est formada ahora por
lneas redondeadas, las transiciones entre estas lneas son... bueno, un poco picadas. Parece que las
lneas hubieran sido conectadas en los puntos de forma equivocada. Dependiendo de lo que intentemos
hacer, esto puede ser aceptable, o podemos desear una forma ms redondeada. Afortunadamente
tenemos otra opcin.
La spline cuadrtica necesita ms tiempo de trazado que la lineal. La frmula matemtica es ms
compleja. Ms tiempo necesita an la spline cbica, aunque para una figura realmente redondeada, esta
es la nica opcin. Volvemos a nuestro ejemplo y reemplazamos quadratic_spline por
cubic_spline (ver archivo LATHDEM5.POV). Trazamos una vez ms y vemos lo que tenemos.

Figura 11: La spline cuadrtica.
4. TUTORIAL PARA PRINCIPIANTES 46
Mientras que una spline cuadrtica necesita tres puntos para determinar la curva, una cbica necesita
cuatro. As que, como esperbamos, el punto azul ha dejado de formar parte de la curva, como antes
pas con el punto rojo. Ahora el primer y el ltimo punto de la curva son solo puntos de control para
determinar las curvas entre los restantes puntos. Pero echemos un vistazo a las transiciones desde el
punto naranja hasta el punto amarillo y despus hasta el verde. Ahora, en lugar de parecer equivocados,
los segmentos forman una sola y completamente redondeada curva.
El concepto de las splines es algo til y necesario, que se volver a ver de nuevo en los objetos prisma y
polgono. Con un poco de prctica podemos aprenderlo a usar rpidamente.
4.4.5. Malla de tringulos
Los objetos malla (mesh) son muy tiles, porque nos permiten crear objetos conteniendo cientos o
miles de tringulos. Comparados con una simple unin de tringulos, las mallas almacenan los
tringulos de manera ms eficiente. Las copias de los objetos malla necesitan muy poca memoria
adicional, porque los tringulos se almacenan slo una vez.
Casi todos los objetos se pueden aproximar usando tringulos, pero necesitaramos muchos tringulos
para crear formas complejas. De modo que crearemos una malla muy simple como ejemplo. Este
ejemplo nos mostrar adems una caracterstica muy til de las mallas de tringulos: se puede aplicar
una textura diferente a cada tringulo.
Comencemos. Crearemos una simple caja con caras de diferente color. Crea un archivo llamado
MESHDEMO.POV y aade las siguientes lneas:
camera {
location <20, 20, -50>
look_at <0, 5, 0>
}

light_source { <50, 50, -50> color rgb<1, 1, 1> }

#declare Red = texture {
pigment { color rgb<0.8, 0.2, 0.2> }
finish { ambient 0.2 diffuse 0.5 }
}

#declare Green = texture {
pigment { color rgb<0.2, 0.8, 0.2> }
finish { ambient 0.2 diffuse 0.5 }

Figura 12: La spline cbica
PERSISTENCE OF VISION RAYTRACER 47
}

#declare Blue = texture {
pigment { color rgb<0.2, 0.2, 0.8> }
finish { ambient 0.2 diffuse 0.5 }
}
Debemos declarar todas las texturas que queremos incluir en la malla antes de crear sta. Las texturas
no se pueden especificar dentro de la malla debido a que el rendimiento de la memoria decaera.
Ahora aadimos la malla. Tres caras de la caja usarn textura individual, mientras que las otras tres
usarn la textura global de la malla.
mesh {
/* top side */
triangle { <-10, 10, -10>, <10, 10, -10>, <10, 10, 10>
texture { Red }
}
triangle { <-10, 10, -10>, <-10, 10, 10>, <10, 10, 10>
texture { Red }
}
/* bottom side */
triangle { <-10, -10, -10>, <10, -10, -10>, <10, -10, 10> }
triangle { <-10, -10, -10>, <-10, -10, 10>, <10, -10, 10> }
/* left side */
triangle { <-10, -10, -10>, <-10, -10, 10>, <-10, 10, 10> }
triangle { <-10, -10, -10>, <-10, 10, -10>, <-10, 10, 10> }
/* right side */
triangle { <10, -10, -10>, <10, -10, 10>, <10, 10, 10>
texture { Green }
}
triangle { <10, -10, -10>, <10, 10, -10>, <10, 10, 10>
texture { Green }
}
/* front side */
triangle { <-10, -10, -10>, <10, -10, -10>, <-10, 10, -10>
texture { Blue }
}
triangle { <-10, 10, -10>, <10, 10, -10>, <10, -10, -10>
texture { Blue }
}
/* back side */
triangle { <-10, -10, 10>, <10, -10, 10>, <-10, 10, 10> }
triangle { <-10, 10, 10>, <10, 10, 10>, <10, -10, 10> }
texture {
pigment { color rgb<0.9, 0.9, 0.9> }
finish { ambient 0.2 diffuse 0.7 }
}
}
Trazando la escena a 320x240 veremos que la cara superior, la derecha y la frontal tienen diferente
textura. De acuerdo que este no es un ejemplo impresionante de lo que podemos hacer con las mallas.
Puedes encontrar ejemplos ms complejos, usando tringulos suavizados, en el directorio de escenas
con los nombres CHESMSH.POV y ROBOTMSH.POV.
4.4.6. Polgono
El objeto polgono se puede usar para crear formas planas de n lados, como cuadrados, rectngulos,
pentgonos, hexgonos, octgonos, etc.
Un polgono se define por un determinado nmero de puntos que describen su forma. Como los
polgonos han de ser cerrados, el primer punto y el ltimo deben coincidir.
4. TUTORIAL PARA PRINCIPIANTES 48
En el siguiente ejemplo crearemos la palabra POV usando polgonos.
Comenzaremos considerando los puntos que necesitamos para describir la forma deseada. Queremos
que las letras se encuentren sobre el plano x-y, con la letra O en el centro. Las letras se extienden desde
y=0 hasta y=1. De modo que tenemos los siguientes puntos para cada letra (la coordenada z se pone
automticamente a 0).
Letra P (polgono externo):
<-0.8, 0.0>, <-0.8, 1.0>,
<-0.3, 1.0>, <-0.3, 0.5>,
<-0.7, 0.5>, <-0.7, 0.0>

Letra P (polgono interno):
<-0.7, 0.6>, <-0.7, 0.9>,
<-0.4, 0.9>, <-0.4, 0.6>

Letra O (polgono externo):
<-0.25, 0.0>, <-0.25, 1.0>,
< 0.25, 1.0>, < 0.25, 0.0>

Letra O (polgono interno):
<-0.15, 0.1>, <-0.15, 0.9>,
< 0.15, 0.9>, < 0.15, 0.1>

Letra V:
<0.45, 0.0>, <0.30, 1.0>,
<0.40, 1.0>, <0.55, 0.1>,
<0.70, 1.0>, <0.80, 1.0>,
<0.65, 0.0>
Las letras P y O tienen un agujero, mientras que la letra V consiste slo en un polgono. Empezaremos
por la letra V ya que es la ms fcil de definir.
Creamos un archivo llamado POLYDEM.POV y aadimos el siguiente texto:
camera {
orthographic
location <0, 0, -10>
right 1.3 * 4/3 * x
up 1.3 * y
look_at <0, 0.5, 0>
}

light_source { <25, 25, -100> color rgb 1 }

polygon {
8,

<0.45, 0.0>, <0.30, 1.0>, // Letra "V"
<0.40, 1.0>, <0.55, 0.1>,
<0.70, 1.0>, <0.80, 1.0>,
<0.65, 0.0>,
<0.45, 0.0>

pigment { color rgb <1, 0, 0> }
}
Como ya hemos dicho el polgono ha de cerrarse aadiendo el primer punto al final de la secuencia. Un
polgono cerrado siempre se define como una secuencia de puntos que termina cuando un punto es el
mismo que el primero.
Despus de crear la letra V continuaremos con la letra P. Como tiene un agujero hemos de encontrar
una manera de recortar este agujero de la forma original. Esto es muy fcil. Definimos la forma externa
PERSISTENCE OF VISION RAYTRACER 49
de la letra P, que es un polgono cerrado, y aadimos la secuencia de puntos que definen el agujero, que
tambin es un polgono cerrado. As tendremos un agujero en donde los dos polgonos se solapen.
En general obtendremos agujeros siempre que un nmero par de subpolgonos se solapen en una nica
sentencia de polgono. Un subpolgono est definido por una secuencia cerrada de puntos.
La letra P consiste en dos subpolgonos, uno para la forma exterior y el otro para el agujero. Como el
polgono del agujero solapa al polgono externo, tendremos un agujero.
Una vez que sabemos como funcionan varios subpolgonos dentro de una nica sentencia de polgono,
es bien fcil aadir la letra O.
Finalmente, tenemos la palabra completa POV.
polygon {
30,

<-0.8, 0.0>, <-0.8, 1.0>, // Letra "P"
<-0.3, 1.0>, <-0.3, 0.5>, // forma exterior
<-0.7, 0.5>, <-0.7, 0.0>,
<-0.8, 0.0>,

<-0.7, 0.6>, <-0.7, 0.9>, // agujero
<-0.4, 0.9>, <-0.4, 0.6>,
<-0.7, 0.6>

<-0.25, 0.0>, <-0.25, 1.0>, // Letra "O"
< 0.25, 1.0>, < 0.25, 0.0>, // forma exterior
<-0.25, 0.0>,

<-0.15, 0.1>, <-0.15, 0.9>, // agujero
< 0.15, 0.9>, < 0.15, 0.1>,
<-0.15, 0.1>,

<0.45, 0.0>, <0.30, 1.0>, // Letra "V"
<0.40, 1.0>, <0.55, 0.1>,
<0.70, 1.0>, <0.80, 1.0>,
<0.65, 0.0>,
<0.45, 0.0>

pigment { color rgb <1, 0, 0> }
}

Figura 13: La palabra "POV" hecha con polgonos
4. TUTORIAL PARA PRINCIPIANTES 50
4.4.7. Prisma
Un prisma es esencialmente un polgono o una curva cerrada barrida a lo largo de una trayectoria recta..
Podemos imaginarnos la figura como la superficie que dejara la curva al arrastrarla por el espacio. La
curva o polgono que define un prisma puede estar formada por cualquier nmero de subformas, puede
usar cualquiera de los tres tipos de curvas spline, y puede incluso mantener una anchura constante a lo
largo del barrido o ir estrechndose lentamente hasta acabar en un punto. Pero antes de que todo esto
comience a ser confuso, vamos a ir paso a paso con la forma ms simple de prisma. Tecleamos y
trazamos el siguiente trozo de cdigo, (ver PRISMDM1.POV)
#include "colors.inc"

camera {
angle 20
location <2, 10, -30>
look_at <0, 1, 0>
}

light_source { <20, 20, -20> color White }

prism {
linear_sweep
linear_spline
0, // barrer la siguiente curva desde aqu ...
1, // ... hasta aqu
7, // el nmero de puntos que forman la curva ...

<3,5>, <-3,5>, <-5,0>, <-3,-5>, <3, -5>, <5,0>, <3,5>

pigment { Green }
}
Esto produce un hexgono, que es barrido desde y=0 hasta y=1. En otras palabras, ahora tenemos un
hexgono con grosor. Un punto a tener en cuenta es que aunque esta sea una figura de seis caras,
hemos usado en total siete puntos. Esto es debido a que el polgono se supone que es cerrado, lo cual
hacemos que el ltimo punto coincida con el primero. Tcnicamente, con polgonos lineales, si no
hacemos esto POV-Ray unira automticamente los dos extremos con una lnea para forzar el cerrado,
aunque nos dara una advertencia. Sin embargo, esto slo funciona con splines lineales, as que no
debemos pasar por alto estos mensajes de advertencia.

Figura 14: Un prisma hexagonal
PERSISTENCE OF VISION RAYTRACER 51
4.4.7.1. Nuevos trucos para las curvas spline
Si hemos seguido la seccin sobre splines cubierta en el tutorial del torno (ver seccin "Entendiendo el
concepto de splines"), sabremos que hay dos tipos adicionales de spline a parte de la lineal: la spline
cuadrtica y la cbica. Por supuesto las podemos usar con los prismas para crear una forma ms libre y
redondeada.
Solo hay una cosa tener en cuenta y deberamos leer esta seccin con cuidado para no acabar
tirndonos de los pelos debido a misteriosos mensajes de que nos hacen falta puntos y que nos impiden
renderizar el prisma. Podemos adivinar a donde nos lleva todo esto: como cerrar una spline no lineal.
A diferencia de una spline lineal, que simplemente dibuja una lnea entre el primer y ltimo punto si
olvidamos hacer que estos sean el mismo, las splines cuadrticas y cbicas son un poco ms exigentes.
Antes que nada, recordemos que las splines cuadrticas determinan la ecuacin de la curva que conecta
dos puntos cualesquiera basndose en esos dos puntos y el punto previo, de manera que el primer
punto en cualquier spline cuadrtica es tan solo un punto de control y no ser parte de la curva. Lo que
esto significa es: cuando construimos nuestra figura a partir de una spline cuadrtica, debemos igualar el
segundo punto con el ltimo, ya que el primer punto no est sobre la curva, solo es un punto de control
necesario por motivos computacionales.
Igualmente, las splines cbicas necesitan que el primer y ltimo punto sea un punto de control, por lo
tanto, para cerrar una figura construida a partir de una spline cbica debemos igualar el segundo punto
con el penltimo. Si no igualamos los puntos correctos en una figura cuadrtica o cbica, entonces
recibiremos los mensajes de error que nos idican que necesitamos ms puntos para definir el prisma.
POV-Ray espera que nosotros cerremos la figura y cuando termina de procesar todos los puntos sin
encontrar el cierre, se produrce un error.
Confuso? Qu tal un ejemplo? Reemplazamos el prisma en nuestro ltimo fragmento de cdigo por
este (ver archivo PRISMDM2.POV).
prism {
cubic_spline
0, // levantar la figura desde aqui ...
1, // ... hasta aqui
6, // el numero de puntos que formaran la figura ...

< 3, -5>, // point#1 (punto de control... no esta sobre la curva)
< 3, 5>, // point#2 ... ESTE PUNTO ...
<-5, 0>, // point#3
< 3, -5>, // point#4
< 3, 5>, // point#5 ... ES IGUAL QUE ESTE
<-5, 0> // point#6 (punto de control... no esta sobre la curva)

pigment { Green }
}
4. TUTORIAL PARA PRINCIPIANTES 52
Este simple prisma produce lo que parece un triangulo grueso con sus vrtices redondeados. Los
puntos dos, tres y cuatro son los vertices del tringulo y el punto cinco cierra la figura volviendo a la
posicin del punto dos. En lo que respecta a los puntos uno y seis, son nuestros puntos de control y no
forman parte de la figura. Estn all para ayudar a computar que curvas sern usadas entre los otros
puntos.
4.4.7.2. Transiciones suaves
Ahora fijmonos en que hemos hecho que el punto uno sea igual al punto cuatro, y el punto seis que
sea igual al tres. Esto es importante. A pesar de que este prisma ya estara legalmente cerrado sin
necesidad de manipular los puntos de control, las transiciones entre las curvas en cada punto no
hubieran sido tan suaves. Cambiamos los puntos uno y seis a <4, 6> y <0, 7> respectivamente y
renderizamos de nuevo para ver como el vertice trasero de la figura es alterado (ver archivo
PRISMDM3.POV).
Para generalizar, si queremos un cierre suave de una spline cbica, hacemos que el primer punto de
control sea igual al tercero empezando por el final. Para una spline cuadrtica el truco es similar, pero,
ya que solamente el primer punto es un punto de control, hay que hacer que sea igual al penltimo
punto.
4.4.7.3. Mltiples subformas
Al igual que con el objeto polgono (ver seccion "4.4.6. Polgono") el objeto prisma es muy flexible, y
nos permite construir un prisma a partir de varios sub-prismas. Para hacer esto, todo lo que
necesitamos es seguir aadiendo puntos despus de haber cerrado la primera forma. La segunda forma
puede ser simplemente aadida en otra direccin a partir de la primera, pero una de las caractersticas
ms interesantes es que si cierto nmero de subformas se superponen en una regin determinada, esa
regin queda vaca. Veamos otro ejemplo. Una vez ms tenemos el mismo cdigo para la cmara y la
fuente de luz, pero sustituimos el prisma por este otro (ver archivo PRISMDM4.POV).
prism {
linear_sweep
cubic_spline
0, // barrer la figura desde aqui ...
1, // ... hasta aqui
18, // el numero de puntos que formaran la figura ...

<3,-5>, <3,5>, <-5,0>, <3, -5>, <3,5>, <-5,0>, // subforma #1

Figura 15: Forma cbica para un prisma triangular
PERSISTENCE OF VISION RAYTRACER 53
<2,-4>, <2,4>, <-4,0>, <2,-4>, <2,4>, <-4,0>, // subforma #2
<1,-3>, <1,3>, <-3,0>, <1, -3>, <1,3>, <-3,0> // subforma #3

pigment { Green }
}
Por motivos de legibilidad, hemos empezado una nueva lnea cada vez que cambiamos a la siguiente
subforma, pero el trazador de rayos determina donde termina cada subforma basndose en el cierre de
las figuras (como fue descrito antes). Renderizamos el nuevo prisma y vemos lo que tenemos. Es la
misma y familiar forma de antes, pero ahora parece que una pequea versin de la forma haya sido
extrada del centro y dentro del espacio vaco haya sido colocada otra versin todava ms pequea.
Simplemente, la regin exterior est formada por la subforma #1, el agujero excavado es donde las
subforma #1 y la subforma #2 se superponen. En el centro el objeto reaparece debido a que las
subformas #1, #2 y #3 se superponen, devolviendo un nmero impar de piezas superpuestas. Usando
esta tcnica podemos construir prismas extremadamente complejos.
4.4.7.4. Barrido cnico y el efecto de estrechamiento
En nuesto prisma original, el identificador linear_sweep es opcional. Este es el tipo de barrido asumido
por defecto para un prisma si no se especifica ninguno. Pero hay otro tipo de barrido extremamente
til: el barrido cnico. La idea bsica es la del prisma original, excepto que cuando estamos barriendo la
forma desde la primera altura hasta la segunda, la estamos constantemente expandiendo desde un nico
punto hasta que, al llegar a la segunda altura, el objeto tiene la forma que delimitan los puntos a partir
de los cuales est hecho. Para dar una ligera idea de la utilidad de este efecto, reemplazamos nuestro
prisma por este (ver fichero PRISMDM5.POV):
prism {
conic_sweep
linear_spline
0, // altura 1
1, // altura 2
5, // el numero de puntos que forman la figura...

<4,4>,<-4,4>,<-4,-4>,<4,-4>,<4,4>

rotate <180, 0, 0>
translate <0, 1, 0>
scale <1, 4, 1>
pigment { gradient y scale .2 }

Figura 16: Usando subformas para crear formas ms complejas
4. TUTORIAL PARA PRINCIPIANTES 54
}
El pigmento gradiente fue seleccionado para dar algo de definicin a nuestro objeto sin tener que fijar
las fuentes de luz y el ngulo de la cmara, pero cuando lo trazamos, qu es lo que hemos creado?,
Una pirmide rayada horizontalmente! Por ahora podemos reconocer la spline lineal conectando los
cuatro puntos de un cuadrado y el familiar punto final que cierra la spline.
Notemos todas las transformaciones en la declaracin del objeto. Esto va a necesitar una serie de
explicaciones. La rotacin y la traslacin son fciles de entender. Normalmente, un barrido cnico
empieza con el mximo tamao en la parte superior y se va estrechando hasta un punto en y=0, pero
por supuesto esto seria al reves si estamos haciendo una pirmide. As que giramos el objeto respecto al
eje x para colocarlo correctamente. Entonces, ya que hemos rotado respecto al vertice, trasladamos el
objeto hacia arriba para ponerlo en la misma posicin en la que estaba cuando empezamos.
El escalado sirve para adecuar las proporciones a este ejemplo. La base mide ocho unidades por ocho
unidades, pero la altura (desde y=1 hasta y=0) es solode una unidad, as que la estiramos un poco.
Llegados a este punto, probablemente estaremos pensando, Por que no simplemente hacer el barrido
desde y=0 hasta y=4 y evitar este escalado?
Este es un error frecuente con los barridos cnicos. Para ver lo que est mal, pongmoslo en prctica
(ver archivo PRISMDM6.POV). Debemos asegurarnos de quitar el escalado y reemplazar la siguiente lnea
1, // altura 2
por
4, // altura 2
Esto sita la segunda altura a y=4, as que rendericemos de nuevo y veamos si el efecto es el mismo.

Figura 17: Creando una pirmide usando el barrido cnico
PERSISTENCE OF VISION RAYTRACER 55
Vaya... La altura es correcta, pero la base de nuestra pirmide es enorme. Qu es lo que ha ido mal?
Simple, la base, tal como la hemos descrito con los puntos que hemos usado, est situada en y=1 sin
importar donde hayamos situado la segunda altura. Pero si definimos la segunda altura mayor que uno,
una vez que el barrido ha pasado por y=1, continua expandiendo el objeto a lo largo de las mismas
lneas que ha seguido hasta la base original, haciendo que la nueva base sea cada vez ms grande.
Para evitar perder el control de un prisma construido a partir de un barrido cnico, es mejor dejar la
segunda altura en y=1 y hacer un escalado para ajustar la altura desde su tamao unitario. De esta forma
siempre podremos estar seguros de que las esquinas de la base permanecen donde creemos que deben
estar.
Esto nos lleva a otro punto interesante acerca de los barridos cnicos. Qu pasa si, por alguna razn,
no queremos que el estrechamiento llegue a un nico punto? Qu pasa si en lugar de una pirmide
completa, lo que queremos es algo mas parecido a un zigurat escalonado? Nada ms fcil. Despus de
poner la segunda altura otra vez a uno y poner de nuevo el escalado, cambiamos la siguiente lnea
0, // altura 1
por
0.9, // altura 1

Figura 18: Escogiendo una segunda altura mayor que uno para
el barrido cnico
4. TUTORIAL PARA PRINCIPIANTES 56
Cuando trazamos de nuevo, vemos que el barrido termina poco antes de llegar al vrtice, mostrndonos
una pirmide sin punta. La altura a la que es cortada la pirmide depende de lo cerca que est la primera
altura de la segunda.
4.4.8. Elipsoide supercudrico
A veces queremos utilizar un objeto similar a una caja cuyos bordes no son rectos, si no redondeados
(suavizados). Este objeto es muy til para ese fin. Se describe mediante la sintaxis:
superellipsoid { <r, n> }
Donde r y n son valores decimales entre cero y uno. Probemos alguno para ver que tipo de formas
producen.
Abrimos un archivo llamado SUPELLPS.POV y escribimos lo siguiente:
#include "colors.inc"
camera {
location <10, 5, -20>
look_at 0
angle 15
}
background { color rgb <.5, .5, .5> }
light_source { <10, 50, -100> White }
El color de fondo gris hace ms sencillo ver nuestro objeto. Ahora escribimos:
superellipsoid { <.25, .25>
pigment { Red }
}
Guardamos el archivo y lo trazamos a tamao 200x150. Parece una caja, pero sus bordes estn
redondeados. Ahora experimentemos diferentes valores para r y n.
Para la siguiente prueba, intenta <1, 0.2>. La forma parece un cilindro, aunque los bordes de las caras
estn redondeados.
Intentmoslo ahora con <0.1, 1>. Es difcil describir esta figura, pero es interesante.
Finalmente, probemos <1, 1>. Bueno, esto es ms familiar... una esfera!

Figura 19: Incrementando la primera altura para el barrido
cnico
PERSISTENCE OF VISION RAYTRACER 57
Debemos tener en cuenta algunas cosas para usar los superelipsoides. En primer lugar, no debemos
usar el valor cero para ninguno de los dos parmetros. Esto causara el dibujo de una caja negra en lugar
de nuestra figura. En segundo lugar, valores muy prximos a cero de r y n producen resultados muy
extraos, as que es conveniente evitarlos. Finalmente, el mtodo Sturm para resolver ecuaciones no
funcionar con estas figuras.
Los superelipsoides son objetos finitos, de forma que responden bien al encapsulado automtico
(mtodo que permite acelerar el clculo de imgenes, evitando la necesidad de usar la instruccin
bounded_by). Pueden usarse bien en composicin de objetos (CSG, uniones e interseccin).
Ahora, usemos esta figura para hacer algo til en una escena. Haremos un suelo agrupando varios,
usndolos como baldosas, y situaremos un puado de ellos flotando encima. Podemos empezar con el
archivo anterior.
Le cambiamos el nombre a TILES.POV y lo editamos para que contenga lo siguiente:
#include "colors.inc"
#include "textures.inc"

camera {
location <10, 5, -20>
look_at 0
angle 15
}

background { color rgb <.5, .5, .5> }

light_source{ <10, 50, -100> White }
Observa que hemos aadido #include "textures.inc" para que podamos usar texturas
predefinidas. Ahora definimos el superelipsoide que usaremos de baldosa.
#declare Tile = superellipsoid { <0.5, 0.1>
scale <1, .05, 1>
}
Los superelipsoides miden alrededor de 2 por 2 por 2, de forma que lo escalamos para que tengan el
tamao apropiado. Como queremos apilarlos juntos, hemos de tener cuidado al separarlos para que no
se solapen. Elegimos un valor de 2.1 como desplazamiento con el fin de dejar un poco de espacio que
se llenar con cemento. Aadamos esto:
#declare Offset = 2.1
Coloquemos una fila de baldosas. Cada una ser desplazada un mltiplo del desplazamiento escogido
en la direccin del eje z (en ambos sentidos). Multiplicamos este desplazamiento por el orden que
ocupa la baldosa en la fila para lograr este efecto. Unimos todos estos objetos en uno solo llamado
Row, como este:
#declare Row = union {
object { Tile }
object { Tile translate z*Offset }
object { Tile translate z*Offset*2 }
object { Tile translate z*Offset*3 }
object { Tile translate z*Offset*4 }
object { Tile translate z*Offset*5 }
object { Tile translate z*Offset*6 }
object { Tile translate z*Offset*7 }
object { Tile translate z*Offset*8 }
object { Tile translate z*Offset*9 }
object { Tile translate z*Offset*10 }
object { Tile translate -z*Offset }
object { Tile translate -z*Offset*2 }
object { Tile translate -z*Offset*3 }
4. TUTORIAL PARA PRINCIPIANTES 58
object { Tile translate -z*Offset*4 }
object { Tile translate -z*Offset*5 }
object { Tile translate -z*Offset*6 }
}
Esto nos da una fila sencilla de 17 baldosas, suficiente para llenar la pantalla. Ahora debemos hacer
copias de esta fila y trasladarlas con ayuda del desplazamiento (Offset) prefijado en la direccin del eje
x, de la misma forma:
object { Row }
object { Row translate x*Offset }
object { Row translate x*Offset*2 }
object { Row translate x*Offset*3 }
object { Row translate x*Offset*4 }
object { Row translate x*Offset*5 }
object { Row translate x*Offset*6 }
object { Row translate x*Offset*7 }
object { Row translate -x*Offset }
object { Row translate -x*Offset*2 }
object { Row translate -x*Offset*3 }
object { Row translate -x*Offset*4 }
object { Row translate -x*Offset*5 }
object { Row translate -x*Offset*6 }
object { Row translate -x*Offset*7 }
Finalmente, las unimos para darles una sola textura, un mrmol blanco como pigmento y un acabado
brillante con algo de reflexin.
union{
object { Row }
object { Row translate x*Offset }
object { Row translate x*Offset*2 }
object { Row translate x*Offset*3 }
object { Row translate x*Offset*4 }
object { Row translate x*Offset*5 }
object { Row translate x*Offset*6 }
object { Row translate x*Offset*7 }
object { Row translate -x*Offset }
object { Row translate -x*Offset*2 }
object { Row translate -x*Offset*3 }
object { Row translate -x*Offset*4 }
object { Row translate -x*Offset*5 }
object { Row translate -x*Offset*6 }
object { Row translate -x*Offset*7 }
pigment { White_Marble }
finish { phong 1 phong_size 50 reflection .35 }
}
Ahora aadimos el cemento. Esto ser sencillamente un plano de color blanco. Incrementamos su valor
de luz ambiente para que parezca ms blanco.
plane { y, 0 //esto es el cemento
pigment { color White }
finish { ambient .4 diffuse .7 }
}
PERSISTENCE OF VISION RAYTRACER 59
Para completar la escena, aadimos cinco superelipsoides diferentes, cada uno de un color, de forma
que floten sobre las baldosas reflejndose en ellas.
superellipsoid {
<0.1, 1>
pigment { Red }
translate <5, 3, 0>
scale .45
}

superellipsoid {
<1, 0.25>
pigment { Blue }
translate <-5, 3, 0>
scale .45
}

superellipsoid {
<0.2, 0.6>
pigment { Green }
translate <0, 3, 5>
scale .45
}

superellipsoid {
<0.25, 0.25>
pigment { Yellow }
translate <0, 3, -5>
scale .45
}

superellipsoid {
<1, 1>
pigment { Pink }
translate y*3
scale .45
}
Trazamos la escena a 320x 200 para ver el resultado. Si estamos contentos con l, la imagen final
podemos crearla a 640x480 y con antialias 0.2.

Figura 20: Objetos superelipsoides flotando sobre un suelo
embaldosado
4. TUTORIAL PARA PRINCIPIANTES 60
4.4.9. Superficie de revolucin
Botellas, vasijas y vasos son bonitos objetos para las imgenes de trazado de rayos. Vamos a crear una
copa dorada usando el objeto superficie de revolucin (objeto SOR, por sus iniciales en ingls).
Empezamos pensando la forma del objeto final. Es bastante difcil obtener los puntos que describen
una curva dada sin la ayuda de un programa modelador que soporte este tipo de objetos. Si tal
programa est disponible podemos sacar mucho partido de l.
Usaremos la configuracin de puntos que muestra la figura anterior. Hay ocho puntos que describen la
curva que ser rotada alrededor del eje y para obtener la copa. La curva se calcula usando el mtodo
descrito en la seccin de referencia (ver "Superficie de Revolucin").
Es el momento de empezar con la escena. Editamos un archivo llamado SORDEMO.POV y escribimos el
siguiente texto:
#include "colors.inc"
#include "golds.inc"

global_settings { assumed_gamma 2.2 }

camera {
location <10, 15, -20>
look_at <0, 5, 0>
angle 45
}

background { color rgb<0.2, 0.4, 0.8> }

light_source { <100, 100, -100> color rgb 1 }

plane { y, 0
pigment { checker color Red, color Green scale 10 }
}

sor {
8,

Figura 21: Los puntos que configuran nuestro objeto copa
PERSISTENCE OF VISION RAYTRACER 61
<0.0, -0.5>,
<3.0, 0.0>,
<1.0, 0.2>,
<0.5, 0.4>,
<0.5, 4.0>,
<1.0, 5.0>,
<3.0, 10.0>,
<4.0, 11.0>
texture { T_Gold_1B }
}
Esta escena contiene nuestra copa sobre un plano ajedrezado. Trazar la escena a una resolucin de
320x200 produce la imagen siguiente:
La superficie de revolucin se describe escribiendo, en primer lugar, el nmero de puntos, seguido por
los puntos en orden ascendente de altura. Cada punto determina el radio de la curva a una altura
determinada. Por ejemplo, el primero de ellos le dice a POV-Ray que a una altura de -0.5 el radio es 0.
Podemos observar que cada punto tiene una altura mayor que su predecesor. Si no se hace as el
programa se detendr con un error.
4.4.10. Texto
Crear texto usando POV-Ray sola significar que las letras haba que construirlas usando composicin
de objetos (CSG), un proceso bastante pesado, o usando una imagen en blanco y negro de las letras
como campo de alturas, un mtodo que no siempre es satisfactorio. Ahora, en POV-Ray 3.0, se ha
introducido un nuevo tipo de objeto que permite usar cualquier fuente de tipo True Type para crear
objetos de texto. Estos objetos se pueden usar en composicin y transformarse en posicin, tamao y
apariencia como cualquier otra primitiva de POV-Ray.
En este tutorial haremos dos usos de este objeto. En primer lugar, colocaremos unas cuantas letras
sobre un plano ajedrezado. Podemos usar cualquier fuente TTF, aunque aqu se usar slo las incluidas
con POV-Ray 3.0.
Creamos un archivo llamado TEXTDEMO.POV y escribimos:
#include "colors.inc"

camera {
location <0, 1, -10>
look_at 0

Figura 22: Un objeto superficie de revolucin
4. TUTORIAL PARA PRINCIPIANTES 62
angle 35
}

light_source { <500,500,-1000> White }

plane { y,0
pigment { checker Green White }
}
Ahora, incluyamos el objeto de texto. Usaremos el archivo TIMROM.TTF con la cadena POV-RAY 3.0.
De momento, haremos nuestras letras de color rojo. La sintaxis es muy sencilla. La primera cadena
entrecomillada es el nombre de la fuente, la segunda es el texto que aparecer en el dibujo. Los dos
nmeros decimales que las siguen son el grosor y el desplazamiento. El grosor determina el tamao del
bloque sobre el que estn recortadas las letras. Los valores apropiados pueden estar entre 0.5 y 2. El
desplazamiento es un valor que se aadir al valor definido por la propia fuente para separar las letras.
De momento se dejar a cero.
text { ttf "timrom.ttf" "POV-RAY 3.0" 1, 0
pigment { Red }
}
Al trazar esta escena a 200x150, observamos que las letras se salen por la derecha de la imagen. Esto es
as porque POV-Ray sita el texto de forma que la esquina inferior izquierda delantera de la primera
letra coincide con el origen. Para centrarlo debemos desplazar el texto en el sentido negativo del eje x.
Pero cuanta distancia? En la documentacin vemos que la altura de las letras est entre 0.5 y 0.75
unidades. Si asumimos que la distancia entre una y otra ronda las 0.5 unidades, significa que la cadena
en total tendr unas 6 unidades, de forma que trasladaremos el objeto 3 unidades en el sentido negativo
del eje x.
text { ttf "timrom.ttf" "POV-RAY 3.0" 1, 0
pigment { Red }
translate -3*x
}
Mucho mejor. Ahora vamos a jugar un poco con los parmetros del objeto. En primer lugar,
aumentaremos su grosor hasta un valor grande... pongamos 25!
text { ttf "timrom.ttf" "POV-RAY 3.0" 25, 0
pigment { Red }
translate -2.25*x
}
Realmente, queda un tanto extrao. Devolvamos este valor a 1 e intentemos un valor diferente para el
desplazamiento. Pongamos 0.1 en lugar de 0 y volvamos a trazar.
Un momento! Las letras se desplazan en ngulo! Esto no es lo que describe el manual! Parece que el
valor de desplazamiento se aplica tanto en el eje x como en el eje y, en lugar de desplazarlas slo en la
direccin x. Se necesita aqu un vector en lugar de un solo nmero? Probemos. Reemplazaremos 0.1
por 0.1*x y probaremos de nuevo.
Ahora funciona! Las letras siguen en lnea recta, aunque un poco ms separadas de lo que lo estaban
antes. Verifiquemos esta propiedad haciendo que las letras se desplacen en otra direccin. Cambiando
0.1*x por 0.1*y, observamos que las letras suben un poco al desplazarnos de izquierda a derecha, sin
separarse horizontalmente ms de lo que estaban. Ahora, probemos el eje z. Reemplacemos 0.1*y por
0.1*z. Trazar esto produce una pequea desilusin: no hay tal desplazamiento, slo funciona en las
direcciones x e y.
Acabemos nuestra escena dando a las letras una textura mejor, usando un gran valor para el grosor y
aadiendo un pequeo desplazamiento vertical a nuestras letras. Para obtener un mejor resultado,
usaremos una esfera celeste, adornaremos un poco nuestro plano y buscaremos una situacin de la
cmara mejor (trazamos la siguiente escena a 640x480 y con antialias).
PERSISTENCE OF VISION RAYTRACER 63
#include "colors.inc"

camera {
location <-5,.15,-2>
look_at <.3,.2,1>
angle 35
}

light_source { <500,500,-1000> White }

plane { y,0
texture {
pigment { SeaGreen }
finish { reflection .35 specular 1 }
normal { ripples .35 turbulence .5 scale .25 }
}
}

text { ttf "timrom.ttf" "POV-RAY 3.0" 25, 0.1*y
pigment { BrightGold }
finish { reflection .25 specular 1 }
translate -3*x
}

#include "skies.inc"

sky_sphere { S_Cloud5 }
Ahora, vamos a usar un objeto de texto en una operacin CSG. Intentaremos crear un bajorrelieve en
un bloque de piedra usando unas letras. Creamos un nuevo archivo llamado TEXTCSG.POV y lo editamos
de la siguiente forma:
#include "colors.inc"
#include "stones.inc"

background { color rgb 1 }

camera {
location <-3, 5, -15>
look_at 0
angle 25
}

light_source { <500,500,-1000> White }
Ahora, creamos el bloque de piedra. Lo queremos de ocho unidades de largo para centrar en el interior
nuestra frase (POV-RAY 3.0), que mide alrededor de seis unidades. Lo haremos tambin de cuatro
unidades de alto y una de grueso. Como queremos evitar una coincidencia accidental entre la superficie
del bloque y la del texto, usaremos una coordenada z inicial de 0.1 en lugar de 0. Finalmente, le damos
una agradable textura de piedra escogida del archivo STONES.INC.
box { <-3.5, -1, 0.1>, <3.5, 1, 1>
texture { T_Stone10 }
}
Ahora, creamos nuestro texto. Usamos el mismo objeto que en el primer ejemplo, slo variando un
poco el grosor y el desplazamiento.
text { ttf "timrom.ttf" "POV-RAY 3.0" 0.15, 0
pigment { BrightGold }
finish { reflection .25 specular 1 }
translate -3*x
}
4. TUTORIAL PARA PRINCIPIANTES 64
Recordemos que, por defecto, el texto se coloca de forma que su cara frontal se apoya en el plano x-y.
Como el frontal del bloque se inicia en 0.1, resulta que nuestro texto penetra en la piedra un total de
0.05 unidades. Ahora, basta situar alrededor de ambos objetos una operacin de diferencia y tendremos
nuestro objetivo:
difference {
box { <-3.5, -1, 0.1>, <3.5, 1, 1>
texture { T_Stone10 }
}
text { ttf "timrom.ttf" "POV-RAY 3.0" 0.15, 0
pigment { BrightGold }
finish { reflection .25 specular 1 }
translate -3*x
}
}
Lo trazamos a 200x150. Nos fijamos si se aprecia realmente la profundidad del texto, y su textura en
oro brillante. Lo volvemos a trazar, esta vez a 640x480 y con antialias para ver el resultado ms
claramente, pero seamos pacientes, porque esta imagen tardar algo de tiempo en estar lista.
4.4.11. Toro
Podemos pensar en un toro como en un "donut" o un neumtico. Es una forma que se usa mucho en
operaciones de composicin de objetos, de forma que POV-Ray ha adoptado esta forma polinmica de
cuarto grado como forma primitiva. Su sintaxis es muy sencilla, as que es sencillo aprender a usarla una
vez que se ha comprendido lo que significan los dos valores decimales que se deben indicar. En lugar
de describirlos, creemos un objeto de este tipo y experimentemos con l.
Creamos un archivo llamado TORDEMO.POV y escribimos:
#include "colors.inc"

camera {
location <0, .1, -25>
look_at 0
angle 30
}

background { color Gray50 } // para hacer el toro ms visible

Figura 23: Texto excavado en piedra
PERSISTENCE OF VISION RAYTRACER 65

light_source{ <300, 300, -1000> White }

torus { 4, 1 // radio interno y radio externo
rotate -90*x // para verlo desde arriba
pigment { Green }
}
Trazamos la escena. Bien, lo que vemos es una especie de neumtico. Cambiemos el radio interno y el
externo y veamos qu pasa. Escribimos:
torus { 5, .25 // radio interno y radio externo
Esto parece un aro! Probemos lo siguiente:
torus { 3.5, 2.5 // radio interno y radio externo
Esto es... un neumtico excesivamente inflado!
Con una sintaxis tan simple, no hay mucho que hacer con un toro salvo cambiarle la textura...no?
Veamos...
Los toros son muy tiles en composicin de formas. Hagamos un pequeo experimento. Veamos qu
forma tiene la diferencia entre un toro y una caja:
difference {
torus { 4, 1
rotate x*-90 // para verlo desde arriba
}
box { <-5, -5, -1>, <5, 0, 1> }
pigment { Green }
}
Interesante... medio toro. Ahora aadiremos otro al revs. Slo hay que declararlo y hacer las
transformaciones necesarias para usarlo en dos posiciones distintas:
#declare Half_Torus = difference {
torus { 4, 1
rotate -90*x // para verlo desde arriba
}
box { <-5, -5, -1>, <5, 0, 1> }
pigment { Green }
}

#declare Flip_It_Over = 180*x

#declare Torus_Translate = 8 // doble del radio mayor
Ahora, creamos la unin de dos semitoros:
union {
object { Half_Torus }
object { Half_Torus
rotate Flip_It_Over
translate Torus_Translate*x
}
}
Esto produce un objeto con forma de S, pero no lo podemos ver totalmente desde la posicin actual de
la cmara. Aadamos unos cuantas piezas ms de ese tipo, moviendo nuestro objeto en la direccin del
eje z y girndolo un poco con respecto al eje y para poder verlo algo ms. Tambin observamos que
aparece un pequeo vaco donde se juntan los dos semitoros. Este defecto se debe al hecho de ver esta
escena directamente desde el plano x-z (un defecto debido al tipo de clculo que hace el programa; en
general, no conviene que nuestra cmara coincida con un plano de alguna de las cajas utilizadas en la
imagen). Cambiaremos la coordenada y de la cmara de 0 a 0.1 para evitar este defecto.
4. TUTORIAL PARA PRINCIPIANTES 66
union {
object { Half_Torus }
object { Half_Torus
rotate Flip_It_Over
translate x*Torus_Translate
}
object { Half_Torus
translate x*Torus_Translate*2
}
object { Half_Torus
rotate Flip_It_Over
translate x*Torus_Translate*3
}
object { Half_Torus
rotate Flip_It_Over
translate -x*Torus_Translate
}
object { Half_Torus
translate -x*Torus_Translate*2
}
object { Half_Torus
rotate Flip_It_Over
translate -x*Torus_Translate*3
}
object { Half_Torus
translate -x*Torus_Translate*4
}
rotate y*45
translate z*20
}
Al crear la imagen veremos una forma serpenteante muy curiosa. Pero queremos modelar algo ms til,
que podamos encontrar en la vida real que tal una cadena?
Pensemos un momento. Hay que observar que un eslabn de la cadena puede ser modelado de forma
muy sencilla usando dos semitoros y dos cilindros. Creamos un nuevo archivo, en el que podemos usar
los mismos fondo, cmara, luz y declaraciones de objetos que usbamos en TORDEMO.POV:
#include "colors.inc"

camera {
location <0, .1, -25>
look_at 0
angle 30
}

background { color Gray50 }

light_source{ <300, 300, -1000> White }

#declare Half_Torus = difference {
torus { 4,1
sturm
rotate x*-90 // para verlo desde arriba
}
box { <-5, -5, -1>, <5, 0, 1> }
pigment { Green }
}

#declare Flip_It_Over = x*180

#declare Torus_Translate = 8
Ahora, creamos un toro completo a partir de dos semitoros:
PERSISTENCE OF VISION RAYTRACER 67
union {
object { Half_Torus }
object { Half_Torus rotate Flip_It_Over }
}
Esto parece ser una forma algo artificiosa de crear un toro, pero realmente vamos a desplazar cada
mitad para dejar sitio a los cilindros. Primero, declararemos los cilindros que utilizaremos:
#declare Chain_Segment = cylinder { <0, 4, 0>, <0, -4, 0>, 1
pigment { Green }
}
Despus, aadiremos dos de estos cilindros a la unin de los semitoros trasladndolos de forma que
queden alineados con el radio exterior de los toros a cada lado:
union {
object { Half_Torus }
object { Half_Torus rotate Flip_It_Over }
object { Chain_Segment translate x*Torus_Translate/2 }
object { Chain_Segment translate -x*Torus_Translate/2 }
}
Ahora, trasladamos los semitoros en la direccin vertical para que sus extremos coincidan con los de
los cilindros. La distancia coincide con la mitad de la definida como Torus_Tranlate:
union {
object { Half_Torus
translate y*Torus_Translate/2
}
object { Half_Torus
rotate Flip_It_Over
translate -y*Torus_Translate/2
}
object { Chain_Segment
translate x*Torus_Translate/2
}
object { Chain_Segment
translate -x*Torus_Translate/2
}
}
Trazamos el resultado y tenemos un eslabn de la cadena. Pero an no hemos acabado! Alguien ha
visto una cadena de color verde? Usemos una apariencia metlica sobre ellos. En primer lugar,
borremos todos los pigmentos de las declaraciones de los toros y cilindros. Despus, declaremos lo
siguiente antes de la unin:
#declare Chain_Gold = texture {
pigment { BrightGold }
finish {
ambient .1
diffuse .4
reflection .25
specular 1
metallic
}
}
Ahora, aadamos esta textura a la unin y nombrmosla apropiadamente:
#declare Link = union {
object { Half_Torus
translate y*Torus_Translate/2
}
object { Half_Torus
rotate Flip_It_Over
4. TUTORIAL PARA PRINCIPIANTES 68
translate -y*Torus_Translate/2
}
object { Chain_Segment
translate x*Torus_Translate/2
}
object { Chain_Segment
translate -x*Torus_Translate/2
}
texture { Chain_Gold }
}
Por fin, uniremos dos eslabones. El segundo debe ser trasladado en direccin vertical de forma que su
cara interior coincida con la cara interior del primer eslabn. La distancia adecuada resulta ser el doble
de la distancia Torus_Translate menos dos (dos veces el radio exterior). Esto puede describirse
mediante la expresin:
(Torus_Translate*2-2)*y
Declaramos la expresin como sigue:
#declare Link_Translate = (Torus_Translate*2-2)*y
En el bloque en el que situemos el objeto, usaremos este valor multiplicndolo para insertar nuevos
eslabones. Ahora, rotaremos el segundo eslabn noventa grados respecto al eje vertical para que sea
perpendicular al primero (como los verdaderos eslabones de una cadena). Finalmente, reduciremos el
tamao de la unin a un cuarto de su tamao para poder ver el resultado completamente:
union {
object { Link }
object { Link translate y*Link_Translate rotate y*90 }
scale .25
}
Al trazar esto, podremos ver un par de eslabones muy realistas. Si queremos hacer una cadena
completa, necesitamos declarar esta unin y crear otra unin usando como pieza este par de eslabones.
Quitamos el escalado de la primera declaracin para poder escalar slo el objeto definitivo:
#declare Link_Pair =
union {
object { Link }
object { Link translate y*Link_Translate rotate y*90 }
}
Ahora declaramos nuestra cadena:
#declare Chain = union {
object { Link_Pair}
object { Link_Pair translate y*Link_Translate*2 }
object { Link_Pair translate y*Link_Translate*4 }
object { Link_Pair translate y*Link_Translate*6 }
object { Link_Pair translate -y*Link_Translate*2 }
object { Link_Pair translate -y*Link_Translate*4 }
object { Link_Pair translate -y*Link_Translate*6 }
}
Y, finalmente, situamos nuestra cadena aadiendo unas transformaciones para hacerla visible en su
totalidad. Estas transformaciones incluyen escalarla en un factor 1/10, trasladarla y girarla para poder
ver bien todos los enlaces:
object { Chain scale .1 rotate <0, 45, -45> }
PERSISTENCE OF VISION RAYTRACER 69
En la imagen podemos ver una cadena dorada que cruza diagonalmente la pantalla.
4.5. Objetos CSG (Geometra Slida Constructiva)
La Geometra Slida Constructiva, CSG son sus iniciales en ingls, es una poderosa herramienta que
usamos para combinar primitivas simples para crear objetos ms complejos, como se ver en las
secciones siguientes.
4.5.1. Qu es CSG?
POV-Ray nos permite construir slidos complejos combinando formas primitivas de cuatro formas
diferentes (realmente, slo tres). En la unin, dos o ms formas se asocian para ser utilizadas como una
sola pieza. En el caso de la interseccin, slo aparece el volumen comn a todas las figuras. La
diferencia, como veremos, es anloga a la interseccin, aunque no lo parezca, ya que en este caso las
formas recortan su propio volumen de la que aparece en primer lugar. Y por ltimo, aunque no sea la
menos importante, citaremos la fusin (merge), que es un tipo especial de unin en la que las
superficies interiores a los objetos desaparecen, lo cual es especialmente til en los objetos
transparentes. Trataremos estas formas de CSG en detalle en las secciones siguientes.
Los objetos CSG pueden se extremadamente complejos. Pueden estar anidados profundamente (una
unin puede contener varias intersecciones, y stas varias diferencias...).Los objetos CSG son (casi
siempre) objetos finitos y por tanto responden al mtodo automtico de simplificacin que usa POV-
Ray (auto-bounding) y pueden tambin ser transformados como si fuesen cualquier otra forma
primitiva. A pesar de esto, en determinadas circunstancias, conviene utilizar (con moderacin) la
instruccin bounded_by si creamos un CSG muy complejo.
4.5.2. Unin
Intentemos disear una unin sencilla. Crea un archivo llamado CSGDEMO.POV y escribe:
#include "colors.inc"

camera {
location <0, 1, -10>
look_at 0
angle 36
}


Figura 24: El objeto toro puede usarse para crear cadenas
4. TUTORIAL PARA PRINCIPIANTES 70
light_source { <500, 500, -1000> White }

plane { y, -1.5
pigment { checker Green White }
}
Aade dos esferas, trasladando cada una de ellas en un sentido distinto del eje x 0.5 unidades.
Colorearemos una roja y otra azul.
sphere { <0, 0, 0>, 1
pigment { Blue }
translate -0.5*x
}
sphere { <0, 0, 0>, 1
pigment { Red }
translate 0.5*x
}
Trazamos esta unin a 200x150. Coloquemos una unin agrupando ambas esferas. Esto crear un solo
objeto, unin de ambas esferas.
union{
sphere { <0, 0, 0>, 1
pigment { Blue }
translate -0.5*x
}
sphere { <0, 0, 0>, 1
pigment { Red }
translate 0.5*x
}
}
Si lo volvemos a trazar, no observaremos ningn cambio, pero ahora podemos dar a ambas esferas la
misma textura, moverlas como si de una sola pieza se tratase, o escalarlas. Hagmoslo:
union{
sphere { <0, 0, 0>, 1
translate -0.5*x*
}
sphere { <0, 0, 0>, 1
translate 0.5*x
}
pigment { Red }
scale <1, .25, 1>
rotate <30, 0, 45>
}
Al trazarlo ahora, observaremos que la imagen ha cambiado radicalmente. Podemos escalarla con
diferentes valores, o probar sobre este objeto varias texturas distintas.
Aplicar una textura a una unin en lugar de hacerlo sobre los objetos aislados tiene varias ventajas. En
primer lugar, cambiar de decisin sobre la apariencia del objeto es ms si slo hemos de escribirla una
vez que si debemos cambiarla en todos los objetos que compongan la figura. En segundo lugar, la
escena se interpreta ms rpido, ya que slo es necesario que el ordenador la interprete una vez. En
tercer lugar, ahorra memoria, ya que el programa construye un solo modelo de textura (y referencia
cada objeto a este modelo). Si la aplicamos sobre varios objetos, aunque la textura sea idntica,
almacena una copia por cada uno de ellos.
4.5.3. Interseccin
Ahora usemos las mismas esferas de la seccin anterior para ilustrar el siguiente tipo de objeto CSG, la
interseccin. Cambiamos la palabra "union" por "intersection", y borramos las transformaciones:
PERSISTENCE OF VISION RAYTRACER 71
intersection {
sphere { <0, 0, 0>, 1
translate -0.5*x
}
sphere { <0, 0, 0>, 1
translate 0.5*x
}
pigment { Red }
}
Al trazar la escena, veremos un objeto similar a una lente, en lugar de las dos esferas. Esto sucede
porque la interseccin encierra el volumen compartido por todas las formas, en este caso la figura que
vemos, donde las esferas se solapan. Me gusta este objeto, de forma que lo usaremos para explicar las
diferencias.
4.5.4. Diferencia
Rotemos el objeto de forma que presente su frente a la cmara.
intersection{
sphere { <0, 0, 0>, 1
translate -0.5*x
}
sphere { <0, 0, 0>, 1
translate 0.5*x
}
pigment { Red }
rotate 90*y
}

Ahora creemos un cilindro y situmoslo atravesando el centro de la lente.

cylinder { <0, 0, -1> <0, 0, 1>, .35
pigment { Blue }
}
Trazamos la esfera para ver la posicin del cilindro. Despus incluiremos la lente y el cilindro en el
interior de un bloque diferencia, como sigue:
difference {
intersection {
sphere { <0, 0, 0>, 1
translate -0.5*x
}
sphere { <0, 0, 0>, 1
translate 0.5*x
}
pigment { Red }
rotate 90*y
}
cylinder { <0, 0, -1> <0, 0, 1>, .35
pigment { Blue }
}
}
Al trazar de nuevo la escena, veremos el objeto con forma de lente con un hoyo cortado limpiamente
en su centro. El cilindro ha sido sustrado de la interseccin. Observa que el color del cilindro hace que
el interior del cilindro aparezca de color azul. Si lo eliminamos, toda su superficie se ver roja.
4. TUTORIAL PARA PRINCIPIANTES 72
En realidad, la diferencia no es un objeto diferente, es idntica a la interseccin, slo que todos los
objetos excepto el primero llevan la clave inverse, que hace que cambien de nombre su interior y su
interior. Es decir, que lo anterior tambin podra haberse escrito como:
intersection{
sphere { <0, 0, 0>, 1
translate -0.5*x
}
sphere { <0, 0, 0>, 1
translate 0.5*x
}
pigment { Red }
rotate 90*y
cylinder { <0, 0, -1> <0, 0, 1>, .35
inverse
pigment { Blue }
}
}
Bueno, hagamos algo mejor: declaremos nuestra lente perforada de forma que podamos ponerle un
nombre. Antes, habremos eliminado todas las texturas de su interior, ya que las utilizaremos en su
ubicacin definitiva.
#declare Lens_With_Hole = difference {
intersection {
sphere { <0, 0, 0>, 1
translate -0.5*x
}
sphere { <0, 0, 0>, 1
translate 0.5*x
}
rotate 90*y
}
cylinder { <0, 0, -1> <0, 0, 1>, .35 }
}
Ahora usaremos una unin para construir una figura compuesta de copias de este objeto:
union {
object { Lens_With_Hole translate <-.65, .65, 0> }
object { Lens_With_Hole translate <.65, .65, 0> }
object { Lens_With_Hole translate <-.65, -.65, 0> }
object { Lens_With_Hole translate <.65, -.65, 0> }
pigment { Red }
}
Trazamos la escena. Un objeto interesante no? Pero intentemos algo ms. Hagamos las lentes
parcialmente transparentes aadindoles algo de filtro al pigmento de la unin:
union {
object { Lens_With_Hole translate <-.65, .65, 0> }
object { Lens_With_Hole translate <.65, .65, 0> }
object { Lens_With_Hole translate <-.65, -.65, 0> }
object { Lens_With_Hole translate <.65, -.65, 0> }
pigment { Red filter .5 }
}
Trazamos de nuevo la imagen. Est bien, salvo que... podemos ver trozos de los objetos lente dentro de
otros. Esto no est tan bien.
PERSISTENCE OF VISION RAYTRACER 73
4.5.5. Fusin
Esto nos lleva al cuarto tipo de construccin CSG. la fusin. Es muy similar a la unin, salvo que las
superficies de los objetos que deben estar dentro de otro de la unin no se trazan, es decir, desaparecen.
Esto eliminar el problema al que hemos hecho alusin antes. Probmoslo:
merge {
object { Lens_With_Hole translate <-.65, .65, 0> }
object { Lens_With_Hole translate <.65, .65, 0> }
object { Lens_With_Hole translate <-.65, -.65, 0> }
object { Lens_With_Hole translate <.65, -.65, 0> }
pigment { Red filter .5 }
}
Desde luego que lo hace!
4.5.6. Observaciones sobre los objetos CSG
Hay algunos detalles sobre los objetos CSG contra los que debemos de estar prevenidos.
4.5.6.1. Coincidencia de superficies
POV-Ray utiliza pruebas numricas en cada punto para determinar si se encuentra en el interior o en el
exterior de un objeto. Un problema muy frecuente es que este punto se encuentre exactamente en la
superficie de dos objetos, ya que el error numrico puede situar el punto en el interior o en el exterior
de ambos objetos, y no hay manera numrica de saber con seguridad a que superficie pertenece con
exactitud, para darle una textura, o para determinar su invisibilidad (por ejemplo, si pertenece a una
fusin, o a la parte eliminada por una interseccin).
Veamos qu sucede cuando usamos un cilindro para abrir un agujero en una caja ms grande:
difference {
box { -1, 1 pigment { Red } }
cylinder { -z, z, 0.5 pigment { Green } }
}
Al trazarlo, veremos una nube de puntos rojos donde el agujero debera estar, provocados por la
coincidencia de la base del cilindro y el frontal de la caja. A veces, un rayo de luz impacta primero en la
superficie del cilindro, decidiendo que debe pasar a travs de ella. En otras ocasiones, es alcanzada antes
la superficie de la caja, rebotando en ella. Esto produce un mal resultado, y causa la aparicin de la nube
de puntos.
Este problema se puede remediar aumentando un poco la longitud del cilindro, evitando as la
coincidencia de superficies:
difference {
box { -1, 1 pigment { Red } }
cylinder { -1.001*z, 1.001*z, 0.5 pigment { Green } }
}
En general, debemos hacer el objeto que restamos algo ms grande en una diferencia para evitar
coincidencias.
Un problema similar ocurre con las intersecciones (que, como hemos comentado, son muy similares a
las diferencias, con las fusiones (especialmente, ya que su objetivo es eliminar las superficies interiores,
y, cuando coinciden, ambas pueden ser consideradas interiores a la otra) e incluso, aunque con menos
frecuencia, con uniones en las que ambas superficies usan distinta textura. Habitualmente todos los
casos tienen una sencilla solucin, que consiste en agrandar algo alguno de los objetos implicados.
4. TUTORIAL PARA PRINCIPIANTES 74
4.6. Las fuentes de luz.
En cualquier escena de trazado de rayos, la luz necesaria para iluminar nuestros objetos y superficies
debe provenir de una fuente de luz. Hay muchos tipos de fuentes de luz disponibles en POV-Ray y el
uso adecuado del tipo correcto puede dar lugar a resultados muy impresionantes. Tommonos un
momento para explorar algunos de los diferentes tipos de fuentes de luz y sus diferentes parmetros.
4.6.1. La fuente de luz ambiente.
La fuente de luz ambiente es usada para simular el efecto de la reflexin interdifusa. Si no hubiera
reflexin interdifusa todas las reas no iluminadas directamente por una fuente de luz seran
completamente oscuras. POV-Ray utiliza la palabra clave ambient para determinar que cantidad de luz
proveniente de la fuente de luz es reflejada por una superficie.
Por defecto la fuente de luz, la cual emite su luz en todas partes y en todas direcciones, y es blanca pura
(rgb <1, 1, 1>). El cambio de color puede ser utilizado para crear efectos interesantes. Lo primero de
todo el nivel de luz global de la escena puede ser ajustado fcilmente. En lugar de cambiar todos los
valores ambient en cada finish, slo la fuente de luz ambiente es modificada. Asignando diferentes
colores nosotros podemos crear bonitos efectos como una caprichosa luz de ambiente rojiza. Para ms
detalles sobre la fuente de luz ambiente vase "Luz de Ambiente".
He aqu un ejemplo de una fuente de luz ambiente roja.
global_settings { ambient_light rgb<1, 0, 0> }
4.6.2. La fuente de luz puntual.
Las luces puntuales son exactamente lo que su nombre indica. Un punto de luz no tiene tamao, es
invisible e ilumina todo en la escena por igual independientemente de la distancia a la fuente de luz (este
comportamiento puede ser modificado). Esta es la forma ms simple y bsica de fuente de luz. Hay
slo dos parmetros importantes, location y color. Diseemos una escena simple y coloquemos
una fuente de luz puntual en ella.
Creamos un fichero nuevo con nombre LITEDEMO.POV. Lo editamos como sigue:
#include "colors.inc"
#include "textures.inc"

camera {
location <-4, 3, -9>
look_at <0, 0, 0>
angle 48
}
Aadimos los siguientes objetos simples:
plane { y, -1
texture {
pigment {
checker
color rgb<0.5, 0, 0>
color rgb<0, 0.5, 0.5>
}
finish {
diffuse 0.4
ambient 0.2
phong 1
phong_size 100
reflection 0.25
}
}
PERSISTENCE OF VISION RAYTRACER 75
}

torus { 1.5, 0.5
texture { Brown_Agate }
rotate <90, 160, 0>
translate <-1, 1, 3>
}

box { <-1, -1, -1>, <1, 1, 1>
texture { DMFLightOak }
translate <2, 0, 2.3>
}

cone { <0,1,0>, 0, <0,0,0>, 1
texture { PinkAlabaster }
scale <1, 3, 1>
translate <-2, -1, -1>
}

sphere { <0,0,0>,1
texture { Sapphire_Agate }
translate <1.5, 0, -2>
}
Ahora aadimos una fuente de luz puntual:
light_source {
<2, 10, -3>
color White
}
Trazamos esto a "200x150 -A" y vemos que los objetos son claramente visibles y con sombras
pronunciadas. Los lados de objetos curvados prximos a la fuente de luz son de color brillante y las
reas que estn en el lado opuesto a la fuente de luz son ms oscuras. Tambin apreciamos que el plano
ajedrezado est iluminado incluso en todo el horizonte. Esto nos permite ver el plano, pero no es muy
realista.
4.6.3. La fuente de luz cnica (focos).
Los focos son un tipo de fuente de luz muy til. Pueden ser usados para aadir brillos y caractersticas
de iluminacin del mismo modo que un fotgrafo utiliza los focos. Hay algunos parmetros ms para
luces focales que para luces puntuales. Estos son radius, falloff, tightness y point_at. El
parmetro radius es el ngulo del cono completamente iluminado. El parmetro falloff es el
ngulo del cono de sombra donde la luz se desvanece hacia la oscuridad. El parmetro tightness
determina la proporcin de la luz que se desvanece. El parmetro point_at es, como su nombre dice,
la posicin hacia la que la fuente de luz est apuntando. Cambiemos la fuente de luz en nuestra escena
como sigue:
light_source {
<0, 10, -3>
color White
spotlight
radius 15
falloff 20
tightness 10
point_at <0, 0, 0>
}
Trazamos esto a "200x150 -A" y vemos que solamente los objetos estn iluminados. El resto del plano
y las porciones exteriores de los objetos no estn ahora iluminados. Hay una rea amplia de
desvanecimiento pero las sombras son todava muy marcadas. Intentemos jugar con alguno de estos
4. TUTORIAL PARA PRINCIPIANTES 76
parmetros para ver qu ocurre. Modificamos el valor de falloff a 16 (debe ser siempre mayor que el
valor del radio) y trazamos de nuevo. Ahora el desvanecimiento es muy estrecho y los objetos estn
iluminados brillantemente o en total oscuridad. Ahora volvemos a establecer el valor de falloff en
20 y cambiamos el valor de tightness a 100 (cuanto ms alto ms cerrado) y trazamos otra vez. La
luz focal parece haberse hecho mucho ms pequea, pero lo que realmente ha sucedido es que el
falloff ha llegado a ser tan exagerado que el radio actual aparece mucho ms pequeo.
Decidimos que un valor de tightness de 10 (el valor por defecto) y un valor de falloff de 18 son
los mejores para esta luz focal y ahora pondremos algunas luces ms alrededor de la escena para
conseguir efectos. Coloquemos un foco azul ligeramente ms estrecho y uno rojo adems del blanco
que ya tenamos.
light_source {
<10, 10, -1>
color Red
spotlight
radius 12
falloff 14
tightness 10
point_at <2, 0, 0>
}

light_source {
<-12, 10, -1>
color Blue
spotlight
radius 12
falloff 14
tightness 10
point_at <-2, 0, 0>
}
Trazando esto veremos que la escena ahora tiene un aire maravillosamente misterioso. Las tres luces
focales convergen sobre los objetos hacindolos azules en un lado y rojos en el otro, con suficiente
blanco en el medio para proporcionar un equilibrio.
4.6.4. La fuente de luz cilndrica.
Las luces focales tiene forma de cono, lo que quiere decir que su efecto cambia con la distancia. Cuanto
ms lejos de la fuente de luz est un objeto, ms grande ser el radio aparente. Pero podemos querer
que radius y falloff sean de un tamao particular independientemente de la distancia a la luz focal.
Por esta razn, son necesarias las fuentes de luz cilndricas. Una fuente de luz cilndrica es
prcticamente como una luz focal, excepto por que las regiones de radius y falloff son las
mismas, independientemente de la distancia a la que se encuentra nuestro objeto de la fuente de luz. La
forma es, por tanto, un cilindro en lugar de un cono. Podemos especificar una fuente de luz cilndrica
reemplazando la palabra reservada spotlight por cylinder. Probemos ahora esto en nuestra
escena reemplazando las tres luces focales por luces cilndricas y tracemos de nuevo. Veremos que la
escena es ms suavizada. Esto es debido a que las restricciones cilndricas no permiten que la luz se
extienda como la de una luz focal. Son necesarios valores mayores de radius y falloff para hacer el
trabajo. Probemos un radius de 20 y un falloff de 30 para las tres luces.
4.6.5. La fuente de luz extendida.
Hasta aqu todas nuestras fuentes de luz han tenido una cosa en comn: producan sombras
pronunciadas. Esto es debido a que la fuente de luz actual es un punto que es infinitamente pequeo.
Los objetos estn o directamente expuestos a la luz, en cuyo caso estn completamente iluminados, o
no lo estn, en cuyo caso estn completamente en la sombra. En la vida real, este tipo de situacin con
sombra y luz extrema existe nicamente en el espacio exterior, donde la luz directa del sol penetra en la
PERSISTENCE OF VISION RAYTRACER 77
oscuridad total del espacio. Pero aqu en la Tierra, la luz se curva alrededor de los objetos, rebota en
ellos y normalmente la fuente tiene alguna dimensin, lo que significa que puede estar parcialmente
oculta a la vista (las sombras ya no sern bruscas). Esto es conocido como penumbra, un rea
intermedia donde no hay ni luz total ni oscuridad. Para simular esta suave sombra, un trazador de rayos
debe dar a sus fuentes de luz dimensin. POV-Ray lleva a cabo esto con una caracterstica conocida
como luz extendida
3
.
Las luces extendidas tienen dimensiones en dos ejes. Estos estn especificados por los dos primeros
vectores en la sintaxis de superficie. Debemos tambin especificar cuntas luces hay en el array. Cuantas
ms coloquemos, las sombras sern ms suaves, pero nos llevar ms tiempo de trazado. Normalmente
un array de 3x3 5x5 ser suficiente. Tambin tenemos la posibilidad de especificar un valor de
adaptacin. La palabra reservada adaptive le dice al trazador de rayos que puede adaptarse a la
situacin y enviar slo los rayos necesarios para determinar el valor del pixel. Si no se usa adaptive se
enviar un rayo por cada luz en la luz de superficie. Esto puede realmente ralentizar el proceso. Cuanto
ms alto sea el valor de adaptive, ms suave ser la penumbra, pero ms tiempo emplear el trazado.
Normalmente un valor adaptive de 1 es suficiente. Finalmente, es probable que debamos usar la
palabra reservada jitter. sta le dice al trazador que mueva ligeramente la posicin de cada luz en la
fuente extendida, de forma que las sombras aparezcan realmente suaves en lugar de darnos una
penumbra formada por franjas de sombras cada vez ms claras.
Probmoslo. Comentamos las luces cilndricas y aadimos lo siguiente:
light_source {
<2, 10, -3>
color White
area_light <5, 0, 0>, <0, 0, 5>, 5, 5
adaptive 1
jitter
}
Esta es una luz de superficie blanca centrada en <2, 10, -3>. Tiene un tamao de 5 unidades (a lo largo
del eje x) por 5 unidades (a lo largo del eje z) y tiene 25 (5x5) luces. Hemos especificado un valor
adaptive de 1 y jitter. Trazamos esto a 200x150 -A.
Despus de hacer esto, apreciamos dos cosas. El trazado se hace un poco ms largo que con una fuente
de luz puntual o focal y las sombras no son tan marcadas. Todo tiene una bonita y suave penumbra a su
alrededor. Pero esto se puede mejorar.
Las luces puntuales y cilndricas pueden tambin ser luces extendidas! Recuerdas esas sombras
marcadas originadas por las luces puntuales de nuestra escena? No tendra mucho sentido usar un array
de 5x5 para una luz puntual, pero un array ms pequeo podra hacer un buen trabajo y
proporcionarnos la cantidad ptima de penumbra para una luz puntual. Probmoslo. Comentamos la
fuente extendida y modificamos las luces cilndricas para que sean como las siguientes:
light_source {
<2, 10, -3>
color White
spotlight
radius 15
falloff 18
tightness 10
area_light <1, 0, 0>, <0, 0, 1>, 2, 2
adaptive 1
jitter
point_at <0, 0, 0>
}


3
Son las Area Lights (N. de los T.)
4. TUTORIAL PARA PRINCIPIANTES 78
light_source {
<10, 10, -1>
color Red
spotlight
radius 12
falloff 14
tightness 10
area_light <1, 0, 0>, <0, 0, 1>, 2, 2
adaptive 1
jitter
point_at <2, 0, 0>
}

light_source {
<-12, 10, -1>
color Blue
spotlight
radius 12
falloff 14
tightness 10
area_light <1, 0, 0>, <0, 0, 1>, 2, 2
adaptive 1
jitter
point_at <-2, 0, 0>
}
Ahora tenemos tres luces puntuales de superficie, de tamao una unidad y con cuatro (2x2) luces, tres
colores diferentes, todas iluminando nuestra escena. Trazamos esto a 200x150 -A. Esto parece
funcionar perfectamente. Todas nuestras sombras tienen pequeas bandas de penumbra, exactamente
como cabra esperar en un objeto iluminado con luz puntual real.
4.6.6. Asignando un objeto a una fuente de luz.
Las fuentes de luz son invisibles. Son slo una posicin desde donde la luz se emite. No tienen tamao
real o forma. Si queremos que nuestra fuente de luz tenga una forma visible, podemos usar la palabra
clave looks_like. Podemos especificar que nuestra fuente de luz pueda parecerse a cualquier objeto
que elijamos. Cuando usamos looks_like, no_shadow se aplica automticamente al objeto. Esto se
hace para evitar que el objeto bloquee cualquier iluminacin proveniente de la fuente de luz. Si
queremos que ocurra un bloqueo (como en una lmpara apantallada), es ms sencillo usar una unin.
Aadamos tales objetos a nuestra escena. Aqu tenemos una bombilla creada para este propsito:
#declare Lightbulb = union {
merge {
sphere { <0,0,0>,1 }
cylinder { <0,0,1>, <0,0,0>, 1
scale <0.35, 0.35, 1.0>
translate 0.5*z
}
texture {
pigment {color rgb <1, 1, 1>}
finish {ambient .8 diffuse .6}
}
}
cylinder { <0,0,1>, <0,0,0>, 1
scale <0.4, 0.4, 0.5>
texture { Brass_Texture }
translate 1.5*z
}
rotate -90*x
scale .5
}
PERSISTENCE OF VISION RAYTRACER 79
Le aadimos la fuente de luz:
light_source {
<0, 2, 0>
color White
looks_like { Lightbulb }
}
Trazando esto veremos que ahora una bonita bombilla con apariencia realista ilumina la escena. Sin
embargo, si no especificamos un valor alto de ambient la bombilla no estar iluminada por la fuente
de luz. Por otro lado, todas las sombras provienen de la bombilla como en una situacin real. Las
sombras son marcadas, as que convirtamos nuestra bombilla en una luz extendida:
light_source {
<0, 2, 0>
color White
area_light <1, 0, 0>, <0, 1, 0>, 2, 2
adaptive 1
jitter
looks_like { Lightbulb }
}
Apreciamos que hemos colocado esta luz de superficie en el plano xy en lugar de en el plano xz.
Tambin apreciamos que la apariencia real de la bombilla no se ve afectada en ningn modo por la
fuente de luz. La bombilla debe ser iluminada por alguna otra fuente de luz o, como en este caso,
proporcionar un valor alto de ambient. Se pueden obtener resultados ms interesantes empleando
halos (vase seccin "Halos").
4.6.7. Fuentes de luz especiales.
4.6.7.1. Empleando luces sin sombra.
A las fuentes de luz se les puede asignar la palabra clave shadowless y no sern arrojadas sombras
debidas a su presencia en la escena. Algunas veces, las escenas son difciles de iluminar adecuadamente
empleando las luces que hemos elegido para iluminar nuestros objetos. No es prctico ni realista aplicar
un valor alto de ambient a la textura de todos los objetos de la escena. En su lugar podramos colocar
un par de luces de relleno rodeando la escena. Las luces de relleno son simplemente luces de poca
intensidad, con la palabra reservada shadowless, que actan para incrementar la iluminacin de otras
reas de la escena que pueden estar no muy bien iluminadas. Probmoslo usando una en nuestra
escena.
Recuerdas las tres luces de color puntuales de superficie? Volvamos a ellas, quitmosles los
comentarios y comentemos el resto de las fuentes. Aadamos lo siguiente:
light_source {
<0, 20, 0>
color Gray50
shadowless
}
sta es una bonita luz de poca intensidad colocada 20 unidades sobre el centro de nuestra escena. Dar
una ligera iluminacin a todos los objetos incluyendo el plano de la parte posterior. Tracemos y
vemosla.
4.6.7.2. Usando atenuacin de la luz.
Si lo que queremos es realismo, no es muy realista que el plano est completamente iluminado hasta el
horizonte. En la vida real, la luz se reparte a medida que se propaga de forma que disminuye su
capacidad de iluminar los objetos segn van estando ms alejados de la fuente. Para simular esto, POV-
Ray nos permite usar dos palabras clave: fade_distance, la cual nos permite especificar la distancia
4. TUTORIAL PARA PRINCIPIANTES 80
hasta la cual se alcanza la iluminacin plena, y fade_power, un valor exponencial que determina la
proporcin real de atenuacin. Apliquemos estas palabras reservadas a nuestra luz de relleno.
Primero hagamos nuestra luz de relleno un poco ms brillante cambiando Gray50 a Gray75. Ahora,
modifiquemos la luz de relleno como sigue:
light_source {
<0, 20, 0>
color Gray75
fade_distance 5
fade_power 1
shadowless
}
Esto significa que el valor completo de la luz de relleno alcanzar una distancia de 5 unidades desde la
fuente de luz. El valor 1 de fade_power quiere decir que la atenuacin ser lineal (la luz se desvanece
segn un valor constante). Tracemos para ver el resultado.
Esto funciona! Probemos un valor de fade_power de 2 y un valor de fade_distance de 10.
Nuevamente esto funciona bien. La atenuacin es mucho ms rpida con un valor de fade_power de
2, as que incrementemos el valor de fade_distance hasta 10.
4.6.7.3. Las fuentes de luz y la atmsfera.
Por definicin, ms que por defecto, las fuentes de luz se ven afectadas por la atmsfera, por ejemplo,
su luz est siendo dispersada por la atmsfera. Esto puede ser desactivado aadiendo atmosphere
off a la fuente de luz. La luz emitida por una fuente de luz tambin puede ser atenuada por la
atmsfera (e incluso por la niebla), lo que significa que disminuir a medida que se propaga por ella,
para lo cual aadimos atmospheric_attenuation on. La atenuacin es exponencial y depende
del parmetro distance de la atmsfera (o niebla). Apreciamos que esto slo afecta a la luz que
proviene directamente de una fuente de luz. La luz reflejada y refractada se ignora.
Experimentemos con estas palabras reservadas. Primero aadimos una atmsfera a nuestra escena:
#include "atmos.inc"
atmosphere { Atmosphere2 }
Comentemos las tres lneas que convierten cada una de las luces puntuales en luces de superficie. De
otro modo el trazado se har muy largo.
//area_light <1, 0, 0>, <0, 0, 1>, 2, 2
//adaptive 1
//jitter
Generando esta escena a 200x150 -A veremos que realmente las luces puntuales son visibles. Veremos
cmo el haz rojo y el azul se entrecruzan y cmo la luz superior blanca ilumina la parte inferior
atravesando el centro de la escena. Tambin apreciamos que las luces puntuales parecen disminuir su
intensidad a medida que la luz desciende desde la fuente de luz hacia los objetos. La luz roja inunda
todo excepto en la parte baja de la izquierda de la escena y la luz azul inunda todo excepto en la parte
baja de la derecha. Esto es debido a la atenuacin atmosfrica y aade ms realismo a la escena. La
interaccin entre atmsfera y fuente de luz da a nuestra escena una apariencia ahumada y misteriosa,
pero el trazado emplear ms tiempo. Convirtiendo estas fuentes puntuales en luces de superficie
todava emplear ms tiempo. Este es el precio a pagar para obtener una imagen de calidad.
4.7. Opciones de textura simples
Las imgenes trazadas hasta ahora son aburridas en lo que respecta a la apariencia de los objetos.
Aadmosle algunos divertidos efectos a la textura.
PERSISTENCE OF VISION RAYTRACER 81
4.7.1. Acabado de superficies.
Una de las caractersticas principales de un trazador de rayos es su capacidad para hacer cosas
interesantes con el acabado de superficies, tales como brillos y reflexiones. Aadmosle un bonito y
pequeo brillo (punto brillante) a la esfera. Para hacer esto necesitamos aadir la palabra reservada
finish seguida por un parmetro. Cambiamos la definicin de la esfera a esto:
sphere { <0, 1, 2>, 2
texture {
pigment { color Yellow } // Yellow est predefinido en colors.inc
finish { phong 1 }
}
}
Trazamos la escena. La palabra reservada phong aade un brillo del mismo color que la luz que ilumina
el objeto. Dota a la imagen de mayor credibilidad y hace que el objeto parezca ms suave y brillante.
Valores menores de phong harn el brillo menos brillante (los valores deben encontrarse entre 0 y 1).
4.7.2. Aadiendo abolladuras.
Los brillos que hemos aadido ilustran como nuestra percepcin depende de las propiedades reflexivas
de un objeto. El trazado de rayos puede explotar esto engaando a nuestra percepcin para hacernos
ver detalles complejos donde realmente no los hay.
Supongamos que queremos una superficie muy abollada sobre un objeto. Sera muy difcil modelar
matemticamente esa cantidad de abolladura. Podemos, sin embargo, simular las abolladuras alterando
la forma en que la luz se refleja en la superficie. Los clculos de reflexin dependen de un vector
denominado normal a la superficie. Este es un vector que apunta hacia afuera de la superficie y es
perpendicular a ella. Modificando artificialmente (o perturbando) este vector normal, podemos simular
abolladuras. Cambiamos la escena a lo siguiente y la trazamos:
sphere { <0, 1, 2>, 2
texture {
pigment { color Yellow }
normal { bumps 0.4 scale 0.2 }
finish { phong 1}
}
}
Esto informa a POV-Ray de que use un patrn de abolladura para modificar la normal a la superficie.
El valor 0.4 controla la profundidad aparente de las abolladuras. Normalmente las abolladuras son de
aproximadamente una unidad de ancho, lo cual no parece encajar muy bien con una esfera de radio 2.
El escalado hace que las abolladuras tengan 1/5 de anchura, pero no afecta a su profundidad.
4.7.3. Creando patrones de colores.
Podemos hacer algo ms que asignar colores slidos a un objeto. Podemos crear patrones complejos en
el bloque pigment como en este ejemplo:
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>
}
4. TUTORIAL PARA PRINCIPIANTES 82
finish { phong 1 }
}
}
La palabra clave wood especifica un patrn de pigmento de anillos concntricos como los anillos de la
madera. La palabra clave color_map especifica que el color de la madera debe mezclarse desde
DarkTan a DarkBrown en el primer 90% del veteado y de DarkBrown a VeryDarkBrown sobre el restante
10%. La palabra clave turbulence agita ligeramente el patrn de forma que el veteado no sean
crculos perfectos y la palabra clave scale ajusta el tamao del patrn.
Muchos patrones nos vienen dados por defecto para ofrecernos esa caracterstica alrededor de una
esfera de radio 1.0. Una caracterstica se puede definir burdamente como una transicin de color. Por
ejemplo, una textura de madera debera tener una banda sobre una esfera de radio 1.0. En este ejemplo
escalamos el patrn usando la palabra clave scale seguida por un vector. En este caso escalamos 0.2
en la direccin x, 0.3 en la direccin y, y 1 en la direccin z, lo cual lo deja inalterado. Valores de
escalado mayores que 1 extendern un elemento. Valores de escalado menores que 1 encogern un
elemento. Un valor de escalado de 1 dejar el elemento inalterado.
4.7.4. Texturas predefinidas.
POV-Ray tiene algunas texturas muy sofisticadas predefinidas en los ficheros de inclusin estndar:
GLASS.INC, METALS.INC, STONES.INC y WOODS.INC. Algunos son texturas completas con los parmetros
pigment, normal y/o finish ya definidos. Algunos son simplemente pigmentos o slo acabados.
Cambiamos la definicin de nuestra esfera a lo siguiente y trazamos:
sphere { <0, 1, 2>, 2
texture {
pigment {
DMFWood4 // predefinida en textures.inc
scale 4 // escalada la misma cantidad
// en todas las direcciones
}
finish { Shiny } // predefinida en finish.inc
}
}
El identificador de pigmento DMFWood4 ha sido ya reducido en escala suficientemente al ser definido.
Para este ejemplo queremos aumentar la escala del patrn. Como queremos escalarlo uniformemente
ponemos un valor simple despus de la palabra clave scale en lugar de un vector con factor de
escalado x, y, z.
Miremos el fichero TEXTURES.INC para ver qu pigmentos y acabados estn definidos y probmoslos.
Insertemos el nombre del nuevo pigmento donde est ahora DMFWood4 o probemos un acabado
diferente en lugar de Shiny y volvamos a trazar nuestro fichero.
Aqu tenemos un ejemplo de un uso de identificador de textura completo en lugar de slo las piezas.
sphere { <0, 1, 2>, 2
texture { PinkAlabaster }
}
4.8. Opciones avanzadas de texturas
Las amplias posibilidades para elegir la textura de un objeto es lo que realmente aparta a POV-Ray de
otros programas trazadores de rayos. Hasta ahora no hemos intentado algo realmente complejo, pero
ahora, que nos hemos acostumbrado a la sintaxis del programa, podemos probar algunas de las
opciones ms avanzadas de textura.
Obviamente, no podemos probarlas todas. En ese caso, nuestro tutorial an tendra ms pginas. En
este tutorial slo probaremos unas cuantas de las opciones, para proporcionar una muestra de lo que
PERSISTENCE OF VISION RAYTRACER 83
puede crearse con POV-Ray. Con un poco de prctica, pronto podr el lector crear sus propias
texturas.
4.8.1. Patrones de pigmentacin y de normal
Las versiones anteriores de POV-Ray distinguan entre patrones de color y patrones para la normal (es
decir, entre los patrones que podan ser usados en el apartado pigment y los que podan ser usados en
el apartado normal). En POV-Ray 3.0 se suprimi esta restriccin, de forma que todos los patrones
listados como tales pueden ser usados como pigmentos o como normales.
4.8.2. Pigmentos
Todas las superficies deben tener un color. En POV-Ray este color se denomina pigmento. No tiene
porqu ser un color uniforme. Puede ser un patrn de color, uno de los tres dibujos permitidos o una
imagen extendida. Pueden colocarse diferentes capas de pigmentos, de forma que las superiores tengan
partes transparentes a travs de las que se muestren las inferiores. Probemos algunas de las
posibilidades de este concepto.
Creamos un archivo llamado "TEXTDEMO.POV" y escribimos algo como lo siguiente:
#include "colors.inc"

camera {
location <1, 1, -7>
look_at 0
angle 36
}

light_source { <1000, 1000, -1000> White }

plane { y, -1.5
pigment { checker Green, White }
}

sphere { <0,0,0>, 1
pigment { Red }
}
Trazando esta imagen en una prueba a 200x150, vemos que se trata de una sencilla bola roja sobre un
suelo a cuadros blancos y verdes. Usaremos esta esfera para probar nuestras texturas.
4.8.2.1. Usando pigmentos con lista de colores
Ya hemos utilizado en los ejemplos previos este tipo de pigmentos, en el suelo a cuadros verdes y
blancos. Hay otros dos permitidos, hexgonos y ladrillos. Probemos ambos. En primer lugar
cambiaremos el pigmento del plano como sigue:
pigment { hexagon Green, White, Yellow }
Esto crea un patrn hexagonal sobre el plano con tres colores. Este patrn requiere escribir los tres
colores. Ahora cambiemos de nuevo el pigmento...
pigment { brick Gray75, Red rotate -90*x scale .25 }
Al mirar la imagen resultante, veremos que el plano tiene aspecto de estar construido con ladrillos rojos
unidos con un cemento gris claramente visible. Observa que hemos tenido que girar este patrn para
que aparezca en un plano horizontal, ya que habitualmente se usa directamente sobre superficies
verticales. Podemos jugar con estos patrones, cambiar los colores usados, etc.
4. TUTORIAL PARA PRINCIPIANTES 84
4.8.2.2. Usando pigmentos y patrones
Cambiemos ahora la textura de nuestra esfera, usando un patrn con mapa de colores, usando para ello
tres colores. Reemplazamos el bloque del pigmento con el siguiente:
pigment {
gradient x
color_map {
[0.00 color Red]
[0.33 color Blue]
[0.66 color Yellow]
[1.00 color Red]
}
}
Veremos que se forma un interesante patrn de lneas verticales. Si utilizamos la direccin y en lugar de
la x (junto a la palabra gradient), tendremos lneas horizontales. Cambiando a la direccin z, las
bandas de color parecern anillos concntricos. Esto sucede porque la direccin de la variacin es la
misma en la que apunta la cmara. Volvemos a poner la direccin x y aadimos lo siguiente en el
bloque del pigmento.
pigment {
gradient x
color_map {
[0.00 color Red]
[0.33 color Blue]
[0.66 color Yellow]
[1.00 color Red]
}
rotate -45*z // <- aadimos esta lnea
}
Ahora, las bandas verticales aparecen inclinadas 45 grados. Todos los patrones pueden ser girados,
escalados y trasladados de esta forma (sin desplazar la superficie sobre la que se aplican). Probemos
diferentes tipos de patrn. Sustituiremos sucesivamente la lnea "gradient x" por la siguientes
palabras clave, y trazaremos para ver el resultado: bozo, marble, agate, granite, leopard,
spotted y wood (si quieres, puedes probar todos los patrones que aparecen en la seccin "Patrones").
Veremos que cada uno de ellos da lugar a una disposicin de los colores ligeramente diferente (bozo y
spotted puede que resulten idnticos). Pero para obtener buenos resultados, cada tipo de patrn
requiere el uso de algunos modificadores.
4.8.2.3. Usando modificadores de patrones
Echemos un vistazo a algunos de los modificadores de patrn. Primero, utilizaremos el patrn bozo,
aadiendo el siguiente cambio:
pigment {
bozo
frequency 3 // <- aadimos esta lnea
color_map {
[0.00 color Red]
[0.33 color Blue]
[0.66 color Yellow]
[1.00 color Red]
}
rotate -45*z
}
El modificador frecuency determina el nmero de veces que se repiten los colores indicados en el
mapa de colores, que por defecto es 1. En este caso, vemos ms bandas (el triple) en el patrn bozo de
las que haba antes, aunque los colores que aparecen son los mismos.
PERSISTENCE OF VISION RAYTRACER 85
Cambiemos el patrn a marble. Al observarlo, veremos que es muy similar al gradient y, que no se
parece en absoluto al mrmol, como parece sugerir su nombre. Situemos una frecuencia de 3
(frequency 3) y una turbulencia de 1 (turbulence 1) y probemos otra vez. Mucho mejor no?
Prueba a cambiar el orden en el que sitas la turbulencia y la frecuencia qu sucede?
La turbulencia tiene de por s unos modificadores especficos que nos permiten tener ms control sobre
lo que hace. En primer lugar, el valor que sigue a la palabra turbulence puede tener decimales, e
indica lo "revuelta" que quedar la textura. Valores ms altos hacen ms catico el resultado. En
segundo lugar, podemos usar los modificadores omega, lambda y octaves para cambiar los
parmetros internos de la turbulencia. Probemos esto ahora:
pigment {
marble
turbulence 0.5
lambda 1.5
omega 0.8
octaves 5
frequency 3
color_map {
[0.00 color Red]
[0.33 color Blue]
[0.66 color Yellow]
[1.00 color Red]
}
rotate 45*z
}
Trazar esto nos permitir ver que la turbulencia ha cambiado, dando lugar a un patrn ligeramente
distinto. Podemos jugar con los valores de turbulence, lambda, omega y octaves para observar
lo que hacen.
4.8.2.4. Usando pigmentos transparentes y texturas superpuestas
Los colores se describen por valores numricos que indican la proporcin de rojo, verde y azul que los
componen (color rgb <1,0,0> nos proporciona el color rojo). Pero esta sintaxis nos permite usar
algo ms que la composicin rgb de un color. Podemos especificar transparencia (con filtro)
escribiendo rgbf <1,0,0,1>. La f representa filtro, y un valor de 1 supone que la superficie ser
totalmente transparente, filtrando la luz segn el color que tenga. En el caso del ejemplo, se comportar
como papel celofn rojo.
Hay otra clase de transparencia en POV-Ray. Se llama transmitancia o transparencia sin filtro. Su
palabra clave es transmit, y difiere de la anterior en que no filtra la luz de acuerdo con el color de la
superficie. Permite que la luz pase a travs sin cambios. Puede especificarse como sigue: rgbt
<1,0,0,1>.
Usaremos ahora colores transparentes para crear otro tipo de texturas, las texturas superpuestas.
Volviendo a nuestro ejemplo anterior, declaramos la siguiente textura:
#declare LandArea = texture {
pigment {
agate
turbulence 1
lambda 1.5
omega .8
octaves 8
color_map {
[0.00 color rgb <.5, .25, .15>]
[0.33 color rgb <.1, .5, .4>]
[0.86 color rgb <.6, .3, .1>]
[1.00 color rgb <.5, .25, .15>]
}
4. TUTORIAL PARA PRINCIPIANTES 86
}
}
}
Esta ser la textura del suelo. Ahora, crearemos lo ocanos declarando lo siguiente:
#declare OceanArea = texture {
pigment {
bozo
turbulence .5
lambda 2
color_map {
[0.00, 0.33 color rgb <0, 0, 1>
color rgb <0, 0, 1>]
[0.33, 0.66 color rgbf <1, 1, 1, 1>
color rgbf <1, 1, 1, 1>]
[0.66, 1.00 color rgb <0, 0, 1>
color rgb <0, 0, 1>]
}
}
}
}
Observa que el rea transparente permitir ver la tierra, mientras que el azul opaco representar el
ocano.
Ahora, declaremos otra textura que represente la atmsfera, con remolinos de nubes.
#declare CloudArea = texture {
pigment {
agate
turbulence 1
lambda 2
frequency 2
color_map {
[0.0 color rgbf <1, 1, 1, 1>]
[0.5 color rgbf <1, 1, 1, .35>]
[1.0 color rgbf <1, 1, 1, 1>]
}
}
}
Por fin, apliquemos estas texturas sobre nuestra esfera:
sphere { <0,0,0>, 1
texture { LandArea }
texture { OceanArea }
texture { CloudArea }
}
Trazando esto, veremos una reconstruccin bastante buena de un pequeo planeta. Pero la capa de
nubes no es muy realista. Hay formas de hacerlas mucho mejor.
4.8.2.5. Usando mapas de pigmentos
Los pigmentos pueden combinarse de la misma forma que los colores, usando los mismos patrones que
hemos visto. Intentmoslo.
Aadamos las siguientes declaraciones, delante de las anteriormente escritas:
#declare Clouds1 = pigment {
bozo
turbulence 1
color_map {
[0.0 color White filter 1]
PERSISTENCE OF VISION RAYTRACER 87
[0.5 color White]
[1.0 color White filter 1]
}
}
#declare Clouds2 = pigment {
agate
turbulence 1
color_map {
[0.0 color White filter 1]
[0.5 color White]
[1.0 color White filter 1]
}
}
#declare Clouds3 = pigment {
marble
turbulence 1
color_map {
[0.0 color White filter 1]
[0.5 color White]
[1.0 color White filter 1]
}
}
#declare Clouds4 = pigment {
granite
turbulence 1
color_map {
[0.0 color White filter 1]
[0.5 color White]
[1.0 color White filter 1]
}
}
Ahora usaremos estos pigmentos en la capa de nubes de nuestro planeta. Escribamos lo siguiente en
lugar de esta capa:
#declare CloudArea = texture {
pigment {
gradient y
pigment_map {
[0.00 Clouds1]
[0.25 Clouds2]
[0.50 Clouds3]
[0.75 Clouds4]
[1.00 Clouds1]
}
}
}
Observa que ahora aparecen en el planeta unas patrones muy similares a los de nuestro planeta, ya que
las nubes estn separadas en bandas, cada una de las cuales tiene una estructura diferente, simulando
distintos climas a diferentes latitudes.
4.8.3. Normales
Los objetos de POV-Ray tienen superficies muy lisas. Esto no es muy real, de forma que hay varios
sistemas de distorsionar la superficie, modificando su normal. La normal es el vector perpendicular a
una superficie en un punto dado. La luz se refleja, o traspasa este objeto en funcin de esa normal, de
forma que alterarla significa que la superficie puede aparecer abollada, ondulada, arrugada, o modificada
de cualquiera de las formas disponibles. Probemos un puado de ellas.
4. TUTORIAL PARA PRINCIPIANTES 88
4.8.3.1. Usando modificadores de normal bsicos
De momento, marcaremos como comentario nuestro planeta en el archivo de prueba, y crearemos una
nueva esfera al final de ste con una sencilla textura de un solo color:
sphere { <0,0,0>, 1
pigment { Gray75 }
normal { bumps 1 scale .2 }
}
Hemos aadido un bloque normal, adems del bloque pigmento (no ha de ser incluido en un bloque
textura, salvo que se desee modificar ambos simultneamente, o que formen parte de una textura
superpuesta). Una vez que hayamos comprobado el aspecto que tiene, substituiremos la palabra bumps
por las siguientes: dents, wrinkles, ripples y waves (podemos usar cualquiera de los patrones
listados en la seccin "Patrones"). Probaremos cmo queda cada uno de ellos. Podemos probar a
modificar el valor numrico (decimal) que sigue a la palabra clave. Tambin podemos experimentar con
el valor de escala.
Como aadido interesante, cambiaremos la textura del suelo a un solo color con una normal como la
que sigue:
plane { y, -1.5
pigment { color rgb <.65, .45, .35> }
normal { dents .75 scale .25 }
}
4.8.3.2. Combinando normales
Las normales pueden superponerse, como los pigmentos, pero los resultados pueden ser inesperados.
Probemos a modificar la textura de la esfera como sigue:
sphere { <0,0,0>, 1
pigment { Gray75 }
normal { radial frequency 10 }
normal { gradient y scale .2 }
}
Como puedes ver, el patrn resultante no es radial o gradiente. Es el resultado de calcular el patrn
radial y despus el patrn gradiente. El resultado se suma, por lo que el resultado es difcil de controlar.
El programa POV-Ray ofrece a sus usuarios otras formas de combinar las normales.
Una de las formas es usar mapas de normales. Un mapa de normales funciona igual que los mapas de
pigmentos usados con anterioridad. Cambiemos la textura de nuestra esfera de la siguiente forma:
sphere { <0,0,0>, 1
pigment { Gray75 }
normal {
gradient y
frequency 3
turbulence .5
normal_map {
[0.00 granite]
[0.25 spotted turbulence .35]
[0.50 marble turbulence .5]
[0.75 bozo turbulence .25]
[1.00 granite]
}
}
}
Al ver la imagen, observaremos que la esfera tiene una superficie con bultos muy irregular. El patrn
gradiente separa las normales en bandas, pero la turbulencia las ha agitado, dndole un aspecto catico.
Pero esto nos da una idea.
PERSISTENCE OF VISION RAYTRACER 89
Podemos usar el mismo patrn para un mapa de normales que el que usamos para crear los ocanos, de
forma que las zonas de tierra se vean rugosas, mientras que los ocanos parezcan ms lisos. Quiere
esto decir que si aplicamos el mismo patrn con los mismos modificadores en una esfera del mismo
tamao obtendremos la misma forma? Probmoslo. Primero, tracemos las dos esferas, de forma que
podremos ver que el patrn es realmente el mismo. Quitamos las seales de comentario a la primera
esfera y realizamos los siguientes cambios.
sphere { <0,0,0>, 1
texture { LandArea }
texture { OceanArea }
//texture { CloudArea } // <-lo convertimos en comentario
translate -x // <- aadimos esta transformacin
}
Modificamos la esfera gris de la siguiente forma:
sphere { <0,0,0>, 1
pigment { Gray75 }
normal {
bozo
turbulence .5
lambda 2
normal_map {
[0.4 dents .15 scale .01]
[0.6 agate turbulence 1]
[1.0 dents .15 scale .01]
}
}
translate x // <- aadimos esta transformacin
}
Ahora estamos seguros de que el patrn es el mismo. Ahora, marquemos como comentario la esfera
gris y aadamos el bloque de normales a la textura del suelo del otro planeta. Quitaremos la traslacin
para que vuelva a quedar centrado.
#declare LandArea = texture {
pigment {
agate
turbulence 1
lambda 1.5
omega .8
octaves 8
color_map {
[0.00 color rgb <.5, .25, .15>]
[0.33 color rgb <.1, .5, .4>]
[0.86 color rgb <.6, .3, .1>]
[1.00 color rgb <.5, .25, .15>]
}
}
normal {
bozo
turbulence .5
lambda 2
normal_map {
[0.4 dents .15 scale .01]
[0.6 agate turbulence 1]
[1.0 dents .15 scale .01]
}
}
}
4. TUTORIAL PARA PRINCIPIANTES 90
Mirando el resultado, nos haremos una idea de como funciona la idea. Las zonas terrestres estn llenas
de bultos mientras que los ocanos son lisos. Aadiendo de nuevo la capa de nubes, el planeta estar
completo.
Por razones de espacio, hay muchas cosas que no hemos tratado. Por ejemplo, deberas experimentar
los llamados mapas de cuestas (slope maps), las medias (average) y mapas de bultos (bump maps).
4.8.4. Acabados
La parte final de una textura de POV-Ray es el acabado. Controla las propiedades de la superficie de un
objeto. Puede hacer que sea brillante y reflexivo o montono y apagado. Tambin puede especificar lo
que ocurre con la luz que pasa a travs de pigmentos transparentes, con la que es dispersada debido a
superficies imperfectas y con la que es reflejada por superficies con delgadas pelculas que producen
interferencias. Hay doce propiedades diferentes disponibles en POV-Ray para especificar el acabado de
un objeto dado. Estas estn controladas por los siguientes identificadores: ambient, diffuse,
brilliance, phong, specular, metallic, reflection, refraction, caustics,
attenuation, crand e iridiscence. Diseemos un par de texturas que usen estos parmetros.
4.8.4.1. Usando ambient
Debido a que, en POV-Ray los objetos estn iluminados por fuentes de luz, las porciones de estos
objetos que estn en la sombra seran completamente oscuras si no fuera por las dos primeras
propiedades del acabado, ambient y diffuse. Ambient se usa para simular la luz dispersada por
toda la escena que no viene directamente de ninguna fuente de luz. Diffuse determina que cantidad
de luz proviene de fuentes directas. Estos dos identificadores trabajan juntos para controlar la
simulacin de luz ambiental. Usemos nuestra esfera gris para demostrar esto. Cambiemos tambin
nuestro plano a su diseo original de cuadros verdes y blancos.
plane {y,-1.5
pigment {checker Green, White}
}

sphere { <0,0,0>, 1
pigment {Gray75}
finish {
ambient .2
diffuse .6
}
}
En este ejemplo se usan los valores por defecto para ambient y diffuse. Trazamos para ver cuales
son los resultados y despus hacemos el siguiente cambio al acabado.
ambient 0
diffuse 0
La esfera es negra debido a que hemos especificado que la luz no sea reflejada por ella. Cambiemos
ahora diffuse por su valor por defecto de 0.6.
Ahora vemos la superficie gris donde la luz de la fuente incide directamente sobre la esfera, pero el lado
sombreado sigue siendo absolutamente negro. Ahora cambiemos diffuse a 0.3 y ambient a 0.3.
La superficie de la esfera se ha vuelto ahora ms montona. Es debido a que hemos especificado un
alto grado de luz ambiental y solo una pequea cantidad de la luz proveniente de la fuente de luz es
difusamente reflejada hacia la cmara. Los valores por defecto de ambient y diffuse son una media
bastante buena y un buen punto de partida. En la mayora de los casos, un valor para ambient entre
0.1 y 0.2 es suficiente y un valor para diffuse entre 0.5 y 0.7 generalmente quedar bien. Hay un par
de excepciones. Si tenemos una superficie completamente transparente con unos altos valores de
refraccin o reflexin, usar valores bajos para ambient y diffuse es lo mejor. He aqu un ejemplo.
PERSISTENCE OF VISION RAYTRACER 91
sphere { <0,0,0>, 1
pigment { White filter 1 }
finish {
ambient 0
diffuse 0
reflection .25
refraction 1
ior 1.33
specular 1
roughness .001
}
}
Obviamente la esfera es de cristal. El cristal es un material que toma casi toda su apariencia de lo que le
rodea. Poca parte de la superficie es vista debido a que transmite o refleja prcticamente toda la luz que
brilla sobre el. Ver GLASS.INC para ms ejemplos.
Si alguna vez necesitamos que un objeto est totalmente iluminado independientemente de las fuentes
de luz en una escena dada, podemos hacerlo artificialmente especificando un valor de 1 para ambient
y un valor de 0 para diffuse. Esto eliminar todo el sombreado y simplemente dar al objeto su color
en su forma ms brillante en todos sus puntos. Esto es til para simular objetos que emiten luz como
bombillas y para cielos en escenas donde el este no deba ser iluminado por ningn otro medio
Ahora intentemos esto con nuestra esfera.
sphere { <0,0,0>, 1
pigment { White }
finish {
ambient 1
diffuse 0
}
}
Nos da como resultado una esfera de un blanco cegador sin ningn punto de brillo ni partes
sombreadas. Podra servir, por ejemplo, para la luz de una farola.
4.8.4.2. Usando los reflejos de superficie
En el ejemplo anterior del cristal, nos dimos cuenta de que haba pequeos puntos brillantes sobre la
superficie. Esto daba a la esfera una apariencia dura y brillante. POV-Ray nos proporciona dos mtodos
para especificar los reflejos especulares sobre la superficie. El primero es el reflejo phong y se describe
mediante dos identificadores: phong y phong_size. El valor decimal que sigue a phong determina su
brillo y el que sigue a phong_size, su tamao. Intentemos esto.
sphere { <0,0,0>, 1
pigment { Gray50 }
finish {
ambient .2
diffuse .6
phong .75
phong_size 25
}
}
Trazando esto vemos un reflejo amplio y atenuado que da a la esfera una apariencia semejante al
plstico. Ahora cambiemos phong_size a 150. Esto causa un reflejo ms pequeo que da a la esfera
una apariencia ms dura y brillante.
Hay otro tipo de reflejo, que es calculado usando un mtodo distinto, llamado reflejo especular. Se
especifica usando el identificador specular y opera en conjuncin con otro identificador llamado
roughness. En muchos aspectos, estos dos identificadores trabajan juntos del mismo modo que
4. TUTORIAL PARA PRINCIPIANTES 92
phong y phong_size para crear reflejos que alteren el aparente brillo de la superficie. Intentmoslo
ahora usando specular en nuestra esfera.
sphere { <0,0,0>, 1
pigment { Gray50 }
finish {
ambient .2
diffuse .6
specular .75
roughness .1
}
}
}
Observando los resultados vemos un amplio y atenuado reflejo similar al que tenamos cuando
usbamos phong_size 25. Cambiemos roughness a 0.001 y tracemos de nuevo. Ahora vemos un
pequeo y ceido reflejo similar al que tenamos cuando usbamos phong_size 150. Hablando en
general. specular es ligeramente ms preciso y por lo tanto ligeramente ms realista que phong, pero
de todos modos deberas probar ambos mtodos al disear una textura. Incluso hay veces en las que
ambos mtodos pueden ser usados en un mismo acabado.
4.8.4.3. Usando reflection y metallic
Existe otro parmetro muy relacionado con los reflejos, reflection. Las superficies muy brillantes
normalmente tienen un cierto grado de reflexin. Echemos un vistazo a este ejemplo.
sphere { <0,0,0>, 1
pigment { Gray50 }
finish {
ambient .2
diffuse .6
specular .75
roughness .001
reflection .5
}
}
}
Vemos que ahora nuestra esfera refleja el plano a cuadros verdes y blancos y el fondo negro, pero el
color gris de la esfera parece fuera de lugar. Este es otro caso en el que se necesita un valor bajo para
diffuse. Generalmente, cuanto mayor sea la reflexin, menor deber ser el valor de diffuse.
Bajamos el valor de diffuse a 0.3 y el valor de ambient a 0.1 y trazamos de nuevo. Ahora est
mucho mejor. Hagamos que nuestra esfera sea tan brillante como una pulimentada bola de oro.
sphere { <0,0,0>, 1
pigment { BrightGold }
finish {
ambient .1
diffuse .1
specular 1
roughness .001
reflection .75
}
}
}
El resultado es muy aproximado, pero hay algo que todava esta mal en el reflejo. Para hacer que la
superficie tenga un aspecto ms metlico se usa el identificador metallic. Lo aadimos para ver la
diferencia
sphere { <0,0,0>, 1
pigment { BrightGold }
PERSISTENCE OF VISION RAYTRACER 93
finish {
ambient .1
diffuse .1
specular 1
roughness .001
reflection .75
metallic
}
}
}
Vemos que el reflejo a tomado su color de la superficie en lugar de la fuente de luz. Esto da a la
superficie una apariencia ms metlica.
4.8.4.4. Usando refraction
Los objetos transparentes permiten a la luz pasar a travs de ellos. Con algunas sustancias, los rayos de
luz son desviados al pasar de una sustancia a otra debido a la diferencia de densidades pticas entre los
objetos. A esto se le llama refraccin. El agua y el cristal desvan la luz de esta forma. Para crear agua o
cristal, POV-Ray nos proporciona un mtodo para especificar la refraccin. Esto se consigue mediante
los identificadores refraction e ior. La cantidad de luz que pasa a travs de un objeto se
determinan mediante el filtrado y la transmitancia en el pigmento. Deberamos usar el valor de
refraction solo para activar o desactivar la refraccin usando los valores 1 0 respectivamente (o
los valores booleanos on y off). Ver la seccin "Refraccin" para una explicacin detallada de las
razones.
El grado de refraccin se especifica mediante el identificador ior, abreviacin de index of refraction
(ndice de refraccin). Si conocemos el ndice de refraccin de la sustancia que estamos creando lo
podemos usar directamente. Como ejemplo el agua tiene un ndice de 1.33, el cristal est alrededor de
1.45 y el diamante de 1.75. Volvamos al ejemplo de una esfera de cristal que usamos anteriormente.
sphere { <0,0,0>, 1
pigment { White filter 1 }
finish {
ambient 0
diffuse 0
reflection .25
refraction 1
ior 1.45
specular 1
roughness .001
}
}
}
Trazamos esto de nuevo y observamos como la porcin del plano que es visible a travs de la esfera es
distorsionado y vuelto de arriba a abajo. Esto es debido a que la luz que pasa a travs de la esfera es
desviada o refractada segn el grado especificado. Reducimos el valor de ior a 1.25 y trazamos de
nuevo. Despus lo incrementamos a 1.75. Podemos observar como cambia la distorsin.
4.8.4.5. Aadiendo la atenuacin luminosa
Los objetos transparentes pueden estar hechos de forma que la intensidad de la luz que pasa a travs de
ellos sea reducida. En la realidad, esto es debido a impurezas que dispersan los rayos de luz. Dos
valores decimales determinan este efecto: fade_distance es la distancia hasta la cual deben llegar los
rayos de luz para alcanzar la mitad de su intensidad original y fade_power es el grado segn el cual
disminuye esa intensidad. Veamos un ejemplo de esto.
sphere { <0,0,0>, 1
pigment { White filter 1 }
4. TUTORIAL PARA PRINCIPIANTES 94
finish {
ambient .1
diffuse .1
reflection .15
refraction 1
ior 1.45
specular 1
roughness .001
fade_distance 5
fade_power 1
}
}
Esto da a la esfera un aspecto nublado, como si no toda la luz fuera capaz de pasar a travs de ella. Para
variaciones interesantes de esta textura, bajemos el valor de ior a 1.15 y subamos el de reflection a
0.5.
4.8.4.6. Usando custicas simuladas
4.8.4.6.1. Qu es la custica?
Primero, hagamos una incursin en la alacena de la cocina. Estamos buscando vasos de cristal. Si tienen
una superficie decorada, mucho mejor. Uno a uno los colocamos debajo de una lmpara y observamos
la sombra que proyectan sobre la mesa. Si observamos de cerca distinguiremos regiones brillantes entre
las sombras. Estos sern los lugares donde las propiedades refractivas de los vasos de cristal estn
concentrando la suficiente luz como para formar puntos brillantes. Si hay un diseo tallado sobre la
superficie del cristal veremos ese diseo formado por las reas brillantes. Estas regiones son la custica
causada por la refraccin, la custica refractiva. Habr tambin regiones brillantes causadas por la luz
reflejada por el cristal. A esto se le llama custica reflexiva.
Una vez sabemos lo que estamos buscando, seremos capaces de observar la custica en muchas
situaciones cotidianas: la sombra proyectada por una lupa, la luz que atraviesa una pecera, a travs de un
trozo arrugado de celofn, etc. Podremos verla incluso en el fondo de una piscina en un da soleado. La
custica es un sutil efecto luminoso que puede dar realismo a las imgenes trazadas con objetos que lo
usen.
POV-Ray usa algoritmos que simulan la custica refractiva (la custica reflexiva no es posible). Existen
limitaciones inherentes al proceso estndar de trazado de rayos en general que la hacen inadecuada para
algunas aplicaciones de la simulacin de la luz, tales como testeo ptico y muy pocos y particulares
casos de proyectos arquitectnicos de iluminacin. Los mtodos que llevan a cabo clculos ms
extensos necesarios para realizar simulaciones completas del comportamiento de la luz, incluyendo la
custica (como el path-tracing, el photon-tracing o el ray-tracing bidireccional) son muy lentos y poco prcticos
en plataformas normales.
Esto significa que nos tenemos que arreglar con la custica para obtener el mejor resultado posible,
pero con un poco de experimentacin, veremos que podemos emular de forma muy cercana la realidad.
La mejor forma de hacerlo es, cuando sea posible, estudiando antes un ejemplo de lo que estamos
intentando trazar. Tenemos que conocer el diseo de su custica y ajustar entonces nuestra imagen final
hasta que estemos satisfechos.
4.8.4.6.2. Aplicando la custica a una escena
La custica es una nueva propiedad de la textura en el rea de los acabados. La aplicamos a las sombras
de un objeto transparente y refractivo aadiendo el identificador caustics al acabado. Para empezar,
probamos el siguiente ejemplo (ver fichero CAUSTIC1.POV).
#include "colors.inc"
#include "textures.inc"
PERSISTENCE OF VISION RAYTRACER 95

camera {
location <0, 15, -40>
look_at <-2, 0, 1>
angle 10
}

light_source { <10, 20, 10> color White }

// crear un aburrido suelo para ver la sombra proyectada contra el

plane { y, 0
pigment { Grey }
}
// he aqu algo para aplicar la custica sobre ello

sphere { <0, 3, 0>, 2
texture {
Glass3
finish { caustics .6 }
}
}
Cuando tracemos esto veremos nuestra esfera en la esquina superior derecha de la imagen, flotando a
escasa distancia del plano y la sombra que proyecta se extiende sobre la parte central de la escena. Y all,
en el centro hay una custica bsica. Esa rea brillante en el centro representa la luz que normalmente la
refraccin concentrara en medio de la sombra.
La nica cuestin que esto desprende es: qu pasa con el valor decimal que sigue al identificador
caustics? Bien, aqu es donde aparece nuestra discusin sobre como ajustar la custica. Recuerdas
los vasos de cristal? Si tuviramos uno de paredes delgadas y una base gruesa veramos lo que queremos
decir en la sombra que proyectara. En la parte superior, con las paredes delgadas (con menor
refraccin) la custica es menos pronunciada y ms difundida entre la sombra, pero cuando llegamos a
la parte de la sombra proyectada por la base ms gruesa y refractiva, de repente la custica se vuelve
ms pronunciada y ms enfocada cerca del centro.
Por supuesto, ya que la custica es simulada, no hay correspondencia entre el grado en que la custica es
enfocada o difuminada y la forma, tamao o refractividad del objeto. Sin embargo, podemos controlarla
manualmente con el valor decimal que sigue al identificador caustics. Cuanto ms se acerca este
valor a cero, ms difusa y tenue ser la custica, mientras que cuanto ms cerca este de 1, ms enfocada

Figura 25: La custica de una esfera translcida
4. TUTORIAL PARA PRINCIPIANTES 96
y pronunciada ser esta. Con el valor 1 tenemos la custica de una gruesa y altamente refractiva pieza de
cristal, mientras que con el valor 0.1, parece ms bien una esfera de cristal vaca. Trazamos de nuevo la
escena anterior con una rango de valores entre 0.1 y 1.0 y vamos viendo las diferentes custicas que
tenemos.
Los valores fuera de rango tambin funcionan. Los nmeros mayores que 1 nos llevan a custicas cada
vez ms enfocadas. Los nmeros negativos producen efectos extraos pero interesantes.
Esencialmente, el objeto se ilumina de formas extravagantes y la sombra parece ms bien un negativo
fotogrfico de si misma. Parecido a los efectos de las pistolas de rayos de ciencia ficcin de los aos 50.
Tiene una apariencia extraa y no del todo foto-realsta, pero si nos gusta el surrealismo podemos
querer probarlo al menos una vez y anotar el efecto que produce sobre nuestra mente en caso de que
alguna vez lo necesitemos.
4.8.4.6.3. Custica y normales
POV-Ray hace el uso de la perturbacin de la normal de una superficie de una forma ms especial que
la que la gente se parara a pensar. Cuando aplicamos la normal de una superficie en una textura,
estamos no solo alterando la superficie si no, adems diciendo a POV-Ray que trate a la superficie
como si esta hubiera sido alterada, por motivos del computo de la iluminacin que cae sobre cada
punto individual. En pocas palabras, se trata de un truco de luces y sombras que, suponiendo que no lo
observamos desde un ngulo demasiado agudo, efectivamente crea la ilusin de distorsiones sobre la
superficie del objeto.
Las custica es tambin un truco artificial, como vimos antes y se puede tener por seguro, que ha sido
diseada para reaccionar sobre los diseos de la normal de la superficie para hacer que estos parezcan
genuinos. Recuerdas el experimento del vaso de agua? Si encontramos un vaso con diseos tallados
sobre su superficie probablemente veremos esos diseos resaltados en la custica proyectada por el
cristal. Cuando tenemos una superficie transparente con una normal aplicada, esta hace que la custica
proyectada por esa superficie imite el diseo de la normal, de forma que aparezca en la sombra.
A continuacin hay un ejemplo de lo que queremos decir: est pensado para representar el agua en una
piscina. Lo conseguimos mediante un plano superior para el agua, otro inferior que representa el suelo
de la piscina, una cmara justo debajo de la superficie, mirando al suelo y una fuente de luz situada a
bastante altura. (ver CAUSTIC2.POV).
#include "colors.inc"

// Nuestra cmara esta bajo agua, mirando al fondo de
// la piscina para una mejor visin de la custica producida

camera {
location <0, -5, 0>
look_at <0, -10, -5>
}

light_source { <0, 100, 49.5> color White }

// el fondo de la piscina...

plane { y, -10
texture {
pigment { color rgb <0.6, 0.7, 0.7> }
finish { ambient 0.1 diffuse 0.7 }
scale 0.01
}
}

// y la superficie del agua

PERSISTENCE OF VISION RAYTRACER 97
plane { y, 0
texture {
pigment { rgbf <0.6, 0.67, 0.72, 0.9> }
normal {
bumps .6
scale <.75, .25, .25>
rotate <0, 45, 0>
}
finish { caustics .9 }
}
}
Las ondulaciones que le hemos dado al plano del agua estn pensadas para representar las pequeas y
aleatorias crestas que se forman sobre una piscina cuando una ligera brisa sopla sobre ella. Podramos
haber usado ripples o waves tambin, como si algo se hubiera zambullido en ella en algn punto,
pero bumps ser suficiente para un ejemplo.
Observamos que nuestra vista del suelo de la piscina muestra docenas de pequeas custicas,
correspondientes a un diseo de ondulaciones aleatorias. Si queremos podemos usar ripples o
waves y ver como cambia el diseo de la custica. A pesar de que un plano liso no producira custica
por si mismo (podemos intentarlo sin la normal), la generacin simulada de custica de POV-Ray sabe
que si la superficie fuera realmente abultada como esta normal est indicando, la refraccin de esta sera
suficiente para concentrar la luz en custicas por todo el suelo de la piscina.
Vemos que al igual que con una superficie curva, como la anterior esfera, el diseo de la normal
tambin afecta a las custicas proyectadas por un objeto. Lo curioso del caso es que esto sera la prueba
de que la custica es simulada: a nuestra agua no se le ha dado ninguna propiedad de refraccin en su
acabado, pero la custica est all.
4.8.4.7. Usando la iridiscencia
La iridiscencia es lo que vemos en la superficie de una mancha de petrleo cuando el sol brilla sobre
ella. El efecto de arco iris es creado por algo llamado interferencia de pelculas delgadas (ver seccin
("Iridiscencia" para detalles). Por ahora simplemente intentemos usarla. La iridiscencia se especifica
mediante el identificador irid y tres valores: cantidad, anchura y turbulencia. La cantidad es la
contribucin al color de la superficie. Usualmente de 0.1 a 0.5 es suficiente. La anchura, precedida del
identificador thickness, afecta a la magnitud del efecto. Mantnla entre 0.25 y 1 para mejores
resultados. La turbulencia, precedida del identificador turbulence, es un poco diferente a la
turbulencia del pigmento o la normal. No podemos definir octavas, lambda u omega pero podemos

Figura 26: La custica en una piscina
4. TUTORIAL PARA PRINCIPIANTES 98
especificar una cantidad que afectar al grosor de una forma ligeramente distinta al valor de
thickness. Aqu tambin funcionan mejor los valores entre 0.25 y 1. Finalmente, la iridiscencia
responder a la normal de la superficie ya que depende del ngulo de incidencia de los rayos de luz
sobre la superficie. Con todo esto en mente, aadamos algo de iridiscencia a nuestra esfera de cristal.
sphere { <0,0,0>, 1
pigment { White filter 1 }
finish {
ambient .1
diffuse .1
reflection .2
refraction 1
ior 1.5
specular 1
roughness .001
fade_distance 5
fade_power 1
caustics 1
irid {
0.35
thickness .5
turbulence .5
}
}
}
Variemos los valores de la cantidad, thickness y turbulence para ver que cambios tienen lugar.
Aadamos tambin un bloque de declaracin de la normal para ver que pasa.
4.8.5. Halos
Nota importante: el halo es una caracterstica experimental de POV-Ray 3.0. Hay una alta probabilidad
de que el diseo e implementacin de estas caractersticas cambie en futuras versiones. No podemos
garantizar que las escenas que las usen den los mismos resultados en futuras versiones o que se
mantenga la compatibilidad de la sintaxis del lenguaje.
Los halos son una poderosa caracterstica que puede ser usada para crear gran cantidad de efectos
distintos como nubes, niebla, fuego, lseres, etc. El nombre se debe a la posibilidad de trazar halos,
como los que se ven alrededor de la luna o del sol.
Debido a la complejidad del halo y de la gran cantidad de parmetros proporcionados es muy difcil
conseguir resultados satisfactorios. Las siguientes secciones ayudarn a crear un halo paso a paso,
empezando por lo ms bsico hasta llegar a los conceptos ms sutiles.
Es tambin aconsejable leer las secciones de referencia para un mejor entendimiento de las
caractersticas de los halos. En especial las secciones "Objetos Vacos y Objetos Slidos" y "Mapeado
del Halo" debido a que son esenciales para entender los halos.
4.8.5.1. Qu son los halos?
Los halos son una caracterstica de las texturas que nos permiten rellenar con partculas el interior de un
objeto. La distribucin de estas partculas puede ser modificada usando distintos mapeados y funciones
de densidad. Las partculas pueden emitir luz, para crear efectos de fuego o lseres, o absorberla para
crear nubes o niebla.
Un halo esta vinculado a un objeto, llamado objeto contenedor, al igual que un pigmento, una normal o
un acabado. El objeto contenedor esta completamente rellenado con el halo, pero no podremos ver
nada si no nos aseguramos de que el objeto es vaco y su superficie translcida. Como se consigue esto
lo veremos en la siguiente seccin.
PERSISTENCE OF VISION RAYTRACER 99
Cuando trabajemos con los halos siempre tendremos que tener en cuenta que el objeto contenedor
tiene que ser vaco y translcido.
4.8.5.2. El halo emisor
Empezamos con uno de los tipos ms simples, el halo emisor. Usa partculas que solo emiten luz. No
hay partculas que absorban la luz proveniente de otras partculas o de las fuentes de luz.
4.8.5.2.1. Empezando con un halo bsico
Una forma inteligente de conseguir un halo bien diseado es empezar con una figura simple, de tamao
unitario que repose sobre el origen de coordenadas.
En el primer ejemplo (HALO01.POV) intentamos crear una salvaje explosin, en la cual la esfera es el
objeto ms adecuado. Empezamos con una simple escena que consiste de una cmara, una fuente de
luz (no nos preocupan las sombras as que aadimos el identificador shadowless), un plano a cuadros y
una esfera unitaria que contiene el halo.
camera {
location <0, 0, -2.5>
look_at <0, 0, 0>
}

light_source { <10, 10, -10> color rgb 1 shadowless }

plane { z, 2
pigment { checker color rgb 0, color rgb 1 }
finish { ambient 1 diffuse 0 }
scale 0.5
hollow
}

sphere { 0, 1
pigment { color rgbt <1, 1, 1, 1> }
halo {
emitting
spherical_mapping
linear
color_map {
[ 0 color rgbt <1, 0, 0, 1> ]
[ 1 color rgbt <1, 1, 0, 0> ]
}
samples 10
}
hollow
}
Observamos que la esfera est declarada como vaca (mediante el identificador hollow) y tiene una
superficie translcida (el canal de transmitancia en el color de pigmento es 1), tal como es requerido
para los halos. Tambin notamos que el plano tiene el identificador hollow a pesar de que no tiene
halo. Por qu es necesario esto?
La razn es bastante simple. Tal como se describe en la seccin "Objetos Vacos y Objetos Slidos" no
puede haber un halo en un objeto no vaco. Ya que la cmara est dentro del plano, es decir, est en la
regin considerada como interior del plano, el halo nunca ser visto a no ser que el plano sea declarado
como vaco (o el identificador negative sea aadido para situar la cmara en la parte exterior del
plano).
Que significan todos esos identificadores y valores en el halo? Al principio de la declaracin se usa el
identificador emitting para especificar que tipo de halo queremos usar. El halo emisor emite luz. Eso
es lo ms adecuado para nuestra salvaje explosin.
4. TUTORIAL PARA PRINCIPIANTES 100
Los identificadores spherical_mapping y linear necesitan una explicacin ms detallada de cono
funciona un halo (esto tambin es llevado a cabo en el captulo "Halo" en ms detalle).
Como se ha dicho anteriormente el halo est formado de una gran cantidad de pequeas partculas. La
distribucin de estas partculas es descrita por una funcin de densidad. En general, una funcin de
densidad nos dir que cantidad de partculas encontraremos en una posicin dada.
En lugar de usar una funcin matemtica explcita de densidad, los halos se basan en un determinado
nmero de mapeados y funciones de densidad para modelar una variedad de distribuciones de
partculas.
El primer paso en este modelado es determinar la funcin de mapeado que ser usada para asignar a
cada punto tridimensional un valor perteneciente a un rango unidimensional. En nuestro ejemplo
hemos usado un mapeado esfrico, es decir, tomamos la distancia de un punto desde el origen del
sistema de coordenadas. Esa es la razn por la que es recomendable empezar con un objeto contenedor
situado en el origen del sistema de coordenadas. Ya que todos los mapeados de densidad son relativos a
este origen, no veremos nada si empezamos con un objeto situado en cualquier otro lugar. La forma
correcta de situar un objeto contenedor es mover todo el objeto (incluyendo texturas y halos).
Ahora tenemos un solo valor comprendido en un rango que va de 0 a 1. Este valor ser transformado
usando una funcin de densidad para obtener esta a partir de la distancia. Usar solo este valor no es
suficiente debido a que queremos tener una distribucin de partculas en la densidad descienda segn
nos movemos desde el centro del objeto contenedor al exterior.
Esto se consigue mediante la funcin de densidad. Existen varias alternativas disponibles tal como se
describe en la referencia del halo (ver seccin "Funcin de densidad"). Usamos una simple funcin
lineal que transforma los valores de rango de 0 a 1 a un rango de 1 a 0. De esta forma tenemos un valor
de 1 en el centro de nuestra esfera y de 0 en la superficie.
Ahora que tenemos una funcin de densidad, qu hacemos para que se vea algo? Aqu es donde el
identificador color_map entra en juego. Se usa para describir un mapa de color que indicar al
programa que color debe ser usado para cada densidad. La relacin es bastante simple: los colores al
principio del mapa de color (valores bajos) sern usados para valores bajos de densidad y los colores al
final del mapa (valores altos) sern usados para densidades altas. En nuestro ejemplo el halo ser
amarillo en el centro de la esfera, donde la densidad es mayor y se ir transformando en rojo hasta llegar
a la superficie de la esfera donde la densidad se aproxima a cero.
El canal de transmitancia de los colores en el mapa de color sirve para modelar la translucidez del
campo de densidad. Un valor de 0 representa translucidez nula, es decir, que las reas con la
correspondiente densidad sern (casi completamente) opacas, mientras que un valor de 1 significa (casi
completamente) translcido.
En nuestro ejemplo usamos
color_map {
[ 0 color rgbt <1, 0, 0, 1> ]
[ 1 color rgbt <1, 1, 0, 0> ]
}
que resulta en un halo con una rojiza y muy translcida rea exterior y una casi opaca zona interior de
color amarillo tal como podemos ver despus de trazar la imagen de ejemplo.
PERSISTENCE OF VISION RAYTRACER 101
Hay un parmetro que todava necesita ser explicado: el identificador samples. Este identificador le
dice a POV-Ray cuantas muestras deben ser tomadas a lo largo de cualquier rayo que viaje a travs del
halo para calcular su efecto. El uso de un valor bajo resultar en una alta velocidad de trazado y
viceversa. El valor de samples debe ser incrementado si el halo tiene una apariencia incorrecta debido a
la baja tasa de muestreo. Para ms detalles ver "Muestreo del Halo".
4.8.5.2.2. Incrementando el brillo
Los colores del halo en la imagen anterior son algo tenues. El fondo es demasiado visible a travs del
halo. No se parece demasiado al fuego, verdad? Una forma fcil de arreglar esto es decrementar la
transparencia de las partculas en las reas de alta densidad. Lo conseguimos usando el siguiente mapa
de color en lugar del anterior (la transmitancia negativa es correcta).
color_map {
[ 0 color rgbt <1, 0, 0, 1> ]
[ 1 color rgbt <1, 1, 0, -1> ]
}
Observando los resultados en HALO02.POV vemos que el halo es efectivamente ms brillante.

Figura 27: El halo bsico usado para modelar una salvaje
explosin
4. TUTORIAL PARA PRINCIPIANTES 102

4.8.5.2.3. Aadiendo algo de turbulencia
Lo que tenemos ahora tampoco parece una salvaje explosin. Se parece ms a una bola brillante que a
cualquier otra cosa. De alguna forma tenemos que hacer que parezca ms catica, tenemos que aadir
algo de turbulencia.
Esto se consigue usando el identificador turbulence junto con la cantidad de turbulencia que queremos
aadir. Tal como se muestra en el siguiente ejemplo.
sphere { 0, 1
pigment { color rgbt <1, 1, 1, 1> }
halo {
emitting
spherical_mapping
linear
turbulence 1.5
color_map {
[ 0 color rgbt <1, 0, 0, 1> ]
[ 1 color rgbt <1, 1, 0, -1> ]
}
samples 10
}
hollow
}
Aadir turbulencia al halo provoca que todos los puntos en el interior del objeto contenedor se muevan
de forma pseudo-aleatoria. El resultado es un cambio en la distribucin de partculas como si se hubiera
producido un flujo o corriente en el interior del halo (dependiendo de la cantidad indicada que sigue al
identificador turbulence tendremos un flujo ms uniforme o ms turbulento). En este ejemplo usamos
un valor alto, ya que una explosin es altamente turbulenta.
Observando la imagen de ejemplo (HALO03.POV) vemos que se parece ms a una salvaje explosin que
a la bola brillante que tenamos hasta ahora.

Figura 28: El halo es ms brillante ahora
PERSISTENCE OF VISION RAYTRACER 103
Nos damos cuenta que el tiempo que tarda en ser trazada la imagen se ha incrementado al aadir la
turbulencia. Esto es debido al hecho de que por cada una de las muestras tomadas del halo, la lenta
funcin de turbulencia tiene que ser evaluada.
4.8.5.2.4. Reescalando el halo
Todava hay algo extrao en nuestra salvaje explosin. Sigue pareciendo una esfera. Por qu ocurre
esto? y qu podemos hacer para evitarlo?
Tal como se dijo antes, la turbulencia mueve las partculas en el interior del objeto contenedor del halo.
El problema es que algunas de estas partculas son desplazadas fuera del objeto contenedor. Esto lleva a
altas densidades en la superficie del objeto revelando su forma (todas las partculas fuera del objeto
contenedor se pierden y no sern visibles resultando en un abrupto cambio de densidad en la
superficie).
Una forma fcil de evitar esto es asegurarnos de que las partculas permanecen en el interior del objeto
contenedor incluso si aadimos turbulencia. Esto se consigue escalando el halo para reducir su tamao.
No escalamos el objeto contenedor, solo el halo.
Incluimos el identificador scale dentro de la declaracin del halo.
sphere { 0, 1
pigment { color rgbt <1, 1, 1, 1> }
halo {
emitting
spherical_mapping
linear
turbulence 1.5
color_map {
[ 0 color rgbt <1, 0, 0, 1> ]
[ 1 color rgbt <1, 1, 0, -1> ]
}
samples 10
scale 0.5
}
hollow
scale 1.5
}

Figura 29: Aadir algo de turbulencia hace que la explosin sea
ms realista
4. TUTORIAL PARA PRINCIPIANTES 104
El comando scale 0.5 indica a POV-Ray que escale todos los puntos dentro del halo por esta
cantidad. Esto efectivamente escala el radio que tenemos despus del mapeado de densidad a un rango
de 0 a 0.5 en lugar de 0 a 1 (sin turbulencia). Si aadimos la turbulencia los puntos pueden moverse
media unidad en cualquier direccin sin abandonar el objeto contenedor. Esto es exactamente lo que
queremos.
Para compensar el menor tamao del halo escalamos la esfera (y el halo interior) por 1.5.
Observando la nueva imagen de ejemplo (HALO04.POV) no veremos ni rastro de la esfera contenedora.
Finalmente tenemos una bonita explosin.
La cantidad por la cual debemos escalar el halo depende de la cantidad de turbulencia que usemos. A
ms turbulencia, menor deber ser el halo. He aqu algo con lo que experimentar.
Otra forma de evitar que los puntos abandonen la esfera es que esta sea ms grande, es decir, una esfera
con un radio mayor que uno. Es importante reescalar la esfera antes de aadir el halo debido a que de
otra forma el halo sera tambin escalado.
Notemos que esto solo funciona para el mapeado esfrico y de caja (y una funcin de densidad no
constante). Todos los dems tipos de mapeado son (parcialmente) infinitos, es decir, la distribucin de
partculas resultante cubre un espacio infinito (ver tambin "Mapeado del Halo").
4.8.5.2.5. Usando frequency para mejorar el realismo
Otra forma muy efectiva de mejorar el realismo de nuestra explosin es usar un valor de frecuencia
distinto de uno. La forma en que funciona frequency se explica en "El Modificador de Frecuencia"
en la parte de referencia.
La explicacin, ms bien matemtica, usada aqu no ayuda mucho en entender como se utiliza esta
caracterstica. Aunque es bastante simple. El valor de frecuencia solo le indica al programa cuantas
veces se tiene que repetir el mapa de color en el rango de densidad de 0 a 1. Si se tiene una frecuencia
de uno (el valor por defecto) se especifica que el mapa de color solo ser visible una vez en el campo de
densidad, es decir, el color en 0 ser usado para densidad 0, el color en 0.5 para densidad 0.5 y el color
en 1 para densidad 1. Simple, verdad?.
Si elegimos una frecuencia de dos, el color en 0 ser usado para densidad 0, el color en 0.5 ser usado
para densidad 0.25 y el color en 1 ser usado para densidad 0.5. Qu pasa para densidades superiores a
0.5? Ya que no hay entradas en el mapa de color para valor superiores a 1 simplemente volvemos a
empezar de 0 otra vez. De esta forma el color en 0.1 ser usado para densidad 0.55 ((2*0.55) mod 1 =

Figura 30: Reescalando el halo mejoramos su apariencia
PERSISTENCE OF VISION RAYTRACER 105
1.1 mod 1 = 0.1), el color en 0.5 ser usado para densidad 0.75 y el color en 1 ser usado para densidad
1.
Si se nos dan bien la matemticas notaremos que este ejemplo no es del todo correcto debido a que (1 *
2) mod 1 = 0 y no 1. Simplemente imaginemos que hemos usado un valor ligeramente menor que uno
y todo ir bien.
Deberamos darnos cuenta de que para evitar cambios repentinos en el color del halo para frecuencias
mayores que uno tendramos que usar un mapa de color peridico, es decir, un mapa de color cuyas
entradas en 0 y en 1 sean las mismas.
Cambiamos nuestro ejemplo usando un mapa de color peridico y cambiando el valor de la frecuencia
a dos.
sphere { 0, 1
pigment { color rgbt <1, 1, 1, 1> }
halo {
emitting
spherical_mapping
linear
turbulence 1.5
color_map {
[ 0.0 color rgbt <1, 0, 0, 1> ]
[ 0.5 color rgbt <1, 1, 0, -1> ]
[ 1.0 color rgbt <1, 0, 0, 1> ]
}
frequency 2
samples 20
scale 0.5
}
hollow
scale 1.5
}
Observando el resultado de (HALO05.POV) podemos estar bastante satisfechos con la explosin que
hemos creado.
Todava hay algo ms a tener en cuenta cuando se incrementa la frecuencia. A menudo es necesario
incrementar la tasa de muestreo (samples) casi del mismo modo que incrementamos la frecuencia. Si
no hacemos esto probablemente notaremos graves efectos de aliasing (como saltos o bandas extraas

Figura 31: Usando un mapa de color peridico y una frecuencia
de dos obtenemos mejores resultados
4. TUTORIAL PARA PRINCIPIANTES 106
de color). Si esto ocurre simplemente se ha de cambiar el valor de samples de acuerdo con el nuevo
valor de frequency (dos veces la tasa de muestreo si doblamos la frecuencia).
4.8.5.2.6. Cambiando el color del halo
Tenemos una bonita explosin, pero queremos aadir un toque de ciencia-ficcin usando colores
distintos. Qu tal una menos turbulenta explosin verde que se vuelve roja en sus extremos?
Nada ms fcil que eso!
sphere { 0, 1.5
pigment { color rgbt <1, 1, 1, 1> }
halo {
emitting
spherical_mapping
linear
turbulence 0.5
color_map {
[ 0 color rgbt <0, 1, 0, 1> ]
[ 1 color rgbt <1, 0, 0, -1> ]
}
samples 10
scale 0.75
}
hollow
scale 1.5
}
Eso es exactamente lo que nos haca falta. Observando los resultados de HALO06.POV podemos quedar
algo decepcionados. Donde est el centro rojo de la explosin? Los bordes son verdes como
esperbamos pero hay gran cantidad de amarillo en el centro y solo un poco de rojo. Qu esta
pasando?
Usamos un halo emisor para nuestro ejemplo. De acuerdo con la correspondiente seccin en el captulo
de referencia del halo (ver "Emisor") este tipo de halo utiliza partculas muy pequeas que no atenan
la luz que atraviesa el halo. Especialmente las partculas cerca del observador no atenan la luz
proveniente de partculas ms lejanas.
Durante el clculo del color del halo cerca del centro de la esfera contenedora, el rayo pasa a travs de
casi todas las posibles densidades de la distribucin de partculas. De esta manera tenemos partculas

Figura 32: Usando los colores rojo y verde obtenemos un
resultado inesperado
PERSISTENCE OF VISION RAYTRACER 107
rojas y verdes segn avanzamos, dependiendo de la posicin actual en el halo. Se usa la suma de estos
colores, lo que da el color amarillo (la suma del rojo y el verde es el amarillo). Esto es lo que ocurre
aqu.
Como podemos conseguir lo que queremos? La respuesta es usar un halo brillante en lugar de un halo
emisor. El halo brillante es muy similar al emisor excepto que el primero atena la luz que pasa a travs
de l. De esta forma la luz de las partculas situadas detrs de otras ser atenuada por estas ltimas.
4.8.5.3. El halo brillante
Hemos mencionado el halo brillante en la seccin sobre el halo emisor como una forma de evitar la
mezcla de color que ocurre con este tipo de halo.
El halo brillante es muy similar al emisor con la diferencia de que tambin absorbe la luz. Podemos
verlo como una combinacin del halo emisor y del atenuante descrito en la seccin "El Halo
Atenuante".
Simplemente reemplazando el identificador emitting en el ejemplo de la seccin "Cambiando el
Color del Halo" por el identificador glowing obtenemos el efecto deseado como se ve en la imagen
del ejemplo (HALO11.POV).
A pesar de que el color rojo de las reas de alta densidad no es muy visible debido a la coloracin verde,
las reas de baja densidad situadas al frente absorben la mayor parte de la luz roja, no vemos el color
amarillo donde hubiramos esperado un color rojo.
Debido a su similitud con el halo emisor tenemos que experimentar con este tipo de halo. Solo
tenemos que retener en mente todo lo aprendido en las secciones previas pare obtener resultados
satisfactorios.
4.8.5.4. El halo atenuante
Otro tipo de halo es el halo atenuante que solo absorbe luz. No emite luz propia.
Una gran diferencia entre el halo atenuante y los otros tipos de halos es que el color del halo atenuante
es calculado a partir del mapa de color usando la densidad total de partculas a lo largo de un rayo dado.
Los otros tipos utilizan una media pesada de los colores calculados a partir de la densidad en cada
muestra.

Figura 33: Usando un halo brillante obtenemos el resultado
esperado
4. TUTORIAL PARA PRINCIPIANTES 108
4.8.5.4.1. Haciendo una nube
Los halos atenuantes son ideales para crear nubes y humo. En los siguientes ejemplos intentaremos
hacer una pequea nube. Empezamos de nuevo usando una esfera unitaria rellenada con un halo
atenuante bsico (HALO21.POV).
camera {
location <0, 0, -2.5>
look_at <0, 0, 0>
}

light_source { <10, 10, -10> color rgb 1 shadowless }

plane { z, 2
pigment { checker color rgb 0, color rgb 1 }
finish { ambient 1 diffuse 0 }
scale 0.5
hollow
}

sphere { 0, 1
pigment { color rgbt <1, 1, 1, 1> }
halo {
attenuating
spherical_mapping
linear
color_map {
[ 0 color rgbt <1, 0, 0, 1> ]
[ 1 color rgbt <1, 0, 0, 0> ]
}
samples 10
}
hollow
}
A pesar de que normalmente las nubes no son rojas, si no blancas o grises, usamos el color rojo para
hacerla ms visible contra el fondo a cuadros blancos y negros.
El color de un halo atenuante se calcula a partir de la densidad total acumulada despus de que el rayo
haya atravesado por completo el campo de partculas. Esto debe ser tenido en cuenta cuando se
especifica el mapa de color. Queremos que las reas de la nube con baja densidad sean altamente
translcidas, as que usamos un color rgbt <1,0,0,1> y queremos que las reas de alta densidad
sean opacas, as que usamos un color rgbt <1,0,0,0>.
PERSISTENCE OF VISION RAYTRACER 109
4.8.5.4.2. Escalando el contenedor del halo
La nube que hemos creado no es muy realista. Es solo una translcida bola roja. Para obtener un mejor
resultado usamos algunos de los mtodos que ya hemos aprendido en las secciones acerca de los halos
emisores. Aadimos algo de turbulencia para conseguir una forma ms realista, escalamos el halo para
evitar que la superficie del objeto contenedor sea visible y decrementamos la translucidez de las reas
con una alta densidad de partculas.
Otra idea es escalar el objeto contenedor para obtener una forma elipsoide que puede ser usada para
modelar una nube de forma bastante efectiva. Esto se consigue con el comando scale
<1.5,0.75,1> al final de la declaracin de la esfera. Escala ambos, la esfera y el halo interior.
sphere { 0, 1
pigment { color rgbt <1, 1, 1, 1> }
halo {
attenuating
spherical_mapping
linear
turbulence 1
color_map {
[ 0 color rgbt <1, 0, 0, 1> ]
[ 1 color rgbt <1, 0, 0, -1> ]
}
samples 10
scale 0.75
}
hollow
scale <1.5, 0.75, 1>
}
Observando los resultados de HALO22.POV vemos que se parece ms a una nube real (aparte del color).

Figura 34: El halo atenuante bsico usado para crear una nube
4. TUTORIAL PARA PRINCIPIANTES 110
4.8.5.4.3. Aadiendo halos adicionales
Otro truco para conseguir algo ms de realismo es usar mltiples halos. Si observamos un grupo
cmulos notaremos que a menudo se extienden en la parte superior mientras que son bastante ms
planos en la inferior.
Queremos modelar esta apariencia aadiendo dos halos adicionales a nuestro objeto contenedor (ver
seccin "Mltiples Halos" para ms detalles). Esto se consigue de la siguiente forma.
sphere { 0, 1.5
pigment { color rgbt <1, 1, 1, 1> }
halo {
attenuating
spherical_mapping
linear
turbulence 1
color_map {
[ 0 color rgbt <1, 0, 0, 1> ]
[ 1 color rgbt <1, 0, 0, -1> ]
}
samples 10
scale <0.75, 0.5, 1>
translate <-0.4, 0, 0>
}
halo {
attenuating
spherical_mapping
linear
turbulence 1
color_map {
[ 0 color rgbt <1, 0, 0, 1> ]
[ 1 color rgbt <1, 0, 0, -1> ]
}
samples 10
scale <0.75, 0.5, 1>
translate <0.4, 0, 0>
}
halo {
attenuating
spherical_mapping

Figura 35: Escalando el contenedor del halo y aadiendo algo de
turbulencia obtenemos mejores resultados
PERSISTENCE OF VISION RAYTRACER 111
linear
turbulence 1
color_map {
[ 0 color rgbt <1, 0, 0, 1> ]
[ 1 color rgbt <1, 0, 0, -1> ]
}
samples 10
scale 0.5
translate <0, 0.2, 0>
}
hollow
}
Los tres halos utilizados solo difieren en su localizacin, es decir, en el vector de traslacin que hemos
usado. Los dos primeros halos sirven para formar la base de la nube, mientras el ltimo se encuentra
situado sobre estos. La esfera tiene un radio distinto que la previa debido a que se necesita ms espacio
para los tres halos.
El resultado de HALO23.POV de alguna forma parece una nube, a pesar de que puede necesitar algunos
retoques.
4.8.5.5. El halo de polvo
El halo de polvo es un tipo muy complejo de halo. Nos permite ver la interaccin de la luz proveniente
de una fuente con las partculas del halo. Estas partculas absorben la luz de la misma forma que en el
halo atenuante. Adems tambin la dispersan. Esto hace que los rayos de luz y las sombras proyectadas
por objetos sobre el halo sean visibles.
4.8.5.5.1. Empezando con un objeto iluminado por un foco
Empezamos con un objeto en forma de caja que es iluminado por un foco. No usamos ningn halo de
momento, debido a que queremos ver el objeto completamente iluminado por la luz (HALO31.POV).
camera {
location <0, 0, -2.5>
look_at <0, 0, 0>
}

background { color rgb <0.2, 0.4, 0.8> }

light_source {

Figura 36: Usando varios halos mejora mucho nuestra nube
4. TUTORIAL PARA PRINCIPIANTES 112
<2.5, 2.5, -2.5>
colour rgb <1, 1, 1>
spotlight
point_at <0, 0, 0>
radius 12
falloff 15
tightness 1
}

difference {
box { -1, 1 }
box { <-1.1, -0.8, -0.8>, <1.1, 0.8, 0.8> }
box { <-0.8, -1.1, -0.8>, <0.8, 1.1, 0.8> }
box { <-0.8, -0.8, -1.1>, <0.8, 0.8, 1.1> }
pigment { color rgb <1, 0.2, 0.2> }
scale 0.5
rotate 45*y
rotate 45*x
}
Como vemos el objeto entero es iluminado por la fuente de luz. Ahora podemos empezar a aadir algo
de polvo.
4.8.5.5.2. Aadiendo algo de polvo
Usamos una caja para contener el halo de polvo. Ya que usamos una funcin de densidad constante no
importa que tipo de mapeado usemos. La densidad toma el valor especificado por el identificador
max_value en cualquier lugar en el interior del halo (el valor por defecto es uno). La dispersin
isotrpica es seleccionada con el identificador dust_type.
box { -1, 1
pigment { colour rgbt <1, 1, 1, 1> }
halo {
dust
dust_type 1
box_mapping
constant
colour_map {
[ 0 color rgbt <1, 1, 1, 1> ]
[ 1 color rgbt <1, 1, 1, 0> ]
}

Figura 37: El objeto que queremos usar
PERSISTENCE OF VISION RAYTRACER 113
samples 10
}
hollow
scale 5
}
El resultado de HALO32.POV es prometedor pero el polvo es demasiado espeso y solo podemos ver
algunas partes del objeto y nada del fondo.
4.8.5.5.3. Decrementando la densidad del polvo
La densidad en el interior del halo tiene un valor constante de uno. Esto significa que solo la entrada en
la posicin uno del mapa de color se usa para determinar la densidad y el color del polvo.
Usamos un valor de transmitancia de 0.7 para obtener un polvo ms fino.
box { -1, 1
pigment { colour rgbt <1, 1, 1, 1> }
halo {
dust
dust_type 1
box_mapping
constant
colour_map {
[ 0 color rgbt <1, 1, 1, 1.0> ]
[ 1 color rgbt <1, 1, 1, 0.7> ]
}
samples 10
}
hollow
scale 5
}

Figura 38: Este polvo es demasiado espeso
4. TUTORIAL PARA PRINCIPIANTES 114
A parte de los feos efectos de aliasing la imagen queda mejor. Podemos ver el objeto entero e incluso el
fondo es ligeramente visible (HALO33.POV).
4.8.5.5.4. Mejorar la apariencia de las sombras
Para reducir los efectos de aliasing usamos tres tcnicas distintas: jittering, super-muestreo y un
incremento total sobre la tasa de muestreo.
Jittering se usa para aadir algo de aleatoriedad a los puntos de muestreo haciendo que la imagen
parezca ms irregular. Esto es mejor que los efectos de aliasing. Un bajo valor para jittering es una
buena eleccin.
El super-muestreo intenta reducir las diferencias tomando muestras adicionales en reas de grandes
cambios de intensidad. El umbral en el cual se usa el super-muestreo y el nivel mximo de recursin
pueden ser especificados mediante los identificadores aa_threshold y aa_level respectivamente.
La manera de enfocar el problema que siempre funciona es incrementar la tasa general de muestreo. Ya
que tambin es el mtodo ms lento deberamos usar los dems mtodos primero. Si no son suficientes
tenemos que incrementar la tasa de muestreo.
Usamos el siguiente halo para reducir los efectos de aliasing (HALO34.POV).
box { -1, 1
pigment { colour rgbt <1, 1, 1, 1> }
halo {
dust
dust_type 1
box_mapping
constant
colour_map {
[ 0 color rgbt <1, 1, 1, 1.0> ]
[ 1 color rgbt <1, 1, 1, 0.7> ]
}
samples 50
aa_level 3
aa_threshold 0.2
jitter 0.1
}
hollow
scale 5

Figura 39: Un polvo ms fino le da un mejor aspecto
PERSISTENCE OF VISION RAYTRACER 115
}
La imagen tiene mejor apariencia ahora. prcticamente no queda ningn efecto de aliasing.
Los mismos parmetros que hemos usado son discutidos en la seccin acerca de la atmsfera (ver "La
Atmsfera" para ms explicaciones).
4.8.5.5.5. Aadiendo turbulencia
La mayor diferencia entre el halo de polvo y la atmsfera descrita en "La Atmsfera" es la posibilidad
de elegir una distribucin de partculas no uniforme para el polvo. Esto incluye el hecho de que el halo
es limitado a un objeto contenedor adems de los distintos tipos de funciones de densidad y mapeado.
Otra forma interesante de conseguir una distribucin irregular es aadir algo de turbulencia al polvo.
Esto se consigue con el identificador turbulence seguido de la cantidad de turbulencia que ser
usada, como muestra el siguiente ejemplo (HALO35.POV).
box { -1, 1
pigment { colour rgbt <1, 1, 1, 1> }
halo {
dust
dust_type 1
box_mapping
linear
turbulence 1
colour_map {
[ 0 color rgbt <1, 1, 1, 1.0> ]
[ 1 color rgbt <1, 1, 1, 0.5> ]
}
samples 50
aa_level 3
aa_threshold 0.2
jitter 0.1
}
hollow
scale 5
}

Figura 40: Distintos mtodos de anti-aliasing ayudan a obtener
un resultado satisfactorio
4. TUTORIAL PARA PRINCIPIANTES 116
La imagen parece ms interesante debido a los desplazamientos en la densidad de partculas.
Deberamos notar que usamos una funcin de densidad lineal en lugar de la funcin constante anterior.
Esto es necesario debido a que con una funcin constante la densidad tiene el mismo valor en todos los
puntos. El aadir turbulencia no tendra ningn efecto debido a que a donde quiera que los puntos sean
movidos el valor de la densidad tendr el mismo valor. Solo una distribucin de densidad no constante
tiene sentido cuando se aade turbulencia.
El hecho de que el valor de turbulencia sea un vector puede ser usado para crear efectos como cascadas
usando un gran valor de turbulencia en una sola direccin (por ejemplo turbulence
<0.2,1,0.2>).
4.8.5.5.6. Usando polvo coloreado
Si queremos crear polvo coloreado podemos hacerlo fcilmente usando un color distinto del blanco en
el mapa de color. En este caso tambin tenemos que fijar los canales de filtro en el mapa de color a
valores distintos de cero para especificar la cantidad de luz filtrada por el color del polvo.
Usamos un mapa de color para obtener un filtrante polvo rojo por ejemplo:
colour_map {
[ 0 color rgbft <1, 0, 0, 0.5, 1.0> ]
[ 1 color rgbft <1, 0, 0, 0.5, 0.7> ]
}
4.8.5.6. Dificultades de los halos
Debido a la complejidad del halo y a la poca experimentacin que los usuarios han hecho de el todava
hay un montn de cosas por descubrir.
Algunos de los problemas y dificultades ms comunes son descritas a continuacin para ayudarnos a
evitarlos.
4.8.5.6.1. Donde son permitidos los halos
Como se mencion antes, un halo llena completamente el interior de un objeto. Teniendo esto en
cuenta es razonable que el siguiente ejemplo no tenga sentido.
sphere { 0, 1

Figura 41: Aadir turbulencia al polvo hace que tenga un
aspecto ms interesante
PERSISTENCE OF VISION RAYTRACER 117
pigment {
checker
texture {
pigment { color Clear }
halo { ... }
}
texture {
pigment { color Red }
}
}
hollow
}
Qu es lo que est mal en este ejemplo? Es simplemente que un halo se usa para describir el interior de
un objeto y que no se puede describir este interior especificando el aspecto de la superficie. Pero esto
fue hecho en el ejemplo anterior. No podemos imaginar que aspecto tendr el interior de la esfera.
Estar completamente ocupada por el halo? Estarn algunas reas ocupadas por el halo y otras por
aire? Qu aspecto tendrn estas reas?
No podremos ver las propiedades del interior observando la superficie. Simplemente no es posible.
Esto siempre se debe tener en cuenta.
Si el ejemplo anterior fue pensado para crear una esfera rellenada con un halo y cubierta por una textura
a cuadros que ocultara en parte el halo tendramos que haber empleado la siguiente sintaxis:
sphere { 0, 1
pigment {
checker
texture {
pigment { color Clear }
}
texture {
pigment { color Red }
}
}
halo { ... }
hollow
}
Un halo siempre se aplica a un objeto de la siguiente forma:
OBJECT {
texture {
pigment { ... }
normal { ... }
finish { ... }
halo { ... }
}
hollow
}
No se permite un halo en la declaracin de un pigmento, de un mapa de color, de un mapa de
pigmento, de un mapa de material o de cualquier otra cosa. No se nos impide hacerlo pero no
obtendremos los resultados que queremos.
Podemos usar halos con texturas superpuestas siempre que nos aseguremos de que los halos solo estn
vinculados a la capa inferior (que por supuesto debe ser transparente para que se pueda ver el halo).
4.8.5.6.2. Superponiendo los objetos contenedores
POV-Ray no es capaz de tratar de forma correcta la superposicin de objetos contenedores. Si creamos
dos esferas superpuestas que contengan un halo no obtendremos resultados correctos en la zona de
4. TUTORIAL PARA PRINCIPIANTES 118
superposicin. El efecto del halo se calcula de forma independiente para cada esfera y despus se
suman los resultados.
Si queremos aadir distintos halos tenemos que ponerlos todos en el interior de un solo objeto
contenedor para asegurarnos de que el halo se calcula de forma correcta (ver tambin "Mltiples
Halos").
Tambin deberamos observar que cuando tenemos varios objetos contenedores muy prximos unos a
otros pero sin superposicin real, son tratados de forma correcta. Si ponemos un objeto contenedor en
frente de otro los halos son trazados correctamente.
4.8.5.6.3. Mltiples halos atenuantes
Actualmente no es posible usar mltiples halos atenuantes con distintos mapas de color. El mapa de
color del ltimo halo ser usado para todos los halos en el objeto contenedor.
4.8.5.6.4. Halos y objetos vacos
Para trazar de forma correcta los efectos del halo tenemos que asegurarnos de que todos los objetos
dentro de los cuales se encuentra la cmara sean vacos. Esto se consigue aadiendo el identificador
hollow.
4.8.5.6.5. Escalando el contenedor de un halo
Si escalamos el objeto contenedor de un halo deberamos tener en cuenta que es importante el lugar
donde coloquemos el identificador scale.
Escalar el objeto antes de la declaracin del halo solo escalara el objeto contenedor, no el halo. Esto es
til cuando queremos evitar que la superficie del objeto contenedor sea visible debido al uso de la
turbulencia. Como hemos aprendido en las secciones anteriores, las partculas pueden moverse fuera
del objeto contenedor, donde son invisibles, si se aade turbulencia. Esto solo funciona para el
mapeado esfrico y el mapeado de caja debido a que los campos de densidad descritos por los otros
mapeados no tienen dimensiones finitas.
Si se usa el identificador scale despus de la declaracin del halo, ambos, el halo y el objeto contenedor
son escalados. Esto es til para escalar el halo segn nuestras necesidades.
El halo mantiene su apariencia a pesar de las transformaciones aplicadas al objeto contenedor (despus
del halo), es decir, la translucidez, el color y la turbulencia del halo no cambiarn.
4.8.5.6.6. Eligiendo una tasa de muestreo
Normalmente empezaremos con una baja tasa de muestreo y solo la incrementaremos si aparecen
efectos de aliasing (y no desaparecen usando el super-muestreo y el jittering).
La apariencia del halo es independiente de la tasa de muestreo siempre que se tomen las suficientes
muestras para describir correctamente su forma. Esto significa que una o dos muestras difcilmente
sern suficientes para determinar la apariencia del halo. Segn vamos incrementando el nmero de
muestras el halo se aproximar rpidamente a su apariencia real.
En pocas palabras, el halo no cambiar su apariencia con la tasa de muestreo siempre que tengamos el
suficiente nmero de muestras y no nos encontremos con los efectos del aliasing.
4.8.5.6.7. Usando turbulencia
Como dijimos en una de las secciones anteriores la turbulencia no tendr efecto si se usa la funcin de
densidad constante (identificador constant). No importa cuanto o en que direccin movamos un punto
PERSISTENCE OF VISION RAYTRACER 119
si la densidad es constante y por lo tanto no depende de la situacin del punto. Tenemos el mismo
valor de densidad para todas la localizaciones.
Siempre que aadamos turbulencia a un halo debemos evitar la funcin de densidad constante.
4.9. Trabajar con texturas especiales
Muchos de los patrones de color que hemos visto hasta ahora en POV-Ray usan una instruccin
color_map para juntar diversos colores. Dependiendo de la lista de colores, podemos cambiar gradual
o bruscamente de un color a otro. De hecho, el mapa de color es una herramienta muy poderosa para
personalizar los diversos patrones de color, aunque requiere un poco de prctica usarla correctamente.
Adems, a partir de la versin 3, POV-Ray nos permite unir diversos patrones, normales, acabados, e
incluso texturas completas de la misma forma que mezclamos colores.
Para experimentar con algunas de las excitantes opciones de textura, preparemos una escena bsica, a la
que aplicaremos las texturas que diseemos ms adelante. Empecemos llamando a los archivos de
inclusin de colores y texturas predefinidos, y poniendo una cmara y una fuente de luz.
#include "colors.inc"
#include "textures.inc"

camera {
orthographic
up <0, 5, 0>
right <5, 0, 0>
location <0, 0, -25>
look_at <0, 0, 0>
}

light_source { <100, 100, -100> color White }
4.9.1. Trabajar con mapas de pigmentos
Empecemos con algo sencillo. No debemos confundir el mapa de colores con el mapa de
pigmentaciones, ya que el mapa de colores slo admite colores como entradas, mientras que en el mapa
de pigmentos podemos usar como elementos a mezclar pigmentos completos. Probemos a colorear un
plano con un mapa de pigmentos. En el prximo ejemplo, vamos a declarar cada uno de los pigmentos
que utilicemos. No es estrictamente necesario hacerlo (podemos colocar la descripcin completa en
cada entrada del mapa), aunque habitualmente es ms cmodo de leer.
// cuadrados Blancos y Negros... es un clsico.
#declare Pigment1 = pigment {
checker color Black color White
scale .1
}

// un efecto de anillos psicodlicos
#declare Pigment2 = pigment {
wood
color_map {
[ 0.0 Red ]
[ 0.3 Yellow ]
[ 0.6 Green ]
[ 1.0 Blue ]
}
}

plane { -z, 0
pigment {
gradient x
pigment_map {
4. TUTORIAL PARA PRINCIPIANTES 120
[ 0.0 Pigment1 ]
[ 0.5 Pigment2 ]
[ 1.0 Pigment1 ]
}
}
}
Vale, lo que hemos hecho es sencillo y probablemente fcil de entender si hemos trabajado
anteriormente con mapas de colores. Hemos colocado un mapa de pigmentos donde suele ir un mapa
de colores, y hemos situado nuestros pigmentos predeclarados como entradas del mapa. Cuando vemos
la imagen, observamos un patrn a bandas de cuadrados negros y de anillos concntricos, de forma que
las transiciones entre un patrn y otro son suaves, mezclndose ambos patrones en el centro de los
cambios. Tambin podemos hacer transiciones bruscas, retocando algo el mapa de pigmentos.
pigment_map {
[ 0.0 Pigment1 ]
[ 0.5 Pigment1 ]
[ 0.5 Pigment2 ]
[ 1.0 Pigment2 ]
}
4.9.2. Trabajar con mapas de normales
Para nuestro ejemplo prximo, reemplazaremos el plano anterior por este:
plane { -z, 0
pigment { White }
normal {
gradient x
normal_map {
[ 0.0 bumps 1 scale .1]
[ 1.0 ripples 1 scale .1]
}
}
}
Hemos elegido un color slido para que se vean ms claramente los bultos. Adems, observamos que
nuestro mapa mezcla suavemente bultos y ondas, para luego saltar bruscamente (por ser un gradiente)
al comienzo de nuevo. De esta manera, podemos ver qu sucede tanto cuando cambiamos bruscamente
el patrn como cuando lo cambiamos lentamente.
La sintaxis de la instruccin es la que podamos esperar. Hemos cambiado el tipo de mapa, ponindolo
esta vez en el bloque de normal, y hemos colocado como parmetros tipos de normal. Recordemos que
en POV-Ray 3, todos los patrones que funcionan como colores funcionan como normales, y viceversa,
as que podemos cambiar de madera a granito, por ejemplo. Deberamos investigar un poco esto, para
entender el aspecto que pueden tener estos patrones como normales.
Tras ver lo interesante que puede ser mezclar dos patrones en las transiciones, quiz queramos
construir una textura en la que dos patrones se mezclen completamente. Esto es posible usando la
funcin average. Volveremos a esto ms adelante.
4.9.3. Trabajar con mapas de textura
Ahora que hemos mezclado colores, patrones de pigmentacin y normales, probablemente pensemos
y los acabados? Y las texturas completas? Ambos pueden fundirse en un solo apartado, ya que,
aunque no hay un mapa de acabados propiamente dicho, puede usarse mapas de textura para obtenerlo,
colocando idnticos bloques de normal y pigmento en varias texturas. Pondremos un ejemplo. Hemos
eliminado las declaraciones de pigmentos que utilizamos antes, y aadido lo siguiente:
#declare Texture1 = texture {
pigment { Grey }
PERSISTENCE OF VISION RAYTRACER 121
finish { reflection 1 }
}

#declare Texture2 = texture {
pigment { Grey }
finish { reflection 0 }
}

cylinder { <-2, 5, -2>, <-2, -5, -2>, 1
pigment { Blue }
}

plane { -z, 0
rotate y * 30
texture {
gradient y
texture_map {
[ 0.0 Texture1 ]
[ 0.4 Texture1 ]
[ 0.6 Texture2 ]
[ 1.0 Texture2 ]
}
scale 2
}
}
Qu hemos hecho? El plano de fondo alterna verticalmente entre dos texturas, idnticas excepto en su
acabado. Cuando lo convertimos en una imagen, el cilindro se refleja en unas zonas del plano y en otras
no. Con pequeas adaptaciones, podemos usar esta idea con cualquier patrn, mezclando cualquier tipo
de acabado que se nos ocurra. Podemos dar a diferentes partes de un objeto diferentes acabados o
diferentes texturas completas.
Una pregunta: si existe un mapa de texturas, para qu necesitamos un mapa de pigmentos, o de
normales? Sencillo: velocidad de clculo. Si usamos un mapa de texturas, para cada punto afectado,
POV-Ray hace los clculos correspondientes a todas las texturas, despus realiza un clculo (media
ponderada) entre los resultados que promedia el valor que corresponde al punto. Usar un mapa de
pigmentos (o de normales) reduce el nmero de clculos, ya que algunas partes de la textura se calculan
una sola vez. Como regla, usaremos preferentemente mapas de normales o pigmentos, dejando los de
texturas para cuando lo que queramos sea imposible hacerlo de otra forma.
4.9.4. Trabajar con listas de texturas
Si hemos ledo la parte del tutorial dedicada a pigmentos, sabremos que hay tres patrones de color
llamados de lista de colores, ya que usan, en lugar de los mapas de colores, una sencilla lista con dos o
tres colores inmediatamente despus de la palabra clave. Sus nombres son ajedrezado, hexgonos y
ladrillo, nuevo en la versin 3 de POV-Ray.
Por supuesto, esto tambin funciona con pigmentos completos, normales, e incluso texturas enteras,
igual que los otros patrones anteriormente citados. La nica diferencia es que escribimos los datos tras
el patrn (como con los colores individuales), en lugar de preparar un mapa de la forma anterior.
Pongamos un ejemplo. Borramos el plano y los pigmentos declarados de nuestro ltimo ejemplo, y
escribimos lo siguiente:
#declare Pigment1 = pigment {
hexagon
color Yellow color Green color Grey
scale .1
}

#declare Pigment2 = pigment {
4. TUTORIAL PARA PRINCIPIANTES 122
checker
color Red color Blue
scale .1
}

#declare Pigment3 = pigment {
brick
color White color Black
rotate -90*x
scale .1
}

box { -5, 5
pigment {
hexagon
pigment {Pigment1}
pigment {Pigment2}
pigment {Pigment3}
rotate 90*x
}
}
Empezamos por declarar un ejemplo de cada uno de los patrones como pigmentos individuales.
Despus, usamos el patrn hexagonal como una lista de pigmentos, usando los pigmentos predefinidos
en esta lista, en lugar de colores individuales. Hay dos instrucciones de girado en este ejemplo, ya que
los ladrillos se alinean en direccin z (para cubrir una pared, por defecto), mientras que los hexgonos
lo hacen en direccin y (cubriendo un suelo), mientras que nosotros queremos que todos queden frente
a la direccin z, que es hacia donde mira la cmara.
Por supuesto, en POV-Ray 3, todo lo que vale para pigmentos, vale para normales o texturas enteras. A
continuacin vemos algunos ejemplos de su uso.
normal {
brick
normal {granite .1}
normal {bumps 1 scale .1}
}
o...
texture {
checker
texture {Gold_Metal}
texture {Silver_Metal}
}
4.9.5. Y las baldosas?
En versiones anteriores de POV-Ray, exista una textura especial llamada baldosa (tiles). Ahora
podemos substituirla por un patrn ajedrezado (como hemos visto anteriormente), as que ha quedado
obsoleta debido a la flexibilidad de la nueva sintaxis. POV-Ray 3.0 an comprende la instruccin para
mantener la compatibilidad con imgenes preparadas para versiones anteriores, aunque deberamos
acostumbrarnos a usar los patrones de listas de texturas.
4.9.6. Funcin promedio
Las cosas se ponen interesantes. Hemos visto cmo los pigmentos y las normales se transforman
gradualmente cuando las colocamos en mapas de normales, pigmentos o texturas. Pero y si queremos
que nuestra textura sea una mezcla de dos en todo el objeto? Ahora disponemos de una funcin nueva,
llamada promedio (average) que nos lo permite. Esta funcin trabaja con pigmentos, normales y
texturas, aunque su sintaxis es ligeramente distinta de los patrones estudiados antes. Si no estamos
PERSISTENCE OF VISION RAYTRACER 123
advertidos, el cambio nos podra confundir. Probamos en nuestro archivo, borrando todos los objetos
y usando los siguientes.
plane { -z, 0
pigment { White }
normal {
average
normal_map {
[ gradient x ]
[ gradient y ]
}
}
}
Lo que hemos hecho es bastante claro de por s, tan pronto como lo vemos convertido en un dibujo.
Hemos combinado un gradiente horizontal con uno vertical, creando unos gradientes cruzados.
Realmente, este efecto es una mezcla suave de las normales anteriores. Cul es el cambio en la sintaxis?
Podemos ver cmo ha cambiado la declaracin del mapa de normales. El valor decimal que preceda
cada entrada del mapa ha desaparecido. Este nmero indicaba en qu punto se iniciaba la mezcla entre
uno y otro, y ahora la mezcla se realiza en todo el objeto. De hecho, el promedio no usa esos valores
como esperamos, si no como pesos para las mezclas, e incluirlos puede dar lugar a resultados
imprevistos.
4.9.7. Trabajar con texturas superpuestas
Con los abundantes colores, patrones y opciones para crear texturas complejas de POV-Ray, fcilmente
podemos crear texturas apropiadas para nuestras creaciones. Sin embargo, tarde o temprano nos
veremos obligados a usar la posibilidad que aqu se trata. Por ejemplo, imagina una madera barnizada
sobre la que alguien ha manchado con un poco de pintura amarilla, dejando unas manchas irregulares a
travs de las cuales puede verse la madera.
Y bien? Es difcil crear una textura que rena todas esas condiciones. Quiz el lector est pensando en
pegar una imagen simulando este efecto, pero an queda una solucin: superponer varias texturas.
Slo tenemos que especificar una serie de varias texturas, una tras otra, asociadas al mismo objeto. Se le
aplicarn como capas de pintura, una tras otra, en el orden en que aparezcan.
Es importante que recordemos asignar un grado de transparencia (filtro o transmitancia) a parte de las
texturas que situemos en las capas superiores, ya que en caso contrario las inferiores no servirn para
nada. No recibiremos ningn mensaje de error, tcnicamente es legal, sencillamente no tiene sentido.
Es como pasarse horas pintando una imagen elaborada en un muro, para despus darle una capa de
ltex blanco encima, ocultndola totalmente.
Diseemos un objeto muy simple con texturas superpuestas y observemos cmo funciona. Creamos un
archivo llamado LAYTEX.POV y escribimos:
#include "colors.inc"
#include "textures.inc"

camera {
location <0, 5, -30>
look_at <0, 0, 0>
}

light_source { <-20, 30, -50> color White }

plane { y, 0 pigment { checker color Green color Yellow } }

background { rgb <.7, .7, 1> }

4. TUTORIAL PARA PRINCIPIANTES 124
box { <-10, 0, -10>, <10, 10, 10>
texture {
Silver_Metal // un objeto metlico...
normal { // ... algo abollado
dents 2
scale 1.5
}
} // (fin de la textura base)

texture { // ... tiene alguna manchas de xido ...
pigment {
granite
color_map {
[0.0 rgb <.2, 0, 0> ]
[0.2 color Brown ]
[0.2 rgbt <1, 1, 1, 1> ]
[1.0 rgbt <1, 1, 1, 1> ]
}
frequency 16
}
} // (fin de la textura de manchas de xido)

texture { // ... y algunas manchas negras
pigment {
bozo
color_map {
[0.0 color Black ]
[0.2 color rgbt <0, 0, 0, .5> ]
[0.4 color rgbt <.5, .5, .5, .5> ]
[0.5 color rgbt <1, 1, 1, 1> ]
[1.0 color rgbt <1, 1, 1, 1> ]
}
scale 3
}
} // (fin de la textura de las manchas negras)

} // (fin de la caja)
Bueno. Esto se complica, as que para hacerlo ms sencillo de entender, hemos incluido comentarios
explicando lo que hace cada parte, y dnde acaba. Para empezar, slo creamos una caja sobre un suelo
ajedrezado tpico, y dimos al cielo de fondo un tono de azul liso. Y despus...
Para empezar, dimos a la caja la textura Silver_Metal, declarada en TEXTURES.INC (si quieres nota,
mira en el archivo indicado y comprueba que esta textura figura ah). Para dar impresin de desgaste,
hemos aadido un patrn de normal abollado (dents). Esto produce la sensacin de que nuestra
misteriosa caja metlica ha sido golpeada.
Las pequeas manchas de xido no son mas que un patrn granito que vara de rojo oscuro a marrn y
despus pasa de golpe a ser totalmente transparente, siendo as la mayor parte del mapa de color. Vale,
probablemente habramos conseguido un patrn de manchas ms realista usando mapas de pigmentos,
pero eso corresponde a otra seccin del manual, as que no lo pensemos por ahora.
Por ltimo, hemos aadido otra textura al bloque. La distribucin llamada bozo vara desde centros
oscuros a gris semi-transparente y despus se vuelve totalmente transparente durante la mitad del mapa
de colores. Da aspecto de manchas oscuras (quiz producidas por fuego) que estn adheridas a la
superficie de la caja (por encima de las manchas de xido). El resultado final es un misterioso bloque
metlico ciertamente maltratado, de una forma en la que una sola textura no habra podido nunca.
PERSISTENCE OF VISION RAYTRACER 125
4.9.7.1. Declarar texturas superpuestas
En el caso de que queramos usar un conjunto de texturas superpuestas en varios objetos de nuestra
escena, es perfectamente legal declarar una textura as. No la tendremos que repetir cada vez, aunque el
formato general debe parecerse a lo siguiente:
#declare Abused_Metal =
texture { /* aqu va la textura base... */ }
texture { /* y aqu las manchas de xido... */ }
texture { /* y, por supuesto, aqu las manchas negras. */ }
POV-Ray no tiene ningn problema en reconocer dnde termina la declaracin, ya que las texturas se
escriben una tras otra sin objetos ni directivas en medio. Las texturas superpuestas declaradas
continuarn hasta que encuentre algo que no sea una textura, de forma que podemos apilar un nmero
indeterminado de ellas.
Una ltima aclaracin sobre las texturas: si utilizamos texturas superpuestas, declaradas o no, debemos
olvidarnos de las abreviaturas para texturas (escribir slo el pigmento, o slo el acabado...), ya que este
mtodo no se extiende a este tipo de texturas. Podemos apilar texturas completas, no trozos de textura.
Lo siguiente:
#declare Bad_Texture =
texture { /* insert your base texture here... */ }
pigment { Red filter .5 }
normal { bumps 1 }
no funcionar. El pigmento y la normal no son parte definida de una textura, Podemos escribirlos as si
no hubiese una textura base, pero as generar un error.
4.9.7.2. Otro ejemplo de texturas superpuestas
Para explicar con mayor detalle cmo funcionan las texturas superpuestas, se describe otro ejemplo en
detalle. Creamos un mantel para una escena de comida en el campo. Un mantel a cuadros blancos y
rojos slo resulta demasiado nuevo, demasiado plano, como un trozo de suelo, se usan texturas
superpuestas para manchar la tela.
Creamos una escena que contiene cuatro cajas. La primera de ellas tendr la textura base a cuadros
rojos y blancos, que usaremos de punto de partida, la segunda aade una capa que ensucia la tela de
forma realista, la tercera aade algo de vino a la tela, y la cuarta coloca unas pocas arrugas (no otra
textura superpuesta, aunque debemos fijarnos qu cambios en la textura provocan este efecto en el
resultado).
Empezamos situando una cmara, luces, y la primera caja. En este momento, la textura no es
superpuesta, claro. Observa el archivo LAYERED1.POV.
#include "colors.inc"

camera {
location <0, 0, -6>
look_at <0, 0, 0>
}

light_source { <-20, 30, -100> color White }
light_source { <10, 30, -10> color White }
light_source { <0, 30, 10> color White }

#declare PLAIN_TEXTURE =
// cuadros blancos y rojos
texture {
pigment {
checker
color rgb<1.000, 0.000, 0.000>
4. TUTORIAL PARA PRINCIPIANTES 126
color rgb<1.000, 1.000, 1.000>
scale <0.2500, 0.2500, 0.2500>
}
}

// caja roja y blanca a cuadros

box { <-1, -1, -1>, <1, 1, 1>
texture {
PLAIN_TEXTURE
}
translate <-1.5, 1.2, 0>
}
No hay nada especial en esta escena no? Usaremos nuevas texturas para hacerla ms interesante.
Primero aadiremos una capa con dos grises distintos, parcialmente transparentes. Los distribuiremos
en cuadrcula, de la misma forma que antes, aunque usaremos algo de turbulencia para hacer ms
realista el oscurecimiento. Aadimos la siguiente caja a la escena previa y reconstruimos la imagen.
#declare FADED_TEXTURE =
// cuadrados rojos y blancos
texture {
pigment {
checker
color rgb<0.920, 0.000, 0.000>
color rgb<1.000, 1.000, 1.000>
scale <0.2500, 0.2500, 0.2500>
}
}
// grises para oscurecer el rojo y blanco
texture {
pigment {
checker
color rgbf<0.632, 0.612, 0.688, 0.698>
color rgbf<0.420, 0.459, 0.520, 0.953>
turbulence 0.500
scale <0.2500, 0.2500, 0.2500>
}
}

// caja con cuadros oscurecida

box { <-1, -1, -1>, <1, 1, 1>
texture {
FADED_TEXTURE
}
translate <1.5, 1.2, 0>
}
Aunque pensemos que es una sutil diferencia, los cuadros rojos y blancos ya no parecen tan nuevos.
Como hay una botella de vino en la escena, pensamos que sera un toque interesante aadir una o dos
manchas. Este efecto puede lograrse situando una burbuja muy plana en la tela, aunque lograramos el
efecto del vino derramado, no de la mancha producida. Es el momento de aadir otra capa.
De nuevo, aadimos una caja y reconstruimos.
#declare STAINED_TEXTURE =
// cuadros rojos y blancos
texture {
pigment {
checker
color rgb<0.920, 0.000, 0.000>
PERSISTENCE OF VISION RAYTRACER 127
color rgb<1.000, 1.000, 1.000>
scale <0.2500, 0.2500, 0.2500>
}
}
// grises
texture {
pigment {
checker
color rgbf<0.634, 0.612, 0.688, 0.698>
color rgbf<0.421, 0.463, 0.518, 0.953>
turbulence 0.500
scale <0.2500, 0.2500, 0.2500>
}
}
// mancha de vino
texture {
pigment {
spotted
color_map {
[ 0.000 color rgb<0.483, 0.165, 0.165> ]
[ 0.329 color rgbf<1.000, 1.000, 1.000, 1.000> ]
[ 0.734 color rgbf<1.000, 1.000, 1.000, 1.000> ]

[ 1.000 color rgb<0.483, 0.165, 0.165> ]
}
turbulence 0.500
frequency 1.500
}
}

// caja sucia

box { <-1, -1, -1>, <1, 1, 1>
texture {
STAINED_TEXTURE
}
translate <-1.5, -1.2, 0>
}
Ahora disponemos de un mantel con personalidad.
Queremos aadir otro toque, en forma de algunas arrugas en el mantel. Aunque esto no significa aadir
una capa nueva, debemos tener en cuenta que hay que hacerlo sobre la ltima capa, ya que no tiene
ningn efecto modificar la normal de las capas inferiores (aunque las superiores sean totalmente
transparentes).
Aadimos esta caja final y reconstruimos.
#declare WRINKLED_TEXTURE =
// cuadros rojos y blancos
texture {
pigment {
checker
color rgb<0.920, 0.000, 0.000>
color rgb<1.000, 1.000, 1.000>
scale <0.2500, 0.2500, 0.2500>
}
}
// grises para oscurecer
texture {
pigment {
checker
color rgbf<0.632, 0.612, 0.688, 0.698>
color rgbf<0.420, 0.459, 0.520, 0.953>
4. TUTORIAL PARA PRINCIPIANTES 128
turbulence 0.500
scale <0.2500, 0.2500, 0.2500>
}
}
// manchas de vino
texture {
pigment {
spotted
color_map {
[ 0.000 color rgb<0.483, 0.165, 0.165> ]
[ 0.329 color rgbf<1.000, 1.000, 1.000, 1.000> ]
[ 0.734 color rgbf<1.000, 1.000, 1.000, 1.000> ]
[ 1.000 color rgb<0.483, 0.165, 0.165> ]
}
turbulence 0.500
frequency 1.500
}
normal {
wrinkles 5.0000
}
}

// caja arrugada

box { <-1, -1, -1>, <1, 1, 1>
texture {
WRINKLED_TEXTURE
}
translate <1.5, -1.2, 0>
}
Puede que este no sea el mantel ideal para ir al campo, pero si comparamos la ltima caja con la
primera, veremos cunta profundidad, dimensin y personalidad es posible crear usando slo texturas
originales.
Una nota: los comentarios para la normal no son vlidos para los acabados. Si una capa tiene reflexin
especular, y la superior no, donde la capa superior sea transparente veremos la reflexin especular.
4.9.8. Cuando todo falla: mapas de materiales
Tenemos a nuestra disposicin algunas herramientas para dar textura a los objetos que son bonitas y
poderosas, pero qu sucede si queremos disponer de la variedad de las texturas naturales? Bueno,
como hay mapas de imgenes para pigmentos, y mapas de bultos para definir las normales, las texturas
completas pueden combinarse siguiendo los colores de un mapa de bits, que se denomina mapa de
materiales.
Como en los otros casos, necesitamos un archivo que contenga la imagen original que ser utilizada por
POV-Ray para decidir el tipo de textura que aplicar a cada punto, y especificar qu textura va asociada
a cada uno de los ndices de la paleta de la imagen. Para construir dicha imagen, necesitamos que el
programa de dibujo nos deje elegir los colores por su ndice (el color es irrelevante, slo importa el
ndice que va a ocupar en la paleta). Si tenemos el paquete completo que viene con POV-Ray,
tendremos entre los ficheros de inclusin una imagen llamada POVMAP.GIF, que slo usa los cuatro
primeros colores de la paleta para dibujar un cuadro con las palabras Persistence of Vision dentro.
Esta imagen servir de muestra en nuestro prximo ejemplo. Usando de nuevo nuestra cmara y luz de
siempre, y los ficheros de inclusin ms tpicos, completamos el fichero con el siguiente objeto:
plane { -z, 0
texture {
material_map {
gif "povmap.gif"
interpolate 2
PERSISTENCE OF VISION RAYTRACER 129
once
texture { PinkAlabaster } // borde interno
texture { pigment { DMFDarkOak } } // borde externo
texture { Gold_Metal } // letras
texture { Chrome_Metal } // el panel
}
translate <-0.5, -0.5, 0>
scale 5
}
}
La posicin de las luces y la ausencia de fondo puede que no dejen que la imagen tenga demasiada
brillantez, pero podremos ver cmo funciona este proceso. Las texturas son situadas sencillamente
segn los colores de la imagen. Al usar la palabra clave once (para no repetir la imagen en la textura) y
trasladar y escalar la imagen, la vemos al completo delante de nuestra cmara.
Por supuesto, esto slo funciona con imgenes con paleta, como las GIF y algunos tipos de PNG. Sin
embargo, s pueden usarse imgenes sin paletas para construir algunos efectos. Veamos cmo usar
POV-Ray para producir imgenes de este tipo para l mismo.
Para empezar, si usamos una imagen sin paleta, POV-Ray slo hace caso a los ocho bits del color rojo
para determinar qu textura usa. Necesitamos controlar perfectamente el color que van a tener los
pxeles de nuestra imagen, cosa que podemos lograr si
1. Usamos una instruccin rgb para precisar los colores
2. No usamos luces, y aplicamos un ambiente de 1 para garantizar que el color resultado no va a
variar.
Confundido? Bien, pongamos un ejemplo. Generaremos un mapa de bits muy similar a POVMAP.GIF,
excepto que ser en formato TGA. Le vamos a dar color verde y azul, pero esto es slo para que
nosotros, las personas, podamos distinguir cmodamente los colores, ya que no podemos apreciar
variaciones de rojo de 1/255 unidades. Sin esas variaciones, la imagen aparecera negra a nuestros ojos,
de forma que podramos usar POV-Ray para enviar mensajes secretos, aunque no es ese el uso que le
queremos dar. Queremos ver qu aspecto va a tener nuestra imagen.
Reconstruiremos el cdigo siguiente, llamando al resultado POVMAP.TGA
camera {
orthographic
up <0, 5, 0>
right <5, 0, 0>
location <0, 0, -25>
look_at <0, 0, 0>
}

plane { -z, 0
pigment { rgb <1/255, 0, 0.5> }
finish { ambient 1 }
}

box { <-2.3, -1.8, -0.2>, <2.3, 1.8, -0.2>
pigment { rgb <0/255, 0, 1> }
finish { ambient 1 }
}

box { <-1.95, -1.3, -0.4>, <1.95, 1.3, -0.3>
pigment { rgb <2/255, 0.5, 0.5> }
finish { ambient 1 }
}

text { ttf "crystal.ttf", "The vision", 0.1, 0
4. TUTORIAL PARA PRINCIPIANTES 130
scale <0.7, 1, 1>
translate <-1.8, 0.25, -0.5>
pigment { rgb <3/255, 1, 1> }
finish { ambient 1 }
}

text { ttf "crystal.ttf", "Persists!", 0.1, 0
scale <0.7, 1, 1>
translate <-1.5, -1, -0.5>
pigment { rgb <3/255, 1, 1> }
finish { ambient 1 }
}
Todo lo que tenemos que hacer ahora es modificar nuestro ejemplo anterior de forma que situemos
TGA en lugar de GIF, en el tipo de imagen y en su nombre. Comprobaremos al reconstruirlo que el
resultado es muy similar, slo que no tenemos que usar un programa externo para crear la imagen:
POV-Ray lo hace todo!
4.9.9. Limitaciones de las texturas especiales
Hay un par de limitaciones a las texturas especiales que hemos estudiado (las que tienen que ver con
mapas de bits). En primer lugar, si hemos usado la textura por defecto para todos los elementos de
nuestra escena, no podr estar compuesta de ninguna de las caractersticas mencionadas. Es un mal
menor, ya que podemos declarar la textura y asignarla individualmente a todos los objetos. No nos
impide realmente hacer nada.
La otra limitacin es ms grave, aunque tambin se puede esquivar. Al trabajar con texturas
superpuestas, hemos visto que podamos apilar una sobre otra indefinidamente (siempre y cuando
hubiese transparencia en las superiores). Esta tcnica tan til tiene, sin embargo, problemas cuando se
usa como base las texturas especiales que mencionbamos. Aunque hay una solucin!
Por ejemplo, supongamos que tenemos una textura llamada Speckled_Metal, que produce una
superficie metlica plateada, y ponemos pequeas manchas de xido sobre ella. Supongamos que
entonces , para ms realismo, decidimos poner manchas de xido ms realistas sobre la superficie. Uno
de los mtodos es crear un mapa de texturas con transparencias para usar como capa superior. Sin
embargo, obtendremos un mensaje de error si lo intentamos. La solucin que se propone es hacer
nuestra textura parte del mapa de texturas empleados, de la forma siguiente:
// Declaramos un pigmento que
// usaremos en las manchas de xido
#declare Rusty = pigment {
granite
color_map {
[ 0 rgb <0.2, 0, 0> ]
[ 1 Brown ]
}
frequency 20
}

// Aqu se aplica
// Observa que nuestra textura original
// "Speckled_Metal" ahora es parte del mapa
#declare Rust_Patches = texture {
bozo
texture_map {
[ 0.0 pigment {Rusty} ]
[ 0.75 Speckled_Metal ]
[ 1.0 Speckled_Metal ]
}
}
PERSISTENCE OF VISION RAYTRACER 131
Y el efecto es el mismo que si hubisemos superpuesto las manchas de xido en la superficie pulida.
Usando los patrones, pigmentos, normales, acabados, capas y texturas especiales no hay nada
prcticamente que no podamos crear como textura. Una casi infinita variedad de posibilidades nos
esperan!
4.10. Usando los efectos atmosfricos
POV-Ray ofrece una variedad de efectos atmosfricos, es decir, caractersticas que afectan al ambiente
de una escena.
Es fcil asignar un color simple o un complicado diseo a una esfera celeste virtual (sky_sphere).
Puedes crear cualquier cosa, desde un azul y despejado cielo de verano hasta uno densamente nublado y
tormentoso. Incluso un cielo estrellado puede ser creado fcilmente.
Puedes usar distintos tipos de nieblas para crear escenas brumosas. Mltiples capas de niebla de
distintos colores pueden dar un toque siniestro a tu escena.
Un efecto mucho ms realista se consigue usando una atmsfera, una niebla constante que interacta
con la luz proveniente de las fuentes. Los rayos de luz se tornan visibles y los objetos proyectan
sombras sobre la niebla.
4.10.1. Background
La caracterstica background se usa para asignar un color a todos los rayos que no incidan sobre
ningn objeto. Se usa de la siguiente forma.
camera {
location <0, 0, -10>
look_at <0, 0, 0>
}

background { color rgb <0.2, 0.2, 0.3> }

sphere { 0, 1
pigment { color rgb <0.8, 0.5, 0.2> }
}
El color asignado al fondo ser visible al usar una esfera celeste solo si queda algo de translucidez
despus de que las capas de pigmento de esta sean procesadas.
4.10.2. La esfera celeste
La esfera celeste (sky_sphere) puede ser usada para crear, de una forma fcil, cielos nublados, cielos
nocturnos con estrellas o cualquier clase de cielo que se te ocurra.
En los siguientes ejemplos empezaremos con una esfera celeste muy simple que se ir volviendo cada
vez ms y ms compleja segn vayamos aadiendo nuevas caractersticas.
4.10.2.1. Creando el cielo con un gradiente de colores
Junto con la esfera monocolor que puede ser creada con la caracterstica background, la esfera celeste
ms simple es un gradiente de colores.
Podemos advertir que el color del cielo vara segn el ngulo con la normal al plano de superficie. Si
miras directamente hacia arriba el cielo tendr el color de un azul ms profundo que en el horizonte.
Queremos modelar este efecto usando una esfera celeste como se muestra en la siguiente escena
(SKYSPH1.POV).
#include "colors.inc"
4. TUTORIAL PARA PRINCIPIANTES 132

camera {
location <0, 1, -4>
look_at <0, 2, 0>
angle 80
}

light_source { <10, 10, -10> White }

sphere { 2*y, 1
pigment { color rgb <1, 1, 1> }
finish { ambient 0.2 diffuse 0 reflection 0.6 }
}

sky_sphere {
pigment {
gradient y
color_map {
[0 color Red]
[1 color Blue]
}
scale 2
translate -1
}
}
La parte interesante es la declaracin de la esfera celeste. Contiene un pigmento que describe la
apariencia de la esfera. Queremos crear un gradiente de colores a lo largo del ngulo de visin medido
contra la normal al plano de superficie. Ya que el vector director ser usado para calcular los colores del
pigmento tenemos que usar el gradiente y.
Las transformaciones de translacin y escalado se usan para distribuir los puntos derivados del vector
director a un rango adecuado. Sin estas transformaciones el diseo sera repetido dos veces sobre la
esfera celeste. El escalado se usa para evitar la repeticin y la sentencia translate -1 para mover el
color correspondiente al ndice 0 al fondo de la esfera (al punto que veras si miraras directamente hacia
abajo).
Despus de estas transformaciones la entrada de color en la posicin 0 del mapa de color estar en el
fondo de la esfera, es decir, por debajo de nosotros y el color en la posicin 1 estar en lo ms alto, es
decir, por encima de nosotros.
Los colores para el resto de las posiciones son interpolados entre estos dos colores tal como puedes ver
en la imagen resultante.
PERSISTENCE OF VISION RAYTRACER 133
Si quieres que uno de los colores empiece a partir de un ngulo especfico primero tienes que convertir
el ngulo a un ndice del mapa de color. Esto se hace usando la frmula
indice mapa color
angulo
_ _
Cos( )

1
2

donde el ngulo se mide contra la normal (en el sentido negativo) al plano de superficie. Podramos
decir que es la normal que apunta al centro de la tierra. Un ngulo de 0 grados describe el punto justo
debajo de nosotros, mientras que un ngulo de 180 representara el cenit.
En POV-Ray debes primero convertir el valor en grados a radianes como se muestra en el siguiente
ejemplo.
sky_sphere {
pigment {
gradient y
color_map {
[(1-cos(radians( 30)))/2 color Red]
[(1-cos(radians(120)))/2 color Blue]
}
scale 2
translate -1
}
}
Esta escena usa un gradiente de colores que empieza con un rojo a los 30 grados y se transforma en
azul a los 120 grados. Por de bajo de 30 grados todo es de color rojo, mientras que por encima de los
120 todo es azul.
4.10.2.2. Aadiendo el sol
En el siguiente ejemplo crearemos un cielo con un sol rojo rodeado por un halo del mismo color que se
va fundiendo en un cielo azul oscuro. Haremos esto usando solamente la esfera celeste.
La esfera celeste que usamos es mostrada a continuacin. Tambin se ha aadido un plano de suelo
para mayor realismo (SKYSPH2.POV).
sky_sphere {
pigment {
gradient y
color_map {

Figura 42: Una esfera celeste con un gradiente simple
4. TUTORIAL PARA PRINCIPIANTES 134
[0.000 0.002 color rgb <1.0, 0.2, 0.0>
color rgb <1.0, 0.2, 0.0>]
[0.002 0.200 color rgb <0.8, 0.1, 0.0>
color rgb <0.2, 0.2, 0.3>]
}
scale 2
translate -1
}
rotate -135*x
}

plane { y, 0
pigment { color Green }
finish { ambient .3 diffuse .7 }
}
El diseo del gradiente y las transformaciones dentro del pigmento son las mismas que en el ejemplo de
la seccin anterior.
El mapa de color consiste de tres colores. Un rojo brillante y ligeramente amarillento es usado para el
sol, un rojo ms oscuro para el halo y un azul oscuro para el cielo nocturno. El color del sol tan solo
cubre una pequea parte de la esfera celeste debido a que no queremos que tenga un tamao demasiado
grande. El color se usa en los valores 0.000 y 0.002 del mapa de color para obtener un acusado
contraste en el valor 0.002 (no queremos que el sol se funda con el cielo). El rojo ms oscuro usado
para el halo se funde con el azul del cielo entre los valores 0.002 y 0.200 del mapa de color. Todos los
valores por encima de 0.200 mostrarn el color azul oscuro del cielo.
La sentencia rotate -135*x se usa para rotar tanto el sol como el cielo a su posicin final. Si esta
rotacin el sol estara situado a 0 grados, es decir, por debajo de nosotros.
Observando la imagen resultante podemos ver los impresionantes efectos que podemos conseguir con
la esfera celeste.
4.10.2.3. Aadiendo algunas nubes
Para mejorar todava ms nuestra imagen queremos aadir algunas nubes aadiendo un segundo
pigmento. Este nuevo pigmento usa el diseo bozo para crear algunas nubes. Ya que se encuentra
situado sobre el otro pigmento necesita que algunos colores del mapa de color sean translcidos
(observa las entradas de 0.5 a 1.0).

Figura 43: Un sol rojo desciende en la noche
PERSISTENCE OF VISION RAYTRACER 135
sky_sphere {
pigment {
gradient y
color_map {
[0.000 0.002 color rgb <1.0, 0.2, 0.0>
color rgb <1.0, 0.2, 0.0>]
[0.002 0.200 color rgb <0.8, 0.1, 0.0>
color rgb <0.2, 0.2, 0.3>]
}
scale 2
translate -1
}
pigment {
bozo
turbulence 0.65
octaves 6
omega 0.7
lambda 2
color_map {
[0.0 0.1 color rgb <0.85, 0.85, 0.85>
color rgb <0.75, 0.75, 0.75>]
[0.1 0.5 color rgb <0.75, 0.75, 0.75>
color rgbt <1, 1, 1, 1>]
[0.5 1.0 color rgbt <1, 1, 1, 1>
color rgbt <1, 1, 1, 1>]
}
scale <0.2, 0.5, 0.2>
}
rotate -135*x
}
La esfera celeste tiene un inconveniente como podrs haber notado al observar la imagen final
(SKYSPH3.POV). El sol no emitir ninguna luz y las nubes no proyectarn ninguna sombra. Si quieres
tener nubes que proyecten sombras tendrs que usar una esfera corriente de gran tamao con la textura
adecuada y una fuente de luz situada en algn lugar en el exterior de la esfera.
4.10.3. La niebla
Puedes usar la caracterstica fog para aadir niebla de dos tipos distintos a tu escena: niebla constante y
niebla de suelo. La primera tiene una densidad constante en todos los puntos mientras que en la
segunda la densidad decrece segn nos movemos hacia arriba.

Figura 44: Un cielo nublado con un sol poniente
4. TUTORIAL PARA PRINCIPIANTES 136
4.10.3.1. La niebla constante
El tipo ms simple de niebla es la niebla constante que tiene la misma densidad en todos los puntos. Se
especifica mediante el identificador distance que describe la densidad y el identificador color que
describe su color.
El valor de distance determina la distancia a la cual el 36.8% del fondo es todava visible (para una
explicacin ms detallada sobre como se calcula la niebla leer la seccin de referencia "Niebla").
El color de la niebla puede ser usado para crear cualquier cosa desde una niebla de un color blanco
inmaculado hasta un rojo sangre. Tambin puedes usar una niebla negra para simular el efecto de un
limitado rango de visin.
El siguiente ejemplo muestra como aadir niebla a una escena simple (FOG1.POV).
#include "colors.inc"

camera {
location <0, 20, -100>
}

background { colour SkyBlue }

plane { y, -10
pigment {
checker colour Yellow colour Green
scale 20
}
}

sphere { <0, 25, 0>, 40
pigment { Red }
finish { phong 1.0 phong_size 20 }
}

sphere { <-100, 150, 200>, 20
pigment { Green }
finish { phong 1.0 phong_size 20 }
}

sphere { <100, 25, 100>, 30
pigment { Blue }
finish { phong 1.0 phong_size 20 }
}

light_source { <100, 120, 40> colour White}

fog {
distance 150
colour rgb<0.3, 0.5, 0.2>
}
PERSISTENCE OF VISION RAYTRACER 137
Las esferas en esta escena se desvanecen, en mayor o en menor medida dependiendo de su distancia, en
la niebla verdosa, al igual que el plano a cuadros.
4.10.3.2. Especificando un mnimo de translucidez
Si quieres asegurarte de que el fondo no se desvanece completamente en la niebla puedes modificar el
canal de transmitancia del color de la niebla a la cantidad de fondo que quieres que sea siempre visible.
Usando un valor de transmitancia de 0.2 como en
fog {
distance 150
colour rgbt<0.3, 0.5, 0.2, 0.2>
}
la translucidez de la niebla nunca cae por debajo del 20% como puedes ver en la imagen resultante
(FOG2.POV).

Figura 45: Una escena brumosa

Figura 46: Aadiendo un poco de translucidez te aseguras de que
el fondo no se desvanezca
4. TUTORIAL PARA PRINCIPIANTES 138
4.10.3.3. Creando niebla filtrante
La niebla verdosa que hemos usado hasta ahora no filtra la luz que pasa a travs de ella. Todo lo que
hace es disminuir la intensidad de la luz. Podemos cambiar esto usando un valor distinto de cero para el
canal de filtro en el color de la niebla (FOG3.POV).
fog {
distance 150
colour rgbf<0.3, 0.5, 0.2, 1.0>
}
El valor de filtro determina la cantidad de luz que es filtrada por la niebla. En nuestro ejemplo el 100%
de la luz que pase a travs de la niebla ser filtrada por esta. Si hubiramos usado un valor de 0.7 tan
solo hubiera sido filtrada el 70% de la luz. El 30% restante hubiera pasado sin ser filtrada.
Te habrs dado cuenta de que no solo disminuye la intensidad de los objetos en la niebla debido al
color de esta, si no que tambin los colores son influenciados. La esfera roja y especialmente la azul
obtienen un matiz de verde.
4.10.3.4. Aadiendo algo de turbulencia a la niebla
Para hacer que nuestra niebla tenga un aspecto menos montono y ms interesante podemos aadir
algo de turbulencia, haciendo parecer que tiene una densidad no constante (FOG4.POV).
fog {
distance 150
colour rgbf<0.3, 0.5, 0.2, 1.0>
turbulence 0.2
turb_depth 0.3
}

Figura 47: una niebla filtrante
PERSISTENCE OF VISION RAYTRACER 139
El identificador turbulence es usado para especificar la cantidad de turbulencia usada mientras que el
valor asociado a turb_depth es usado para mover el punto en el cual es calculado el valor de la
turbulencia a lo largo de la lnea de visin. Valores cercanos a cero mueven el punto hacia el observador
mientras que los valores cerca de uno lo mueven hacia el punto de interseccin (el valor por defecto es
0.5). Este parmetro puede ser usado para evitar los fallos que puedan aparecer en la niebla debido a la
turbulencia (esto ocurre normalmente en puntos de interseccin muy alejados, especialmente si la
interseccin no tiene lugar, es decir, ocurre directamente sobre el fondo). Si esto ocurre simplemente
hay que disminuir el valor de turb_depth hasta que el fallo desaparezca.
Deberas tener en cuenta que la densidad de la niebla no cambia. Solo el valor de la atenuacin basado
en la distancia es modificado por el valor de la turbulencia en un punto a lo largo de la lnea de visin.
4.10.3.5. Usando la niebla de superficie
Un tipo de niebla ms flexible e interesante es la niebla de superficie, que es seleccionada mediante el
identificador fog_type. Su apariencia es descrita mediante los identificadores fog_offset y
fog_alt. El identificador fog_offset especifica la altura, es decir, el valor Y por debajo del cual la
niebla tiene un valor constante de uno. El identificador fog_alt determina con que rapidez la
densidad de la niebla se aproxima a cero segn nos movemos por el eje Y. A una altura de
fog offset fog alt _ _ la niebla tendr una densidad del 25%.
El siguiente ejemplo (FOG5.POV) usa una niebla de suelo que tiene una densidad constante por debajo
de y=25 (el centro de la esfera roja) y disminuye rpidamente para altitudes superiores.
fog {
distance 150
colour rgbf<0.3, 0.5, 0.2, 1.0>
fog_type 2
fog_offset 25
fog_alt 1
}

Figura 48: Aadiendo un poco de turbulencia hacemos que la
niebla tenga un aspecto ms interesante
4. TUTORIAL PARA PRINCIPIANTES 140
4.10.3.6. Usando mltiples capas de niebla
Es posible usar varias capas de niebla escribiendo ms de una declaracin fog en tu fichero de escena.
Esto es bastante til si quieres conseguir buenos efectos de turbulencia usando nieblas de suelo. Podras
ir aadiendo varias capas de niebla de distintos colores para crear una escena de aspecto siniestro, por
ejemplo.
Prueba el siguiente ejemplo (FOG6.POV).
fog {
distance 150
colour rgb<0.3, 0.5, 0.2>
fog_type 2
fog_offset 25
fog_alt 1
turbulence 0.1
turb_depth 0.2
}

fog {
distance 150
colour rgb<0.5, 0.1, 0.1>
fog_type 2
fog_offset 15
fog_alt 4
turbulence 0.2
turb_depth 0.2
}

fog {
distance 150
colour rgb<0.1, 0.1, 0.6>
fog_type 2
fog_offset 10
fog_alt 2
}

Figura 49: La niebla de superficie slo cubre las partes ms bajas
del mundo
PERSISTENCE OF VISION RAYTRACER 141
Puedes combinar nieblas de densidad constante, de suelo, nieblas filtrantes y no filtrantes, nieblas
translcidas, etc.
4.10.3.7. La niebla y los objetos vacos
Siempre que uses la caracterstica fog y la cmara se encuentre dentro de un objeto no vaco no
obtendrs ningn efecto de niebla. Para una explicacin detallada de porque ocurre esto ver "Objetos
Vacos y Objetos Slidos"
Para evitar este problema debes hacer que todos esos objetos sean vacos asegurndote de que la
cmara se encuentra fuera de ellos (usando el identificador inverse) o aadindoles el identificador
hollow (que es mucho ms fcil).
4.10.4. La atmsfera
Nota importante: la atmsfera es una caracterstica experimental de POV-Ray 3.0. Hay una alta
probabilidad de que el diseo e implementacin de estas caractersticas cambie en futuras versiones. No
podemos garantizar que las escenas que las usen den los mismos resultados en futuras versiones o que
se mantenga la compatibilidad de la sintaxis del lenguaje.
La atmsfera puede ser usada para modelar la interaccin de la luz con las partculas suspendidas en el
aire. Los rayos de luz se volvern visibles y los objetos proyectarn sombras sobre la niebla o el polvo
del aire.
El modelo atmosfrico usado en POV-Ray supone una densidad constante de partculas en todos los
puntos excepto en los objetos slidos. Si quieres crear nieblas o humos con la apariencia de nubes
debers usar la propiedad halo de las texturas descrita en la seccin "Halos".
4.10.4.1. Empezando con una habitacin vaca
Queremos crear una escena simple para explicar como funciona el efecto atmsfera y como puedes
obtener buenos resultados.
Imagina una sencilla habitacin con una ventana. La luz entra a travs de la ventana y es dispersada por
las partculas de polvo que flotan en el aire. Lo que veras seran unos rayos de luz provenientes de la
ventana reflejandose sobre el suelo.

Figura 50: Se pueden conseguir resultados bastante buenos
usando mltiples capas de niebla
4. TUTORIAL PARA PRINCIPIANTES 142
Queremos modelar esta escena paso a paso. Los ejemplos siguientes empiezan con la habitacin, la
ventana y un foco (spotlight) en algn lugar en el exterior de la habitacin. De momento no hay
ninguna atmsfera para que podamos verificar si la iluminacin es la correcta (ATMOS1.POV).
camera {
location <-10, 8, -19>
look_at <0, 5, 0>
angle 75
}

background { color rgb <0.2, 0.4, 0.8> }

light_source { <0, 19, 0> color rgb 0.5 atmosphere off }

light_source {
<40, 25, 0> color rgb <1, 1, 1>
spotlight
point_at <0, 5, 0>
radius 20
falloff 20
atmospheric_attenuation on
}

union {
difference {
box { <-21, -1, -21>, <21, 21, 21> }
box { <-20, 0, -20>, <20, 20, 20> }
box { <19.9, 5, -3>, <21.1, 15, 3> }
}
box { <20, 5, -0.25>, <21, 15, 0.25> }
box { <20, 9.775, -3>, <21, 10.25, 3> }
pigment { color red 1 green 1 blue 1 }
finish { ambient 0.2 diffuse 0.5 }
}
La fuente de luz puntual se ha usado para iluminar la habitacin desde el interior sin ninguna
interaccin con la atmsfera. Esto se hace aadiendo atmosphere off. No nos tendremos que
preocupar de esta fuente de luz cuando aadamos la atmsfera ms tarde.
Hemos aadido el identificador atmospheric_attenuation al foco. Esto significa que la luz
proveniente de este ser atenuada por la atmsfera.

Figura 51: La sencilla habitacin con la que queremos empezar
PERSISTENCE OF VISION RAYTRACER 143
El objeto unin es usado para modelar la habitacin y la ventana. Ya que usamos la diferencia entre dos
cajas para modelar la habitacin (las primeras dos cajas en la declaracin difference) no hay
necesidad de usar el identificador hollow. Si estamos dentro de esta habitacin, estaremos fuera del
objeto (ver tambin "Usando Objetos Vacos y la Atmsfera").
4.10.4.2. Aadiendo polvo a la habitacin
El siguiente paso es aadir una atmsfera a la habitacin. Esto se consigue con las siguientes lneas
(ATMOS2.POV).
atmosphere {
type 1
samples 10
distance 40
scattering 0.2
}
El identificador type selecciona el tipo de dispersin atmosfrica que queremos usar. En este caso
usamos la dispersin isotrpica que dispersa la luz de igual forma en todas las direcciones (ver "La
atmsfera" para ms detalles acerca de los diferentes tipos de dispersin).
El identificador samples determina el nmero de muestras a acumular para calcular el efecto
atmosfrico. Por cada rayo se toman una serie de muestras a lo largo de este para determinar si la
muestra est iluminada o no por una fuente de luz. Si la muestra est iluminada, se determina la
cantidad de luz dispersada en la direccin del observador y es aadida a la intensidad total.
Siempre puedes empezar con un nmero arbitrario de muestras. Si los resultados no te satisfacen,
puedes incrementar la tasa de muestreo para obtener mejores resultados. El problema de elegir una
buena tasa de muestreo es mantener el equilibrio entre una imagen satisfactoria y una rpido trazado.
Una alta tasa de muestreo casi siempre funcionar bien, pero el trazado de la imagen tambin
consumir mucho tiempo. He aqu algo con lo que experimentar.
El identificador distance especifica la densidad de la atmsfera. Funciona del mismo modo que el
parmetro distance del efecto niebla (fog).
Por ltimo pero no menos importante, el valor del identificador scattering determinar la cantidad
de luz que es dispersada por las partculas (la luz restante es absorbida). Como vers ms tarde este
parmetro es muy til para ajustar el brillo medio de la atmsfera.

Figura 52: Despus de aadir algo de polvo, los rayos de luz se
tornan visibles
4. TUTORIAL PARA PRINCIPIANTES 144
Observando la imagen creada a partir de la escena anterior notars algunos efectos de aliasing bastante
desagradables conocidos como mach-bands. Son el resultado de una baja tasa de muestreo.
4.10.4.3. Eligiendo una buena tasa de muestreo
Como has visto, una tasa de muestreo demasiado baja causa efectos desagradables. Hay formas de
reducir o incluso eliminar estos problemas.
Una posible solucin es incrementar la tasa de muestreo hasta que los efectos desaparezcan y obtengas
una imagen satisfactoria. A pesar de que esto siempre funcionar, es una mala idea debido a que
consume demasiado tiempo. Una mejor aproximacin al problema es usar primero las tcnicas de
jittering y anti-aliasing. Si esto no funciona, tendrs que incrementar la tasa de muestreo.
La tcnica de jittering mueve cada punto una pequea y aleatoria cantidad sobre la direccin de
muestreo. Esto ayuda a reducir la regularidad resultante del aliasing. Difcilmente habr algo ms
molesto para el ojo humano que los efectos de una baja tasa de muestreo. Es mucho mejor aadir algo
de aleatoriedad a las posiciones de las muestras.
Usa el identificador jitter seguido de la cantidad de jittering que quieres usar. Son recomendables los
valores hasta 0.5.
Deberas tener en cuenta el hecho de que el jittering no puede ocultar totalmente los efectos resultantes
de una tasa de muestreo demasiado baja. En todo caso puede hacerlos menos visibles.
Adicionalmente, un mejor mtodo para reducir los efectos del aliasing es usar el super-muestreo
adaptativo. Este mtodo toma muestras adicionales donde es posible que sean necesarias. Si la
intensidad de dos muestras adyacentes difiere mucho, son tomadas muestras adicionales en un punto
intermedio. Este paso se ejecuta de forma recursiva hasta que es alcanzado un nivel de recursin
especfico o la muestra tomada se acerca demasiado a otra adyacente.
Los identificadores aa_level y aa_threshold dan control absoluto sobre el proceso de
super-muestreo. El identificador aa_level determina el nivel mximo de recursin mientras que
aa_threshold especifica la diferencia mxima permitida entre dos muestras antes de que el
super-muestreo tenga lugar.
Despus de esta parte terica volvemos de nuevo a nuestra escena de muestra y aadimos los
identificadores apropiados para usar ambas tcnicas, jittering y super-muestreo (ATMOS3.POV).
atmosphere {
type 1
samples 50
distance 40
scattering 0.2
aa_level 4
aa_threshold 0.1
jitter 0.2
}
Se eligi un valor muy bajo para threshold para que se efecte el super-muestreo incluso entre puntos
adyacentes de intensidad muy similar. El nivel mximo de recursin de 4 resultar en un mximo de 15
super-muestreos.
Si observas los resultados que obtienes despus de aadir jittering y super-muestreo seguramente no
estars satisfecho. La nica forma de reducir los defectos todava visibles es incrementar la tasa de
muestreo eligiendo un nmero mayor de muestras.
PERSISTENCE OF VISION RAYTRACER 145
Haciendo esto obtendrs un buen resultado sin (casi) ningn defecto. Por otro lado la cantidad de
polvo flotando en esta habitacin puede ser un poco exagerada pero solo es un ejemplo y los ejemplos
tienden a ser exagerados.
4.10.4.4. Usando una atmsfera coloreada
Puedes asignar un color a la atmsfera, lo que te da un mayor control sobre su apariencia. El color se
usa para filtrar la luz que pasa a travs de l, ya venga de una fuente de luz, rayos reflejados o
refractados o del fondo. La cantidad de luz filtrada por el color de la atmsfera se determina con el
valor de filtro (filter) de este. Un valor de 0 significa que la luz no es influenciada por el color de la
atmsfera, mientras que un valor de 1 significa que toda la luz ser filtrada por el color.
Si, por ejemplo, quieres crear una atmsfera rojiza, puedes aadir la siguiente lnea a la declaracin de
atmsfera usada en el ejemplo anterior.
color rgbf <1, 0, 0, 0.25>
Usando solamente rgb <1,0,0> no funcionara debido a que el valor de filtro del color sera cero y
no filtrara la luz, es decir, el color de esta no sera multiplicado por los valores de la componente RGB.
El valor de filtro de 0.25 significa que un 25% de la luz que pasa a travs de la atmsfera ser filtrada
por el color rojo y el 75% restante pasar sin ser filtrada.
El canal de transmitancia del color de la atmsfera se usa para especificar la translucidez mnima. Por
defecto el canal de transmitancia es cero y por lo tanto no existe tal translucidez mnima. Usando un
valor positivo te permite determinar la cantidad de luz que siempre pasar a travs de la atmsfera sin
tener en cuenta su grosor determinado por el identificador distance.
Si usas un color rgbt <0,0,0,0.3> con nuestra habitacin de ejemplo, puedes hacer que el fondo
azul sea visible. Hasta ahora estaba oculto debido a la atmsfera.
4.10.4.5. Consejos usando la atmsfera
Es muy difcil obtener resultados satisfactorios cuando usamos el efecto atmsfera. Algunos de los
problemas ms comunes sern discutidos en las siguientes secciones para ayudarte a resolverlos (ver
tambin la seccin de Preguntas Frecuentes sobre la atmsfera en Preguntas sobre la atmsfera).

Figura 53: Una alta tasa de muestreo nos lleva a una imagen
satisfactoria
4. TUTORIAL PARA PRINCIPIANTES 146
4.10.4.5.1. Eligiendo los parmetros de distancia y dispersin
El primer paso difcil es elegir unos buenos valores para la distancia (distance) y la dispersin
(scattering). Necesitas poder controlar la visibilidad de los objetos en la escena y los efectos
atmosfricos.
La mejor solucin es elegir primero el valor de distance. Este valor determina la visibilidad de los
objetos en la escena sin tener en cuenta la dispersin de la luz. Funciona de igual forma que el valor
distance del efecto niebla (fog).
Ya que la niebla es muy similar a la atmsfera, excepto en lo que se refiere a la iluminacin, podemos
usarla en lugar de la atmsfera para elegir un valor para la distancia. Si haces esto con la escena de la
habitacin que usamos antes, podras usar la siguiente declaracin de niebla en lugar de la atmsfera
(ATMOS4.POV).
fog {
distance 40
color rgb <0, 0, 0>
}
Se usa el color negro para simular la atenuacin que obtendras en las partes situadas a la de sombra en
la escena con la atmsfera.
Si quieres usar una atmsfera coloreada tendrs que usar el mismo color para la niebla que el que
quieres usar para la atmsfera, incluyendo los valores del filtro y del canal de transmitancia (ver
"Usando una atmsfera coloreada" y "La Atmsfera" para una explicacin del color de la atmsfera).
Si quieres simular la apariencia de esas partes iluminadas por una fuente de luz, puedes usar el color de
la atmsfera en la declaracin de la niebla.
Una vez ests satisfecho con el valor de distancia tendrs que elegir una valor de dispersin
(scattering). Este valor te permite adecuar la intensidad de la atmsfera a tus necesidades.
Empezando con un valor de uno debers aumentarlo si los efectos atmosfricos son difcilmente
visibles. Si no ves nada en las partes iluminadas de la atmsfera, tendrs que decrementar el valor.
Deberas tener en cuenta que quizs tengas que usar valores muy grandes o muy pequeos para obtener
los resultados deseados.

Figura 54: Una niebla de color negro puede ser usada para
obtener un valor de distancia para la atmsfera
PERSISTENCE OF VISION RAYTRACER 147
4.10.4.5.2. La atmsfera y las fuentes de luz
Los mejores resultados se obtienen con los focos cnicos y cilndricos. Crean buenos rayos de luz y son
fciles de trazar debido a que el muestreo atmosfrico solo tiene lugar dentro del cono o del cilindro.
Si quieres aadir una fuente de luz que no interacte con la atmsfera puedes usar el identificador
atmosphere dentro de la declaracin de la fuente de luz (ver "Interaccin con la atmsfera").
Simplemente aade atmosphere off.
Por defecto la luz proveniente de cualquier fuente no ser disminuida por la atmsfera. De esta manera
los reflejos en tu escena sern normalmente demasiado brillantes. Esto puede ser cambiado con la
declaracin
atmospheric_attenuation on.
4.10.4.5.3. Tipos de dispersin atmosfrica
Los diferentes tipos de dispersin listados en "La atmsfera" pueden ser usados para modelar distintos
tipos de partculas. Esto es algo con lo que puedes experimentar.
La dispersin Rayleigh se usa para partculas pequeas como polvo o humo, mientras que la dispersin
Mie se usa para la niebla.
Si alguna vez has visto la escena del faro en la pelcula Casper sabrs que efecto tiene el tipo de
dispersin. En esta escena el rayo de luz proveniente del faro se torna visible cuando apunta hacia el
observador y se va desvaneciendo segn se aleja. Este comportamiento es tpico de las minsculas gotas
de agua que modela la dispersin Mie.
4.10.4.5.4. Incrementando la resolucin de la imagen
Debes tener en cuenta que quizs debas incrementar la tasa de muestreo de la atmsfera si incrementas
la resolucin de la imagen. De otra manera puede que aparezcan algunos efectos del aliasing que no
eran visibles con una resolucin ms baja.
4.10.4.5.5. Usando Objetos Vacos y la Atmsfera
Siempre que uses el efecto atmsfera tendrs que asegurarte de que todos los objetos que deberan ser
rellenados con la atmsfera son declarados vacos mediante el identificador hollow.
Esto tambin se mantiene para los objetos infinitos como quadric, quartic, triangle, polygon, etc.
Donde quiera que uses uno de estos objetos deberas aadir el identificador hollow, siempre que no
ests absolutamente seguro de que no lo necesitas. Tambin debes asegurarte de que todos los objetos
dentro de los cuales se encuentra la cmara son declarados vacos.
Donde quiera que obtengas resultados inesperados deberas revisar los objetos slidos y declararlos
como vacos.