vers l'index général de l'aide

l'animation avec POV-Ray

objectif

Créer des animations : un gif animé pour agrémenter une page web, un logo avec une tête de mort en feu qui tourne (très original !), une animation pour l'IRTC, un film, ...

compatibilité

POV-Ray 2.0 +sup. pour clock
POV-Ray 3.0 +sup. pour presque tout le reste.
POV-Ray 3.1 +sup. pour clock_delta.

principe

Le principe général d'une animation, c'est de créer plein d'images, dont le contenu change légèrement de l'une à l'autre. Nous alons voir comment POV-Ray permet de gérer automatiquement la génération de ces images successives, avec les changements progressifs.

Avec les versions de POV-Ray antérieures à la 3.0, les possibilités étaient limitées, et il fallait utiliser des programmes externes (tels que RTAG) qui se chargaient d'invoquer POV-Ray avec divers paramètres, afin de créer la série d'images de l'animation.

Heureusement, POV-Ray 3.0 est arrivé (sans s'presser, héhé..), et avec lui son processus interne d'animation. Il est composé de deux parties distinctes :
- des instructions dans le script de la scène
- les options de la ligne de commande ou du fichier .ini

dans la scène

clock

clock est une variable décimale dont la valeur est définie de manière externe. Sa valeur par défaut est 0.0, si le processus interne d'animation n'est pas activé. On peut modifier cette valeur soit par la ligne de commande (+K3.2 par exemple), soit dans un fichier .ini (Clock = 3.2). Ensuite, dans la scène, on peut à tout moment invoquer cette variable, qui s'utilise comme n'importe quelle autre variable (sauf qu'on ne peut pas la redéfinir à l'intérieur de la scène).

#declare Pos1 = sin(clock*2);
...
#while (clock < 5)
...
sphere {<2,4,3>,5 pigment {..} rotate y*clock*360 }
 

clock_delta

clock_delta est une variable qui contient la différence entre la valeur de clock actuelle, et la valeur de clock de l'image précédente, lors du calcul d'une animation. Cela peut être utile pour la modélisation de phénomènes physiques (intégration dans le temps, ...). Si il n'y a pas d'animation, la valeur par défaut est 1.0.

sur la ligne de commande

Les options de la ligne de commande permettent d'automatiser le rendu des images successives en même temps que la variation linéaire de clock entre deux valeurs.

Voici un tableau récapitulatif de ces options, détaillées juste après. Ce tableau se trouve également dans les pages qui traitent de toutes les options disponibles.

commandeinidéfautdescription
+Kn.n Clock = n.n 0 spécifie une valeur fixe de clock
+KIn.n Initial_Clock = n.n 0 spécifie une valeur initiale de clock
+KFn.n Final_Clock = n.n 1 spécifie une valeur finale de clock
+KFIn Initial_Frame = n 1 spécifie le numero de la première image
+KFFn Final_Frame = n 1 spécifie le numero de la dernière image
+SFn Subset_Start_Frame = n 1 spécifie le numero de la première image à calculer
+EFn Subset_End_Frame = n 1 spécifie le numero de la dernière image à calculer
+KC,-KC Cyclic_Animation = b 1 enclenche la prise en compte de l'animation cyclique

+K

Permet de spécifier une valeur fixe pour la variable clock. Utile pour tester une scène avec une valeur particulière (anciennement, était destiné à être contrôlé par un autre programme).

+K5.32

+KI

Permet de spécifier la valeur initiale de la variable clock. Ce sera la valeur de la variable pour la première image de la série rendue. Valeur par défaut : 0.0.

+KI2.14

+KF

Permet de spécifier la valeur finale de la variable clock. Ce sera la valeur de la variable pour la dernière image de la série rendue. Valeur par défaut : 1.0.

+KF10.52

Les valeur de clock pour chaque image de la série (numerotées à partir de 0) dépend de la formule suivante : clock_actuel = clock_initial + ((clock_final - clock_initial)/nombre_d'images)*numero_d'image_courante, c'est-à-dire une simple évolution linéraire entre les deux valeurs extrêmes.

+KFI

Permet de spécifier le numéro de la première image de l'animation, celle où clock prendra la valeur spécifiée avec +KI. La valeur par défaut est 1, et il est souvent inutile de la changer.

+KFF

Permet de spécifier le numéro de la dernière image de l'animation, celle où clock prendra la valeur spécifiée avec +KF . Cela permet d'activer la boucle interne d'animation, en fixant une valeur différente de -1. Le numéro de l'image est utilisé pour former le nom des images de sortie, par exemple pour un fichier de sortie file.tga, les images porteront les noms file01.tga, file02.tga, .... jusqu'à file30.tga pour une animation constituée de 30 images (+KFF30).

Attention : POV-Ray s'efforce de réserver suffisamment de caractères pour écrire le numero de l'image dans le nom du fichier, en maintenant le nombre maximum de caractères du système d'exploitation (8 sous MS-DOS, 32 sous MacOS,...). Par exemple, si vous générez 200 images à partir d'un fichier source nommé "engrenag.pov", sous MS-DOS, vous obtiendrez engre001, engre002,...

Souvent, en laissant les valeurs par défaut des autres variables, on pourra se contenter de n'utiliser que +KFF, en prenant soin d'écrire la scène de telle sorte que les mouvements soient indépendants du nombre total d'images.

+SF et +EF

Il peut être intéressant de pouvoir calculer une longue animation en plusieurs fois. Pour se faire, on utilisera ces deux paramètres, en plus de la définition de +KFI et +KFF. Si la valeur est un entier, elle représente le numéro de la première ou de la dernière image que l'on veut rendre. S'il s'agit d'une valeur décimale, elle représente alors un pourcentage. Par exemple, +KFF100 +EF0.5 permet de calculer uniquement la première moitié de l'animation. On pourra calculer la seconde moitié en spécifiant +KFF100 et +SF51.

+KC ou -KC

Est utilisé lorsque l'on veut générer une animation cyclique, c'est-à-dire qu'on peut faire tourner en boucle. Par exemple, un objet effectue une rotation complète autour d'un axe. On aura donc une transformation du style rotate < 360*clock, 0, 0 >. Or, usuellement, clock va de 0.0 à 1.0. La première et la dernière image donneront donc le même résultat (une rotation de 360 degrés équivaut à une rotation de 0 degré...). La solution est de spécifier une valeur de +KF adéquate, mais celle-ci est dépendante du nombre total d'images. L'option KC permet de faire ce calcul automatiquement, et ce quelque soit le nombre total d'images. La valeur par défaut est off (ou -KC).

dans le fichier .ini

Voici les équivalences des instructions d'animation entre la ligne de commande et les fichiers .ini :

exemples

Vous les trouverez dans les exemples d'animations simples

remarques

Laissez Initial_Clock et Final_Clock à leur valeur par défaut. C'est le meilleur moyen de se forcer à faire une scène qui sera indépendante du nombre d'images générées.

Initial_Frame peut être utilisé quand on veut fusionner le résultat de deux scènes. Par exemple, scene1.pov doit générer les 100 premières images, et scene2.pov les 200 suivantes. On donnera le même nom de fichier de sortie pour les deux scènes (Output_File_Name=scene.tga), et on utilisera les options de ligne de commande suivantes:

 +Iscene1 +KFF100
 +Iscene2 +KFI101 +KFF300

Ceci calculera les images scene001.tga à scene300.tga, ce qui est généralement plus pratique pour générer une animation que des noms de fichiers avec une base différente (enfin, ça dépend des outils....).

N'utilisez pas jitter (anti-aliasing et area_light) et crand (dans un finish). Ce sont les deux seules fonctionnalités de POV-Ray qui sont réellement aléatoires, et les résultats obtenus d'une image sur l'autre varient de manière aléatoire (justement...).

Pour animer des motifs, on pensera à l'utilisation du mot clé phase. Mettre phase clock dans un motif ripples donnera l'impression que les vagues se propagent...

Rédacteur: Christophe Bouffartigue (Bouf)