43
POV-RAY ANIMACIÓN Y PROGRAMACIÓN Índice • POV-Ray • Programación • Animación

POV-RAY ANIMACIÓN Y PROGRAMACIÓN POV-Ray POV-Ray (I) • Características más importantes: – Basado en escenas – Independiente de plataforma – Gratuito (pero no de dominio

Embed Size (px)

Citation preview

1

POV-RAYANIMACIÓN Y PROGRAMACIÓN

Índice

• POV-Ray

• Programación

• Animación

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

27

Ejemplos de relojes (I)

• Acelerado

Ejemplos de relojes (II)

• Decelerado

28

Ejemplos de relojes (III)

• Sigmoidea

Ejemplos de relojes (IV)

• Triángulo

29

Ejemplos de relojes (V)

• Salto

Ejemplos de relojes (VI)

• Rebote

30

Ejemplos de relojes (VII)

• Oscilante

Ejemplos de relojes (VIII)

• Onda

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)

43

Animaciones

FIN