|
El color o patrón de colores de un objeto se define mediante una
instrucción pigment
(pigmento). Todas las texturas planas
deben tener un pigmento. Si no se especifica uno, se usa el definido
por defecto. El color que se define en este elemento de la textura, es
el que se vería si el objeto apareciera totalmente iluminado. Se escoge
el color básico propio del objeto, y POV-Ray lo intensifica o lo
oscurece dependiendo de la iluminación de la escena. El nombre de
pigmento procede del hecho de que define el color básico del objeto, no
el color del que aparece.
La sintaxis de un pigmento es:
PIGMENTO: pigment { [IDENTIFICADOR_DE_PIGMENTO] [TIPO_DE_PIGMENTO] [MODIFICADOR_DE_PIGMENTO...] } TIPO_DE_PIGMENTO: TIPO_DE_PATRON | COLOR | image_map { TIPO_DE_BITMAP "bitmap.ext" [MODIFICADORES_DE_BITMAP...] } MODIFICADOR_DE_PIGMENTO: MODIFICADOR_DE_PATRON | LISTA_DE_COLORES | LISTA_DE_PIGMENTOS | color_map { CUERPO_DE_MAPA_DE_COLORES } | colour_map { CUERPO_DE_MAPA_DE_COLORES } | pigment_map { CUERPO_DE_MAPA_DE_PIGMENTOS } | quick_color COLOR | quick_colour COLOR
Cada uno de los elementos del pigmento es opcional, pero, si está
presente, debería estar en el orden mostrado. Los elementos que siguen a
un IDENTIFICADOR_DE_PIGMENTO modifican o substituyen las
especificaciones que se dan en el identificador. Si no se especifica un
identificador, entonces los elementos modifican los valores de pigmento
que se dan en la textura por defecto actual. El TIPO_DE_PIGMENTO
debe caer en una de cuatro categorías. Cada una de ellas se detalla en
las secciones que siguen. Dichas categorías son: color sólido y patrón
de mapa de imagen, que son específicas del apartado pigment,
o patrón de lista de colores y patrón de mapa de color, que usan una
amplia selección de los patrones generales de POV-Ray. Véase "Patrones" para detalles sobre
patrones específicos.
Al tipo de patrón sigue opcionalmente uno o más modificadores de
pigmento. Adicionalmente, a los modificadores de patrones generales,
como las transformaciones, turbulencia y el modificador remolino (warp),
los pigmentos pueden tener LISTA_DE_COLORES, LISTA_DE_PIGMENTOS,
color_map
, pigment_map
,
y quick_color
que son específicos de los pigmentos. Véase "Modificadores de patrón" para
informarse sobre los modificadores generales. Los modificadores
específicos de los pigmentos se describen también en las secciones
siguientes. Estos modificadores de pigmento se aplican sólo a los
pigmentos, y no a otras partes de las texturas. Serán detallados más
adelante.
El grupo pigmento es una parte de la especificación "texture
".
Sin embargo, dado que puede ser tedioso añadir un grupo texture
sólo para añadir color a un objeto, se puede incorporar directamente un
pigmento a un objeto sin especificar que es parte de una textura. Por
ejemplo, en lugar de:
object { Mi_Objeto texture {pigment { color Red } } }
puede abreviar:
object { Mi_Objeto pigment {color Red } }
Si se hace así, internamente se crea una estructura texture
completa con un grupo normal
y finish
por
defecto, como si se hubiese especificado explícitamente escribiendo texture
{...}
alrededor.
Los identificadores de pigmento pueden declararse, para hacer los archivos de escena más legibles y para parametrizar escenas, de forma que cambiando tan sólo una sencilla declaración se cambien automáticamente muchos valores. Un identificador se declara como sigue:
DECLARACION_DE_PIGMENTO: #declare IDENTIFICADOR = PIGMENTO | #local IDENTIFICADOR = PIGMENTO
Donde IDENTIFICADOR es el nombre del identificador de hasta
40 caracteres de longitud y PIGMENTO es cualquier grupo pigment
válido. Véase "#declare vs. #local"
para información sobre ámbitos de los identificadores.
El tipo más sencillo de pigmento es un color sólido. Para especificar un color sólido simplemente se sitúa una especificación de color dentro de un grupo de pigmento. Por ejemplo:
pigment { color Orange }
Una especificación de color consiste en la palabra opcional color
seguida de un identificador de color o por una especificación de la
cantidad de rojo, verde, azul, filtro o transparencia no filtrada en
superficie. Véase la sección "Especificando
Colores" para más detalles sobre los colores. Cualquier modificador
de patrón que se use con un color sólido es ignorado, ya que no hay
patrón que modificar.
Hay cuatro patrones con lista de colores: checker
, hexagon
,
brick
y object
. El resultado es un patrón de colores sólidos
con transiciones bruscas en lugar de la mezcla de colores
característica de los patrones de mapa de colores. Cada uno de estos
patrones es tratado con más detalle en una sección posterior. Su
sintaxis es:
PIGMENTO_DE_LIST_DE_COLORES: pigment {brick [COLOR_1, [COLOR_2]] [PIGMENT_MODIFIERS...] }| pigment {checker [COLOR_1, [COLOR_2]] [PIGMENT_MODIFIERS...]}| pigment { hexagon [COLOR_1, [COLOR_2, [COLOR_3]]] [PIGMENT_MODIFIERS...] }| pigment {object IDENTIFICADOR_DE_OBJETO | OBJECTO {} [COLOR_1, COLOR_2]}
Cada COLOR_n es una especificación válida de color. Puede
haber una coma entre cada color o se puede usar la palabra color
como separador de forma que POV-Ray pueda determinar dónde empieza y
termina cada una de las especificaciones. Los patrones brick
y checker
llevan dos colores y hexagon
usa
tres. Si hay un número de colores insuficiente, se usan los colores por
defecto.
Muchos de los patrones de colores no usan
cambios de color abruptos, o sólo dos o tres colores, como pasa con los
patrones de ladrillos, el ajedrezado o el hexagonal. Habitualmente, los
patrones usan transiciones suaves de un color al siguiente. Los colores
de definen en un modificador de pigmento de tipo color_map
que describe como el patrón varía de un color al siguiente.
Cada uno de los patrones disponibles es de hecho un función matemática que toma cualquier punto (x, y, z) y lo convierte en un valor entre 0.0 y 1.0 inclusive. Este número se usa para especificar cómo se mezclan los colores del mapa.
La sintaxis de color_map
es la siguiente:
MAPA_DE_COLORES: color_map { CUERPO_DE_MAPA_DE_COLORES } | colour_map { CUERPO_DE_MAPA_DE_COLORES } CUERPO_DE_MAPA_DE_COLORES: IDENTIFICADOR_DE_MAPA_DE_COLORES | ELEMENTO_DE_MAPA_DE_COLORES... ELEMENTO_DE_MAPA_DE_COLORES: [ Valor COLOR ] | [ Valor_1, Valor_2 color COLOR_1 color COLOR_2 ]
Donde los valores Valor_n
son números de coma
flotante entre 0.0 y 1.0 inclusive y cada COLOR_n, es una
especificación de color.
Nota: Los corchetes []
son
parte del ELEMENTO_DE_MAPA_DE_COLORES. No son símbolos de la
notación descriptiva que denoten partes opcionales. Los corchetes
rodean cada elemento de un mapa de colores.
Pueden haber de 2 a 256 elementos en el mapa. Puede usarse la forma
alternativa colour_map
.
Veamos un ejemplo:
sphere { <0,1,2>, 2 pigment { gradient x // Éste es el TIPO_DE_PATRÓN color_map { [0.1 color Red] [0.3 color Yellow] [0.6 color Blue] [0.6 color Green] [0.8 color Cyan] } } }
La función de patrón gradient x
se evalúa y el
resultado es un valor entre 0.0 y 1.0. Si el valor es menor que el
primer elemento (en este caso 0.1) entonces se usa el primer color
(rojo). Valores entre 0.1 y 0.3 usan una mezcla de rojo y amarillo
mediante una interpolación lineal de los dos colores. Análogamente, los
valores entre 0.3 y 0.6 van del amarillo al azul.
El tercer y cuarto elemento tienen ambos un valor de 0.6. Esto causa un cambio abrupto de color del azul al verde. Específicamente, un valor inferior a 0.6 estará muy próximo al azul, pero un valor de 0.6 será verde. Siguiendo adelante, los valores entre 0.6 y 0.8 consistirán en una transición entre verde y cyan. Finalmente, cualquier valor mayor de 0.8 será cyan.
Si se quieren áreas de color liso, simplemente se ha de especificar el mismo color en dos elementos adyacentes. Por ejemplo:
color_map { [0.1 color Red] [0.3 color Yellow] [0.6 color Yellow] [0.8 color Green] }
En este caso, cualquier valor de 0.3 a 0.6 será de color amarillo puro.
La primera versión sintáctica de ELEMENTO_DE_MAPA_DE_COLOR con un número en coma flotante y un color es el estándar en la actualidad. La otra versión de doble valor numérico es obsoleta y debería evitarse. Usando esa antigua sintaxis, el primer ejemplo se convertiría en:
color_map { [0.0 0.1 color Red color Red] [0.1 0.3 color Red color Yellow] [0.3 0.6 color Yellow color Yellow] [0.6.0.8 color Yellow color Green] [0.8 1.0 color Green color Green] }
Se puede usar color_map
con cualquier patrón, excepto brick
,
checker
, hexagon
, object
e image_map
. Es posible declarar y usar identificadores
para un mapa de colores. Por ejemplo:
#declare Colores_del_Arco_Iris= color_map { [0.0 color Magenta] [0.33 color Yellow] [0.67 color Cyan] [1.0 color Magenta] } object { Mi_Objeto pigment { gradient x color_map { Colores_del_Arco_Iris } } }
Además de especificar transiciones entre
colores con un mapa de colores, se puede crear una mezcla de pigmentos
usando pigment_map
. La sintaxis de un mapa de pigmentos
es idéntica a la del mapa de colores, excepto que se especifica un
pigmento en cada elemento del mapa, en lugar de un color.
Su sintaxis es:
MAPA_DE_PIGMENTO: pigment_map { CUERPO_DE_MAPA_DE_PIGMENTO } CUERPO_DE_MAPA_DE_PIGMENTO: IDENTIFICADOR_DE_MAPA_DE_PIGMENTO | ELEMENTO_DE_MAPA_DE_PIGMENTO... ELEMENTO_DE_MAPA_DE_PIGMENTO: [ Valor CUERPO_DE_PIGMENTO ]
Donde Valor
es un número en coma flotante
entre 0.0 y 1.0 incluidos y cada CUERPO_DE_PIGMENTO es
cualquier cosa que pueda encontrarse dentro de una instrucción pigment{...}
.
La palabra pigment
y la llaves {}
no
necesitan especificarse.
Nota: Los corchetes []
son
parte del ELEMENTO_DE_MAPA_DE_PIGMENTO. No se trata de
símbolos de notación que denoten que una parte es opcional. Los
corchetes rodean cada elemento del mapa de pigmento.
Pueden haber entre 2 y 256 elementos en un mapa de pigmento.
Por ejemplo
sphere { <0,1,2>, 2 pigment { gradient x // éste es el TIPO_DE_PATRÓN pigment_map { [0.3 wood scale 0.2] [0.3 Jade] // esto es un identificador de pigmento [0.6 Jade] [0.9 marble turbulence 1] } } }
Cuando la función gradient x
devuelve valores entre 0.0
y 0.3, se usa el pigmento escalado de tipo madera. De 0.3 a 0.6, se usa
el pigmento de identificador Jade. De 0.6 a 0.9 se usa una mezcla entre
Jade y mármol turbulento. De 0.9 en adelante sólo se usa este último.
Los mapas de pigmento pueden ser anidados hasta cualquier nivel de
complejidad que se desee. Los pigmentos de uno de estas construcciones
pueden tener en su composición mapas de color, o mapas de pigmento o
cualquier otro tipo de pigmento que se desee. Un elemento de un mapa de
pigmento puede ser un color sólido, pero si todos lo son tal vez sería
más conveniente usar color_map
para acelerar los cálculos.
También se pueden usar pigmentos completos con los patrones de
bloque como checker
, hexagon
y brick
.
Por ejemplo...
pigment { checker pigment { Jade scale .8 } pigment { White_Marble scale .5 } }
Nota: en el caso de los patrones de
bloque es necesario usar la palabra pigment
y las llaves
alrededor de la información del pigmento.
Un mapa de pigmentos se usa también con el tipo de pigmento average
.
Véase "Promedio" (average
)
para más
detalles.
No se debe usar pigment_map
o pigmentos individuales
con image_map
. Véase la sección "Mapas de Textura" para una
forma alternativa a ese uso.
Se pueden declarar y usar identificadores de mapas de pigmento, pero la única forma de declarar un patrón de bloques de pigmento es usar un identificador de pigmento para todo el pigmento.
Cuando todo lo demás falla y ninguno de
los tipos de patrón de pigmentos detallados hasta ahora cubre las
necesidades, se puede usar image_map
para extender una
imagen de mapa de bits bidimensional sobre un objeto tridimensional.
La sintaxis de image_map
es:
MAPA_DE_IMAGEN: pigment { image_map { [TIPO_DE_BITMAP] "bitmap[.ext]" [MODIFICADORES_DE_MAPA_DE_IMAGEN...] } [MODFICADORES_DE_PIGMENTO...] } TIPO_DE_BITMAP: gif | tga | iff | ppm | pgm | png | jpeg | tiff | sys MODIFICADORES_DE_MAPA_DE_IMAGEN : map_type Type | once | interpolate Type | filter Palette, Amount | filter all Amount | transmit Palette, Amount | transmit all Amount
Tras el opcional TIPO_DE_BITMAP, se sitúa una cadena de caracteres con el nombre del archivo que contiene la imagen de mapa de bits del tipo especificado. Si no se proporciona TIPO_DE_BITMAP, se espera el mismo tipo que se fije para almacenamiento del resultado.
Ejemplo:
plane { -z,0 pigment { image_map {png "Eggs.png"} } } plane { -z,0 pigment { image_map {"Eggs"} } }
El segundo método buscará y usará el archivo "Eggs.png" si el
fichero de destino se fija a png
(Output_File_Type=N en el
fichero INI o +FN en la línea de comandos). Esto es particularmente
útil cuando la imagen utilizada ha sido generada también por POV-Ray.
A esta especificación pueden seguirla varios modificadores opcionales, que se describen más adelante.
Nota: versiones más antiguas de POV-Ray permitían algunos modificadores antes del TIPO_DE_BITMAP, pero esta sintaxis está desfasada en favor de la que aquí se detalla.
Nota: el formato sys
es un
formato que depende del sistema operativo, como el BMP en Windows o Pict
en Macintosh.
Los nombres de archivos especificados en las instrucciones image_map
se buscarán primero en el directorio actual y, si no se encuentran, en
las carpetas especificadas en cada una de las opciones +L
o Library_Path
activas. Esto facilita el almacenamiento de
los archivos de imagen en un subdirectorio específico y usar una opción Library_Path
para especificar dónde está la biblioteca de imágenes. Véase "Directorios de las Librerías"
para más detalles.
Por defecto, la imagen se sitúa en el plano x-y. La imagen se proyecta sobre el objeto, como si hubiese un proyector de diapositivas situado en el extremo negativo del eje z. La imagen llena exactamente un área cuadrada de coordenadas (0,0) a (1,1) independientemente del tamaño original en píxeles de la imagen. Si se desea alterar esto, se puede trasladar, rotar o escalar el pigmento o la textura para situarla en el lugar adecuado de la superficie del objeto.
En la sección "Ajedrezado",
se explica el patrón checker
. Las casillas se describen
como cubos sólidos de una substancia coloreada de la cual se recortan
los objetos. Para los mapas de imagen se debe imaginar que cada píxel
es un larga y delgada varilla, de sección cuadrada, coloreada, que se
extiende paralela al eje z. La construcción está hecha de filas y
columnas de estas varillas pegadas, y el objeto está esculpido en este
material.
Si se desea cambiar la orientación por defecto, se puede rotar, trasladar o escalar el pigmento o la textura para situarla en el lugar adecuado del objeto.
El nombre de archivo va seguido opcionalmente por uno o más MODIFICADORES_DE_BITMAP.
Los modificadores filter
, filter all
, transmit
,
y transmit all
son específico de los mapas de imagen y se
comentan en las siguientes secciones. Además, también pueden usarse
aquí los modificadores más generales map_type
, once
e interpolate
, descritos en "Modificadores de Mapa de
Bits".
Para hacer la imagen o una parte de ella
transparente, se pueden especificar valores para filter
y/o transmit
para cada color o valor de la paleta de una
imagen PNG, GIF o IFF (por lo menos para los modos que usan paleta). Se
puede hacer mediante el añadido de la palabra filter
o transmit
después del nombre de archivo. Esta palabra irá seguida de dos números.
El primero nos indica el número de la paleta al que hacemos referencia,
y el segundo el valor de transparencia que aplicamos. Los valores
pueden ir separados por una coma. Por ejemplo:
image_map { gif "mypic.gif" filter 0, 0.5 // Hace el color 0 50% transparente filtrado filter 5, 1.0 // Hace el color 5 100% transparente filtrado transmit 8, 0.3 // Hace el color 8 30% transparente sin filtrado }
Se puede dotar a toda la imagen de un valor de filter
o transmit
usando filter all
Cantidad
o transmit
all
Cantidad
. Por ejemplo:
image_map { gif "stnglass.gif" filter all 0.9 }
Nota: anteriores
versiones de POV-Ray usaban la palabra alpha
para
especificar transparencia con filtro, sin embargo esa palabra se usa
habitualmente para especificar transparencia no filtrada. Por esta razón alpha
no será usada en lo sucesivo.
Véase la sección "Especificando Colores" para ver detalles de las diferencias entre transparencia filtrada y no filtrada.
Otra forma de especificar transparencia no filtrada en un mapa de imagen consiste en usar el canal alfa. POV-Ray usará automáticamente el canal alfa almacenado en la imagen para transparencia no filtrada. El formato PNG permite almacenar un valor diferente para cada índice de color de la imagen, si así se desea. Si utiliza un programa de edición de imágenes que permite utilizar esta característica, puede utilizarlo en lugar de especificar valores desde el archivo POV. Puesto que los archivos PNG y TGA también pueden almacenar un canal alfa completo de la imagen, con información sobre la transparencia, también es posible generar mapas de imagen cuya transparencia no depende del color, si no de la posición de cada píxel en la imagen.
Mientras que POV-Ray usa transmit 0.0
para especificar
opacidad y 1.0
para la transparencia completa, la
información del canal alfa tiene un rango de 0 a 255 en la dirección
contraria. Un dato Alfa 0 significa lo mismo que transmit 1.0
y el dato alfa 255 produce un transmit 0.0
.
Cuando desarrollamos escenas de POV-Ray, a
veces es útil generarlas en modo de baja calidad para probarlas
rápidamente. La opción +Q
de la línea de comandos o la
opción Quality
del archivo INI se pueden usar para
eliminar algunos patrones que consumen mucho tiempo de cálculo y
conseguir que la generación de la escena concluya en muy poco tiempo.
Véase "Ajustes de Calidad"
para más detalles. De todas formas, ajustes del tipo +Q5
o Quality=5
o inferior desactivan los cálculos complejos de pigmentación y crean
objetos grises.
Añadiendo quick_color
a un pigmento, se le dice al
POV-Ray qué color sólido debe usar para generaciones rápidas, en lugar
de un pigmento complejo. Por ejemplo:
pigment { gradient x color_map{ [0.0 color Yellow] [0.3 color Cyan] [0.6 color Magenta] [1.0 color Cyan] } turbulence 0.5 lambda 1.5 omega 0.75 octaves 8 quick_color Neon_Pink }
Esto obliga a POV-Ray a usar el color Neon_Pink
para
pruebas a calidad +Q5
o inferior, y un patrón gradiente con
turbulencia para calidades +Q6
y superiores. Colores
sólidos como
pigment {color Magenta}
fijan automáticamente quick_color
a ese valor. Se puede
ajustar esto si se desea. Imaginemos que tenemos 10 esferas amarillas
en la pantalla. Si se desea identificarlas individualmente, se le puede
dar a cada una un quick_color
diferente a cada una como:
sphere { <1,2,3>,4 pigment { color Yellow quick_color Red } } sphere { <-1,-2,-3>,4 pigment { color Yellow quick_color Blue } }
y así, con calidad +Q6
o superior todas se verán
amarillas, pero a +Q5
o inferior sus colores serán
diferentes, con lo que serán fáciles de identificar.
También se admite la escritura quick_colour
para esta
expresión.
|