Introduction
|
Monstres
et Cie © 2002 Disney/Pixar |
Salle obscure et
comble, bien installé dans votre siége, popcorns en main,
vous êtes plongés dans le film se déroulant sur
la toile géante où Mike et Sulley se lancent leurs répliques.
Un film banal me direz-vous. Exactement. A la seule différence
que nos deux comparses Mike et Sulley ne sont pas des acteurs ordinaires.
Ils ne sont autre que les héros du tout nouveau film d'animation
pondu par le studio Pixar : Monstres et Compagnie.
Autrement dit deux acteurs purement virtuels, tout droit sortis des
fermes de serveurs de rendu de Pixar.
Aprés Toy Story, 1001 pattes, Shrek et Final Fantasy, Monstres
et Cie vient illustrer de façon poignante, la multiplication
de la puissance de calcul des serveurs mais surtout l'avancée
des techniques de rendu graphique.
Désormais les rendus graphiques dit "photoréalistes"
sont partout. Aprés avoir envahi le monde des effets spéciaux
du cinéma, de la publicité, du design, ils s'illustrent
désormais pleinement dans des films d'animations comme ceux de
Pixar ou plus récemment ceux de PDI/Dreamworks et Square Pictures.
La recherche dans ce domaine n'à jamais été aussi
intensive qu'actuellement et d'aucun ne diront que l'imagerie de synthése,
epaulée par des moteurs de rendu graphique de plus en plus puissants
à un bel avenir tout tracé devant elle.
Les moteurs de
rendu
Pour
obtenir de tels rendus, ne croyez pas que les artistes utilisent 3DS
Max ou même Maya pour calculer les images finales de l'animation.
En effet les moteurs de rendu de ces logiciels ne sont pas adaptés,
tant au niveau de la personnalisation du rendu final, qu'au niveau de
la vitesse de calcul (qui n'est pas à negliger). Les artistes
utilisent donc principalement Maya et Softimage pour modéliser
et eclairer les scénes, puis les ces derniéres sont alors
exportées hors du logiciel de modélisation, pour êtres
finalement rendues sous Renderman qui est le moteur de rendu de Pixar,
largemment utilisé dans le monde de l'industrie du cinéma
et des films d'animation.
Les
moteurs de rendu peuvent être de deux types. On distingue les
moteurs qualifiés de "scanline renderer" (rendu par
scanline), et les moteurs dit "raytracer" (lanceurs de rayon
pour ne pas vexer nos académiciens).
Sans entrer dans le détail (rassurez-vous, nous aurons largemment
l'occasion de nous y plonger), les moteurs de rendu par scanline vont
calculer l'image finale pixel par pixel en commencant
en haut à gauche de l'image, pour finir en bas à droite
(le chemin de parcours pouvant varier selon le moteur). Le calcul de
l'image finale se fera si necessaire par plusieurs passes successives,
pour par exemple simuler l'éclairage et d'autres effets.
Un raytracer n'est qu'une extension d'un moteur de rendu par scanline.
Dans le sens qu'un raytracer va également calculer le rendu final
pixel par pixel, cependant le calcul des refractions, reflections est
fait en une passe et est exact, du fait qu'un raytracer va faire un
calcul recursif (quand un rayon rentrera en collision avec un objet,
deux nouveaux rayons seront émis : le rayon réfracté
par l'objet (si il existe) et le rayon réfléchi (si il
exite), et ainsi de suite), ce qui implique des temps de calcul considérables
pour une précision inégalable.
Les moteurs de rendu par scanline sont beaucoup plus rapide que les
raytracers mais donnent également des résultats beaucoup
moins satisfaisants, du fait que les ombres, reflections, éclairages
... sont purement simulés.
A l'opposé un raytracer donnera des effets ultra réalistes
pour la simple raison que le calcul de la lumiére et des autres
effets seront exacts, se basant sur des formules physiques réeles,
mais cela au depend de la vitesse de rendu (on ne peut pas avoir le
beurre et l'argent du beurre).
 |
Heaven
7 - 2000 Exceed |
Les logiciels de
modelisation comme 3DSMax, Maya, Lightwave, utilisent à la fois
des moteurs de rendu par scanline et des raytracers. En effet lorsque
dans 3DS Max vous visualisez une preview de votre scéne dans
un des viewports, vous avez à faire sans le savoir à un
moteur de rendu par scanline rapide. Par contre lorsque vous lancez
le calcul du rendu final, c'est un raytracer qui prend le relai et commence
son dur labeur.
Pour information sachez que les raytracers de rendus finaux sont propres
à chaque logiciel de modélisation, et donnent des résultats
différents sur une scéne identique (essayez donc de calculer
une même scéne complexe au niveau de l'éclairage
sous différents modeleurs et vous serez étonnés).
Sans vouloir faire de favoritisme, le moteur de rendu de Lightwave est
reconnu comme étant le plus puissant de tous les logiciels de
modélisation.
Loin de se limiter
aux seuls raytracers des logiciels de modélisation, des centaines
de raytracers sont disponibles sur le net, la plupart payants, et peuvent
être utilisés comme plugins de rendu pour remplacer les
moteurs de rendu par défaut des principaux modeleurs du marché.
Le moteur de rendu
Renderman de Pixar, lancé en 1989 et qui n'a cessé d'évoluer
depuis, effectue quant à lui un rendu par scanline, pour la simple
et bonne raison qu'un raytracer demande énormément de
temps de calcul, et malgrés les fermes de serveurs démesurées
utilisées par les studios de production, le temps de rendu reste
considérable du fait de la résolution demandée,
et attendre 50 ans avant d'avoir la copie finale du film n'est pas vraiment
trés intéréssant ,)
Un rendu par scanline pour une telle qualitée, l'auteur de cet
article essaierais-t-il de m'embrouiller ? me rétorquerez-vous.
Que nenni ! L'astuce dans ce cas réside dans le fait que sur
les effets speciaux d'un film ou même sur un film d'animation,
les images defilent tellement vite qu'il n'est pas nécéssaire
d'avoir une qualitée de rendu hors du commun pour chaque image.
De plus pour obtenir une qualitée de rendu optimale, Renderman
à développé un systéme de shaders trés
puissant qui permet réellement de personnaliser le rendu final
à sa guise.
Pour finir nous pouvons également préciser qu'il existe
plusieurs types de moteurs : des moteurs temps réel, comme par
exemple des raytracers temps réel (qui sont bien souvent en fait
des moteurs de rendu par scanline et non des raytracers) qui calculent
le rendu aussi rapidement que possible pour pouvoir assurer une visualisation
en temps réel (la démo Heaven 7 de Exceed en est un exemple
parfait), et des moteurs de rendu non temps réel comme ceux utilisés
dans le calcul d'images et de films, qui prennent des minutes voire
des heures pour calculer une unique image avec une précision
et une qualitée incroyable.
Autour
de ce dossier
Dans ce dossier, qui sera en fait une série d'articles
sous forme de tutorials, nous verrons comment développer un raytracer
non temps réel.
Nous étudierons dans un premier temps les bases même du
raytracing et avancerons doucement mais sûrement vers des concepts
beaucoup plus évolués.
 |
Final
Fantasy © 2001 Square Pictures |
Chacun
des articles sera accompagné d'un code source C++ commenté
et documenté Doxygen (je ne peux que vous conseiller la lecture
du dossier réalisé par Martin Korolczuk sur Doxygen [lien
en bas de page]), afin d'illustrer pratiquement les concepts évoqués
et développés dans l'article. Bien sûr ce code source
ne constitue qu'un complément aux articles, et je vous conseille
de vous y réferrer uniquement quand vous aurez bien assimillé
les techniques énoncées dans l'article. Je dirais même
que rien ne vous oblige à consulter les sources, et cela ne devrait
être fait qu'en dernier recours ,)
En effet du copier/coller du code source complet sans rien n'avoir compris
n'est pas vraiment trés intelligent et ne vous sera pas utile.
Le code source de base evoluera au fil des articles, et au bout de quelques
articles nous aurons déja un raytracer conséquent fonctionnel,
le but final étant d'avoir un raytracer puissant,
modulaire, compétitf et rapide, intégrant les toutes derniéres
decouvertes en la matiére.
Cependant ne vous leurrez pas, le développement d'un raytracer
de base est assez rapide, mais l'intégration de tecchniques de
pointe prend beaucoup de temps, pire encore si votre raytracer de base
n'est pas architecturé correctement (chose qui n'arrivera sûrement
pas, si vous suivez ces articles à la lettre ,)).
Cependant si vous êtes en train de lire ce dossier, j'estimes
que vous avez envie d'apprendre et de developper un raytracer et que
vous êtes conscient du temps que cela pourra prendre sur vos autres
projets. Croyez moi le raytracing monte vite à la tête,
et vous tomberez vite sous son charme ;)
Au niveau du rythme de parution des articles, il sortira un nouvel article
toutes les deux semaines (comptez trois semaines si votre serviteur
est en galére :p).
Je ne sais absolument pas encore combien d'articles cette série
comptera, mais tant qu'il y aura des choses à dire, et tant que
je serais sur ce projet, il y aura des articles.
Pourquoi un Raytracer
?
En cette époque où les moteurs 3D temps réels pululent
et où les 99% des IOTD (Image Of The Day) sur flipcode ne sont
autres que des moteur de terrain temps réel, des moteurs 3D,
des moteurs de particules, ou même encore des raytracers temps
réel, il peut paraitre étrange de développer un
raytracer non temps réel.
Cependant il est bon de noter que la réalisation d'un raytracer
permet de découvrir la 3D à sa base, sans passer par des
routines de haut niveaux utilisées en temps réel comme
par exemple sous DirectX ou encore OpenGL. La où en hardware,
grâce aux SDK, les principales structures 3D sont déja
prémachées, et les calculs mathématiques de bas
niveau masqués, dans un raytracer software il vous faudra plonger
les mains dans le camboui et etudier le fonctionnement 3D à sa
source. Je tiens à signaler qu'aucune librairie ne sera utilisée
pour le raytracer en lui même, et que de ce fait, il sera trés
portable que ce soit sur le plan du systéme d'exploitation que
sur celui du langage.
 |
Shrek ©
2001 PDI/Dreamworks |
De
plus de nombreuses techniques complexes utilisées en raytracing,
notamment le calcul de l'éclairage global que nous étudierons
à un stade plus avancé, peuvent être intégrées
par la suite dans des moteurs 3D temps-réel en pre-process par
exemple pour le calcul de lightmaps pour ne citer que ce point. De plus
aprés avoir réalisé un raytracer bien architecturé
vous aurez beaucoup plus de facilités à réaliser
un moteur 3D accelleré grâce à un SDK (DirectX ou
OpenGl).
Sans
compter le fait que nous intégrerons à notre raytracer
sûrement
par la suite le support des shaders Renderman (ce ne sera pas une partie
de plaisir, mais nous aurons déja acquis de nombreuses connaissances
avant de passer cette étape). A ce niveau, vous aurez votre propre
raytracer supportant les shaders renderman, autant dire que la création
de
shaders renderman ne sera plus un secret pour vous. Et moi de rajouter
que la programmation de shaders renderman est trés recherchée
par les principals studios de l'industrie du cinéma et d'autres
sociétés utilisant Renderman (et elles sont nombreuses).
Toujours un plus sur votre CV si vous envisagez de travailler dans ce
domaine.
Je
pourrais également rajouter qu'un raytracer peut constituer un
projet à part entiére dépassant le simple rendu
graphique. En effet rien ne vous empéche par la suite de développer
un moteur réseau pour le calcul réparti, ou encore un
GUI vous permettant de visualiser le rendu au fil du calcul et de configurer
le rendu ou pourquoi pasencore un langage de scripting pour votre raytracer.
Bref les possibilités sont infinies et le développement
d'un raytracer, intéréssant au début, finira vite
par vous passionner (l'auteur de cet article ne se porte en aucun cas
responsable des nuits blanches pouvant suivre la lecture de ses articles).
Bref dans tous les cas vous ne pourrez qu'y gagner :)
Liens
PDI/Dreamworks
Le web de PDI/Dreamworks, le studio d'animation à l'origine de
Shrek et Fourmiz (et bientôt Shrek2).
http://www.pdi.com
Square
Le site web de Square, les auteurs de la serie des Final Fantasy et
du film d'animation du même nom.
http://www.squareusa.com
Pixar official website
Le site web officiel de Pixar. Vous y trouverez de nombreuses informations
sur les films de Pixar ainsi que sur Renderman.
http://www.pixar.com
Discreet
Site web du développeur du modeleur 3DS Max, trés utilisé
dans les jeux vidéos par exemple.
http://www.discreet.com
Alias/Wavefront
Site web du développeur
du modeleur Maya, largemment répandu dans l'industrie du cinéma.
http://www.aliaswavefront.com
Softimage
Site web officiel du modeleur softimage, rolls du modeling, utilisée
dans les plus grand studios de cinéma pour les effets spéciaux.
Vous trouverez également sur ce site, des informations sur Mental
Ray, un moteur de rendu concurent de Renderman.
http://www.softimage.com
Newtek
Site web des développeurs de Lightwave, un logiciel de modeling
trés performant pour un prix plus que raisonnable.
http://www.newtek.com
Exceed Demogroup
Le site web du groupe de démo Exceed, créateurs de l'intro
Heaven 7 utilisant un moteur de raytracing temps réel.
http://www.inf.bme.hu/~exceed
Doxygen : contrôle anti-dopage positif
Excellent article en francais sur l'installation et la configuration
de Doxygen, un outil permettant de générer de la documentation
à partir du code source.
http://www.alrj.org/docs/outils/DoxyDop.pdf
Flipcode. Daily Game Development News & Ressources
Site web anglophone en rapport avec le développement de jeux
vidéos. De nombreux articles techniques, ainsi qu'une section
IOTD (Image Of The Day) trés appréciée.
http://www.flipcode.com
POV-Ray - The Persistence Of Vision Raytracer
Site web sur un des premiers raytracers qui plus est totalement gratuit
et opensource. Beaucoup d'informations générales sur le
raytracing. En anglais.
http://www.povray.org
A propos de l'auteur
Benoît
Lemaire est actuellement étudiant en troisiéme année
d'informatique, à l'UTBM (Université de Technologie de
Belfort Montbeliard). Passionné de programmation et plus particuliérement
par la programmation 3D, il travaille en ce moment sur un raytracer
non temps réel complexe, aprés avoir travaillé
sur quelques projets 3D temps réel. Loin d'être un grand
expert en la matiére, il à néammoins désiré
écrire cette série d'articles afin de faire partager son
éxpérience au plus grand nombre, aprés avoir constaté
un manque notable d'articles techniques concernant le raytracing sur
Internet.
Remerciements
Je tient à remercier tout particuliérement John Van Der
Burg qui m'a été d'un grand soutient autant moral que
technique sur ce projet.
Un grand merci également
à Jean Michel Hervé (tuo ou tuette pour les intimes) pour
m'avoir grandemment aidé dans mes débuts en 3D accéllérée
sous DirectX.
Merci également à Patrice Kristofak (patrox) pour ce stage
à Atlanta chez PTI International que je n'oublierais jamais et
pour son amabilité et sa gentilesse.
Sans oublier tous les habitués de #codefr, #demofr et plus récemment
les accros au thé du #salon2the.
Je suis à votre entiére disposition pour toutes vos questions
concernant ce dossier, vous pouvez me joindre par e-mail à darkwolf2@wanadoo.fr
et sur ICQ au 14261556 .
Bonne chance à tous et amusez-vous bien !
©
Benoît Lemaire
alias DaRkWoLf 2002. All Rights Reserved. Unauthorized modification/distribution
forbidden.
|