Conceptos básicos sobre animación en Povray.

Siempre se ha dicho que una imagen vale más que mil palabras. Esto es especialmente cierto cuando intentamos explicar las funcionalidades de un trazador de rayos. En este caso en lugar de una imagen lo que se necesita es un vídeo porque vamos a explicar los conceptos básicos de la animación en Povray. (Nada mejor que una demo).

Las facilidades que ofrece Povray para animaciones sencillas se logran en base al uso de una variable ‘clock‘ que será entregada por Povray con un valor distinto para cada fotograma. Esta variable puede ser utilizada en el fuente pov que describe la escena haciendo que la escena vaya variando en función de ese valor.

Nosotros ya hemos explicado  Giros, traslaciones, y escalado de objetos en Povray.  Si definimos estas transformaciones en función de la variable clock, lograremos animación de esos objetos. También podemos mover las luces, o la cámara, etc.

La utilidad pov.py:

Povray en temas de animación básicamente se limita a generar la secuencia de imágenes y guardarlas en disco por separado, pero en este artículo ofreceremos una nueva versión de nuestra herramienta pov.py. (es una utilidad para el S.O. Linux) que sirve para automatizar el lanzamiento de Povray. Esto resulta muy cómodo cuando estamos haciendo pruebas. En el caso de animaciones no nos hemos contentado con esto. Esta nueva versión de la utilidad pov.py escrita en lenguaje Python y de libre descarga, será capaz de generar un vídeo en formato mp4 a 25 imágenes por segundo que podremos subir a Youtube.

También facilita una metodología de trabajo ya que hace copias de seguridad de los fuentes rotándolos, y ofrece un conjunto limitado de resoluciones, (las más usadas). Todo ello lo consigue generando un fichero *.ini que le dirá al trazador de rayos Povray como tiene que hacer el renderizado de la escena, así cómo y cuando lanzar comandos auxiliares para la generación del vídeo mp4. Unos comandos los lanzará al finalizar cada fotograma, y otro finalmente lo lanzará cuando se complete toda la generación de fotogramas generando el vídeo. La utilidad ov.py requiere:

  • S.O. Linux.
  • Intérprete de lenguaje Python
  • Utilidad   convert de la aplicación ImageMagick (para pasar a jpg)
  • Programa  ffmpeg (para generar el vídeo mp4)

Descarga gratuita del código fuente Python de la utilidad pov.py

Con unos mínimos conocimientos de programación no es difícil adaptarla al S.O. Windows.

Si usamos pov.y sin argumentos, obtendremos un mensaje de ayuda indicando como se usa.

Uso: /usr/local/bin/pov.py {Proyecto} {OutFiType} {size=0..12} {quality=1..11}
[ {Initial_Frame} {Final_Frame} {Initial_Clock} {Final_Clock}
[ {Subset_Start_Frame} {Subset_End_Frame} ] ]

1) Proyecto:
        Nombre_del_proyecto (Input_File_Name=Nombre_del_proyecto.pov)

2) OutFiType:
   t) tga,    c) tga (comprimido)
   n) png,    p) ppm

3) Size: 0..12
 0) 40x30     (4:3) =1.333 No backup       7) 640x480     (4:3)
 1) 80x60     (4:3) No backup              8 ) 800x600     (4:3)
 2) 100x75    (4:3)  No backup             9) 960x540    (16:9)
 3) 200x150   (4:3)                       10) 1024x768    (4:3)
 4) 266x200   (4:3)                       11) 1280x720   (16:9)
 5) 368x207  (16:9) =1.777                12) 1920x1080  (16:9)
 6) 400x300   (4:3)

4) Quality: 1..11

Explicemos a grandes rasgos como funciona la animación en Povray:

Por ejemplo, si tomamos el eje ‘Y’ como eje vertical y deseamos girar un objeto sobre si mismo sobre este eje. Podemos indicar rotate <0,clock,0> y si lanzamos Povray para que nos genere 360 fotogramas con valores de clock desde 1 a 360 obtendremos una secuencia completa de giro a intervalos de un grado. Si deseamos obtener una animación con una calidad HD para Youtube y nuestra escena la tenemos en un fichero llamado ‘ejemplo.pov’ usaríamos el comando:

pov.py ejemplo n 11 11 1 360 1 360

En el fotograma 1, clock valdría 1, y en el fotograma 360, clock valdría 360, pero eso es así porque las hemos hecho coincidir para hacerlo mas sencillo de entender. La duración de este vídeo con 360 fotogramas sería 360/25= 14.4 segundos.

Esto nos generaría igualmente un fichero ejemplo.ini (podemos mirarlo por curiosidad) una copia de seguridad del fuente en el directorio ‘bak’. Una serie 360 de imágenes en formato png (compresión sin pérdida de calidad) en el directorio out_pov. Una serie de otras 360 imágenes aún más comprimidas (perdiendo algo de calidad) en formato jpg en el directorio out_pov_jpg, y un vídeo de vídeo ‘ejemplo.mp4’ pero pasemos a ver un caso real.

Un ejemplo concreto pru_anim_rotate.pov:

Yo he usado una escena llena de estos objetos que ya conocemos llamados triconos. Creo que desde el punto de vista didáctico definen muy bien la posición de un objeto por su completa asimetría y son fáciles de seguir e identificar por sus combinaciones de colores. A cada objeto le he proporcionado un tipo de movimiento diferente.

El vídeo pru_anim_rotate.mp4 se obtuvo con el comando: pov.py pru_anim_rotate n 11 11  1 720 1 360

Este mp4 es el que hemos subido tal cual a Youtube y queda con una calidad HD muy aceptable. Este vídeo durará 28.8 segundos. El fichero *.ini obtenido ha sido este:

; ### (generado por pov.py)
Declare=AspectRatio=1.777778
Width=1280
Height=720
Quality=11
Library_Path=/usr/share/povray/include
Input_File_Name=/home/antonio/Escritorio/desktop_acastro/PROYECTOS/VIDEO/PRODUCCION_PROPIA/pru_anim_rotate/pru_anim_rotate.pov
Output_File_Type=n  ; (t,c,n,p)
Output_File_Name=pru_anim_rotate.png
; ###
Pre_Scene_Command='rm -fr out_pov out_pov_jpg; mkdir out_pov out_pov_jpg'
Post_Frame_Command='convert -quality 65 %o out_pov_jpg/%s.%n.jpg ; mv %o out_pov/%o'
Post_Scene_Command='ffmpeg -f image2 -i out_pov_jpg/%s.%%d.jpg -sameq %s.mp4'
Output_to_File=on
verbose=on
Bits_Per_Color=5 ; 5 bits (32768 colores); 8 bits (16 millones de colores)
; ### Animacion
Initial_Frame=1
Final_Frame=720
Initial_Clock=1
Final_Clock=360


Vemos que en este fichero se ha declarado una constante AspectRatio=1.7777777. Es para nuestra cámara en Povray y su valor es el resultado de dividir anchura por altura 1280/720.  (Estamos usando un formato 16/9)

(Si por ejemplo hubiéramos usado  pov.py pru_anim_rotate n 11 11  1 36 1 360 habría durado 1.44 segundos).

Para finalizar:

En los comentarios del fuente de ‘pov.py’ encontrarás información adicional y cualquier otra cosa que necesites saber tanto de ‘pov.py’, como de la escena animada, como de la generación del vídeo , me pones un comentario y con gusto te aclararé lo mejor que pueda tus dudas.


Giros, traslaciones, y escalado de objetos en Povray.