pov-ray animaciÓn y programaciÓn pov-ray pov-ray (i) • características más importantes: –...
TRANSCRIPT
2
POV-Ray
POV-Ray (I)
• Características más importantes:– Basado en escenas– Independiente de plataforma– Gratuito (pero no de dominio público)– Librerías para definición de características– Alta calidad en imágenes resultantes del
rendering (15 a 24 bits, incluso hasta 48)– Cámaras y luces
3
POV-Ray(II)• Características más importantes
– Figuras primitivas: esferas, cajas cilindros,etc...– Figuras pueden ser combinadas para crear una
más compleja por medio de CSG.– Soporta antialising.– Diferentes formatos de imágenes de salida:
bmp, png, jpg, Targa y ppm. Animaciones tridimensionales.
– Manejo de archivos, operadores de igualdad y relacionales y estructuras de repetición.
Programación
4
¿Qué és Scripting?
• Capacidad de cambiar la escena o los objetos en ella de un modo complejo o repetitivo.
• Permite que las escenas sean más fáciles de usar.
• Existen 4 tipos de scripting en POV: declaraciones, directivas, macros y funciones.
Declaraciones
• Declaración de objetos y valores.• Almacenar objetos frecuentemente usados
en una “variable”• Es posible declarar colores y localizaciones.
5
Ejemplo de Declaración (I)
#declare rojo = <.8,.1,.1>; #declare verde = <.1,.8,.1>; #declare local_camara = <0,0,-10>;
Ejemplo de Declaración (II)camera {
location local_camara look_at <0,0,0> }light_source {
Camera_location color <1,1,1> }plane {
y, -1pigment {
checker color rojo color verde}
}sphere {
<0,.5,0>, 1pigment {
color rojo}
}
6
Ejemplo de Declaración (III)
Declaración de objetos (I)#declare esfera = sphere {
<0,.5,0>, 1}
object { esferapigment {
color rojo}translate <.5,0,.25> }
object { esferapigment {
color verde}translate <-2,0,0>
}
Posibilidad de cambiar posteriormente aspectos del objeto.
7
Declaración de objetos (II)
Declaración de objetos (III)#declare esfera = sphere {
<0,.5,0>, 1
scale <1,2,2>
}
8
Directivas (I)
• El uso de directivas es interesante para la repetición de objetos en la escena.
• Uso de las directivas “#while” y “#end”.• Repetición de una acción hasta el
cumplimiento de una cierta condición.
Directivas (II): While-End#declare esfera_cont = 10; #while (esfera_cont > 0)
object { esfera pigment { color rojo}translate <esfera_cont-5,0,0>
} #declare esfera_cont = esfera_cont - 1;
#end
9
Directivas (III): While-End
Directivas (IV)
• Generación de números aleatorios.• Funciones “seed” y “rand”• Ejemplo: Localización aleatoria de objetos
en la escena.
10
Directivas (V)#declare esfera_cont = 10; #declare Localizacion = seed(1); #while (esfera_cont > 0)
#declare x_loc = rand(Localizacion); #declare y_loc = rand(Localizacion); #declare z_loc = rand(Localizacion);object {
esfera pigment { color rojo
}translate <x_loc,y_loc,z_loc>
} #declare esfera_cont = esfera_cont - 1;
#end
Directivas (VI)
11
Directivas (VII)#declare x_loc = rand(Localizacion)*20-10;
#declare y_loc = rand(Localizacion)*5-1;
#declare z_loc = rand(Localizacion)*10-3;
Para conseguir la dispersión deseada
Directivas (VIII): Ejemplo
• Definición de texturas y acabados
#declare acabado_esfera = finish {
phong .5
phong_size 140
ambient .4
}
#declare esfera_rojo = texture {pigment {
color rojo filter .75 }finish { acabado_esfera } }
#declare esfera_verde = texture {pigment {
color verde filter .65 }finish { acabado_esfera } }
12
Directivas (IX): Ejemplo• Colores y localización aleatoria
#declare esfera_cont = 50;
#declare Localizacion =seed(1);
#declare Colores = seed(2);
#while (esfera_cont > 0) #declare x_loc = rand(Localizacion)*20-10; #declare y_loc = rand(Localizacion)*5-1; #declare z_loc = rand(Localizacion)*10-3;object {
floater texture { #if (rand(Colores) > .5) esfera_rojo #elseesfera_verde #end
}translate <x_loc,y_loc,z_loc> }#declare esfera_cont = esfera_cont - 1;
#end
Directivas (X): Ejemplo
13
Otras directivas:
• #switch, case, break: directiva condicional• #debug: para emitir mensajes de depuración.• #render: muestra información sobre las opciones
especificadas para renderizar la imagen. Nombre de la escena, resolucion, anti-aliasing y otras.
• #statistics: para mostrar estadísticas cuando uanvez renderizado una frame.
• #error: para mostrar mensajes de error• #warning: muestra mensajes de advertencia
Directivas switch, case, break#switch (VALOR) #case (PRUEBA_1)
// Si se cumple VALOR = PRUEBA_1#break
#case (PRUEBA_2) // Si se cumple VALOR = PRUEBA_2#break
#range (INF_1,SUP_1) // Si se cumple (VALOR>=INF_1) && (VALOR<=SUP_1) #break
#else// en cualquier otro caso
#end // Fin de la parte condicional
14
Directivas render y warning#switch (clock*360)
#range (0,180) #render “Reloj en rango 0 y 180\n" #break
#range (180,360) #render “Reloj en rango 180 y 360\n" #break
#else#warning “Reloj fuera del rango esperado\n" #warning concat(“Valor:",str(clock*360,5,0),"\n")
#end
Macros
• Similares a las declaraciones, excepto que sus lineas de script no se ejecutan hasta que se las invoca.
• Cada vez que se invoca una macro, POV “rehace” las lineas de script.
• Aplicación: p.e. Conseguir un efecto aleatorio “verdadero”
15
Definición de la macro#declare acabado_esfera = finish { phong .5 phong_size 140 ambient .8 } #declare Colores = seed(2); #macro floater()
sphere { #local esfera_rojo = rand(Colores); #local esfera_verde = rand(Colores); #local esfera_azul = rand(Colores); <0,.5,0>,1texture {
pigment { color rgbf <esfera_rojo, esfera_verde, esfera_azul, .75> }
finish { acabado_esfera }}
} #end
Invocación de la macro#declare esfera_cont = 50;#declare Localizacion = seed(1);#while (esfera_cont > 0)
#declare x_loc = rand(Localizacion)*20-10; #declare y_loc = rand(Localizacion)*5-1; #declare z_loc = rand(Localizacion)*10-3;object { floater()
translate <x_loc,y_loc,z_loc> } #declare esfera_cont = esfera_cont - 1;
#end
16
Macro. Ejemplo
Macros. Parámetros (I)#macro floater(x_location,y_location,z_location)
sphere { #local esfera_rojo = rand(Colores); #local esfera_verde = rand(Colores); #local esfera_azul = rand(Colores); <0,.5,0>,1 #if (z_location >4)
#local floater_filter = 0; #else
#local floater_filter = .75;#end
texture { ... }translate <x_location,y_location,z_location> }
#end
17
Macros. Parámetros (II)#declare esfera_cont = 50; #declare Localizacion = seed(1); #while (esfera_cont > 0)
#declare x_loc = rand(Localizacion)*20-10; #declare y_loc = rand(Localizacion)*5-1; #declare z_loc = rand(Localizacion)*10-3;floater(x_loc,y_loc,z_loc) #declare esfera_cont = esfera_cont - 1;
#end
Funciones
• POV incluye una serie de funciones que se pueden usar: numéricas, de localización, de texto, etc...
• La funciones se encuentran agrupadas en relación a su uso y no con el valor que devuelven.
18
Funciones. Llamadas y tipos
• Las llamadas a función tienen el siguiente aspecto:palabra_clave(parametro1, parametro2)
• Existen 3 tipos de funciones:– Funciones de punto flotante– Funciones vectoriales– Funciones de cadenas
Funciones de punto flotante (I)
• Se trata de funciones que reciben como parámetro valores de punto flotante y devuelven valores de punto flotante.
• Ejemplos: abs(A), acos(A), ceil(A),max(A,B), rand(A), seed(A), etc...
19
Funciones de punto flotante (II)
#declare R1 = seed(0) #declare R2 = seed(12345) #sphere {
<rand(R1), rand(R1), rand(R1)>, rand(R2) }
Funciones vectoriales (I)
• Parámetros: vectores o valores en punto flotante.
• Devuelve: vectores o valores en punto flotante.
• Todas las funciones de este tipo sólo soportan vectores de tres componentes.
20
Funciones vectoriales (II)• Ejemplo:
– vaxis_rotate(A,B,F): dadas las coordenadas x,y,z de un punto en el espacio designado por el vector A, rota tal punto sobre un eje arbitrario definido por el vector B. F define los grados de giro.
– vcross(A,B): el vector resultado es un vector perpendicular A y B, y su longitud es proporcional al ángulo que forman.
– vdot(A,B): producto componente a componente.– vlength(A): Longitud del vector A– vnormalize(A): vector normalizado de A
Funciones de cadena
• Parámetros: cadena y/o punto flotante• Devuelve: cadena o punto flotante• Ejemplos:
– asc(S1): valor ASCII del primer carácter de S1– strcmp(S1,S2): compara dos cadenas– Otras: strlen(S1), strlwr(S1), substr(S1,P,L),
etc...
21
Animación
Animación• Movimientos básicos
– Translación– Rotación– Escalado
• Relojes. – Definición y tipos.
• Tipos animación– Multiobjeto– Multifase– Texturas, pigmentos y acabados– Basadas en trayectoria
22
Movimientos básicos• Translación
– Movimiento en el que un objeto se desplaza modificando su posición respecto a un punto de referencia.
• Rotación– Movimiento en el que un objeto rota respecto a un
punto de referencia.
• Escalado– Movimiento en el que un objeto cambia sus
dimensiones.
Ejemplo movimientos básicos#include "AutoClck.mcr"
camera {
orthographic
location < 0, 0, -4>
sky < 0, 1, 0 >
look_at < 0, 0, 0 >
}
light_source {
< 50, 50, -50 >
color rgb < 1, 1, 1 >
}
23
Movimiento translación (I)sphere {
< 0.0, 0.0, 0.0 >, 0.5 pigment { rgb <1, 0, 0> }translate
From (0, <-2, 0, 0>) Using ( "", 1, 1, "") To (1, <2, 0, 0>)
}
Movimiento translación (II)
24
Movimiento rotación (I)
box { < -0.5, -0.5, -0.5 >,< 0.5, 0.5, 0.5 >pigment { rgb <0, 0, 1> }rotate
From (0, <0, 0, 0>) Using ( "", 1, 1, "") To (1, <180, 180, 180> )
}
Movimiento rotación (II)
25
Movimiento escalado (I)sphere {< 0.0, 0.0, 0.0 >, 0.5pigment { rgb <0, 1, 0> } scale
From (0, <0.1, 0, 0>)Using ( "", 1, 1, "")To (1, <2, 0, 0>)
}
Movimiento escalado (II)
26
Relojes
• Definicion– Un reloj nos sirve como variable de tiempo.
Podremos utilizar dicho reloj para realizar funciones que dependan de t.
• Tipos– Hay 9 tipos de relojes implementados. Con
ellos se implementan las situaciones más habituales.
Tipos de relojes– Acelerado – Incrementa la velocidad.– Decelerado – Decrementa la velocidad– Sigmoidea – acelera hasta el punto medio y despues
decelera.– Triángulo – acelera y decelera con un cambio brusco.– Salto – acelera y decelera con un cambio suave– Rebote – caída libre y rebote– Oscilante – crece y decrece de 0 a 1, de 1 a –1 y de –1 a 0. – Onda – el inverso del rebote– Retroceso – efecto de retroceso
31
Ejemplos de relojes (IX)
• Retroceso
Tipos animación (I)
• Multiobjeto– Este tipo de animación consiste en unir en un
mismo objeto varios objetos independientes y aplicar la animación al conjunto.
32
Ejemplo animación multiobjeto(I)#include "AutoClck.mcr"
#declare Objeto1 = superellipsoid { < 0.4, 0.5 > pigment {
color rgb <0.90, 0.25, 0.15> }
} #declare Objeto2 = torus {
0.33, 0.183 sturmpigment {
color rgb <0.51, 0.95, 0.31>}
}camera {
orthographic angle 60 location < 0, 0, -2 > sky < 0, 1, 0 > look_at < 0, 0, 0 >
} light_source {
< 500, 500, -500 > color rgb < 1, 1, 1 >
}
object { Objeto1 scale <0.4, 0.4, 0.4> rotate <45, 45, 0> translate <-.3, 0, 0> translate
From ( 0.5, <-0.3, 0, 0> ) Using (“B", 1, 1, "") To (1, <2, 0, 0> )
} object {
Objeto2scale <0.6, 0.6, 0.6>rotate <90, 0, 0>translate <0.3, 0, 0>rotate
From ( 0.1, <90, 25, 0> ) Using (“W", 1, 1, "") To (1, <279, 180, 45> )
}
Ejemplo animación multiobjeto(II)
33
Tipos animación (II)
• Multifase– Este tipo de animaciones están compuestas por
varias animaciones concatenadas.
Ejemplo animación multifase (I)#include "AutoClck.mcr"
camera { orthographic angle 60 location < 0, 0, -2 > sky < 0, 1, 0 > look_at < 0, 0, 0 >
} light_source {
< 500, 500, -500 >color rgb < 1, 1, 1 >
}
torus { 0.33, 0.183sturm pigment {rgb <1, 0, 0.8> } rotate
From (0, <0, 0, 0>)Using ("B", 2, 1, "") To (0.25, <90, 0, 0> ) Using ("B", 2, 1, "") To (0.5, <90, 180, 0>) Using ("B", 2, 1, "") To (0.75, <270, 180, 0>) Using ("B", 2, 1, "") To ( 1, <360, 0, 0> )
}
34
Ejemplo animación multifase (II)
Tipos animación
• Texturas, colores y acabados– En este tipo de animación los objetos no
cambian, tan solo lo hacen algunas de sus propiedades.
– Se suele utilizar combinada con algún otro tipo de animación
35
Ejemplo animación textura (I)#include "AutoClck.mcr" #declare t1 = texture {
pigment { image_map {tiff "a.tif"}
}scale 0.25
} #declare t2 =
texture { image_map {tiff "b.tif" }
} camera {
orthographic location < 0, 0, -2 > sky < 0, 1, 0 > look_at < 0, 0, 0 >
}
light_source { < 500, 500, -100 > color rgb < 1, 1, 1 >
} sphere {
< 0, 0, 0 >, 0.5 texture { Texture_From ( 0, t1 ) Using ( “O", 1, 1, "") Texture_To ( 1, t2 ) } }
}
Ejemplo animación textura (II)
36
Ejemplo animación colores (I)#include "AutoClck.mcr" #declare t1 =
texture { pigment { rgb <1, 1, 0> }
} #declare t2 =
texture { pigment {rgb <0, 1, 1> }
} camera {
orthographic location < 0, 0, -2 > sky < 0, 1, 0 > look_at < 0, 0, 0 >
}
light_source { < 500, 500, -100 > color rgb < 1, 1, 1 >
} sphere {
< 0, 0, 0 >, 0.5 texture { Texture_From ( 0, t1 ) Using ( “O", 1, 1, "") Texture_To ( 1, t2 ) } }
}
Ejemplo animación colores (II)
37
Ejemplo animación acabados#include "AutoClck.mcr" #declare t1 =
texture { pigment { rgb <1, 1, 0> }normal {
agate 0.8 scale 0.2 }
finish { phong 0.8 phong_size 200 }}
#declare t2 = texture { pigment {rgb <0, 1, 1> } normal {
agate 0.1scale 0.1 }
finish { phong 0.8 phong_size 10 }}
camera { orthographic location < 0, 0, -2 > sky < 0, 1, 0 > look_at < 0, 0, 0 >
}light_source {
< 500, 500, -100 > color rgb < 1, 1, 1 >
} sphere {
< 0, 0, 0 >, 0.5 texture { Texture_From ( 0, t1 ) Using ( “O", 1, 1, "") Texture_To ( 1, t2 ) } }
}
Ejemplo animación acabados (II)
38
Tipos animación
• Basadas en trayectoria– Basada en splines.– Se define la spline en función de cuatro puntos,
el punto inicial, el final y dos puntos de control.– Las trayectorias se definen en ficheros externos.– Se puede mover cualquier objeto, luz, cámara,
etc.
Ejemplo animación con trayectoria (I)
#declare spline_segments = 4;
#declare point0 = < 0.0,-1.6, 0>;#declare point1 = <-3.0, 0.0, 0>;#declare point2 = < 0.0, 3.0, 0>;#declare point3 = < 1.6, 0.0, 0>;#include "SplineR.inc"
#declare point0 = <-1.6, 0.0, 0>;#declare point1 = < 0.0, 3.0, 0>;#declare point2 = < 3.0, 0.0, 0>;#declare point3 = < 0.0,-1.6, 0>;#include "SplineR.inc"
#declare point0 = < 0.0, 1.6, 0>;#declare point1 = < 3.0, 0.0, 0>;#declare point2 = < 0.0,-3.0, 0>;#declare point3 = <-1.6, 0.0, 0>;#include "SplineR.inc"
#declare point0 = < 1.6, 0.0, 0>;#declare point1 = < 0.0,-3.0, 0>;#declare point2 = <-3.0, 0.0, 0>;#declare point3 = < 0.0, 1.6, 0>;#include "SplineR.inc"
39
Ejemplo animación con trayectoria (II)
#declare esfera = sphere {< 0.0, 0.0, 0.0 >, 3texture {
pigment {color rgb <0, 1, 0>}}}
object { esfera#declare spline_clock = clock#include "c:\povray rg\ejemploPath\ejemploPath.spl"translate spline_pos}
camera {
location <0,0,-20>look_at < 0, 0, 0 >
}
light_source {< 50, 50, -50 >color rgb < 1, 1, 1 >
}
Ejemplo animación con trayectoria (II)
40
Ejemplo animación con trayectoria (III)
#declare point0 = <-1, 4,-10>;
#declare point1 = <3, 0,-10>;
#declare point2 = <-3, 0,-10>;
#declare point3 = <1,-4,-10>;
#include "SplineR.inc"
Ejemplo animación con trayectoria (IV)
#version 3.1;#declare spline_clock = 1;#include "AutoClck.mcr"
box {< -2.0, -2.0, -2.0 >, <2,2,2>texture {
pigment {color rgb <1, 1, 0>}
finish {phong 0.8phong_size 200 }
}}
camera { #declare spline_clock = clock#include "c:\povray rg\ejemploPath2\ejemploPath2.spl"
location spline_pos*3look_at < 0, 0, 0 >
}
light_source {< 50, 50, -10 >color rgb < 0.5, 1, 1 >
}
41
Ejemplo animación con trayectoria (V)
Ejemplo animación con trayectoria (VI)
#declare spline_segments = 2;
#declare point0 = <-7,-6,0>;#declare point1 = <-4,6,0>; #declare point2 = <6,0,0>; #declare point3 = <14,-7,0>;#include "SplineR.inc"
#declare point0 = <18,4,0>;#declare point1 = <6,0,0>; #declare point2 = <-4,6,0>; #declare point3 = <-2,12,0>; #include "SplineR.inc"
42
Ejemplo animación con trayectoria (VII)
#version 3.1;#declare spline_clock = 1;#include "AutoClck.mcr"
#declare esfera = sphere {< 0.0, 0.0, 0.0 >, 1texture {pigment { color rgb <0, 1, 0>}}}
#declare cubo = box {< -2.0, -2.0, -2.0 >, <2,2,2>texture {pigment {color rgb <0.5, 0.5, 1>} finish { phong 0.8 phong_size 200 }}}
object { esfera#declare spline_clock = clock#include "c:\povray rg\ejemploPath\ejemploPath.spl"translate spline_pos}
object { cubo#declare spline_clock = clock#include "c:\povray rg\ejemploPath3\ejemploPath3.spl"translate spline_pos*2}
camera {
location <0,0,-30>look_at <0, 0, 0 >
}
light_source {< 50, 50, -10 >color rgb < 1, 1, 1 > }
light_source {< -50, -50, 10 >color rgb < 0.5, 0.5, 0.5 >
}
Ejemplo animación con trayectoria (VIII)