|
Toda superficie debe tener un color. En POV-Ray a este color se le llama
pigment
.
No es necesario que sea un solo color. Puede ser un patrón de colores, una lista
de colores, o incluso un mapa de imagen. Los pigmentos también pueden ser
superpuestos uno sobre otro siempre y cuando los pigmentos de las capas superiores
sean al menos parcialmente transparentes para que los que están por debajo puedan
ser visibles. Juguemos un poco con algunos de estos tipos de pigmentos.
Creemos un archivo llamado texdemo.pov
y editémoslo de la siguiente
manera:
#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 } }
Haciendo un trazado rápido de prueba de este archivo a 200x150 -A
,
vemos que es una simple esfera roja sobre un plano a cuadros verde y blanco.
Utilizaremos la esfera para ver nuestras texturas.
Antes de comenzar debemos notar que ya hemos realizado un tipo de pigmento,
el pigmento con lista de colores. En el ejemplo anterior hemos usado el patrón
a cuadros (checker) en nuestro plano. Hay otros tres tipos de pigmentos con lista de colores,
brick (ladrillos)
,
hexagon
y el
patrón object (objeto)
.
Probemos cada uno de ellos rápidamente. Primero, cambiamos el pigmento del plano
como sigue:
pigment { hexagon Green, White, Yellow }
Generando esto vemos un patrón hexagonal de tres colores. Note que este patrón requiere de tres colores. Ahora cambiamos el pigmento a...
pigment { brick Gray75, Red rotate -90*x scale .25 }
Mirando la imagen resultante vemos que el plano ahora tiene un patrón de
ladrillos. Vemos que tuvimos que rotar el patrón para que éste aparezca
correctamente sobre el plano horizontal. Este patrón es usado generalmente en
superficies verticales. También tuvimos que disminuir un poco su tamaño (scale .25
)
para poder verlo más claramente. Podemos jugar un poco con estos pigmentos con lista
de colores, cambiar los colores, etc. hasta conseguir un piso que nos guste.
Comencemos a texturizar nuestra esfera usando un patrón y un mapa de color que consista de tres colores. Reemplazamos el bloque del pigmento con lo siguiente:
pigment { gradient x color_map { [0.00 color Red] [0.33 color Blue] [0.66 color Yellow] [1.00 color Red] } }
Generando esto vemos que el patrón
gradient (gradiente)
da un patrón interesante de franjas verticales. Cambiamos la dirección del gradiente a y.
Las franjas ahora son horizontales. Cambiamos la dirección del gradiente a z.
Ahora las franjas se parecen mas a anillos concéntricos. Esto es así porque la
dirección del gradiente es tal que se aleja directamente de la cámara.
Volvemos a poner la dirección a x, y agregamos lo siguiente al bloque de 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 // <- Agregar esta línea }
Las barras verticales están ahora inclinadas a un ángulo de 45 grados.
Todos los patrones pueden ser rotados, escalados y trasladados de esta forma.
Probemos ahora algunos tipos distintos de patrones. Uno por vez, sustituimos los
siguientes identificadores en lugar de gradient x
y generamos la imagen
para observar el resultado:
bozo
,
marble (mármol)
,
agate
,
granite (granito)
,
leopard
,
spotted (manchas)
y
wood (madera)
(si queremos podemos probar todos los patrones listados en la sección "Patrones").
Al generar esto vemos que cada uno nos da un patrón ligeramente diferente. Pero para obtener resultados realmente buenos cada tipo de patrón requiere la utilización de algunos modificadores de patrones.
Veamos ahora algunos modificadores de patrón. Primero, cambiemos el tipo de patrón a bozo. Luego hacemos las siguientes modificaciones:
pigment { bozo frequency 3 // <- Agregar esta línea color_map { [0.00 color Red] [0.33 color Blue] [0.66 color Yellow] [1.00 color Red] } rotate -45*z }
El modificador frequency
(frecuencia) determina el número de veces
que el mapa de color se repite por cada unidad de tamaño. Este cambio hace que
el patrón bozo
, que vimos anteriormente, tenga muchas más bandas.
Ahora cambiemos el tipo de patrón a marble
(mármol).
Cuando generamos esto anteriormente, observamos un patrón con bandas similar a
gradient y
que no se parecía en nada a mármol. Esto sucede porque
marble es en realidad un tipo de gradiente y necesita otro modificador de patrón
para que sea más parecido a mármol. Este modificador se llama
turbulence (turbulencia)
.
Cambiemos la linea frequency 3
a turbulence 1
y
generemos nuevamente la imagen. ¡Eso está mejor! Probemos ahora con frequency 3
justo a continuación de la turbulencia y echémosle un vistazo. ¡Aun más interesante!
¡Espera, que se pone mejor! La turbulencia en sí misma tiene modificadores propios.
Podemos ajustar la turbulencia de varios modos. Primero, el número de coma flotante
que sucede al identificador turbulence
puede tomar cualquier valor,
con los valores más altos causando más turbulencia. Segundo, podemos usar los
identificadores omega
,
lambda
y
octaves (octavas)
para
variar los parámetros de la turbulencia.
Probemos esto:
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 }
Al generar esto observamos que la turbulencia ha cambiado y el patrón se ve diferente. Juguemos un poco con los valores de turbulence, lambda, omega y octaves para ver qué es lo que hacen.
Los pigmentos se describen por medio de valores numéricos que dan el valor
rgb del color a usar
(ej. color rgb<1,0,0>
nos da un color rojo).
Pero esta sintaxis permite más, no sólo valores rgb. Podemos especificar
una transparencia filtrada modificándolo de la siguiente manera: color
rgbf<1,0,0,1>
. La f
viene de filter (filtro)
,
la palabra que usa POV-Ray para identificar la transparencia filtrada.
Un valor de 1 significa que el color es completamente transparente, pero aun
filtra la luz de acuerdo a qué pigmento es. En este caso, el color es rojo
transparente, como celofán rojo.
POV-Ray tiene otro tipo más de transparencia. Se llama transmittance
o transparencia no-filtrada (el identificador es transmit
;
vea también rgbt
).
Se diferencia de filter
en que no filtra la luz de acuerdo al color
del pigmento. En cambio, permite que toda la luz pase sin ser modificada. Puede
especificarse de la siguiente manera: rgbt <1,0,0,1>
.
Usemos algunos pigmentos transparentes para crear otro tipo de textura, la textura superpuesta. Retomando el ejemplo anterior, declaramos la siguiente textura.
#declare AreaTierra = 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>] } } }
Esta textura se usará en el área de la tierra. Ahora creemos los océanos declarando lo siguiente.
#declare AreaOceanos = 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>] } } }
Nota: el océano es el área azul opaco y la tierra es el área transparente que permitirá que la textura de la capa inferior sea visible.
Ahora, declaremos una nueva textura para simular una atmósfera con nubes.
#declare AreaNubes = 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>] } } }
Ahora apliquemos todo esto a nuestra esfera.
sphere { <0,0,0>, 1 texture { AreaTierra } texture { AreaOceanos } texture { AreaNubes } }
Generamos esto y vemos una representación aceptable de un pequeño planetoide. Pero puede ser mejor. En particular, no nos convence la apariencia de las nubes. Hay un modo con el cual pueden ser mucho más realistas.
Los pigmentos pueden ser combinados de la misma manera en que los colores se
combinan en un mapa de colores, usando los mismos identificadores de patrón y
pigment_map
. Probémoslo.
Agregamos las siguientes declaraciones, asegurándonos que aparezcan antes que las otras declaraciones que tenemos en el archivo.
#declare Nubes1 = pigment { bozo turbulence 1 color_map { [0.0 color White filter 1] [0.5 color White] [1.0 color White filter 1] } } #declare Nubes2 = pigment { agate turbulence 1 color_map { [0.0 color White filter 1] [0.5 color White] [1.0 color White filter 1] } } #declare Nubes3 = pigment { marble turbulence 1 color_map { [0.0 color White filter 1] [0.5 color White] [1.0 color White filter 1] } } #declare Nubes4 = pigment { granite turbulence 1 color_map { [0.0 color White filter 1] [0.5 color White] [1.0 color White filter 1] } }
Ahora usamos estos pigmentos declarados en la capa de nubes de nuestro planetoide. Reemplazamos la capa de nube declarado con lo siguiente.
#declare AreaNubes = texture { pigment { gradient y pigment_map { [0.00 Nubes1] [0.25 Nubes2] [0.50 Nubes3] [0.75 Nubes4] [1.00 Nubes1] } } }
Al generar esto vemos un patrón interesante que se asemeja bastante a los patrones del clima en la Tierra. Están separadas en bandas, simulando los distintos tipos de clima a distintas latitudes.
|