Introduction
Qui n'a jamais entendu parler de Pixar?,
Qui ne conna�t pas le film Toy Story?.
Pixar Animation Studios est reconnu depuis longtemps pour son travail d'animation assist�e par ordinateur.
Luxo Jr. (1986) a �t� le premier film en images de synth�se
nomin� pour un Oscar et il a re�u plus de 20 prix dans des festivals cin�matographiques internationaux.
En 1987, Red's Dream re�u de nombreux prix au Festival d'Animation de Zagreb
et au Festival International du film de San Francisco.
Le premier film d'animation � �tre r�compens� par un Oscar f�t Tin Toy (1998),
pour lequel Pixar r�alisa une mod�lisation du visage d'un b�b� qui comportait plus de 40 muscles
contr�l�s par l'animateur.
En 1989 Knick Knack sortit de leurs studios, il s'agit de l'histoire
d'un bonhomme de neige qui vit � l'int�rieur d'une boule de cristal. Ce film
a d'abord �t� r�alis� en 3D, mais une version traditionnelle a aussi �t�
distribu�e.
Bient�t suivirent un certain nombre de succ�s dont le film Toy
Story. Il s'agit de l'un des premiers longs m�trages produit en int�gralit� sur ordinateur.
Sur le site de Pixar
vous pourrez trouver des informations suppl�mentaires, comme la date de sortie pr�vue pour Toy Story II
quelquepart en 1999.
Pixar a d�velopp� l'interface Renderman pour s�parer le d�veloppement
des 'modeleurs' et des moteurs de rendu 3D. Le modeleur est l'outil
utilis� pour r�aliser des sc�nes, construire des animations, etc. Le seul
r�le du moteur de rendu (renderer) est de g�n�rer une image � partir de la description
du modeleur en calculant tous les d�tails comme les ombres, les lumi�res, les textures,etc.
Renderman permet aux infographistes de d�finir l'image qu'ils vont obtenir,
mais pas comment son calcul sera r�alis�.
Cela signifie que le modeleur n'a pas � se pr�occupper du calcul de l'image.
De la m�me fa�on, un moteur de rendu conforme aux sp�cifications du
standard Renderman peut utiliser les techniques de Z-Buffer, scan-line , lancer de rayon, radiosit� ou toute autres
m�thode pour "dessiner" les objets car cette �tape ne d�pend pas de la norme.
On peut voir l'interface Renderman comme un format pour les descriptions de sc�nes,
de m�me que Postscript est un format de description de pages. Ce standard est ind�pendant
des mat�riels et des syst�mes d'exploitation.
The RenderMan@ Interface Procedures and RIB Protocol are:
Copyright 1988, 1989, Pixar.
All Rights Reserved.
RenderMan@ is a registered trademark of Pixar
L'objectif de cet article est de pr�senter rapidement l'interface RenderMan,
et pour cela nous utiliserons les logiciels Blue Moon
Rendering Tools de Larry Gritz. Ce moteur de rendu est librement redistribuable
(la version binaire, pour un usage personnel), des versions existent pour de nombreux
syst�mes dont Linux (en fait il s'agit d'une des premi�res adaptations r�alis�es), il exploite
le lancer de rayon et la radiosit� et n'a que peu � envier � Photorealistic RenderMan (PRMan),
le produit commercial de Pixar.
Tout d'abord les syst�mes de coordonn�es sont les m�mes pour la sc�ne et la cam�ra,
il s'agit du syst�me dit de la main gauche (LHS - Left Hand System, comme pour Pov-Ray),
avec lequel l'origine est au centre de l'�cran, l'axe des abscisses (X) � droite,
l'axe des ordonn�es (Y) vers le haut et la quote (Z) dirig�e vers l'int�rieur de l'�cran.
L'illustration qui suit montre la cam�ra utilis�e par d�faut (l'axe des X est rouge,
l'axe des Y vert, et l'axe des Z bleu, cliquer sur l'image pour voir le code source).
Le syst�me dit de la main droite (RHS) est identique sauf pour le sens de l'axe des Z
qui est invers�.
Avec Pov-Ray le syst�me de coordonn�es de la sc�ne est fixe
et c'est la cam�ra et les objets que l'on peut d�placer dans le monde virtuel
en utilisant des transformations. Pour Renderman, c'est l'inverse,
la cam�ra est fixe et c'est le syst�me de coordonn�es de la sc�ne que
l'on modifie pour changer le point d'observation. Un exemple va rendre
tout cela plus clair.
RenderMan poss�de de nombreuses primitives, pour d�finir des
objets, des sources de lumi�res, ... nous allons voir maintenant
le format des quadriques, mais il y en a d'autres aussi fameuses
(par exemple les patches de b�zier, les polygones,...)
|
|
Disque hauteur rayon
thetamax
Disque 5
10 300 |
C�ne hauteur
rayon thetamax
C�ne 15
10 300 |
|
|
Cylindre rayon zmin
zmax thetamax
Cylindre 10
-5 10
300 |
Sph�re rayons zmin
zmax thetamax
Sph�re 10
-4 8
300 |
|
|
Tore major rad min rad
phimin phimax thetamax
Tore 10
4
90 320
300 |
Parabolo�de rayon zmin
zmax thetamax
Parabolo�de 10
4 15
300 |
|
Hyperbolo�de point1
point2 thetamax
Hyperboloid 0 10 -5
10 5 15 300 |
Le lecteur a peut �tre d�j� remarqu� que le format de certaines de ces primitives
n'est pas particuli�rement simple, mais si l'on consid�re que le fichier RIB est
g�n�r� par un modeleur, le format s'av�re adapt� par sa concision et sa puissance.
Installation
Commen�ons par visiter la page des Blue Moon Rendering Tools
et t�l�chargeons le programme. A l'heure o� j'�cris, la version courante est la 2.3.6 et pour la d�compresser
on proc�de comme habituellement :
rabit:~/$ gzip -d BMRT2.3.6.linux.tar.gz
rabit:~/$ tar xvf BMRT2.3.6.linux.tar
Apr�s la d�compression et le d�sarchivage on obtient un nouveau r�pertoire
nomm� BMRT 2.3.6. Il contient les ex�cutables (dans bin/), les exemples
(dans examples/) et la documentation en format PostScript
et HTML (sous doc/), il y a aussi un fichier README qui contient
des informations additionnelles sur le programme.
Suivez la proc�dure d'installation d�crite dans le fichier README, elle est simple
et ne devrait pas poser de probl�me.
Premiers pas
Familiarisons nous avec le langage de RenderMan en examinant un exemple
typique (../../common/May1998/disptest.rib). L'image est g�n�r�e par la commande
rendrib -v ../../common/May1998/disptest.rib (cliquer sur l'image pour la visualiser au format 1024x768 et avec
l' anti-aliasing 2x2).
Ce fichier fait partie des nombreux exemples que l'on peut trouver
dans le sous-r�pertoire examples/ de BMRT (Blue Moon Rendering Tools)
et l'on peut remarquer que le fichier source n'est pas tr�s long (lorsque l'on
passera aux animations vous verrez les fichiers grossir consid�rablement)
Il y a plusieurs ex�cutables sous
bin/: rendrib,
rendribv et rgl. Rendrib est le programme
de rendu � proprement parler, rendribv permet de calculer les sc�nes
en mode fil de fer, et rgl en mode polygone. Les deux derniers programmes
sont utilis�s pour pr�visualiser les objets et les animations en cours d'�laboration,
mais le rendu final doit toujours �tre r�alis� avec rendrib.
Le format des fichiers RIB (Renderman Interface ByteStream) est tr�s simple, ce qui
ne l'emp�che pas d'�tre puissant. Il s'agit de fichiers texte (exactement comme Pov-Ray).
Un fichier RIB bien �crit doit contenir:
-
Options globales pour toutes les images (frames)
(r�solution, anti-aliasing, etc.)
-
FrameBegin
-
Initialisation du contexte graphique d'une image (nom de fichier,
niveau de d�tail,etc )
-
Attributs du contexte graphique pour l'image (par exemple,
les lumi�res, le type de projection,etc )
-
WorldBegin
-
Modification du contexte graphique et d�finition des objets de la sc�ne
� calculer.
-
WorldEnd.
Qui implique les cons�quences suivantes : L'image est calcul�e
et sauvegard�e, tous les objets et les sources de lumi�res d�clar�s au (6) sont
d�truits, et le contexte graphique redevient ce qu'il �tait en (5).
-
FrameEnd. Le contexte graphique est restaur� � son �tat du (2).
-
Les �tapes (2) � (8) sont r�p�t�es si plusieurs frames sont d�finies.
Le contexte graphique contient toute l'information n�cessaire pour calculer
l'apparence d'une primitive. Il se divise en deux parties : une section globale
qui reste constante d'une primitive � l'autre et un contexte courant qui
change avec les primitives. Les param�tres du contexte global sont appel�s
des options et les contextes courants des attributs .
Pour mieux comprendre ces options et attributs, et pour se faire une id�e
de la fa�on dont on d�crit une sc�ne avec RenderMan, suivons ligne par ligne
l'exemple pr�c�dent. Cela constituera un bon tutoriel qui montrera ce que l'on peut
faire et comment on le fait.
1.- ##RenderMan RIB-Structure 1.0
2.- version 3.03
3.-
4.- ###########################################################################
5.- #
6.- # This RIB file demonstrates some more complex procedural textures.
7.- # Two spheres show the use of "stucco" and "dented" displacement shaders.
8.- # The floor shows the gmarbtile_polish shader, which is polised green
9.- # marble tiles. Note that the reflection is accomplished by the shader
10.- # actually calling the trace() function, rather than reflection mapping.
11.- #
12.- ###########################################################################
13.-
14.- Option "searchpath" "shader" [".:../shaders:&"]
15.- Display "balls2.tif" "file" "rgb"
16.- Format 400 300 -1
17.- PixelSamples 1 1
18.-
19.- Declare "prmanspecular" "integer"
20.- Option "render" "prmanspecular" [0]
21.- Projection "perspective" "fov" 35
22.- Translate 0 -0.55 8
23.- Rotate -110 1 0 0
24.-
25.-
26.- WorldBegin
27.-
28.- LightSource "ambientlight" 1 "intensity" 0.02
29.-
30.- Declare "shadows" "string"
31.- Attribute "light" "shadows" "on"
32.- LightSource "distantlight" 1 "from" [0 1.5 4] "to" [0 0 0] "intensity" 0.6
33.-
34.- AttributeBegin
35.- Declare "txtscale" "float"
36.- Declare "Kr" "float"
37.- Declare "darkcolor" "color"
38.- Declare "lightcolor" "color"
39.- Declare "veincolor" "color"
40.- Surface "gmarbtile_polish" "Ka" 1 "txtscale" 0.5 "Kr" .25 "Kd" 0.3 "Ks" 0.2 "roughness" 0.02
41.- Patch "bilinear" "P" [ -5 -5 0 5 -5 0 -5 5 0 5 5 0 ]
42.- AttributeEnd
43.-
44.- AttributeBegin
45.- Color [ .6 .6 .6 ]
46.- Translate -1.5 0 1
47.- Surface "matte"
48.- Declare "frequency" "float"
49.- Declare "Km" "float"
50.- Displacement "stucco" "frequency" 20 "Km" 0.3
51.- Sphere 1 -1 1 360
52.- AttributeEnd
53.-
54.- AttributeBegin
55.- Translate 1.5 0 1
56.- Color 1 .45 .05
57.- Declare "Kr" "float"
58.- Declare "Km" "float"
59.- Surface "shiny" "Kd" 0 "Kr" 0.25 "roughness" 0.15 "specularcolor" [1 .5 .06]
60.- Displacement "dented" "Km" 0.5
61.- Sphere 1 -1 1 360
62.- AttributeEnd
63.-
64.- WorldEnd
Les commentaires commencent par le caract�re #,
comme � la ligne 1 et de 4 � 12. Les caract�res # peuvent �tre plac�s
n'importe o� dans le fichier et le reste de la ligne est alors ignor�
(comme pour // en C++).
Les commentaires sont tr�s utiles lorsque l'on �dite des sc�nes � la
main car ils nous aident � comprendre les d�tails de la description.
La ligne montre un exemple de la directive version. Elle
d�clare la version de l'interface utilis�e (3.03); La version la plus
r�cente est la 3.1 qui date de Septembre 1989 (Oui, vous avez bien lu, 1989),
mais il y a des revisions de Mai 1995.
Les directives searchpath et shader � la ligne 14 d�finissent
le chemin pour les "shaders", les modules dont le moteur de rendu se sert pour
calculer l'apparence d'une mati�re particuli�re (mati�re plastique, transparente,...)
Il s'agit d'une des fonctionnalit�s qui rendent l'interface tr�s puissante puisque les
textures des objets fonctionnent comme des Plug-Ins, et qu'il est facile de cr�er
de nouvelles textures, effets... sans attendre une nouvelle version plus puissante
du logiciel. En g�n�ral, on peut utiliser la variable d'environnement SHADER pour indiquer
l'emplacement de ces fichiers, et il n'est alors plus n�cessaire de le d�clarer explicitement.
L'option Display est utilis�e ligne 15. Elle d�finit le nom du
fichier de sortie "balls2.tiff" et son format, ici RGB avec "file" "rgb".
A la ligne 16, nous choisissons la r�solution (la taille) de l'image � calculer,
� la suite de l'option Display. Dans cet exemple, la r�solution demand�e
est 400x300, et le -1 correspond au format (aspect ratio) du pixel (en fait ce devrait �tre +1,
je ne sais pas pourquoi on trouve -1 ici).
Ensuite vient l'�chantillonnage horizontal et vertical r�alis� pour chaque pixel,
c'est � dire le nombre de rayons lanc�s pour calculer la couleur d'un pixel. La directive
PixelSamples 2 2 provoque le lancer de 4 rayons pour chaque pixel, ce qui
permet d'obtenir une image de bonne qualit� (avec de l'anti-aliasing), mais
�galement des temps de calculs plus longs. Dans notre cas, un �chantillonnage
de 1 x 1 = 1 acc�l�re les calculs en ne lan�ant qu'un rayon par pixel.
La ligne 19 d�clare la variable enti�re prmanspecular,
ou plut�t prmanspecular est d�fini comme un mot cl�
et � chaque fois que l'analyseur syntaxique rencontrera ce mot
cl�, il consid�rera le nombre qui suit comme �tant de type entier.
Puis on trouve le choix de la projection dans l'espace, cet exemple sp�cifie une
projection en perspective avec la directive "perspective" et une angle
de vue ("fov" = field of view) de 35 degr�s.
La cam�ra est positionn�e aux lignes 22 et 23. On trouve d'abord une translation,
suivie par une rotation, mais comme toutes les transformations sont r�alis�es
en vidant une pile, la premi�re transformation r�alis�e est en fait la derni�re d�finie,
et la rotation pr�c�de la translation ( dans ce cas toutes les transformations sont ex�cut�es
lorsque RenderMan rencontre la directive WorldBegin ). Dans l'exemple, on effectue
une rotation de -100 degr�s autour de l'axe X ( pour tourner autour de l'axe Y, il faut �crire
Rotate 45 0 1 0), puis ont translate de -0.55 unit�s le long de l'axe Y et de
8 unit�s le long de l'axe Z. Rappelez vous que ces transformations (rotation et translation)
s'appliquent au centre des coordonn�es de l'espace plut�t qu'� la cam�ra.
(note du traducteur anglais: OpenGL utilise la m�me convention pour les transformations).
Les images suivantes illustrent les diff�rentes �tapes de l'application des deux transformations.
Apr�s les pr�liminaires pr�c�dents, on trouve la sc�ne elle-m�me (c'est �
dire les d�clarations des objets, des �clairages...).
Toutes les sc�nes doivent commencer par WorldBegin et finir par
WorldEnd (que l'on trouve ici respectivement aux lignes 26 et 64).
Les premi�res lignes (28 � 32) de notre exemple d�finissent les sources de
lumi�res; chaque source de la sc�ne doit �tre num�rot�e de fa�on unique, la
premi�re �tant la source de lumi�re ambiante sont l'intensit� est ici de 0.02.
Ensuite la variable shadows est d�clar�e comme une chaine de caract�res
et l'option de calcul des ombres est activ�e. La ligne 32 cr�e une source de lumi�re
de type distantlight (une source de lumi�re situ�e � une distance infinie comme
le soleil) en r�utilisant le num�ro 1; comme nous l'avons vu pr�c�demment, ce nombre
devrait �tre diff�rent, cela fonctionne tout de m�me ici car BMRT semble ignorer la
num�rotation des sources de lumi�res, mais pour assurer la compatibilit� (par exemple
avec PRMan de Pixar), il faut respecter strictement l'interface.
L'intensit� de la seconde source de lumi�re est la m�me que pour la premi�re
(ce sont des attributs communs) et le vecteur direction d�fini par les champs
from et to, g�n�re des rayons parall�les, comme dans le cas
de la source distante.
Maintenant nous rencontrons les trois objets �l�mentaires qui
constituent la sc�ne, chaque objet est s�par� par une paireAttributeBegin
AttributeEnd car chacun d'eux a ses propres caract�ristiques de position
et d'apparence. Si la seule caract�ristique diff�rente entre les objets �tait la
position, on aurait pu d�clarer la texture � l'ext�rieur et d�clarer les objets avec
TransformBegin et TransformEnd.
Le premier objet (lignes 34 � 42) est un patch et un patch peut �tre : uniforme
ou non uniforme, rationnel ou non rationnel, bilin�aire ou bicubique (ce qui conduit
aux patches de B�zier et aux Bsplines... (Tout bon livre d'infographie.
aidera � comprendre ces primitives). Dans l'exemple nous avons un patch bilin�aire
compos� de quatre points : Il est d�fini avec la directive "P"
suivie des coordonn�es (x,y,z) des points. La texture de l'objet est sp�cifi�e
par la directive Surface, dont le premier argument est un fichier shader
et les arguments suivants d�pendent du shader choisi. L'image ci-dessous pr�sente l'image que
l'on obtient :
Les lignes 44 � 52 ajoutent d'autres objets � la sc�ne :
Une sph�re (ligne 51) dont la couleur est d�termin�e par la directive
Color [R G B]. Cette sph�re est translat�e et on lui donne
ici pour type de surface matte. Puis vient la fonction
la plus importante de BMRT, les shaders de d�placements.
Leur effet est comparable aux bump-maps de Pov-Ray sauf que
BMRT ne simule pas ces "bosses" qui sont bien r�elles ! Enfin le dernier effet
rend la surface et les bordures de la sph�re irr�guliers.
Les shaders de d�placements s'utilisent comme les shaders de
textures, en faisant suivre leur nom de leurs param�tres.
La description de la sph�re est un peu �trange : On trouve d'abord le rayon,
puis zmin et zmax qui d�limitent (clipping) la sph�re le
long de l'axe Z (par exemple avec les valeurs -1 et 1 on ne modifierait pas la sph�re mais
avec 0 et 1 on la couperait en 2), et le dernier param�tre d�finit l'angle "occupp�" par la sph�re
(360 pour la sph�re compl�te, 180 pour une demi,...). Voici une image de la sph�re de l'exemple :
L'objet suivant ressemble au premier, seuls la texture et la position diff�rent,
et comme je ne vais pas r�peter les m�mes explications, lan�ons le calcul et regardons
ce que nous obtenons :
Nous avons atteint la fin du fichier. Maintenant, on peut dire
que le d�veloppement de sc�nes n'est pas difficile, mais une sc�ne complexe ou
une animation n�cessitent des fichiers tr�s gros. Ce probl�me peut
�tre contourn� en utilisant un modeleur qui supporte RenderMan (tous les
bons modeleurs peuvent exporter au format RIB) ou alors programmer
une animation en C. La distribution de BMRT est fournie avec un r�pertoire include
qui contient tous les biblioth�ques n�cessaires. Celles-ci contiennent des fonctions
qui �crivent des directives RIB sur la sortie standard. Les deux m�thodes se ressemblent :
A WorldBegin du fichier RIB correspondra une fonction RiWorldBegin()
dans votre programme C (Si vous �tes interss�, lisez RenderMan for Poets,
document fourni dans le r�pertoire doc/.
Conclusions
L'interface RenderMan est tr�s puissante et Toy Story a vraiment �t� r�alis� avec elle
(en utilisant le modeleur marionet). Sur le site
www.toystory.com, on peut trouver diverses
informations sur le film. La sp�cification de l'interface est disponible sur
giga.cps.unizar.es.
En plus des sp�cifications,on peut y trouver le manuel de PRMan (Le Produit de Pixar)
et aussi quelques exemples.
Dans le prochain article nous modelliserons un petit objet, et nous utiliserons
la biblioth�que C pour apprendre � l'exploiter et �galement pour faciliter
le passage � l'animation par la suite. Le petit objet de l'animation pourrait �tre
le pingouin de Linux ou peut-�tre Bill Gates (ou m�me les deux ensemble si nous faisions
d�sint�grer le deuxi�me par le pingouin... :)
|