Tutorial de Spline Macro

Author: Copyright © 2000, Chris Colefax
Created: 16 January 2000
Macro File Updated: 27 February 2000
Traducción al castellano: Txemi Jendrix inspiriens

Antes de que empieces

Para renderizar los archivos de ejemplo de esta guía didáctica con POV-Ray necesitarás bajarte e instalar el archivo de Spline Macro. El paquete Zip (11 Kb) incluye la documentación de la Referencia Rápida, y el archivo de macro, spline.mcr que debe copiarse a uno de los directorios existentes en la lista de rutas de biblioteca de POV-Ray (por ejemplo C:\Archivos de programa\POV-Ray para Windows 3.1\Include).

1. Diseñando y previsualizando Splines

1.1 introducción

Si has usado los objetos prism y lathe en POV-Ray debes tener una comprensión bastante buena de cómo trabajan las splines. El Spline Macro permite extender esta idea de una forma curvada en el completo espacio 3D de POV-Ray, para que puedas diseñar caminos que tuercen y se vuelven y hacen bucles sobre sí mismos de la manera que desees. Entonces, puedes utilizar estos caminos para animar objetos o crear objetos basados en la forma del camino de la spline.

Específicamente, el Spline Macro permite crear splines con interpolado cúbico. "Cúbico" significa simplemente que la matemática del spline utiliza funciones cúbicas- "Interpolado" significa que la curva atraviesa cada uno de los puntos que le decimos, por lo que sabemos exactamente el camino por el que viajará. El Spline Macro permite realmente crear estas splines cúbicas interpoladas de cuatro maneras diferentes, y da opciones extras para controlar bien la forma del camino de la spline.

1.2 nuestra primera spline

Para empezar, creamos un camino de spline simple y mira el resultado: Imagen 1.2

camera {location <0, 0, -4> look_at <0, 0, 0>}
light_source {<100, 200, -300> rgb 1}
background {rgb 0.5}

#include "spline.mcr"

#declare MySpline = create_spline (
   array[4] {x, y, -x, -y},
   create_default_spline)

preview_spline (MySpline, default_options)

Después de definir las bases de nuestra escena (la cámara, luces, y fondo) lo primero es incluir el Spline Macro. Esto nos da acceso a las funciones del macro, como el archivo include textures.inc nos da acceso a las texturas predefinidas de POV-Ray. Fíjate que sólo necesitamos incluir una vez al principio el Spline Macro en nuestra escena, aun cuando creemos muchos caminos de spline diferentes.

Para definir nuestro camino de spline realmente debemos declararlo usando la función create_spline () de la macro. Esto es igual a declarar cualquier otro objeto o valor en POV-Ray, y las mismas reglas se aplican para nombrar a nuestro identificador de la spline. También, porque create_spline es una función de macro utilizamos paréntesis () en lugar de los corchetes usuales {}.

La función create_spline nos exige que especifiquemos primero una lista de puntos que deseamos interpolar. Hacemos esto usando la característica de array de POV-Ray, especificando el número de puntos como se muestra. Esta lista de puntos continúa con una lista de opciones que deseamos usar al crear nuestro camino de spline; para empezar, sólo queremos crear la spline por defecto, así que esta es la opción que especificamos

Finalmente, habiendo creado nuestro camino del spline podemos ver rapidamente su forma de antemano usando la función preview_spline (). De nuevo usamos paréntesis dentro del que especificamos el identificador de la curva que queremos ver, seguido por las opciones que queremos usar (las opciones predefinidas, en este caso).

Cuando rendericemos esta escena veremos que el camino del spline es una curva lisa que atraviesa cada uno de los cuatro puntos que especificamos (mostrados en amarillo). También fijate que el color de la spline cambia de rojo en el primer punto a blanco en el último: esto nos permite saber en qué dirección viaja el spline.

1.3 Opciones básicas de Spline

Ahora que hemos creado un spline no es demasiado difícil ver cómo podríamos cambiar su forma agregando los puntos extras que queremos que el spline atraviese. Pero mirando nuestra primera spline también podemos ver que hay muchas curvas posibles que podríamos dibujar a través de nuestros puntos, no sólo la creada anteriormente. Así, además de alterar los puntos de la spline también podemos cambiar la forma de nuestra spline usando varias opciones. La más simple es la opción spline_loop que hace que la spline vuelva a su inicio. Para usar esta opción, lo agregamos a nuestra lista de la opciones de create_spline () así: Imagen 1.3a

#declare MySpline = create_spline (
   array[4] {x, y, -x, -y},
   create_default_spline + spline_loop (yes)
   )

Es importante darse cuenta de que usamos el símbolo de sumar (+) entre las opciones, en lugar de comas o espacios. También, porque estamos usando funciones de macro rodeamos nuestro valor de la opción con paréntesis (). Renderizando la spline anterior vemos que la curva hace un búcle cerrado.

Otra opción que podemos usar es el valor de tensión de spline, eso cambia el valor de tensión por defecto de cero, podemos ver cómo la curva se aprieta: Imagen 1.3b

create_default_spline + spline_loop (yes) + spline_tension (0.5)

y si lo reducimos menos del cero, podemos ver cómo la spline se suelta:Imagen 1.3c

create_default_spline + spline_loop (yes) + spline_tension (-1)

Los valores buenos generalmente van de -1 a 1 (qué realmente aprieta el spline tanto que las curvas se vuelven líneas rectas entre cada punto). También podemos usar valores fuera de este rango para crear algunas bellas y extrañas curvas splines.... Inténtalo y verás.

1.4 más Opciones de Spline

La próxima opción que podemos probar es el valor de bias de la spline: como la tensión de la spline éste es normalmente el cero, lo que significa que el spline se curva igual en cualquier lateral de cada punto en la spline. Si aumentamos este valor podemos ver cómo hace el camino de la spline más encorvado en un lado de cada punto que en el otro:Imagen 1.4a

spline_loop (yes) + spline_tension (-1) + spline_bias (1)

Usando un valor de -1 se invertiría el efecto. De nuevo, pueden usarse valores fuera del rango -1 a 1 para curvas más excéntricas.

La tercera opción que podemos utilizar para ajustar la forma de la spline es el valor de continuidad de spline. Mirando las splines anteriores podemos ver cómo el camino siempre viaja suavemente a través de cada punto - no hay ninguna esquina recta. El valor de continuidad nos permite cambiar esto, usando los valores de otra manera que el valor por defecto de cero, por ejemplo:Imagen 1.4b

spline_loop (yes) + spline_continuity (2)

o: Imagen 1.4c

spline_loop (yes) + spline_continuity (-2)

Antes vimos cómo incrementando la tensión de la spline a 1 nos permitió crear un camino de spline de línea recta. También podemos lograr esto dejando la tensión a 0 y aumentando la continuidad a 1. Los resultados de ambas parecen el mismo, pero son realmente bastante diferentes y en general se debe usar este segundo método (cambiando la continuidad) para crear splines lineales (por las razones que veremos después...).

Ahora podemos ver hay un número infinito de posibles curvas que pueden atravesar un juego dado de puntos, y usando los valores de tensión, continuidad y bias en diferentes combinaciones nos permite crear muchos de ellas. Un truco que podemos usar cuando diseñamos splines es la opción de atajo spline_TCB: esto nos permite especificar los tres valores entre paréntesis, p.ej: Imagen 1.4d

spline_loop (yes) + spline_TCB (2, 2, 2)

o: Imagen 1.4e

spline_loop (yes) + spline_TCB (3, -1, -1)

o: Imagen 1.4f

spline_loop (yes) + spline_TCB (4, -3, 0)

1.5 Tipos de Spline

Para la mentes técnicas, usando los valores de tensión, continuidad y bias se crean lo que se conoce como una spline de TCB, o spline de Kochanek-Bartels (aquéllos que fueron sus pioneros) - este tipo de spline es bastante común en el software 3D de modelado profesional . Usando simplemente el valor de tensión para ajustar la spline crea una spline cardinal, y dejando las opciones de TCB a sus valores por defecto de cero crea subconjuntos de la primera, y todos los tipos diferentes son de hecho splines cúbicas interpoladas.

Hay otra spline cúbica común que probablemente conoces: la spline de Bezier. Este tipo de spline se usa en muchos programas de diseño 2D así como en los bicubic patch de POV-Ray y otros objetos spline, y se caracteriza por el uso de manejadores de control en cada punto. Estos manejadores establecen la curvatura de la spline, y puede ajustarse para las esquinas rectas, las curvas firmes o sueltas, etc. Para crear splines de bezier con el Spline Macro, especificas una lista de puntos dónde cada tercer punto realmente se interpola (p.ej unido). Los dos puntos entre cada punto unido establecen los extremos de los manejadores de control utlizados para dar forma al camino de la spline, p.ej.,:Image 1.5a

#declare MyBezierSpline = create_spline (
   array [7] {<-2, 0, 0>, <-2, 1, 0>, <-1, -1, 0>, <0, 0, 0>, <1, -1, 0>, <2, 1, 0>, <2, 0, 0>}
create_bezier_spline)

preview_spline (MyBezierSpline, spline_accuracy (2) + show_spline_hull (yes) + show_spline_tangents (yes))

Te habrás fijado que hemos usado algunas nuevas opciones en la función preview_spline (), mejorando la exactitud del camino de la spline, y haciendo visible la cáscara (las conexiones entre los puntos de la spline) y las tangentes (la dirección en que el camino de la spline viaja antes y después de que alcanza cada punto de control, p.ej., los manejadores de la curva Bezier). Otras opciones para previsualizar las splines se relacionan en el archivo de referencia de la Spline Macro.

Los splines de Bezier tienen la ventaja sobre las splines de TCB de permitirte poner la curvatura del spline directamente para cada sección, para que puedas crear algunas esquinas rectas y otras suaves, y generalmente tiene más control sobre la forma de la spline.

Otra forma en que puedes controlar la curvatura del spline a cada punto es a las tangentes (p.ej.,. la velocidad en que la spline viaja). Esto te permite crear las curvas suaves pero manteniendo el control directo de la curvatura en cada punto, p.ej.,:Imagen 1.5b

#declare MyHermiteSpline = create_spline (
   array [8] {x, x*2, y, -y*3, -x*2, y*3, -y, -x*2},
   create_hermite_spline)

preview_spline (MyHermiteSpline, spline_radius (0.03) + spline_accuracy (2)
   + show_spline_tangents (yes)
   + spline_preview_pigment (pigment {rgb <0.5, 0.8, 1>})
   + spline_preview_finish (finish {phong 0.5}))

Aquí unimos x a y a -x a -y, pero la dirección a cada punto se fija por la tangente especificada después de él. Cambiando la longitud de las tangentes se cambia cuánto se curva el camino. También podemos ajustar los valores de tensión y bias para las splines de Bezier y de hermite, para ajustar todas nuestras tangentes según los valores que especificamos.

Hay un último tipo de spline que puedes crear con el Spline Macro, usando la opción create_cubic_spline. Esto te permite crear una spline de TCB por defecto que vimos anteriormente, pero el spline sólo conecta los puntos del segundo al anteúltimo. El primero y último puntos se usan para establecer la curvatura de la spline al principio y al final, igual que con la spline cúbica de POV-Ray usada en los objetos lathe y prism.

1