Chapitre 3

La Décimation

L'objectif de mon projet est centré sur le traitement des noeuds IndexedFaceSet pour réduire le nombre de polygones composant ces macrostructures. Il sera donc nécessaire d'aboutir à une simplification polygonale tout en respectant la topologie générale du monde et en conformité avec la norme géométrique choisie : le VRML.
 

3.1 État de l'art des méthodes de simplification polygonales

La simplification polygonale va non seulement augmenter la vitesse de rendu des scènes, mais aussi réduire la taille des fichiers. Cela permettra la transmission et le téléchargement des fichiers sur les réseaux, notamment Internet, et augmentera l'efficacité et la fluidité lors de la navigation dans les mondes virtuels générés par ces modèles polygonaux.
 
 

3.1.1 Classification des algorithmes de simplification

Les algorithmes de simplification peuvent être regroupés [Erikson 1996] en trois grands ensembles :


3.1.2 Algorithmes préservant la topologie

3.1.2.1 Simplification des objets rendus par des approximations polygonales

Cet algorithme [DeHaemer & Zyda 1991] utilise la technique de subdivision adaptative et suppose que le modèle original est issu d'un scanner tridimensionnel (Height Field Model), c'est-à-dire que pour chaque point appartenant à une grille rectangulaire régulière, on connaît sa hauteur par rapport à la grille. Cette méthode (Figure 5) utilise la disposition régulière des données, c'est pourquoi elle ne simplifie pas arbitrairement les modèles tridimensionnels.

L'algorithme commence par considérer le modèle comme un seul polygone puis calcule l'erreur par rapport au modèle source (en termes de distance). Si l'erreur est plus grande que celle spécifiée par l'utilisateur, l'algorithme subdivise le modèle simplifié puis recalcule l'erreur. Le processus s'arrête quand l'erreur se trouve au dessous des spécifications de l'utilisateur.


Figure 5 : Subdivisions successives: apparition et remplissage des trous.

Cet algorithme est utilisé pour les modèles de représentation topographique: height fields models.
 

3.1.2.2 Optimisation géométrique

Cet algorithme [Hinker & Hansen 1993] de suppression géométrique (Figure 6) élimine plusieurs polygones coplanaires et les remplace par un nombre de polygones inférieur. Cependant, dans le cas de modèles présentant une courbure considérable, on trouve difficilement de grandes régions avec des polygones suffisamment coplanaires, c'est-à-dire, qui puissent être considérés comme appartenant au même plan (on permet une erreur donnée, et qui peut être définie comme la distance maximale du polygone au plan ).


Figure 6 : Simplification d'un Height Model par optimisation géométrique.
 
 

3.1.2.3 Schéma de réduction des données pour les surfaces triangularisées

Cet algorithme [Hamann 1994] de suppression géométrique applique un poids particulier à chaque triangle du modèle original en fonction de sa courbure. La simplification (Figure 7) s'effectue rarement sur les régions à grande courbure et par contre elle se produit souvent dans les régions à faible courbure. Ainsi l'algorithme simplifie automatiquement les groupes de polygones coplanaires. L'utilisateur spécifie un pourcentage de triangles à éliminer du modèle et la simplification continue jusqu'à ce que le pourcentage demandé soit atteint.


Figure 7 : Itération de l'algorithme de réduction de données pour surfaces triangularisées
 

3.1.2.4 Retriangularisation des surfaces polygonales

L'algorithme [Turk 1992] commence avec une disposition au hasard de points sur la surface de l'objet (Figure 8). Puis, il simule des forces de répulsion entre les points de façon à obtenir une distribution la plus uniforme possible. Ensuite, l'algorithme retriangularise la maille en considérant les nouveaux points. Finalement, il élimine un par un les points correspondant au modèle original.
Cet algorithme d'échantillonnage et de suppression géométrique obtient des meilleurs résultats sur des modèles qui représentent des surfaces courbes que sur des modèles présentant des discontinuités anguleuses (i.e. il fournira une bien meilleure simplification d'un lapin de GANIL que d'une maison à colombages). L'utilisateur doit déterminer le nombre de sommets du modèle recherché.


Figure 8 : Retriangularisation de surfaces polygonales
 
 

3.1.2.5 Décimation de mailles triangulaires

Dans l'algorithme [Schroeder et al. 1992] de suppression géométrique (Figure 9) : les sommets résultants de la simplification forment un sous-ensemble des sommets qui constituent le modèle original. L'utilisateur spécifie une distance d'erreur qui est utilisée par l'algorithme pour évaluer s'il peut éliminer un sommet en comparant cette distance avec la distance de l'approximation au modèle original.


Figure 9 : Itération de l?algorithme de décimation de mailles triangulaires
 

3.1.2.6 Optimisation de maille

À partir d'une collection de points, un algorithme de reconstruction de surface [Hoppe et al. 1992] génère une maille tridimensionnelle. L'algorithme [Hoppe et al. 1993] simplifie le modèle (Figure 6) en minimisant une certaine fonction appelée fonction d'énergie. Cette fonction tient compte de tous les paramètres géométriques du modèle. Cette minimisation produit quatre effets:

L'utilisateur choisit un paramètre pour contrôler le degré de simplification obtenu sur le modèle.


Figure 10 : Le boucle d?optimisation réalise une de ces trois opération sur chaque sommet
 

3.1.2.7 Superfacettes : simplification de mailles triangulaires avec une erreur bornée

Cet algorithme [Kalvin & Taylor 1994] de subdivision adaptative fonctionne très rapidement par rapport à d'autres méthodes qui assurent des tolérances et des erreurs relatives à la maille originale limitées. Les sommets résultants de la simplification forment un sous-ensemble des sommets qui constituent le modèle original. L'utilisateur spécifie une limite pour la distance-erreur et l'algorithme assure que la distance entre n'importe quel sommet de la maille simplifiée et le sommet correspondant de la maille originale, est inférieure à la limite (Figure 11).


Figure 11 : Algorithme de superfacettes simplifiant un modèle
 

3.1.2.8 Approximations géométriques hiérarchisées

Cet algorithme [Varshney 1994] de suppression géométrique génère deux surfaces d'offset pour une maille originale (Figure 12). Il s'agit d'une surface extérieure et d'une autre intérieure à la maille pour assurer une conservation de la topologie globale. Les sommets résultants de la simplification forment un sous-ensemble des sommets qui constituent le modèle original. L'utilisateur définit une tolérance et l'algorithme utilise cette valeur pour assurer que le modèle simplifié se trouve au plus à cette distance du modèle original.


Figure 12 : Application des approximations géométriques hiérarchisées
 
 

3.1.2.9 Analyse multirésolution de mailles arbitraires

Cet algorithme [Eck et al. 1995] [Lounsbery et al. 1994] de subdivision adaptative utilise la théorie des ondelettes pour stocker de multiples niveaux de détail dans un modèle (Figure Figure 13  9): il s'agit de réaliser une approximation de la maille originale sans dépasser une tolérance et en conservant une " connectivité ". Cette " connectivité " est assurée par l'application d'une règle d'or : la seule subdivision possible est de remplacer un triangle par quatre autres en conservant les trois sommets du départ). Une interpolation entre ces différents niveaux de détail ne demande alors qu'une addition ou une soustraction de certains coefficients d'ondelette. Si l'utilisateur spécifie une tolérance à l'erreur en distance, l'algorithme utilise alors le nombre adéquat de coefficients d'ondelette.


Figure 13 : Simplification d'un modèle a partir de l'analyse multirésolution
 
 

3.1.3 Algorithmes de simplification de la topologie

Les algorithmes qui réalisent une simplification de la topologie ne peuvent pas assurer la conservation de la géométrie locale ou globale du modèle. C'est pour cela que des trous présents sur le modèle original disparaissent pendant l'exécution de l'algorithme. Par contre, ces algorithmes ont un nombre de contraintes plus réduit que les algorithmes qui assurent une conservation de la topologie et par conséquent réalisent une plus grande simplification du modèle.

Ces algorithmes s'utilisent quand une dégradation sensible de la qualité visuelle est tolérée, souvent en quête d'une plus grande vitesse de rafraîchissement (frame rate). Ils sont aussi utilisés quand les autres algorithmes ne fonctionnent pas.
 

3.1.3.1 Approximations multirésolution pour le rendu de scènes complexes

Cet algorithme [Rossignac & Borrel 1992] d'échantillonnage fonctionne sur n'importe quel modèle tridimensionnel. Il s'agit d'un choix bien plus intéressant quand on se retrouve face à de grandes scènes qui comportent un nombre élevé de polygones mais qui ne constituent pas des mailles à structure régulière.

Initialement, l'algorithme (Fig Figure 14 ure 10) effectue un classement de tous les sommets du modèle original suivant deux critères:

Le poids accordé à chaque sommet résulte d'une combinaison linéaire des deux critères. Ensuite on réalise un quadrillage 3D du modèle de manière à enfermer tous les sommets dans des cubes de dimensions choisies. La décimation se produit alors en éliminant tous les sommets de chaque cube sauf celui au plus grand coefficient, ceci supposera la transformation de certains triangles en bords, ou même en sommets.

L'efficacité et la vitesse de cet algorithme se fait au détriment de l'aspect visuel du résultat puisqu'il n'est pas contraint de respecter la topologie du modèle originel.


Figure 14 : L'algorithme ne conserve que les sommets ayant les plus grands coefficients
 

3.1.3.2 Simplification d?objets axée sur une représentation de voxels

Cet algorithme [He et al. 1995] d'échantillonnage utilise l'approche du traitement du signal et nécessite de solides bases théoriques. Il élimine les détails de haute fréquence du modèle mais il rencontre des problèmes face aux discontinuités abruptes. Cet algorithme effectue une simplification géométrique et topologique " contrôlée ". Il considère le modèle source comme un modèle " fermé ", c'est à dire, que l'objet présente un intérieur et un extérieur distincts.

Premièrement, l'algorithme (Figure 15) remplace l'objet par sa représentation en voxels (cubes unitaires) : il définit une grille de voxels; ensuite, l'algorithme cherche les polygones du modèle qui se retrouvent dans chaque voxel. Puis, il réalise un filtrage passe-bas pour obtenir une valeur de densité. Cette valeur détermine si le voxel doit être considéré à l'intérieur ou à l'extérieur de l'objet.

En utilisant la technique " Marching Cubes ", un algorithme [Lorensen & Harvey 1987] reconstruit un modèle polygonal simplifié à partir de la représentation volumétrique de densités. Puisque l'algorithme de " Marching Cubes " génère des polygones redondants, cette méthode réalise un post-traitement (algorithme de préservation de la topologie) comme complément pour éliminer les redondances. Plus les voxels du grillage sont petits, plus le résultat se rapproche du modèle original. Si les voxels sont grands, l'algorithme réalise une grande simplification.


Figure 15 : Simplification du modèle basée sur la représentation de voxels

Pour la réalisation du projet, ces algorithmes ne seront pas les plus adéquats puisque il y a une volonté de conserver le plus grand nombre de détails et de rester fidèle au travail mené par les chercheurs de la Maison de la Recherche en Sciences Humaines de l'Université de Caen - Basse Normandie.
 

3.2 Choix de la méthode de décimation et réalisation
 
 

3.2.1 L'algorithme de suppression géométrique

Le prototype de ce projet met en oeuvre un algorithme de suppression géométrique. Cet algorithme partira du modèle original et réalise une élimination de sommets et de facettes suivant les spécifications de l'utilisateur de façon à réduire la complexité du fichier, mesurée en nombre de polygones.

Le prototype ne correspond exactement à aucune des méthodes passées en revue. Cependant, la méthode de décimation développée pour ce projet se retrouve à la base de certains algorithmes de suppression géométrique [Cohen et al. 1997] [Cohen et al. 1998]. Elle vise à mettre en place une première décimation aveugle sur des modèles géométriques basés sur des ensembles de facettes polygonales indexées.


Figure 16 : Application idéale de la méthode " edge-collapse "

La simplification de mailles de polygones s'effectue suivant la méthode d'élimination d'arêtes (" edge-collapse "). Cette méthode (Figure 16) choisit une arête d'un triangle et ramène un des deux sommets sur l'autre, ainsi l'arête est éliminée. La disparition de l'arête constitue un premier pas de décimation de la maille en un ou deux polygones : un seul s'il n'y a qu'un seul triangle dans l'IndexedFaceSet contenant l'arête en question, ou deux, maximum de triangles ayant la même arête en commun.

Sur la figure 16 on peut voir l'application idéale de la méthode qui produit une réduction de 6 polygones entre le modèle n°1 et le modèle n°5.
 
 

3.2.2 Décimation aveugle paramétrique

Le prototype programmé en Java (langage choisi pour sa caractéristique multiplateforme) applique fidèlement la philosophie de décimation décrite pour chacun des ensembles de facettes polygonales indexées. Les phases principales de l'exécution sont au nombre de trois : extraction et transtypage des données d'intérêt, décimation de l'ensemble de facettes polygonales indexées et reconstruction du fichier code.

Le processus est le suivant : le prototype lit le code, et le copie sur le fichier décimé jusqu'à ce qu'il trouve la structure IndexedFaceSet. À ce moment là, il arrête la copie, transforme les chaînes ASCII en types entiers, et enregistre les données à traiter, puis effectue la décimation. Ensuite, il copie sur le fichier décimé le résultat du traitement et continue la copie jusqu'à rencontrer une nouvelle structure IndexedFaceSet.
 
 

3.2.2.1 Extraction des données

Dans cette première phase, le prototype fonctionne en mode " parser " : le fichier code VRML est un fichier ASCII. Il est donc nécessaire pour effectuer la décimation d'extraire toute l'information correspondant à l'IndexedFaceSet (non seulement la définition des facettes mais aussi la liste des points constituant le squelette de l'objet). Le prototype réalise une lecture ligne à ligne du fichier source (représentant le modèle à décimer) jusqu'à la totale détection de la structure IndexedFaceSet (Coordinate3 + IndexedFaceSet). à partir de cet instant, le prototype stocke les données dans deux structures vector.

Le vector [Niemeyer & Peck 1997] [Flanagan 1997] est une classe d?ensembles faisant partie de la bibliothèque util de Java. Il s'agit d'un tableau dynamique (il augmente automatiquement sa taille pour accepter de nouveaux éléments) qui gère ses éléments de manière ordonnée. Il permet l'insertion et la suppression des éléments à des endroits arbitraires puisqu'il réorganise ses éléments après chaque modification. Il réalise donc de façon autonome une partie du travail nécessaire avec d'autres langages. Le choix du langage Java est aussi orienté à concevoir un prototype multiplateforme indépendant de la machine sur laquelle il va être exécuté.

La phase d'extraction des données rend deux vector : sommets et triangles. sommets contient l'ensemble des points constituant le squelette de l'IndexedFaceSet. triangles représente la définition des facettes de l'objet : chacun de ses éléments contient la description d'une facette.
 
 

3.2.2.2 Traitement des IndexedFaceSet

L'algorithme de décimation met en place la méthode de l'élimination d'arêtes (" edge-collapse ") : le prototype parcourt de façon séquentielle la liste des facettes selon un pas fixé par l'utilisateur. à chaque pas, l'algorithme lit la facette et élimine une arête.


Figure 17 : " Edge collapse ", V1 fusionne sur V2

Comme on peut apprécier sur la figure 17 , l'" edge-collapse " élimine un point (V1) ce qui entraîne la disparition de deux facettes.

Pour une structure donnée, du point de vue du prototype, à chaque itération l?algorithme choisit une arête (V1,V2) et réalise les étapes suivantes :
 


 
 


 
 


 
 


 

La décimation de l'IndexedFaceSet exige une manipulation rigoureuse des indices associés au vector car le travail réalisé automatiquement par Java peut constituer un inconvénient (erreur différée). En effet, les mises à jour qui sont effectuées sur les pointeurs du vector doivent être reportées sur les pointeurs externes employés par l'algorithme.
 
 

3.2.2.3 Reconstruction du fichier code

Une fois que l'algorithme finit le traitement de l'IndexedFaceSet, on dispose des deux vector (sommets et triangles) et il suffit de les copier sur le fichier décimé. La copie doit être réalisée cependant en vérifiant le respect de la structure du fichier original et des règles de composition du langage VRML.
 
 

Sommaire