Cette page se propose de donner des explications sur la fonction essentielle d'abak . Elle reprend le corps principal de l'article de Jean Michel Soler dans le Diskmag LE REPORTER n° 6 . Un choix de fonte courier new, plus appropriée, rendra les graphismes (il y en a) en alphanumériques plus lisibles. . Sa copie et sa distribution sont autorisées aux risques exclusifs de l'utilisateur.Pour télécharger Abak5. Les sources en pascal sont dsiponibles soit dans LE REPORTER 6 soit sur demande chez l'auteur. Notez que la version 3.0 de POVRAY offre des fonctionnalités équivalentes
. Animation et Raytracing
Soyons un peu direct: ce texte a pour objectif de vous donner
une série d'idées sur la manière de faire de petites animations
avec Persistance Of Vision. N'en attendez pas des miracles,
Abak5 peut cependant rendre de petits services.
1/ Si vous ne savez pas ce qu'est POVRAY.
a/ introduction.
b/ rendu d'image.
b/ raytracing.
c/ ses avantages
d/ ses inconvénients
2/ Les possibilités actuelles de Pov en matière d'animation.
a/ Qu'est-ce que l'animation?
b/ Ce que peut faire pov...
c/ Les fichiers batchs (1)
d/ Quelques outils indispensables: Dta, Aaplay.
e/ Clock.
f/ Trameur ou Frameur?...,ou doit-on dire d'"abaqueur"?
g/ Ce qui prouve que la lecture de TOUS les numéros du REPORTER...
h/ Les fichiers batchs (2), améliorations.
i/ DEF: ultime solution quand on a pas les moyens
de s'offrir un studio d'animation 3D
PERSISTANCE DE LA VISION,
traduction littérale que j'ai longtemps
confondue avec "Persistance de la Mémoire" de Salvator Dali
(faut-il être bête?). J'ai envie de voir de la culture là ou il
n'y en a pas. Déformation professionnelle, je suppose. Mais
excusable dans la mesure où ce logiciel, finalement, permet de
rendre visible nos rêves les plus originaux, à la manière de
l'imagerie surréaliste et dadaïste. La connexion avec la
persistance rétinienne ne s'est jamais vraiment faite, tant,
pour moi, cette expression est liée aux effets stroboscopiques,
au cinéma, à la vidéo et au dessin animé. Malgrès tous ses
avantages, POV n'a jamais été à la hauteur pour le dessin
animé. Mais ce n'est pas sa fonction première, POV fait du
--RENDU d'IMAGE--
Qu'est-ce donc que le rendu d'image?
Rien de compliqué: à partir d'une description, un script, pour
utiliser la dénommination officielle (rgblumen script, pour
avoir un exemple détaillé), l'image est construite par le
logiciel sous la forme d'un fichier bitmap.
Le résultat est toujours une image unique!! (loin du dessin
animé : 25/30 images secondes).
La particularité de POV c'est de faire du rendu d'image en
"raytracing", en bon français nous dirions "suivi de rayon".
Exemple:
Ray-tracing ?
Lancer de rayon
Pour résumer, le rendu d'image au travers du suivi de rayon
permet d'avoir des effets très proches de la réalité
photographique
Images de synthèse et "raytracing", ou "suivi de rayon". Voilà
un domaine où on aurait une certaine tendance à amalgamer: la
3d, le raycasting, et autres constructions en fils de fer, et
toutes ces sortes de choses qui sont sensées donner l'illusion
d'un volume, mieux: d'une profondeur. Le raytracing est une
solution pour éliminer les faces cachées qui s'est révélée
beaucoup plus riche que ne l'avait imaginée ses concepteurs. Il
semble être le prolongement naturel de l'algorithme de
Warnock(*).
Rappel:
Pour donner un effet de perspective il faut un point de vue (ou
caméra), un écran, un objet à voir, et, un élément indispensable:
FIAT LUX (donc) !
Dans l'espace et l'optique naturels une partie de la lumière
produite par la source lumineuse est réfléchie par l'objet et
vient s'écraser sur la rétine de l'observateur (le reste est
absorbé, la couleur d'un objet n'est rien d'autre que ce qu'il
a bien voulu laisser s'échapper: la lumière blanche étant
constituée de composantes Rouge vert et bleu, si le vert et le
rouge sont absorbés l'objet paraîtra bleu).
exemple:
Dans le raytracing on suit le rayon lumineux de l'oeil de
l'observateur jusqu'à l'extrême limite de "l'univers" que l'on
a construit(**).
(Croquis en alphanum‚riques de l'article original)
+----------------------------------------------------------------------------+
| |
| écran|\ objet4 |
| | \ x------>rayon |
| | \ | |
| | \ | |
| | |\ | |
| | | \ objet2 | |
| | | \ x----------x objet3 |
| |\ | \ \ |
| | \ | \ \ |
| point de vue | \ | \ \ |
| X _______________|______\Y __________|________\x objet1 |
| | | | | | |
| | \ | | | |
| | \ | | | |
| | \ | | | |
| |_______________________\| __________|_________| |
| \ | |
| \ | |
| \ | |
| \ | |
| \ | |
| \| |
+----------------------------------------------------------------------------+
(croq')
Pour chaque pixel de l'image (***) on suit au moins un rayon
passant par ce pixel et venant de l'oeil-caméra.
On teste si le rayon coupe un objet qui se trouve dans cet
univers. Si c'est le cas on calcule la reflexion du rayon et on
cherche quels autres objets ont pu être touchés.
La liste de ces contacts se nomme l'arbre d'intersections.
Il peut y avoir de nombreux embranchements car chaque réflexion
peut être accompagnée d'une transmission si l'objet est décrit
comme transparent.
La construction de l'arbre s'achève lorque tous les objets de la
scène ont été passés en revue ou lorsque la limite de réflexion
paramètrée a été dépassée.
On remonte ensuite l'arbre d'intersection en calculant la valeur
d'intensité de la lumière à chaque noeud. En dernier lieu on
affiche le pixel avec le résultat, ou on sauvegarde la valeur
dans un fichier ce qui bien plus économique en temps.
Dans le calcul de la valeur finale peuvent intervenir tous les
paramètres de l'optiques : réfraction, réflexion, transmission,
absorbtion, que l'on peut modifier à volonté avec des passages
fins de l'un à l'autre et des jongleries sur la valeur de
l'indispensable "normale".
+--------------------------------------------------------------------+
| |
| normale |
| /|\ |
| | |
| | |
| | |
| rayon incident | |
| \ | _ rayon réfléchi |
| _\| | /| |
| \ | / |
| \ | / |
| \ | / |
| \ | / |
| surface _______________________\|/ _______________________ |
| du solide \ |
| \ |
| \ |
| \ |
| \ |
| _\| rayon transmis |
| |
| |
+--------------------------------------------------------------------+
Mais on peut très bien construire des images très complexes sans
rien savoir de tout cela. POV est fourni avec une bibliothèque
de textures et de couleurs où tout est déjà décrit. On risque
cependant de rencontrer les termes de NORMAL et REFLECTION (à
la manière anglaise), plus TRANSMIT qui a été remplacé par la
valeur FILTER dans la description de couleur.
Ses avantages, ses inconvénients.
Le principal avantage de POV c'est son prix! Il est GRATUIT. Ce
qui n'est pas le cas de la plupart des autres tracers .
Son second avantage: sa simplicité. il n'y a rien de compliqué
dans ses déclarations :
camera est une caméra,
light_source est une source de lumière,
object{} definit un objet,
sphere est une forme sphérique
cone est un cône,
box, une boite , etc.
Au pire faut-il savoir déchiffrer un bon dictionnaire
anglais-français. Il faut cependant reconnaître qu'il n'est pas
toujours très évident de lancer ses premiers calculs d'image
tant la ligne de commande de povray peut être encombrée par des
paramètres.
Troisième avantage: malgré les deux premiers il offre des
possibilités considérables, qui évoluent et s'enrichissent de
version en version.
Enfin tout, ou presque tout, est paramètrable, ce qui laisse une
liberté totale à l'utilisateur. Et on le trouve sur toute les
plate-formes informatiques (sun,linux,mac...).
Mon seul reproche: les textures ne sont pas gérées en
profondeur. Ce qui paraît plutôt contradictoire, car lorsqu'on
fait une coupe en utilisant les fonctions de CSG ( Constructive
Solid Geometry) la forme résultante laisse aparaître les dites
textures, cependant lorqu'il s'agit d'un volume transparent
l'effet est limité à la surface .
Animation et Raytracing
2/ Les possibilités actuelles de Pov en matière d'animation.
a/ Qu'est-ce que l'animation?
b/ Ce que peut faire pov...
c/ Les fichiers batchs (1)
d/ Quelques outils indispensables: Dta, Aaplay.
e/ Clock.
f/ Trameur ou Frameur?...,ou doit-on dire d'"abaqueur"?
g/ Ce qui prouve que la lecture de TOUS les numéros du REPORTER...
h/ Les fichiers batchs (2), améliorations.
i/ DEF: ultime solution quand on a pas les moyens de s'offrir un studio d'animation 3D
a/ Qu'est-ce que l'animation ?
Retour>>
On a fait de l'animation bien avant de faire du cinéma, je ne
vous assommerais pas avec les tribulations des zootropes,
phénakitiscopes et autres théâtres de lumières.
Le principe est simple: des images fixes apparaissent
successivement devant le spectateur assez rapidement pour se
mélanger sur sa rétine et lui donner l'impression d'un
mouvement continu. On rappelera que les images doivent être
produites sous la forme d'éclairs et qu'il est question d'effet stroboscopique. Que la durée de l'image sur la rétine porte le
nom de persistance rétinienne.
En prise de vue directe le mouvement est "haché" mécaniquement
et transformé en photographie (durée d'exposition: environ
1/50ième de seconde, à noter que l'on a fait de la
"chronophotographie" aussi,bien avant le cinéma, voir à ce
sujet les cahiers de Science&Vie consacrés à la vitesse de la
lumière où il est question du financement du laboratoire de
physiologie de Maray par Jules Ferry dans les années 1880).
Pour obtenir la restitution du mouvement il faut projeter ces
photographies en respectant le rythme de prise de vue (chaque
vue est visible 1/50 de seconde et séparée de la suivante par
une pause d'obscurité).
En dessin animé le mouvement est créé de toute pièce (****)
mais n'est visible, perceptible que si la transformation d'une
image à la suivante est cohérente: les différences sont
suffisamment proches et vont dans le même sens (qu'il soit
rectiligne ou courbe).
Exemple :
Il est important de gérer un délais entre le moment de
l'affichage et celui où on efface l'image. Un essai avec des
paramètres plus réduits permettra de se rendre compte que
l'oeil a besoin de cette pause. Tout simplement parce que le
déplacement de l'objet est trop important par rapport à sa
taille.
Une technique de contrôle fin du mouvement passe par les
fonctions circulaires.
(essai)
b/ Ce que peut faire pov...
Retour>>
(ce que je peux imaginer que l'on peut faire avec pov)
En matière de transformations qu' elles sont les possibilités de
POV?
3 transformations :
SCALE, ROTATE, TRANSLATE
4 opérations arithmétiques :
+,-,*,/...
et ... c'est tout!
On peut faire grossir une sphère :
sphere{<0,0,0>,1 scale<1,1,2>}
la faire avancer,
sphere{<0,0,0>,1 translate<0,0,2>}
la faire tourner sur elle-même:
sphere{<0,0,0>,1 rotate<0,0,90>}
ou en combinant les transformations la faire tourner comme si
elle était attachée à un pivot :
sphere{<0,0,0>,1 translate<1,0,0> rotate<0,0,90>}
Et au moins faut-il être précis et clair sur le fait que ces
transformations ne sont possibles que sur des objets déclarés,
dans le fichier courant et l'image courante. Hors, ce qui nous
intéresse c'est de "voir" l'évolution de ces transformations -
d'avoir un suivi des métamorphoses ; et obtenir en fin de
compte, un certain nombre d'images pour construire un fichier
d'animation.
Jusqu'à présent il n'était possible que d'écrire un ensemble(!!)
de fichiers pov dans lesquels on introduisait les
transformations à la main. On lançait la totalité dans un
fichier de traitement par lot.
c/ Fichier batch (1)
Retour>>
Dans la suite d'exemples les noms de fichiers précèdent leurs
contenu.
exemple (donc) :
commum.inc
// Les deux slashs permettent de faire des remarques.
// Fichier de déclarations communes à toutes les images,
// qu'il suffit de déclarer en 'include' au début du fichier
// principal.
#include colors.inc
#include textures.inc
//En fait cette partie de l'objet est constante inutile de la
//répéter.
declare obj= sphere{<0,0,0>,1 translate<4,0,0> pigment{White}}
camera{location<0,0,-2> look_at<0,0,0>}
light_sourc{<0,10,0> color White}
// fin du fichier commun.inc
sphere01.pov
// premier fichier principal
#include commum.inc
object{ obj rotate<0,0,0>}
//fin du fichier sphere01.pov
sphere02.pov
// second...
#include commum.inc
object{ obj rotate<0,4.5,0>}
//fin du fichier sphere02.pov
sphere03.pov
// etc.
#include commum.inc
object{ obj rotate<0,4.5*2,0>}
//fin du fichier sphere03.pov
...
sphere80.pov
// dernier fichier!!
#include commum.inc
object{ obj rotate<0,4.5*79,0>}
//fin du fichier sphere80.pov
pov.bat
povray -i%1.pov -o%1.tga -d -A -w480 -h360 +X -Linclude
anim.bat
call pov sphere01
call pov sphere02
call pov sphere03
call pov sphere04
...
call pov sphere80
( Rappels des paramètres utilisés dans le fichier pov.bat:
-i pour fichier de données, POV
-o fichier de sortie,TGA
-d pas de sortie écran (gagnons du temps),
-A pas anti-crénelage
(pour faire une animation ce n'est pas
absolument necessaire),
+x pour pouvoir arrêter les frais si on perd patience,
-L pour déterminer le repertoire de fichiers "include",
inutile si les fichiers sont dans le repertoire
courant, mais bien pratique si on garder un peu
d'ordre sur son disque. )
d/ Quelques outils indispensables!
Retour>>
On obtient donc 80 fichiers pour pov qui fourniront 80 images au
format tga.
Mais ce ne sont encore que des images fixes.
Il faut construire un fichier FLI (standard de l'animation que
l'on doit à Autodesk) pour cela on lance DTA de David K.
Mason.
Exemple de commande largement suffisante :
DTA sphere*
qui vous donnera un fichier anim.fli (dta rend toujours un
fichier anim.fli, quoi qu'il arrive, donc n'oubliez pas de
changer le nom avant de recommencer une compilation d'images)
que vous pourrez voir en utilisant AAplay.exe.
Méthode très lourde, il ne faut pas se faire d'illusion même
avec un ordinateur le travail d'animation est long et
fastidieux! Dans ces conditions faire de l'animation est
réservé à quelques moines capucins...
e/ Clock.
Retour>>
Dans un sens on peut dire que les dernières versions de POV
offrent une amélioration au travers de la variable CLOCK qui
permet de simplifier un peu les choses: au mieux on évite
d'écrire tous les fichiers POV superflus.
Le fonctionnement de CLOCK:
POV réserve une variable qui est documentée par la ligne de
commande. Ce qui suit le paramètre +K sert à effectuer les
calculs. Dans ces conditions le fichier de description peut se
limiter à ceci:
sphere.pov
#include colors.inc
#include textures.inc
declare obj= sphere{<0,0,0>,1 translate<4,0,0> pigment{White}}
camera{location<0,0,-2> look_at<0,0,0>}
light_sourc{<0,10,0> color White}
// et...
object{ obj rotate<0, CLOCK ,0>}
anim.bat
povray -i%1.pov -o%101.tga -d -A -w480 -h360 +X -Linclude +c +K1
povray -i%1.pov -o%102.tga -d -A -w480 -h360 +X -Linclude +c +K2
povray -i%1.pov -o%103.tga -d -A -w480 -h360 +X -Linclude +c +K3
povray -i%1.pov -o%104.tga -d -A -w480 -h360 +X -Linclude +c +K4
...
povray -i%1.pov -o%80.tga -d -A -w480 -h360 +X -Linclude +c +K80
A la première ligne du fichier batch CLOCK vaut 1, puis 2 à la
seconde et ainsi de suite, il suffit de modifier une partie du
nom de fichier de sortie avec une extension à la suite du
paramètre remplacable %1.
Un appel :
anim sphere
créera les fichiers :
sphere01.tga
sphere02.tga
etc.
Clock, est-ce vraiment une solution...
Imaginons un instant que dans un délire baroque un projet de
mise en scène complexe oblige à gonfler un objet, posé à plat
sur le sol, à le faire tourner sur lui-même, à le déplacer de
la "hauteur" de sa rotation, vers le haut, tout en faisant
changer sa texture, dans un mouvement cyclique le faisant
passer d'un système de rayures régulières à un chaos proche du
motif des veinures du marbre (!!), et le ramenant au sol plat
comme à l'origine. Le tout sur 80 images.
On pourrait donner à Clock la valeur du sinus d'1/80ième de PI
et le faire augmenter à chaque calcul d'image. Mais pour la
rotation il est nécessaire de fournir un entier qui multiplie
2.25. Au moins deux variables...
En fait il nous faudrait au moins 4 variables telles quelles
sont décrites dans Le fichier NUM.INC. Leurs valeurs
changeraient en fonction de l'expression qui les suit.
Exemple :
Num.inc
declare diviseur=80 // [diviseur+0]
declare num=1 // [num+1]
declare num2=0.0 //[sin(3.14159/diviseur*num)]
declare num3=1.0 //[cos(3.14159/diviseur*num)]
Le fichier de description du délire baroque ressemble assez à ce
qui suit :
Sphere.pov
#include "colors.inc"
#include "textures.inc"
#include "num.inc"
declare test= texture{
pigment{
gradient x
frequency 4
color_map{
[0.0,0.25 color rgb<0,0,1> color Yellow]
[0.25,0.5 color Yellow color rgbf<1,0.5,0.7,0.5> ]
[0.5,1 color rgbf <1,0.5,0.7,0.5>
color rgbf<1,0.2,1,1> ] }
turbulence <0.2+ 0.82*(1- NUM3 ),
0.65*(1- NUM3 ),
0.65*(1- NUM3 )> }
finish{ brilliance 1
phong 1} }
light_source { <0, 12.0, 1> color White}
light_source { <-2, 12.0, -2> color White}
light_source { <12, 0, 0> color rgb<0.7,0.7,0.5>}
camera { location <8.0,2, -17.5> look_at <0, 4,0> }
object{ sphere{<0,0,0>,0.5 }
texture { test }
scale<12,11*(1- NUM3 )+1,12>
rotate<2.25* NUM ,0,0>
translate<0,6.5*(1- NUM3 )+1,0> }
object{ difference{ plane{<0,1,0>,0 }
sphere{<0,0,0>,12 scale<1,0.1,1> translate<0,0.5,0>}
} pigment{White}}
Ce qu'il nous manque c'est un logiciel qui évalue la valeur de
ces variables et les remplace chaque fois qu'on refait appel à
POV.
f/ Qu'est-ce qu'un trameur ou Frameur?...,
ou doit-on parler d'"abaqueur"?
Retour>>
C'est ABAK5.EXE qui traite le fichier 'Num.inc'.
Son action permet de compenser l'absence de traitement de
fonctions arithmétiques évoluées ou transcendantales
(sin,cos,ln,exp...). Et la limitation de la variables
modifiable en ligne de commande.
'Num.inc' doit être un fichier de variables, il peut porter un
autre nom .Chaque déclaration de variable, est suivie de
l'expression qui doit la transformer.
Exemple 1:
declare num=0.0 //[num+1]
...
A chaque passage la valeur de num est augmentée d'un point.
Exemple 2:
declare num=1.0 //[num+1]
declare num2=0.0 //[cos(pi/80*num)]
...
On peut déclarer 499 variables différentes, et chacune d'elle
peut être utilisée dans les expressions suivantes (un peu comme
en pascal où une variable ne peut être traitée par le
compilateur avant d'être déclarée).
Notes :
- L'expression est impérativement sur la même ligne que la
variable.
- Elle succède une paire de '/', séparateurs autorisé par pov2.2
- Elle doit se trouver entre crochets [] .
- Ne doit pas dépasser 256 caractères (partie déclaration pov et
caractères espaces compris), en fait: une seule et unique chaine.
- Chaque nom de variable ne peut exéder 47 caractères, le
surplus est tronqué.
- Toutes les lignes qui ne commencent pas par 'declare' sont
ignorées, mais recopiées tel qu'elles.
h/ Ce qui prouve que la lecture de TOUS les numéros du REPORTER
est absolument nécessaire!
Retour>>
L'évaluation des fonctions est assurée par les procédures du
micro évaluateur d'expression décrit par Luc Rivière (alias
Legolas) dans LE REPORTER n° 2, que je remercie au passage pour
son aimable autorisation.
Structure de l'unit micro_ev.pas, construite à partir de très
légères modifications de micro.pas :
unit micro_ev;
interface
uses crt;
type tident=string[6];
const chiffre:set of char=['0'..'9'];
lettre:set of char=['A'..'Z'];
nbIdent=18;
identificateur:array[1..nbIdent] of tident=(
'PI','AND','OR','MOD','DIV','ABS','ARCTAN','COS','EXP','FRAC',
'TRUNC','LOG','LN','ROUND','SIN','SQR','SQRT','TAN');
procedure evaluation(var ligne:string; var solution:real);
implementation
....
ici toutes les procédures et les variables qui ne sont pas
mises en commun,
...
plus, une procedure supplémentaire qui n'est rien d'autre
que le programme principal de micro avec des variables
externes:
... var resultat:numer;
procedure evaluation(var ligne:string; var solution:real);
begin
chaine:='';
chaine:=chaine+ligne;
InitLex;
if not(erreur) then expression(resultat);
if not(erreur) then
begin
with resultat do if typ='I' then solution:=xi
else solution:=xr;
if not(lexCode=termine) then
casErreur('ATTENTION! Fin de chaine non évaluée');
end;
end;
i/ Fichier Batch...(2)
Retour>>
Hélas pour l'instant, au moment particulier où ces lignes sont
écrites, au coeur de la nuit, alors que j'ai 48 heures retard
pour la remise de ce texte, il reste un point très sensible à
améliorer: la longueur du fichier batch qui doit être utiliser
pour rendre toutes les images.
Il faut encore au moins deux lignes pour chaque image calculée.
Cependant, comme je suis obligé de temps en temps d'arrêter de
faire du ray-tracing et le l'animation pour me consacrer à des
taches plus ingrates et terre-à-terre (mais, au combien, plus
lucratives) il m'a semblé judicieux d'ajouter la possibilité de
reprendre le travail à partir de n'importe quel point de la
suite des images (en vérifiant qu'il y ait bien dans le fichier
de traitement de trame une variable qui initialise toutes les
autres à partir de ce point ).
En voici un fragment :
pova.bat
if not "%2"=="" goto %2
:1
if "%3"=="1" goto fin
povray -i%1.pov -o%101.tga -d -r -A -w240 -h150 +X +c +v
abak5 num.inc
:2
if "%3"=="2" goto fin
povray -i%1.pov -o%102.tga -d -r -A -w240 -h150 +X +c +v
abak5 num.inc
:3
if "%3"=="3" goto fin
povray -i%1.pov -o%103.tga -d -r -A -w240 -h150 +X +c +v
abak5 num.inc
:4
if "%3"=="4" goto fin
povray -i%1.pov -o%104.tga -d -r -A -w240 -h150 +X +c +v
abak5 num.inc
:5
if "%3"=="5" goto fin
...
:fin
rem fin du fichier pova.bat
Les paramètres sont : %1 le nom du fichier POV
%2 le numero de l'image de départ
%3 le numéro de l'image d'arrivée.
Exemple : POVA sphere 1 80
Traitera la totalité des images.
POVA sphere 5 25
Ne traitera que 10 images. Laisse num.inc augmenté de 10, mais
sans vérifier si il a bien commencé à traiter les expressions
pour la valeur 5.
j/ DEF.
Retour>>
Povray peut se servir de fichier 'def' dans lesquels on range
tous les paramètres dont on aurait bourré la ligne de commande.
Grâce à ce type de fichier il doit être possible de réduire ce
fichier batch à sa plus simple expression. Une serie de
commande s'enchainant jusqu'à ce qu'un fichier 'fin' par
exemple soit trouver dans le repertoire courant :
pova.bat
:oncontinue
if exist fin goto sortie
povray a.def
abak5 num.inc a.def
goto oncontinue
:sortie
del fin
rem fin du fichier pova.bat
Il faudra modifier ABAK5 pour qu'il reconnaisse la présence
d'un second paramètre et dans ce cas particulier: contrôler la
présence de deux variables dans le fichier 'inc' qui lui
indiqueront le numero de la première image et le numero de la
dernière (nom au choix).
A partir de ces indications il pourra ouvrir le fichier *.def, y
lire le nom du fichier de sortie (derrière '-o')et lui ajouter
la valeur de la variable 'num'(on tache de faire suivre la
variable num de l'expression [num+1]).
Lorsque num est égale à dernière image on crée sur le disque le
fichier 'fin' qui arrête l'exécution du fichier batch.
Ce sera tout pour cette fois..
Retour>>
(ouf...)