6.7.11  Patrones

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:

6.7.11.1  Agate


El patrón 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...]
  }

6.7.11.2  Average (promedio)

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.

6.7.11.3  Boxed (cuadrado)

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.

6.7.11.4  Bozo

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").

6.7.11.5  Brick (Ladrillo)

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.

6.7.11.6  Bumps (bultos)

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").

6.7.11.7  Cells (Celdas)

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.

6.7.11.8  Checker (Tablero de Ajedrez)

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.

6.7.11.9  Patrones Crackle (cuarteados)

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.

6.7.11.10  Cylindrical (Cilíndrico)

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.

6.7.11.11  Density_File (Archivo de Densidad)

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.

6.7.11.12  Dents (dentelladas)

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.

6.7.11.13  Facets (facetas)

  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.

6.7.11.14  Patrones fractales

Patrones fractales soportados por POV-Ray:

Para los conjuntos Mandelbrot y Julia, los exponentes más altos serán más lentos de trazar, por dos motivos:

  1. Para los exponentes 2, 3 y 4 se usa un algoritmo optimizado. Los exponentes más altos que éstos, usan un algoritmo genérico para elevar un número complejo a un exponente entero, y éste es más lento que la versión optimizada.
  2. Cuanto más alto sea el exponente, más lento será el cálculo. Ello es debido a que el número de operaciones necesarias para elevar un número complejo a un exponente entero es directamente proporcional al orden de dicho exponente. Ello quiere decir que el exponente 10 será (muy) aproximadamente el doble de lento que el exponente 5.

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]
      }
    }
  }

6.7.11.15  Funciones como patrones

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...]
    }

6.7.11.15.1  ¿Qué puede usarse?

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...]
   }

6.7.11.16  Función como tipo de Imagen

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.

6.7.11.17  Gradient (gradiente)

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.

6.7.11.18  Granite (granito)

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").

6.7.11.19  Hexagon (hexágonos)

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...]
    }
The hexagon pattern
  El patrón hexagon

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.

6.7.11.20  Image Pattern (patrón de imagen)

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.

6.7.11.21  Leopard (leopardo)

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)

6.7.11.22  Marble (mármol)

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.

6.7.11.23  Patrón de objeto

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).

6.7.11.24  Onion (cebolla)

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.

6.7.11.25  Pigment Pattern (patrón de pigmento)

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.

6.7.11.26  Planar (plano)

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.

6.7.11.27  Quilted (acolchado)

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.

Quilted pattern with c0=0 and different values for c1
Patrón acolchado con c0=0 y diferentes valores de c1
Quilted pattern with c0=0.33 and different values for c1
Patrón acolchado con c0=0.33 y diferentes valores de c1
Quilted pattern with c0=0.67 and different values for c1
Patrón acolchado con c0=0.67 y diferentes valores de c1
Quilted pattern with c0=1 and different values for c1
Patrón acolchado con c0=1 y diferentes valores de c1

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

6.7.11.28  Radial

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.

6.7.11.29  Ripples (olas)

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.

6.7.11.30  Slope (inclinación o pendiente)

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:

6.7.11.31  Spherical (esférico)

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.

6.7.11.32  Spiral1 (espiral 1)

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.

6.7.11.33  Spiral2 (espiral 2)

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. 

El patrón usa la forma de onda triangular triangle_wave por defecto, pero puede usar cualquier otra.

6.7.11.34  Spotted (manchado)

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.

6.7.11.35  Waves (ondas)

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.

6.7.11.36  Wood (madera)

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.

6.7.11.37  Wrinkles (arrugas)

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").