Next: Compactage Up: Perspectives Previous: Couleur

octrees dans l'espace tridimensionnel et ray-tracing

On n'est pas non plus obligé de se limiter au plan, les octrees (arbres octaires ?) sont d'ailleurs très populaires en image de synthèse tridimensionnelle, toujours pour leur capacité à modéliser un objet à plusieurs précisions.

Une petite routine d'affichage en 3D cavalière a été programmée pour étudier ces possibilités, elle reprend exactement l'algorithme bidimensionnel, en considérant huit fils et en introduisant un décalage en diagonal pour simuler la profondeur, et au lieu d'afficher des carré, elle affiche des cubes.

Les algorithmes de zoom, d'inversion, d'intersection n'ont pas à être modifiés, et pour que la surface fonctionne (et calcule le volume) il suffit de changer la valeur de nombre_de_fils.

L'un des algorithmes qui a le plus popularisé les octrees est très certainement le ray-tracing ou suivi de rayon, qui consiste à considérer le trajet inverse de la lumière en partant de l'il de l'observateur et en regardant quel objet est rencontré en premier.

Un algorithme de ray-tracing passe donc la majeure partie de son temps à effectuer des calculs d'intersection entre les rayons (des droites) et les objets de la scène. Afin de simplifier ces calculs, on fait souvent appel à des volumes englobants, qui contiennent les objets considérés, mais dont l'intersection est plus rapide à calculer. Ainsi, si le volume englobant n'est pas intersecté, l'objet contenu non plus.

En général on utilise des octrees comme volumes englobants, leur structure hiérarchique permettant d'affiner peu à peu la région de l'espace considérée ; cependant ici on propose d'utiliser les octrees récursifs pour la modélisation d'objets tridimensionnels.

L'algorithme d'intersection avec un rayon consisterait simplement à considérer chaque cube que rencontre le rayon, s'il est blanc il n'y a pas d'intersection, s'il est noir il y a intersection et si c'est un nud on appelle récursivement la procédure pour chacun des huit fils que rencontre le rayon, dans l'ordre. Là aussi, il est nécessaire de se fixer une limite pour la récursivité, mais cette limite peut varier en fonction de la distance de l'objet : on peut ainsi s'arrêter lorsque le cube considéré est plus petit que le pixel calculé, et profiter d'une modélisation détaillée au premier plan et de calculs plus rapides pour les objets lointains.

Le problème qui se pose alors est celui du calcul du vecteur normal à l'objet ; celui-ci est en effet à la base de tous les modèles d'éclairement (modèles qui permettent de calculer la couleur que perçoit l'il en un point en fonction de l'éclairage et de la surface elle-même). Or les objets fractals ont ceci de désagréable que le vecteur normal n'y est souvent pas défini (par exemple sur l'image Sierp3D). On en revient au problème des bords de nos images.

On peut s'inspirer des techniques utilisées pour représenter en particulier l'ensemble de Mandelbroot en relief, et qui consistent à utiliser les points avoisinants dans l'image calculée. En effet on conna^t très facilement les coordonnées (x,y,z) d'un point de l'image affichée, et si l'on calcule un point (u, v) à l'écran, il suffit de calculer le vecteur normal au plan défini par les points dans l'image tridimensionnelle qui correspondent à (u, v), (u-1, v) et (u, v-1). On peut bien sûr affiner le procédé en effectuant une moyenne sur les quatre points voisins.

Malheureusement, contrairement au cas bidimensionnel, il est plus délicat d'étendre ce modèle à plus de deux couleurs et encore plus à plusieurs textures (une texture modélise les caractéristique d'une surface : elle en définit la couleur, la transparence, etc.), car il est alors très difficile de décider de l'attitude à adopter quand on arrête le récursion, les techniques d'anticrênelage utilisées dans le plan se généralisent plus difficilement aux textures et à la 3D.



Next: Compactage Up: Perspectives Previous: Couleur


fdurand@clipper.ens.fr, fleuret@clipper.ens.fr
Thu Jun 9 18:32:25 MET DST 1994