|
POV-Ray usa un método llamado texturización sólida tridimensional para definir el color, bultos (bump) y otras propiedades de un objeto. Usted especifica la manera en que la textura varía sobre una superficie especificando un patrón. Los patrones se usan en pigmentos, normales y mapas de textura, así como también en la densidad del medio.
Todos los patrones en POV-Ray son tridimensionales. Por cada punto en el espacio, cada patrón tiene un valor único. Los patrones no se superponen en una superficie como lo hace un papel al envolverse sobre un objeto. Los patrones existen en 3D y los objetos son tallados en ellos como se talla un objeto sólido de un bloque de madera o piedra.
Considere un bloque de madera. Contiene bandas claras y oscuras que son cilindros concéntricos, siendo estos los anillos de crecimiento de la madera. En el corte del bloque usted ve estos círculos concéntricos. A lo largo de su longitud usted ve líneas que son venas. De todas formas el patrón existe en todas las partes del bloque entero. Si usted corta o esculpe la madera, se revela el patrón en el interior. Similarmente una cebolla consiste en esferas concéntricas que son visibles sólo cuando la corta. La piedra mármol consiste en capas onduladas de sedimentos coloreados que se endurecen en la roca.
Estos patrones sólidos pueden ser simulados usando funciones matemáticas. Otros patrones aleatorios como granito o bultos y abolladuras pueden ser generados usando un sistema de números aleatorios y funciones de ruido.
En cada caso, las coordenadas x, y, z de un punto en una superficie se usan para computar alguna función matemática que devuelve un valor flotante. Cuando se usa con mapas de colores o mapas de pigmentos, ese valor busca el color del pigmento que usará. En declaraciones normales la función patrón resulta en modificaciones o perturbaciones en el vector normal de la superficie para dar un apariencia de bultos. Empleado con un mapa de texturas, el resultado de la función determina que combinación de texturas enteras serán empleadas. Cuando se emplea con la densidad del medio, especifica la densidad de las partículas o gases.
Las siguiente secciones describen cada patrón. Vea las secciones "Pigmentos", "Normales" "Texturas estampadas" y "Densidad" para más detalles de cómo usar
patrones. A menos que se indique de otra manera, todos los patrones usan el tipo de onda ramp_wave
por defecto pero
pueden usar cualquier tipo de onda, y pueden usarse con color_map
,
pigment_map
, normal_map
, slope_map
,
texture_map
, density
, y density_map
.
Nota: Algunos patrones tienen un color_map incluido por defecto que no resulta en un patrón de escala de grises. Esto puede conducir a resultados inesperados cuando uno de estos patrones se usa sin un color_map especificado por el usuario, por ejemplo en funciones o medio.
Estos patrones son:
agate
bozo
brick
checker
mandel
hexagon
marble
radial
wood
agate
es un patrón de bandas similar al de mármol, pero usa una
función especial de turbulencia incorporada que es
diferente a la función de turbulencia tradicional. La turbulencia
tradicional también puede usarse, pero generalmente no es necesaria
porque la ágata ya es muy turbulenta. Usted puede controlar la cantidad
de turbulencia incorporada agregando la palabra clave opcional agate_turb
seguida de un valor flotante. Por ejemplo:
pigment { agate agate_turb 0.5 color_map {MyMap} }
El patrón agate
tiene un color_map incorporado por
defecto, que da como resultado un patrón marrón y blanco con
transiciones suaves.
Ágata usada en un normal:
normal { agate [Bump_Size] [MODIFIERS...] }
Técnicamente average
no es un tipo de patrón, pero es
tratado aquí porque su sintaxis es similar a otros patrones. Típicamente un tipo de
patrón especifica cómo los colores o normales son
seleccionados desde un pigment_map
, texture_map
,
density_map
, o normal_map
, sin embargo average
le dice a POV-Ray que promedie todos los patrones que usted
especifique. La función promedio fue originalmente diseñada para usarse
en una declaración de normal con un normal_map
, como método para especificar
más de un patrón normal en la misma superficie.
De todas maneras puede usarse en una declaración de un pigmento con un pigment_map
,
o en una declaración de textura con un texture_map
, o con
densidad del medio con un density_map
también para
promediar colores.
Cuando se usa con pigmentos, la sintaxis es:
AVERAGED_PIGMENT: pigment { pigment_map { PIGMENT_MAP_ENTRY... } } PIGMENT_MAP_ENTRY: [ [Peso] PIGMENT_BODY ]
Donde Peso
es un valor flotante opcional que
por defecto es 1.0 si no se especifica. Este valor de peso es el peso
relativo aplicado a ese pigmento. Cada PIGMENT_BODY es
cualquier cosa que pueda estar dentro de una declaración pigment{...}
.
La palabra clave pigment
y las llaves {}
no
necesitan especificarse.
Nota: los corchetes []
son parte real de PIGMENT_MAP_ENTRY. No son símbolos de notación de que signifiquen partes opcionales. Los corchetes van
alrededor de cada entrada en el pigment_map
.
Pueden haber de 2 a 256 entradas en el mapa.
Por ejemplo:
pigment { average pigment_map { [1.0 Pigment_1] [2.0 Pigment_2] [0.5 Pigment_3] } }
Los tres pigmentos se evalúan. Los valores de peso son multiplicados
por el color resultante, que es luego dividido por el total de los
pesos que, en este caso, es 3.5. Cuando se usa con texture_map
o density_map
funciona de la misma manera.
Cuando se usa con un normal_map
en una declaración de
una normal, se crean múltiples copias de la superficie normal original
y se perturban por cada patrón. Los normales perturbados son luego
pesados, agregados y normalizados.
Vea las secciones "Mapas de Pigmentos y Listas de Pigmentos", "Mapas de Normales y Listas de Normales", "Mapas de Texturas", y "Mapas de Densidad y Listas de Densidad" para mas información.
El patrón boxed
crea un cubo de 2x2x2 unidades
centrado en el origen. Es computado con la fórmula siguiente: value
=1.0- min(1, max(abs(X), abs(Y), abs(Z))). Empieza en 1.0 en el
origen y disminuye a un valor mínimo de 0.0 mientras se acerca a
cualquier plano que esté a una unidad del origen. Se mantiene en 0.0
para todas las áreas más allá de esa distancia. Este patrón fue
originalmente diseñado para usarlo con halo
o media
,
pero puede usarse en cualquier lugar donde se pueda usar un patrón.
El patrón bozo
es una función aleatoria de ruido muy
suave que se usa tradicionalmente con la turbulencia para crear nubes.
El patrón spotted
es idéntico a bozo
, pero
en versiones anteriores de POV-Ray "spotted" no permitía agregar
turbulencia. Ahora se puede agregar Turbulencia a cualquier patrón, así
que ahora éstos son redundantes, pero ambos se han retenido por
compatibilidad hacia atrás. El patrón bumps
también es idéntico a bozo
cuando se usa en cualquier lugar excepto
en una declaración de una normal
. Cuando es usado como un patrón normal, bumps
usa un
método ligeramente diferente
para perturbar la normal con una función de ruido similar.
La función de ruido bozo
tiene las siguientes
propiedades:
1. Es definida en espacios 3D ejemplo, toma "x", "y", y "z", y devuelve el valor de ruido.
2. Si dos puntos están muy separados, los valores de ruido en esos puntos son relativamente aleatorios.
3. Si dos puntos están muy cerca, los valores de ruido de esos puntos están cerca uno de otro.
Puede visualizar esto imaginando un gran cuarto y un termómetro con rangos desde 0.0 a 1.0. Cada punto en el cuarto tiene una temperatura. Los puntos que están muy separados tienen temperaturas relativamente aleatorias. Puntos muy cercanos tienen temperaturas cercanas. La temperatura cambia suavemente mientras nos movemos aleatoriamente a través de la habitación.
Ahora pongamos un objeto en el cuarto adelante de un artista. El artista mide la temperatura en cada punto del objeto y pinta ese punto con un color diferente dependiendo de la temperatura. ¿Qué obtenemos? ¡Una textura bozo de POV-Ray!
El patrón bozo
tiene un color_map por defecto
incorporado que resulta en un patrón verde, azul, rojo y blanco con
transiciones afiladas.
Nota: La apariencia de un patrón bozo
depende del noise_generator (generador de ruido) usado. El tipo por
defecto es 2. Esto puede cambiarse usando la palabra clave noise_generator
(Vea la sección "Modificador de Patrones/ Generador de ruido").
El patrón brick
genera un patrón de ladrillos. Los
ladrillos se desplazan la mitad de su longitud en filas alternas en el
eje x- y direccion z. Una capa de mortero rodea a cada
ladrillo. La sintaxis está dada por:
pigment { brick COLOR_1, COLOR_2 [brick_size <Size>] [mortar Size] }
donde COLOR_1 es el color del mortero y COLOR_2
es el color del ladrillo mismo. Si no se especifica ningún color,
se
usa por defecto un granate para el ladrillo y un gris para el mortero.
El
tamaño del ladrillo y el mortero juntos es de <8, 3, 4.5>
unidades.
El espesor por defecto del mortero de 0.5 unidades. Estos valores
pueden alterarse usando los modificadores de patrón opcionales brick_size
y mortar
. También puede usar una declaración de pigmentos
en
lugar de los colores. Por ejemplo:
pigment { brick pigment{Jade}, pigment{Black_Marble} }
Este ejemplo usa normales:
normal { brick 0.5 }
El valor flotante es el tamaño del mapa de bultos (bump) opcional. También puede usar declaraciones de normal completas. Por ejemplo:
normal { brick normal{bumps 0.2}, normal{granite 0.3} }
Cuando se usa con texturas, su sintaxis es la siguiente:
texture { brick texture{T_Gold_1A}, texture{Stone12} }
Éste es un patrón de bloque que no puede usar modificadores del tipo
de onda, color_map
, o slope_map
.
El patrón brick
tiene un color_map incluido por
defecto, que resulta en ladrillos rojos y mortero gris.
El patrón bumps
fue originalmente diseñado sólo para
ser usado como un patrón normal. Usa una funcion de ruido muy suave que
crea el efecto de colinas suaves cuando está a gran escala, o como una cáscara de naranja con bultos cuando
está a pequeña escala. Usualmente
los bultos están separados por una unidad.
Cuando se usa como patrón de normal, este patrón usa un funcion de
perturbación normal especial. Esto significa que el patrón no puede
usarse con normal_map
, slope_map
o
modificadores forma de onda en una declaración normal
.
Cuando se usa como un patrón pigmento o un patrón textura, el patrón bumps
es
idéntico a bozo
o spotted
,
y es similar a los bultos normales, pero no es idéntico (como la mayoría
de los de normales cuando son comparadas con los de pigmentos).
Nota: La apariencia de los patrones de
bultos depende del generador de ruido usado. El tipo por defecto es 2. Éste puede modificarse usando la palabra clave noise_generator
(Vea la seccion "Modificadores de Patrones / Generador de ruido").
El patrón cells
llena un espacio 3d con cubos de una
unidad. Cada cubo obtiene un valor aleatorio desde 0 a 1.
cells
no es muy adecuado como normal ya que no tiene
transiciones suaves de un valor gris a otro.
El patrón checker
produce un patrón ajedrezado (de
tablero de
ajedrez) alternando cuadrados de dos colores. La sintaxis es:
pigment { checker [COLOR_1 [, COLOR_2]] [PATTERN_MODIFIERS...] }
Si no se especifican colores, entonces se usan los colores por defecto azul y verde.
El patrón checker es en realidad una serie de cubos que tienen una unidad de tamaño. Imagínese un montón de cubos de 1 centímetro de lado, hechos de dos colores diferentes de arcilla modelada. Ahora imagínese ordenar los cubos en un patrón de tablero de ajedrez alternado y apilarlos en capa tras capa de forma que los colores se alternen en todas las direcciones. Eventualmente usted tendrá un cubo más grande. El patrón ajedrezado de cada lado es lo que el patrón checker de POV-Ray produce cuando es aplicado a un objeto box (caja o cubo). Finalmente imagínese cortar el cubo hasta que es tallado en una suave esfera o cualquier otra forma. Así es como se vería el patrón checker en un objeto de cualquier tipo.
También puede usar declaraciones de pigmentos en lugar de los colores. Por Ejemplo:
pigment { checker pigment{Jade}, pigment{Black_Marble} }
Este ejemplo usa normales:
normal { checker 0.5 }
El valor flotante es un mapa de bultos opcional. También puede usar declaraciones de normal completas. Por ejemplo:
normal { checker normal{gradient x scale .2}, normal{gradient y scale .2} }
Cuando se usa con texturas, la sintaxis es:
texture { checker texture{T_Wood_3A},texture{Stone12} }
El patrón checker
tiene un color_map incluido por
defecto que resulta en baldosas azules y verdes.
Este uso del checker como un patrón de textura reemplaza las baldosas especiales en versiones previas de POV-Ray. Aun
puede usarse tiles
, pero pueden ser retirado en versiones
futuras, así que mejor usar las texturas checker.
Éste es un patrón de bloque que no puede usar modificadores de la
forma de onda, color_map
, o slope_map
.
El patrón crackle
es un conjunto aleatorio de celdas
multifacetadas y embaldosadas.
Se puede seleccionar entre diferentes tipos:
Crackle Estándar
Matemáticamente, el crackle(p)=0 es un diagrama 3D de Voronoi de un
campo de puntos semi aleatorios, y crackle(p) < 0 es la distancia
desde el conjunto a lo largo del camino más corto (un diagrama de
Voronoi es el lugar geométrico de puntos equidistantes de los dos
vecinos más
cercanos de un conjunto de puntos sin conexión, como las membranas de
la
espuma de jabón son al centro de las burbujas).
A gran escala y sin turbulencia, sirve como una buena pared o piso de piedra. Con una escala más pequeña y sin turbulencia sirve como un buen vidrio craquelado. Usando mucha turbulencia sirve como un buen mármol que evita el problema de capas paralelas como el mármol tradicional.
Form (Forma)
pigment { crackle form <FORM_VECTOR> [PIGMENT_ITEMS ...] } normal { crackle [Bump_Size] form <FORM_VECTOR> [NORMAL_ITEMS ...] }
El craquelado form
determina la combinación lineal de
distancias usadas para
crear el patrón, y consta de un valor de vector.
El primer componente determina el múltiplo de la distancia del punto más cercano usado para determinar el valor del
patrón en un punto
en particular.
El segundo componente determina el coeficiente aplicado a la segunda
distancia más cercana.
El tercer componente corresponde a la tercera distancia más cercana.
La forma estándar es <-1,1,0> (también por defecto),
correspondiendo a la diferencia en distancia del punto más cercano con
el segundo más cercano en la matriz de celdas. Otra forma comúnmente
usada es <1,0,0>, correspondiente a la distancia al punto más
cercano, lo cual produce un patrón que se ve como una colección
aleatoria de esferas interconectadas o células.
Otras formas pueden crear efectos muy interesantes, pero es mejor
mantener la suma de los coeficientes baja.
Si el valor final computado es muy bajo o muy alto, el pigmento
resultante estará saturado con el color en el borde inferior o superior
del color_map
. En este caso, intente multiplicar el
vector forma por una constante.
Metric (Métrico)
pigment { crackle metric VALOR_METRICO [ITEMS_PIGMENTOS ...] } normal { crackle [Bump_Size] metric VALOR_METRICO [ITEMS_NORMALES ...] }
Cambiar el valor métrico cambia la función usada para determinar qué
celda central está más cerca, con la intencion de determinar qué
celda cae en un punto en particular. La función de distancia estándar
de Euclides tiene un valor métrico de 2. Cambiar el valor métrico
cambia los límites de las celdas. Un valor métrico de 3, por ejemplo,
causa que los límites se curven, mientras un valor métrico muy grande
reduce los límites a un conjunto muy pequeño de orientaciones posibles.
El valor métrico por defecto es 2, como el usado por la textura crackle estándar.
Otros valores métricos distintos de 1 o 2 pueden llevar a tiempos de
trazado mucho más largos, porque el método usado para
calcular estos valores métricos no es tan eficiente.
Offset (Desplazamiento)
pigment { crackle offset VALOR_OFFSET [PIGMENT_ITEMS ...] } normal { crackle [Bump_Size] offset VALOR_OFFSET [NORMAL_ITEMS ...] }
El craquelado offset
se usa para desplazar el patrón desde el espacio xyz
estándar a lo largo de una cuarta dimensión.
Puede usarse para redondear las partes "puntiagudas" de una textura
normal celular o de un campo de alturas procedural, haciendo que las
distancias no se conviertan en cero. También puede usarse para mover
los valores calculados a un rango específico, si el resultado está saturado al final del color_map. El
offset por defecto es cero.
Solid (Sólido)
pigment { crackle solid [PIGMENT_ITEMS ...] } normal { crackle [Bump_Size] solid [NORMAL_ITEMS ...] }
Causa que el mismo valor sea generado para cada punto dentro de una celda específica. Esto tiene aplicaciones prácticas para hacer fácilmente ventanas de vidrio de color o losas. No está previsto el mortero, pero puede recrearse agregando capas o un mapa de textura a una textura craquelada estándar con otra de craquelado sólido. El valor por defecto de este parámetro es apagado.
El patrón cylindrical
crea un cilindro de una unidad
de radio a lo largo del eje Y. Es calculado mediante la formula:
value =
1.0-min(1, sqrt(X^2 + Z^2)). Empieza en el origen con valor 1.0 y
decrece a
un valor mínimo de 0.0 mientras se aproxima a la distancia de una
unidad del eje Y. Se mantiene en 0.0 para todas las áreas más allá de
esa distancia. Este patrón fue originalmente creado para ser usado con halo
o media
pero puede usarse en cualquier lugar donde
pueda usarse un patrón.
El patrón density_file
es un patrón 3D de mapa de bits
que
ocupa un cubo de una unidad desde la posición <0,0,0> a
<1,1,1>. El archivo de datos es un archivo de formato binario
creado por POV-Ray llamado formato df3
. La sintaxis
provee la posibilidad de implementar otros formatos en el futuro. Este patrón fue originalmente creado para usarse con halo
o media
pero puede usarse en cualquier lugar donde pueda usarse un patrón. La sintaxis es:
pigment { density_file df3 "filename.df3" [interpolate Type] [PIGMENT_MODIFIERS...] }
donde "filename.df3"
es el nombre del archivo
de datos.
Como un patrón normal, la sintaxis es:
normal { density_file df3 "filename.df3" [, Bump_Size] [interpolate Type] [NORMAL_MODIFIERS...] }
El valor de coma flotante opcional Bump_Size
debería
seguir al nombre del archivo y cualquier otro modificador que vaya detrás de éste.
El formato de df3
consiste en una cabecera de 6 bytes
de tres enteros de 16 bits, con el byte de mayor orden primero. Estos
tres valores dan el tamaño x,y,z del dato en píxeles (o más
apropiadamente llamados voxels). A éstos les siguen los bytes
enteros sin signo x*y*z de datos. El dato en el rango de 0 a 255 se
escala a un valor flotante en el rango de 0.0 a 1.0. Se mantiene en
0.0 para todas las áreas más allá del cubo de una unidad. El patrón ocupa el cubo de una unidad independientemente de las dimensiones en
voxels.
La palabra clave interpolate
puede especificarse
para agregar interpolación de los datos. El valor por defecto 0
especifica sin interpolación. Un valor de 1 especifica interpolacion
tri-lineal.
Vea las escenas de ejemplo para el archivo de datos include\spiral.df3
,
y las escenas que usan los ejemplos: scenes\textures\patterns\densfile.pov
,
scenes\interior\media\galaxy.pov
.
El patrón dents
se diseñó originalmente para servir
como patrón de normal. Es especialmente interesante cuando se usa con
texturas metálicas, al dar la impresión de que la superficie tiene dentelladas como si alguien hubiera golpeado la superficie con un
martillo. Normalmente las dentelladas están distanciadas por 1 unidad.
Cuando se usa como patrón de normal, este patrón usa una función
especializada de perturbación de la normal. Ello significa que no puede
usarse con normal_map
, slope_map
o con
modificadores de la forma de onda en una sentencia normal
.
Cuando se usa como un patrón de pigmento o textura, el patrón dents
es similar a su versión normal, pero no es idéntica, como pasa con
otros patrones de normal cuando se usan con pigmentos.
normal { facets [coords SCALE_VALUE | size FACTOR] [NORMAL_ITEMS...] }
El patrón facets
está diseñado para usarse como patrón de normal y no es apropiado para su uso como pigmento: de hecho causará
un error.
Hay dos formas básicas del patrón de facetas. Una es más apropiada para superficies redondeadas, mientras que la otra es mejor para superficies planas.
Si se especifica el modificador coords
, el patrón crea
las facetas de un tamaño del mismo orden que el valor SCALE_VALUE
especificado. Esta versión del patrón facetado es más apropiada para
uso con superficies planas, aunque también funciona con superficies
curvadas. Los límites de las facetas coinciden con los bordes de las
celdas del patrón craquelado estándar, y de hecho puede resultar muy
similar a un patrón craquelado sólido.
Si se especifica el parámetro size
, la textura
facetada usa una función diferente que crea facetas sólo en superficies
curvadas. El FACTOR determina cuántas facetas se crearán, siendo los
valores pequeños los que más facetas crean, y no está relacionado con ningún factor del mundo real. El mismo factor creará las mismas facetas
en una esfera de cualquier tamaño.
Este patrón crea las facetas adaptando los vectores de normal al más cercano de una tabla perturbada de vectores normales. Por ello, si una superficie posee vectores normales que no varían a lo largo de uno o más ejes, no existirán bordes de faceta a lo largo de dichos ejes.
Patrones fractales soportados por POV-Ray:
z(n+1) = z(n)^p + c
, donde p
es el exponente correspondiente).Para los conjuntos Mandelbrot y Julia, los exponentes más altos serán más lentos de trazar, por dos motivos:
Sintaxis:
MANDELBROT: mandel ITERATIONS [, BUMP_SIZE] [exponent EXPONENT] [exterior EXTERIOR_TYPE, FACTOR] [interior INTERIOR_TYPE, FACTOR] JULIA: julia COMPLEX, ITERATIONS [, BUMP_SIZE] [exponent EXPONENT] [exterior EXTERIOR_TYPE, FACTOR] [interior INTERIOR_TYPE, FACTOR] MAGNET MANDEL: magnet MAGNET_TYPE mandel ITERATIONS [, BUMP_SIZE] [exterior EXTERIOR_TYPE, FACTOR] [interior INTERIOR_TYPE, FACTOR] MAGNET JULIA: magnet MAGNET_TYPE julia COMPLEX, ITERATIONS [, BUMP_SIZE] [exterior EXTERIOR_TYPE, FACTOR] [interior INTERIOR_TYPE, FACTOR]
Donde:
ITERATIONS
es el número de veces que se aplica el
algoritmo.
COMPLEX
es un vector 2D que describe un número complejo.
MAGNET_TYPE
es el tipo de fractal magnet a usar: 1 ó 2.
exponent
es un entero entre 2 y 33. Si no se
especifica, el valor por defecto es 2.
interior
y exterior
especifican los
algoritmos especiales de coloración. Puedes especificar uno de ellos o
ambos al tiempo. Sólo funcionan con patrones fractales.
EXTERIOR_TYPE
y INTERIOR_TYPE
son valores
enteros entre 0 y 6 (inclusive). Si no se especifican, el valor por
defecto es de 0 para INTERIOR_TYPE y de 1 para EXTERIOR_TYPE.
FACTOR
es un valor de coma flotante. El valor de
retorno del patrón se multiplica por este valor antes de devolverlo.
Puede usarse para escalar el rango de valores del patrón cuando se usa
la coloración interior y exterior (ello es a menudo necesario para
conseguir el efecto deseado). El valor por defecto de FACTOR es 1.
Los diferentes valores de EXTERIOR_TYPE y INTERIOR_TYPE tienen el siguiente significado:
Ejemplo:
box { <-2, -2, 0>, <2, 2, 0.1> pigment { julia <0.353, 0.288>, 30 interior 1, 1 color_map { [0 rgb 0] [0.2 rgb x] [0.4 rgb x+y] [1 rgb 1] [1 rgb 0] } } }
Puedes usar funciones como patrones con el bloque function { }
.
pigment { function { USER_DEFINED_FUNCTIONS } [PIGMENT_MODIFIERS...] }
Al declarar una función, ésta toma por defecto 3 parámetros (x,y,z)
que no tienes que especificarlos explícitamente. Sin embargo, al usar
el identificador, hay que especificar los parámetros:
#declare Foo = function { x + y + z} pigment { function { Foo(x, y, z) } [PIGMENT_MODIFIERS...] }
Por otro lado, si necesitas un número distinto de parámetros al declarar una función, debes especificar explícitamente los nombres de los parámetros:
#declare Foo = function(x,y,z,t) { x + y + z + t} pigment { function { Foo(x, y, z, 4) } [PIGMENT_MODIFIERS...] }
Veamos un ejemplo de uso de una función en una sentencia de normal de superficie:
#declare Foo = function { x + y + z} normal { function { Foo(x, y, z) } [Bump_Size] [MODIFIERS...] }
Puede usarse cualquier expresión de coma flotante y operadores
legales de POV-Ray (véase la sección "Funciones definidas por el usuario").
De especial interés resulta la opción pattern
, que hace
posible usar patrones como funciones:
#declare FOO = function { pattern { checker } }
También pueden usarse funciones definidas por el usuario (como ecuaciones).
Como los pigmentos pueden declarase como funciones, también pueden usarse en éstas. Deben declararse antes. Cuando se usa un identificador, debe especificarse qué componente del color hay que usar. Para ello, debes usar la notación de punto, por ejemplo: funcion(x,y,z).red extrae el componente rojo.
#declare FOO = function {pigment { checker } } pigment { function { FOO(x,y,z).green } [PIGMENT_MODIFIERS...] }
POV-Ray posee gran cantidad de funciones predefinidas. Éstas representan en su mayoría a superficies algebraicas, pero también hay una función de malla y otra de ruido 3D. Mira la sección "Funciones Internas" para conocer la lista completa y algunas explicaciones de los parámetros que usan. Estas funciones internas pueden incluirse mediante el archivo de inclusión functions.inc.
#include "functions.inc" #declare FOO = function {pigment { checker } } pigment { function { FOO(x,y,z).green & f_noise3d(x*2, y*3,z)} [PIGMENT_MODIFIERS...] }
Sintaxis:
function Width, Height { FUNCTION_BODY }
Éste no es un patrón real, pero lo detallamos aquí por conveniencia. Esta palabra reservada define un nuevo tipo "interno" de imagen de mapa de bits. Los píxeles de la imagen se derivan del cuerpo de la funcion (FUNCTION_BODY), siendo éste una función regular, una función de patrón o una función de pigmento. En el caso de ser una función de pigmento, se obtiene una imagen en color, mientras que en el caso de una función regular o de patrón se obtiene una imagen en escala de grises. Todas las variantes de funciones de pigmento de escala de grises están disponibles también cuando se usa la sintaxis de función regular. En cualquier caso, la imagen tendrá 16 bits por componente.
Nota: las funciones se evalúan en el plano x-y, de forma diferente al patrón de imagen, para hacer más sencillo el uso de funciones uv.
La altura (Height) y anchura (Width) especifican la resolución de la
imagen de mapa de bits "interna" resultante. La imagen se toma de la
zona cuadrada definida por los puntos <0,0,0>,
<1,1,0>.
La sentencia function
puede usarse allí donde puedan
usarse otros tipos de imagen como tga
o png
.
Algunos de los usos incluyen el crear campos de alturas a partir de
texturas procedurales, o envolver un corte de una textura 3D o función
alrededor de un cilindro, o extrusionarlo a lo largo de un eje.
Ejemplos:
plane { y, -1 pigment { image_map { function 10,10 { pigment { checker 1,0 scale .5 } } } rotate x*90 } }
height_field { function 200,200 { pattern { bozo } } translate -0.5 scale 10 pigment {rgb 1} }
Nota: observa que para campos de
alturas, y en otras situaciones donde no se necesita el color, es más
facil usar function n,n {pattern{...}}
que function
n,n {pigment{...}}
.
Las funciones de patrón devuelven un escalar, no un vector de color, así que es un
patrón de escala de grises.
Uno de los patrones más simples es gradient
.
Se especifica de la siguiente forma:
pigment { gradient <Orientation> [PIGMENT_MODIFIERS...] }
donde <Orientation>
es un vector que
apunta en la dirección en que deben mezclarse los colores. Por ejemplo:
pigment { gradient x } // las bandas de color varían tal como nos movemos a lo largo del eje x
produce una serie de bandas suaves de color que parecen como capas
de color unas junto a otras. Los puntos en x=0 tienen el primer color
del mapa de colores. Al incrementar x el color cambia suavemente hasta
el último color en x=1. Entonces empieza otra vez con el primero y lo
cambia gradualmente hacia el último color en x=2. En versiones
anteriores de POV-Ray el patrón se invertía para los valores negativos
de x, pero en la version 3.5, éste ya no es el caso[1]. Si usamos el patrón de gradiente con los vectores y o z
(gradient y
o gradient
z
), los colores se mezclarán a lo largo de los ejes y o z
respectivamente. Puede usarse cualquier vector, pero es más normal
utilizar los identificadores predefinidos x
, y
o z
.
Como patrón de normal, genera una onda de apariencia acanalada. Su sintaxis es la siguiente:
normal { gradient <Orientation> [, Bump_Size] [NORMAL_MODIFIERS...] }
donde el vector <Orientation>
es un parámetro requerido, pero el valor de coma flotante asociado Bump_Size
es opcional.
Nota: la coma es obligatoria, especialmente si Bump_Size es negativo.
[1] Si sólo se utilizaba el rango de -1 a 1 con el antiguo
gradiente, por ejemplo en una sky_sphere
, puede ser
reemplazado por los patrones planar
o marble
e invertir el mapa de colores. También deberás
rotar el patrón para obtener otras orientaciones distintas de y
.
Una solución más general consiste en usar la función function{abs(x)}
como un patrón, en lugar de gradient x
, por ejemplo.
El patrón granite
usa una función simple de ruido
fractal, de tipo 1/f, para crear un buen patrón de granito. Este patrón se usa en stones.inc
con mapas de colores creativos para
crear fantásticas texturas de piedras usando varias capas.
Cuando se usa como patrón de normal, crea una superficie con muchos bultos, que parece una pista de gravilla o piedra basta.
Nota: La apariencia del patrón de
granito depende del tipo de generador de ruido utilizado. El valor por
defecto es 2, pero puede cambiarse usando la palabra reservada noise_generator
(Véase la sección "Modificadores de patrones / Generador de ruido").
El patrón hexagon
es un patrón de bloque que genera un patrón
hexagonal en el plano x-z. Imagínate unas columnas altas de sección hexagonal y paralelas al eje y, agrupadas en conjuntos como se
ilustra en la imagen de ejemplo. Hay que especificar tres colores de la
siguiente forma:
pigment { hexagon [COLOR_1 [, COLOR_2 [, COLOR_3]]] [PATTERN_MODIFIERS...] }
Los tres colores repetirán el patrón hexagonal, con el hexágono de COLOR_1 centrado en el origen, el hexágono de COLOR_2 en la dirección +z y el de COLOR_3 a cada lado. Cada lado del hexágono es de una unidad. Las columnas hexagonales de cada color se extienden infinitamente en el eje y. Si no se especifican colores, los valores por defecto son azul, verde y rojo.
También puedes usar pigmentos en lugar de colores. Por ejemplo:
pigment { hexagon pigment { Jade }, pigment { White_Marble }, pigment { Black_Marble } }
En este ejemplo se usa como normal:
normal { hexagon 0.5 }
El valor de coma flotante opcional denota la profundidad de la normal. También puedes usar normales completos, por ejemplo:
normal { hexagon normal { gradient x scale .2 }, normal { gradient y scale .2 }, normal { bumps scale .2 } }
Cuando se usa con texturas, su sintaxis es la siguiente:
texture { hexagon texture { T_Gold_3A }, texture { T_Wood_3A }, texture { Stone12 } }
Este patrón es de bloque, por lo que no puede usarse con tipos de
forma de onda, ni con modificadores
color_map
, o slope_map
.
En lugar de aplicar el color de la imagen en el objeto, como en el
caso del image_map
, el patrón image_pattern
especifica una textura completa basándose en el valor de gris en ese
punto. Este valor de gris se comprueba con una lista y el ítem
correspondiente se usa para la textura en ese punto particular. Para
valores que caen entre los ítems de la lista se calcula la textura
intermedia.
El patrón toma una especificación estándar de imagen y tiene una opción, use_alpha
, que funciona de forma similar a use_color
o use_index
.
Sintaxis:
PIGMENT: pigment { IMAGE_PATTERN color_map { COLOR_MAP_BODY } | colour_map { COLOR_MAP_BODY } | pigment_map { PIGMENT_MAP_BODY } } NORMAL: normal { IMAGE_PATTERN [Bump_Size] normal_map { NORMAL_MAP_BODY } } TEXTURE: texture { IMAGE_PATTERN texture_map { TEXTURE_MAP_BODY } } IMAGE_PATTERN image_pattern { BITMAP_TYPE "bitmap.ext" [IMAGE_MAP_MODS...] } IMAGE_MAP_MOD: map_type Type | once | interpolate Type | use_alpha ITEM_MAP_BODY: ITEM_MAP_IDENTIFIER | ITEM_MAP_ENTRY... ITEM_MAP_ENTRY: [ GRAY_VALUE ITEM_MAP_ENTRY... ]
También es útil para crear texturas de máscara, como la siguiente:
texture { image_pattern { tga "image.tga" use_alpha } texture_map { [0 Mytex ] [1 pigment { transmit 1 } ] } }
Nota: Este patrón usa una imagen de la que obtiene los valores de gris. Si quieres hacer un uso similar de los valores de gris de cualquier pigmento, puedes usar el patrón pigment_pattern.
Leopard crea un patrón geométrico regular de manchas circulares. La fórmula usada es la siguiente:
value = Sqr((sin(x)+sin(y)+sin(z))/3)
El patrón marble
es muy parecido al patrón gradient
x
. El patrón de gradiente usa una forma de onda ramp_wave
por defecto, lo cual significa que usa los colores del mapa de color
desde 0.0 a 1.0 en la posición x=1, pero salta de nuevo al primer color
para x>1 y repite el patrón una y otra vez. Sin embargo, el patrón marble
usa la forma de onda triangle_wave
, de forma que usa el
mapa de color de 0 a 1, pero entonces lo invierte y va desde 1 a 0. Por
ejemplo:
pigment { gradient x color_map { [0.0 color Yellow] [1.0 color Cyan] } }
Aquí el patrón cambia suavemente de amarillo a cian, y entonces
vuelve a cambiar abruptamente a amarillo para repetirse de nuevo. Sin
embargo, reemplazando gradient x
por
marble
hacemos que cambie suavemente de amarillo a cian desde
0.0 a 0.5 y de nuevo suavemente de cian a amarillo en x=1.0.
Versiones anteriores de POV-Ray no permitían cambiar la forma de
onda. Ahora que se pueden cambiar en casi cualquier patrón, la distinción entre marble
y gradient x
radica
sólo en la forma de onda por defecto.
Cuando se usa con turbulencia y un mapa de color apropiado, este patrón puede simular las venas de color en el mármol de verdad, jade u otros tipos de piedra. Por defecto el mármol no tiene turbulencia.
El patrón marble
tiene un mapa de color por defecto
que resulta en un patrón rojo negro y blanco con transiciones tanto
bruscas como suaves.
El patrón object
toma un objeto como entrada. Genera
un patrón de lista de colores de sólo dos colores. El que un
punto sea asignado a uno u otro ítem depende de si el punto está dentro
o fuera del objeto especificado.
Los objetos usados con el patrón object
no pueden
tener textura y deben ser sólidos (las mismas limitaciones que bounded_by
y clipped_by
).
Sintaxis:
object { OBJECT_IDENTIFIER | OBJECT {} LIST_ITEM_A, LIST_ITEM_B }
Donde OBJ_IDENTIFIER es el objeto a usar que debe haber sido declarado, aunque se puede usar la sintaxis completa de objeto. LIST_ITEM_A y LIST_ITEM_B son los colores, pigmentos o cualquier cosa que el patrón esté controlando. LIST_ITEM_A se usa para los puntos fuera del objeto, mientras que LIST_ITEM_B se usa para los puntos en su interior.
Ejemplo:
pigment { object { myTextObject color White color Red } turbulence 0.15 }
Nota: Éste es un patrón de bloque que no se puede usar con los tipos de forma de onda, mapas de color o mapas de inclinación (slope_map).
El patrón onion
consiste en una serie de esferas concéntricas como las capas de una cebolla. La
fórmula usada es:
Value = mod(sqrt(Sqr(X)+Sqr(Y)+Sqr(Z)), 1.0). Cada capa es de una
unidad de ancho.
Usa cualquier pigmento como un patrón. En lugar de usar un patrón directamente, el
patrón de pigmento convierte primero el pigmento usado
a escala de grises. Para cada punto, el valor de gris se compara con la
lista para escoger el ítem correspondiente. Para los valores entre los ítems listados, se calcula la media de las texturas adyacentes.
Los ítems de textura pueden ser colores, pigmentos, normales o
texturas, y se especifican en un color_map, pigment_map, normal_map o
texture_map.
Toma como entrada una especificación de pigmento estándar.
Sintaxis:
PIGMENT: pigment { pigment_pattern { PIGMENT_BODY } color_map { COLOR_MAP_BODY } | colour_map { COLOR_MAP_BODY } | pigment_map { PIGMENT_MAP_BODY } } NORMAL: normal { pigment_pattern { PIGMENT_BODY } [Bump_Size] normal_map { NORMAL_MAP_BODY } } TEXTURE: texture { pigment_pattern { PIGMENT_BODY } texture_map { TEXTURE_MAP_BODY } } ITEM_MAP_BODY: ITEM_MAP_IDENTIFIER | ITEM_MAP_ENTRY... ITEM_MAP_ENTRY: [ GRAY_VALUE ITEM_MAP_ENTRY... ]
Este patrón es también útil cuando los patrones padre e hijo necesitan transformaciones independientes. Las transformaciones sobre el patrón de pigmento no afectarán a las texturas hijas. Cuando necesites transformar alguna de las texturas hijas, aplica la transformación a la entrada específica (MAP_ENTRY).
Esto se puede utilizar con cualquier pigmento, desde un simple ajedrezado hasta pigmentos anidados complejos. Por ejemplo:
pigment { pigment_pattern { checker White, Black scale 2 turbulence .5 } pigment_map { [ 0, checker Red, Green scale .5 ] [ 1, checker Blue, Yellow scale .2 ] } }
Nota: Este patrón usa un pigmento para obtener los valores de gris. Si lo que quieres es obtener un patrón de una imagen, deberías usar el patrón de imagen image_pattern.
El patrón planar
crea una banda horizontal una unidad
por arriba o por debajo del plano X-Z. Se calcula mediante la fórmula:
valor =1.0- min(1, abs(Y)). Empieza en 1.0 en el origen y decrece
al valor mínimo de 0.0 tal y como los valores de Y se acercan a una
distancia de 1 unidad del plano X-Z. Permanece con valor 0.0 para
cualquier área más allá de esta distancia. Este patrón se diseñó
originalmente para su uso con halo
o media
, pero puede usarse en cualquier sitio donde
pueda usarse un patrón.
EL patrón quilted
se diseñó originalmente para usarse
como patrón de normal. El patrón acolchado se llama así porque puede
crear un patrón que semeja un acolchado o enlosado. Los cuadrados son
realmente cubos 3D de una unidad de tamaño.
Cuando se usa como patrón de normal, este patrón utiliza una función
especializada de perturbación de la normal. Ello significa que no puede
usarse con normal_map
, slope_map
o con
modificadores de la forma de onda en una sentencia normal
.
Cuando se usa como patrón de pigmento o de textura, el patrón acolchado es similar su versión para normales, pero no es idéntica como sucede con otros patrones.
Los dos parámetros control0
y control1
se usan para ajustar la curvatura de re-usado para
ajustar la curvatura de las hendiduras del acolchado.
La sintaxis es la siguiente:
pigment { quilted [QUILTED_MODIFIERS...] } QUILTED_MODIFIERS: control0 Value_0 | control1 Value_1 | PIGMENT_MODIFIERS
Los valores deberían mantenerse por lo general en el rango entre 0.0 y 1.0. El valor por defecto es 1.0 si no se especifica. Puedes imaginar esta curva como una pendiente.
Esta pendiente recta puede curvarse mediante el ajuste de los dos parámetros de control, que ajustan la pendiente de las partes superior e inferior de la curva. Un valor de 0 para ambos extremos resultará en una pendiente lineal, dando un borde duro. Un valor de 1 para ambos extremos dará una curva con forma de "s", resultando en un borde más suave y redondeado.
La sintaxis cuando se usa como normal es la siguiente:
normal { quilted [Bump_Size] [QUILTED_MODIFIERS...] } QUILTED_MODIFIERS: control0 Value_0 | control1 Value_1 | PIGMENT_MODIFIERS
El patrón radial
es una mezcla radial que se aplica
alrededor del eje +y. El color para el valor 0.0 empieza en la dirección +x y envuelve el
mapa de color alrededor, de este a oeste, con
0.25 en la dirección -z, 0.5 en -x, 0.75 en +z y de nuevo 1.0 en +x.
Normalmente se usa este patrón con el modificador frequency
para crear múltiples bandas que radian desde el eje y. Por ejemplo:
pigment { radial color_map{[0.5 Black][0.5 White]} frequency 10 }
crea 10 bandas blancas y 10 bandas negras saliendo radialmente desde el eje y.
El patrón radial tiene una mapa de color por defecto que resulta en un patrón con transiciones suaves de amarillo, magenta y cian.
El patrón ripples
se diseñó originalmente para su uso sólo como
patrón de normal. Hace que la superficie parezca como olas en
el agua. Las olas irradian desde 10 localizaciones aleatorias dentro
del área cúbica de una unidad que va desde <0,0,0> a
<1,1,1>. Puedes escalar el patrón para hacer que los centros estén más cerca o lejos entre
sí.
Normalmente las olas que parten del mismo centro están separadas
entre sí por 1 unidad. El modificador de frecuencia
frequency
puede usarse para cambiar el espaciado entre olas,
mientras que la fase (phase
) puede utilizarse para mover
las olas en una animación.
El número de centros de las olas puede cambiarse mediante el uso
del parámetro global global_settings{number_of_waves Count}
en
cualquier parte, aunque afecta a toda la escena. No puedes cambiar el número de centros de olas para
patrones individuales. Véase la sección
sobre el parámetro global
"Number_Of_Waves" para más detalles.
Cuando se usa como patrón de normal, este patrón usa una función
especializada de perturbación de la normal. Ello significa que no puede
usarse con normal_map
, slope_map
o con
modificadores de la forma de onda en una sentencia normal
.
Cuando se usa como patrón de pigmento o de textura, el patrón de olas es similar su versión para normales, pero no es idéntica como sucede con otros patrones.
El patrón slope
usa la normal de la superficie para
calcular la pendiente en un punto dado, creando un valor de patrón dependiente de la
inclinación y, opcionalmente, de la altitud. Puede
usarse con pigmentos, normales o texturas, pero no con densidad del
medio. Su sintaxis para pigmentos es la siguiente:
pigment { slope { <Direction> [, Lo_slope, Hi_slope ] [ altitude <Altitude> [, Lo_alt, Hi_alt ]] } [PIGMENT_MODIFIERS...] }
El valor de la pendiente en un punto dado depende del ángulo entre
el vector de dirección <Direction>
y la normal de
la superficie en ese punto. Por ejemplo:
- Cuando la normal de la superficie apunta en la dirección opuesta al
vector de dirección (180 grados), la pendiente es 0.0.
- Cuando la normal de la superficie es perpendicular al vector de dirección (90 grados), la pendiente es 0.5.
- Cuando la normal de la superficie es paralela al vector de dirección
(0 grados), la pendiente es 1.0.
Cuando se usa la variante simple de la sintaxis:
slope { <Direction> }
el valor del patrón en un punto dado es el valor mismo de la
pendiente. <Direction>
es un vector de 3 dimensiones y normalmente será <0,-1,0>
para los terrenos, pero puede usarse cualquier dirección.
Especificando los parámetros Lo_slope
y Hi_slope
puedes tener un mayor nivel de control:
slope { <Direction>, Lo_slope, Hi_slope }
Lo_slope
y Hi_slope
especifican el rango
de inclinaciones que se usarán, de forma que puedes precisar la
correspondencia entre los valores de pendiente y los valores que
devuelve el patrón. Lo_slope
corresponde al valor de la
pendiente que devuelve 0.0 y Hi_slope
al que devuelve 1.0.
Por ejemplo, si tienes un height_field y <Direction>
es <0,-1,0>
, los valores de pendiente sólo irán
desde 0.0 a 0.5, ya que los campos de alturas no pueden tener
salientes. Si no especificas Lo_slope
y Hi_slope
,
debes tener en cuenta al diseñar el mapa, que la textura para las zonas
horizontales debe ajustarse a 0.0, y la textura para las partes
verticales a 0.5. La parte desde 0.5 a 1.0 no se usará. Pero si
estableces Lo_slope
y Hi_slope
a 0.0 y 0.5
respectivamente, el rango de la pendiente se estirará para ocupar todo
el mapa, y el mapa puede entonces definirse desde 0.0 a 1.0.
Añadiendo el vector opcional <Altitude>
:
slope { <Direction> altitude <Altitude> }
el patrón se verá influenciado no sólo por la pendiente, sino también por un gradiente especial. El vector <Altitude>
tiene 3 dimensiones que especifican la dirección de este gradiente.
Cuando se especifica, el valor del patrón se promedia entre la
pendiente y el valor del gradiente. Los pesos de cada valor son las
longitudes de los respectivos vectores <Direction>
y <Altitude>
. Así, si <Direction>
es mucho
más largo que <Altitude>
,
la pendiente tendrá mayor efecto sobre los resultados que el gradiente,
y viceversa.
Cuando se usa el vector <Altitude>
, el gradiente
por defecto se define desde 0 a 1 sobre el eje especificado. Esto está
bien cuando tu objeto está dentro de este rango, pero necesitarás
corregirlo si éste no es el caso. Puedes hacerlo con los parámetros
opcionales Lo_alt
y Hi_alt
:
slope { <Direction> altitude <Altitude>, Lo_alt, Hi_alt }
Éstos definen el rango del gradiente a lo largo del eje definido por
el vector <Altitude>
.
Por ejemplo, si tenemos el vector de altitud y, con un objeto que va
desde -3 a 2 en el eje y, los parámetros Lo_alt
y Hi_alt
deberían ajustarse a -3 y 2
respectivamente.
Nota:
Lo_alt
y Hi_alt
para abarcar mejor toda la extensión de tu objeto.El patrón spherical
crea una esfera de una unidad de
radio, con su centro en el origen. Se calcula mediante la fórmula:
valor =
1.0-min(1, sqrt(X^2 + Y^2 + Z^2)).
Empieza con 1.0 en el origen y decrece al valor mínimo de 0.0 tal
como se acerca a 1 unidad de distancia del origen en cualquier dirección. Permanece con un valor de 0.0 para todas las
áreas más allá
de esta distancia. Este patrón fue diseñado originalmente para su uso
con halo
o media
, pero puede usarse en
cualquier sitio donde pueda usarse un patrón.
El patrón spiral1
crea una espiral que se extiende a
partir del eje z de manera similar a un tornillo. Cuando se visualiza
un corte en el plano x-y, aparece como los brazos de una galaxia
espiral. Su sintaxis es la siguiente:
pigment { spiral1 Number_of_Arms [PIGMENT_MODIFIERS...] }
El valor Number_of_Arms
determina el número
de brazos de la espiral alrededor del eje z.
Como patrón de normal, su sintaxis es la siguiente:
normal { spiral1 Number_of_Arms [, Bump_Size] [NORMAL_MODIFIERS...] }
donde Number_of_Arms
es un parámetro requerido, aunque
el tamaño del bulto Bump_Size
es
opcional.
Nota: la coma es necesaria, especialmente si Bump_Size es negativo.
Este patrón utiliza la forma de onda triangular triangle_wave
por defecto, pero puede usar cualquier otra forma de onda.
El patrón spiral2
crea una espiral doble que gira
alrededor del eje z de forma similar a spiral1
,
excepto consiste en dos espirales superpuestas que giran en direcciones
opuestas. El resultado se parece al trenzado de un cesto o tal vez al
dibujo de la corteza de una piña. Su sintaxis es la siguiente:
pigment { spiral2 Number_of_Arms [PIGMENT_MODIFIERS...] }
El valor Number_of_Arms
determina el número
de brazos de la espiral. Cuando se usa como patrón de normal tiene la
siguiente sintaxis:
normal { spiral2 Number_of_Arms [, Bump_Size] [NORMAL_MODIFIERS...] }
donde Number_of_Arms
es un valor requerido, aunque el
tamaño del bulto Bump_Size
es opcional.
Nota: la coma es necesaria, especialmente si Bump_Size es negativo.
triangle_wave
por defecto, pero puede usar cualquier otra.El patrón spotted
es idéntico al patrón bozo
.
En versiones anteriores de POV-Ray, este patrón no permitía el uso de
turbulencia, pero ahora que sí se permite, no hay realmente diferencia
entre ambos patrones. Véase la sección sobre bozo
para
conocer más detalles.
El patrón waves
fue diseñado originalmente para uso
exclusivo en patrones de normal. Hace que la superficie aparezca como
si fueran ondas en el agua. Es muy similar al patrón ripples
,
salvo que es más redondeado y ancho. El efecto deseado es que parezcan más como olas de mar. Las ondas irradian desde 10 localizaciones
aleatorias dentro de un cubo unitario que va desde <0,0,0> a
<1,1,1>. Necesitarás escalar el patrón para hacer que los centros
se acerquen o alejen entre sí.
Normalmente las ondas de cualquier centro dado están separadas por
una distancia de 1 unidad. El modificador frequency
puede
usarse para cambiar el espaciado entre ondas, mientras que el
modificador de fase phase
puede usarse para animar el movimiento de las ondas.
El número de centros de ondas puede cambiarse con el parámetro global
global_settings { number_of_waves Count }
en cualquier parte de la escena, aunque afectará a toda la escena.
No puedes cambiar el número de centro de ondas de un patrón individual. Véase la
sección correspondiente a "Number_Of_Waves" para conocer más
detalles.
Cuando se usa como patrón de normal, este patrón usa una función
especializada de perturbación de la normal. Ello significa que no puede
utilizarse con normal_map
, slope_map
o
modificadores de la forma de onda en una sentencia normal
.
Cuando se usa como patrón de pigmento o textura, es similar a su versión de normal, pero no idéntica como sucede con otros patrones.
El patrón de madera wood
consiste en cilindros concéntricos centrados en el eje z. Cuando se usan los colores
apropiados, estas bandas se parecen a los anillos de crecimiento y
venas de la madera real. Un pequeño porcentaje de turbulencia puede
añadirse para que parezca más realista. Por defecto, este patrón no
tiene turbulencia.
Al contrario que muchos de los patrones, éste utiliza la forma de
onda triangular
triangle_wave
por defecto. Ello significa que, como el patrón de mármol, utiliza los valores del mapa de colores desde 0.0 a 1.0 y luego
se repite de forma inversa desde 1.0 a 0.0. Sin embargo, puedes
cambiarla a cualquier otra forma de onda.
El patrón wood
tiene una mapa de color por defecto que
resulta en un patrón con transiciones rápidas entre marrón claro y
oscuro.
El patrón wrinkles
fue diseñado originalmente para
usarse sólo como patrón de normal. Usa un patrón de ruido 1/f similar
al usado por el patrón de granito, aunque con características que lo
hacen aparecer más nítido o definido. Este patrón puede usarse para
simular papel arrugado o una pared de estuco.
Cuando se usa como patrón de normal, usa una funcion especializada
de perturbación de la normal, por lo que no puede usarse con
normal_map
, slope_map
o con modificadores de la
forma de onda en una sentencia normal
.
Cuando se usa como un patrón de pigmento o textura, es similar a su versión de normal, pero no idéntica como sucede con otros patrones.
Nota: La apariencia del patrón de
arrugas depende del generador de ruido que se esté utilizando. El valor
por defecto es 2, pero puede cambiarse usando la sentencia noise_generator
(véase la sección "Modificadores de patrones / Generador de ruido").
|