Résumé : après les différentes crises qu’ont subies les vaches, faudra-t-il se contenter de vaches virtuelles ? On en voit partout, dans les publicités, dans les jeux, sur Internet. Mais, comment fait-on pour représenter une vache (ou un objet quelconque) qui, par définition est tridimensionnelle, sur un écran ou une feuille de papier ? Les techniques de graphisme tridimensionnel par ordinateur ont évolué en même temps que les performances des machines. Elles permettent aujourd’hui de reproduire de façon de plus en plus réaliste n’importe quel objet.
Mots-clés : graphisme tridimensionnel, modélisation, système de coordonnées, faces cachées, surface, perspective, éclairage, ombrage.
L’exercice s’inspire du livre Principles of Interactive Computer Graphics, second edition de William M. Newman et Robert F. Sproull, McGraw-Hill, 1979.
On découvre de plus en plus dans la publicité, dans les jeux et sur Internet des représentations très réalistes d’objets tridimensionnels, au sens large du terme. Très souvent ce sont des logiciels professionnels qui permettent de les représenter. Ces logiciels offrent d’impressionnantes possibilités et le réalisme des scènes représentées augmente de jour en jour.
Mais, quels sont les principes fondamentaux à la base de toute représentation graphique tridimensionnelle ? Les méthodes existent depuis les débuts de l’informatique. Le matériel est devenu aujourd’hui extrêmement performant et ce qui, autrefois, exigeait énormément de ressources (vitesse de calcul, mémoire, qualité des écrans) devient désormais abordable.
Pour produire une image réaliste d’une scène tridimensionnelle, on rencontre plusieurs difficultés : comment représenter la profondeur, la troisième dimension, sur un écran ? Comment cacher différentes parties de l’objet qui ne sont pas visibles de l’observateur ? Comment l’éclairage, le coloriage, l’ombrage et la texture peuvent contribuer à améliorer le rendu ? Comment modéliser une scène tridimensionnelle pour qu’elle puisse être reproduite sur un écran ou sur une feuille de papier ?
Lorsqu’une scène tridimensionnelle est projetée sur un écran bidimensionnel, l’information concernant la profondeur des objets tend à se réduire voire, à disparaître. Les techniques permettant de donner cette information sur la profondeur sont : les projections parallèles et perspectives, la modulation des intensités (les arêtes plus proches de l’observateur sont plus épaisses), les vues stéréoscopiques (deux images sont générées pour chaque œil), l’effet de profondeur dû à une animation (en se déplaçant autour d’un objet on aperçoit l’aspect tridimensionnel), l’élimination des faces cachées, l’ombrage avec faces cachées (la couleur et l’intensité permettent d’appréhender la profondeur et la forme d’un objet), les images tridimensionnelles (en demandant à l’ordinateur de piloter un outil de sculpture ou en utilisant des lasers).
Ces techniques utilisent toutes un modèle de la scène tridimensionnelle à représenter. Le modèle géométrique doit permettre d’enregistrer l’emplacement des points dans un système de coordonnées, le système tridimensionnel cartésien.
Pour modéliser un objet tridimensionnel, on définit ses faces ; chaque face est un polygone plan qui peut à son tour être modélisé par une liste des sommets du polygone ou par une liste identique d’arêtes.
Ces informations permettent de représenter l’objet en fil de fer. Les polygones sont également utiles pour déterminer les faces cachées, les réflexions sur les surfaces et l’éclairage. L’équation du plan qui contient le polygone et la normale à ce plan peuvent être déduits facilement et sont utiles pour la détermination des faces cachées et l’ombrage.
Pour représenter une vache, il faut passer du temps à définir son modèle. Dès cet instant, il est possible de fabriquer des méthodes ou algorithmes permettant de la représenter. On obtient alors facilement le modèle fil de fer. Pour augmenter le réalisme, il faut déterminer les faces cachées et remplir chaque face d’une couleur. La couleur est déterminée par la normale à la face. Des sources de lumières et le lissage des couleurs des faces peuvent venir alors renforcer l’effet réaliste. On peut encore ajouter d’autres paramètres : la texture, le matériau qui forme la surface, les réflexions, la transparence, etc.
Il reste une dernière question d’importance : comment créer un modèle ? Heureusement, on peut trouver, notamment sur Internet, des fichiers de description d’objets tridimensionnels. Ces fichiers respectent pour la plupart les conventions mentionnées plus haut : description par sommets et faces.
Décrire en détail les méthodes et algorithmes serait fastidieux. Les exemples donnés dans le paragraphe Solutions permettent de comprendre les mécanismes des représentations tridimensionnelles.
Pour décrire le modèle d’un objet tridimensionnel, on définit une matrice contenant les coordonnées de tous les points, x, y et z et une matrice décrivant les faces. Cette matrice contient les numéros des sommets de chaque face. Par exemple, pour définir un cube, on prendra les deux matrices ci-dessous :
% sommets du cube
SH=[ 1 1 1 -1 1 1 -1 -1 1 1 -1 1 1 1 -1 -1 1 -1 -1 -1 -1 1 -1 -1]; % faces du cube FH=[5 1 2 3 4 1 5 1 5 6 2 1 5 1 4 8 5 1 5 3 7 8 4 3 5 2 6 7 3 2 5 5 8 7 6 5]; |
Dans ce modèle, les huit sommets du cube sont définis dans la matrice SH par leurs coordonnées. Le premier sommet a pour coordonnées : (1;1;1). Les six faces du cube sont définies dans la matrice FH. La première face est un polygone formé de 4 sommets : (1;2;3;4). L’information donnée dans la première colonne (ici 5) indique le nombre de sommets (plus 1) ; en effet, pour représenter en fil de fer cette face on devra relier les sommets 1, 2, 3 et 4, puis revenir sur le sommet 1.
La représentation de l’objet consiste ensuite à faire appel à une simple fonction de tracé de trait entre deux sommets. Pour représenter la face 1, on relie le sommet 1 et le 2, puis le 2 et le 3, le 3 et le 4 et, enfin le 4 et le 1. Il suffit donc d’écrire une boucle parcourant toutes les faces puis représentant chacune d’elle.
Pour obtenir les effets d’ombrage et d’éclairage, on calcule pour chaque face le vecteur normal à la face. On calcule l’angle fait entre ce vecteur normal et la position de l’observateur ou de la source lumineuse. En fonction de cet angle on choisit l’intensité de la couleur de remplissage de la face. Si la face est en face de l’observateur, elle aura une couleur vive ; une face sur le côté de l’objet aura une couleur de même teinte mais, plus sombre. L’effet est alors plus réaliste.
Il est intéressant de signaler que l’ordre des sommets dans chaque face a une importance. En effet, le calcul du vecteur normal à la face peut fournir deux résultats selon la façon dont les sommets ont été numérotés. Ainsi, la face 1 comporte les sommets 1, 2, 3 et 4 et non 1, 4, 3, 2. Il faut donc respecter la règle de la main droite ou du tire-bouchon pour numéroter les faces. Il est à remarquer que souvent les objets sont décrits par des faces triangulaires. Cette précaution disparaît dans ce cas.
La solution actuellement proposée est donnée par les fichiers MatLab : vache.m, vache.mat, view3d.m, O3d_conv3dmf2mat.m, O3d_replace0parNaN.m et vache.t3d.