Octree et maillages Modélisation Géométrique
Plan Représentation par octree Modèle B-Rep Un peu d'histoire Octree régulier et adaptatif Représentation surfacique et volumique d'un objet 3D Modèle B-Rep Un peu d'histoire Les maillages Définition et propriétés Dualité maillage fermé et maillage 2-Manifold Formule d'Euler Représentations internes 3 représentations optimisées pour l'espace mémoire 2 représentations optimisées pour le parcours du maillage Visualisation OpenGL Modélisation Géométrique
Octree régulier Comme son nom l'indique, un octree est un arbre à huit branches. Un octree régulier subdivise de façon récursive un volume cubique en huit sous-cubes de tailles égales. Les feuilles de l'octree sont appelées des « voxels ». 5 6 1 2 7 4 3 noeuds voxels Modélisation Géométrique
Octree adaptatif Dans un octree adaptatif, la profondeur de chaque branche peut être de taille différente, ceci permet de subdiviser l'espace de départ de façon irrégulière. 5 6 1 2 7 4 3 noeuds voxels Modélisation Géométrique
Illustration sur un quadtree Un quadtree est un arbre à quatre branches. C'est l'équivalent de l'octree en deux dimensions. Dessinez les feuilles du quadtree adaptatif de profondeur quatre représentant l'objet ci-dessous. Représentez le quadtree sous forme d'arbre en supposant que l'on a une représentation « volumique » de l'objet (ne développez que la 1ère branche). Modélisation Géométrique
Représentation surfacique par octree Octree régulier : on subdivise jusqu'à la précision souhaitée et soit la cellule n'est pas sécante à la surface et la feuille est vide (valeur 0 par exemple), soit elle est sécante et la feuille est pleine (valeur 1 par exemple). Octree adaptatif : soit la cellule n'est pas sécante à la surface : c'est une feuille vide de l'octree, soit la cellule est sécante à la surface : si on est au niveau de précision désiré, c'est une feuille pleine de l'octree, sinon, c'est un noeud qui va être subdivisé. Modélisation Géométrique
Représentation volumique par octree Octree régulier : on subdivise jusqu'à la précision souhaitée et soit elle est sécante et la feuille est pleine (valeur 0 par exemple)., soit elle est à l'intérieure de l'objet et elle vaut 1 par exemple, soit elle est à l'extérieure de l'objet et elle vaut -1 par exemple. Octree adaptatif : soit la cellule est sécante à la surface : si on est au niveau de précision désiré, c'est une feuille pleine de l'octree, sinon, c'est un noeud qui va être subdivisé, soit la cellule n'est pas sécante à la surface : c'est soit une feuille « extérieure », soit une feuille « intérieure ». Modélisation Géométrique
Octree : +/- Les + Représentation hiérarchique de l'objet : il peut être affiché à différentes résolutions. Possibilité de représentation volumique. Simplicité de positionnement d'un volume par rapport à l'objet : sécant ou non (éventuellement intérieur/extérieur). Construction et parcours récursifs simples. Les - Visualisation surfacique des voxels ? Rendu temps réel pour des scènes complexes ? Coup de stockage excessif. Modélisation Géométrique
B-Rep quelconque B-Rep Solide Modèle B-Rep Boundary-Representation Un modèle est représenté par ses bords Pas de notion de volume On peut représenter des solides B-Rep quelconque B-Rep Solide Modélisation Géométrique
B-Rep solide Test intérieur / extérieur sur un solide : Nombre pair d’intersections : le point P est à l’extérieur du solide Nombre impair d’intersections : le point P est à l’intérieur du solide P P Modélisation Géométrique
Un peu d'histoire La légende raconte que, 800 ans avant J.-C., les Etrusques jouaient déjà avec des dodécahèdre réguliers (12 faces). Les pythagoriciens, 450 ans avant J.-C., connaissaient le cube et le tétraèdre. C'est vers 400 ans avant J.-C. que Platon et ses disciples parlent de 5 polyèdres réguliers: le tétraèdre, le cube, l'octaèdre, le dodécaèdre et l'icosaèdre (20 faces). Dans la phylosophie platonicienne, chacun d'eux etait associé symboliquement au Feu, à la Terre, à l'Air, l'Eau et l'Univers. Modélisation Géométrique
Les solides platoniques Polyèdre réguliers = Polyèdre convexe inscrit dans une sphère dont toutes les faces sont identiques Toutes les faces sont des polygones réguliers convexes isométriques Tous les sommets ont la même valence (même nombre d'arêtes incidentes) Pourquoi? Combien y en a t il? A quoi ressemblent-ils? Modélisation Géométrique
Les maillages Modélisation Géométrique
Les maillages Un complexe linéaire par morceaux : les surfaces sont représentées avec des polygones. Le simplexe pour une face est le triangle. La continuité globale est C0 (discontinuité de normales au niveau des arêtes) . Ils définissent la géométrie tout en donnant une topologie de la surface C'est actuellement une structure standard pour afficher des scènes complexes en 3D Leur visualisation et leur manipulation est optimisée par la grande majorité des cartes graphiques actuelles. Modélisation Géométrique
Propriétés topologiques des maillages Dualité maillage fermé et maillage 2-manifold Formule d'Euler Modélisation Géométrique
Dualité Chaque entité du maillage primal de dimension k est remplacé par une entité de dimension (2-k) dans le maillage dual: Chaque face (dim 2) est remplacée par un point (dim 0), les arêtes gardent leur dimension et les points sont remplacés par des faces. Pour créer la géométrie du maillage dual, on place un point au barycentre de chaque face et on connecte deux point par une arrête si les faces dont ils sont issus sont adjacentes dans le maillage primal. Modélisation Géométrique
Dualité Chaque entité du maillage primal de dimension k est remplacé par une entité de dimension (2-k) dans le maillage dual: Chaque face (dim 2) est remplacée par un point (dim 0), les arêtes gardent leur dimension et les points sont remplacés par des faces. Pour créer la géométrie du maillage dual, on place un point au barycentre de chaque face et on connecte deux point par une arrête si les faces dont ils sont issus sont adjacentes dans le maillage primal. Les faces sont remplacées par leur centre Modélisation Géométrique
Dualité Chaque entité du maillage primal de dimension k est remplacé par une entité de dimension (2-k) dans le maillage dual: Chaque face (dim 2) est remplacée par un point (dim 0), les arêtes gardent leur dimension et les points sont remplacés par des faces. Pour créer la géométrie du maillage dual, on place un point au barycentre de chaque face et on connecte deux point par une arrête si les faces dont ils sont issus sont adjacentes dans le maillage primal. On “flip” les arêtes Modélisation Géométrique
Dualité Chaque entité du maillage primal de dimension k est remplacé par une entité de dimension (2-k) dans le maillage dual: Chaque face (dim 2) est remplacée par un point (dim 0), les arêtes gardent leur dimension et les points sont remplacés par des faces. Pour créer la géométrie du maillage dual, on place un point au barycentre de chaque face et on connecte deux point par une arrête si les faces dont ils sont issus sont adjacentes dans le maillage primal. On “flip” les arêtes Modélisation Géométrique
Dualité Chaque entité du maillage primal de dimension k est remplacé par une entité de dimension (2-k) dans le maillage dual: Chaque face (dim 2) est remplacée par un point (dim 0), les arêtes gardent leur dimension et les points sont remplacés par des faces. Pour créer la géométrie du maillage dual, on place un point au barycentre de chaque face et on connecte deux point par une arrête si les faces dont ils sont issus sont adjacentes dans le maillage primal. On “flip” les arêtes Modélisation Géométrique
Exercice sur le dual Tracez le dual du maillage suivant : Que remarquez vous au niveau des faces ? Que dire sur le dual du dual ? Modélisation Géométrique
Un maillage est dit fermé si il n'a pas de bord Fermeture Un maillage est dit fermé si il n'a pas de bord Modélisation Géométrique
2-manifold De façon informelle, si un maillage fermé et 2-manifold (ou manifold) alors l'objet qu'il représente est « usinable ». Par définition, un maillage est 2-manifold si il satisfait la condition suivante: Propriété de disque local: En chaque point du maillage, il existe une sphère de rayon >0 telle que l'intersection entre la sphère et le maillage est homothétique à un disque Un maillage ouvert peut être 2-manifold. A la bordure, l'intersection entre la sphère et le maillage doit être topologiquement équivalente à un demi-disque. Modélisation Géométrique
Exercice : manifold / non-manifold ? Sur des maillages triangulaires: Une arête partagée par plus de 2 triangles ? Un sommet partagé par deux ensembles de facettes non connectés ? Une jonction en T ? Problème de Crack ? Un trou dans le maillage ? Modélisation Géométrique
Formule d'Euler (1752) S - A + F = 2 (1-g) genre 1 genre 2 genre 0 Cette formule donne la correspondance entre le nombre de composant de chaque entité du maillage (sommets, arêtes, faces) S - A + F = 2 (1-g) Où S est le nombre de sommets, A est le nombre d'arêtes et F est le nombre de faces. g est le genre (génus) de l'objet = le nombre de trous (poignées) dans un objet fermé genre 1 genre 2 genre 0 Modélisation Géométrique
Les maillages triangulaires Des propriétés spécifiques dérivées à partir de la formule d'Euler: S – A + F = 2 (1-g)=c où c est une constante qui est petite par rapport à S, A ou F. La constante c est négligeable devant S,A et F. On peut donc écrire: S - A + F 0 Il est difficile d'établir directement une relation entre ces entités parce qu'une arête est partagée par plusieurs faces. Par contre, on peut introduire la notion de demi-arête. Une face possède 3 demi-arêtes et une arête est composée de 2 demi-arêtes: F 2S Da = 3 F Da = 2 A Da 6S Modélisation Géométrique
Exercices sur la formule d'Euler Calculez le nombre de faces F en fonction du nombre de sommets S puis le nombre moyen de demi-arêtes sortantes Da par sommet et en déduire la forme du maillage régulier pour : un maillage composé de quadrilatères un maillage composé d'hexagones Modélisation Géométrique
Structures de données pour les maillages Choisir une représentation adaptée aux opérations que l'on souhaite effectuer sur le maillage : Une représentation compacte Une représentation optimisée pour le parcours Modélisation Géométrique
Liste de triangles C'est l'approche la plus naïve Pour chaque triangle, on donne la liste de sommets C'est l'approche la plus naïve 4 octets par coordonnée (un flottant) 9 coordonnées par faces 2 fois plus de faces que de sommets Pour un maillage composé de S sommets, on a donc besoin de 4*9*2*S = 72*S octets. x0,y0,z0 x1,y1,z1 x2,y2,z2 x5,y5,z5 x1,y1,z1 x12,y12,z12 x9,y9,z9 x0,y0,z0 x1025,y1025,z1025 . . . Modélisation Géométrique
Sommets partagés Tout d'abord on stocke la liste des sommets Puis les facettes sont définies en donnant les index des sommets qui la compose En général, le fichier commence par le nombre de sommets et le nombre de facettes Liste des sommets Liste des facettes x0,y0,z0 0 1 2 x1,y1,z1 5 1 12 x2,y2,z2 9 0 1025 . . . . . . Combien d'octets par sommet? (36) Modélisation Géométrique
Bandes de triangles La topologie est codée de façon implicite dans l'ordre des sommets Chaque sommet est donc visité deux fois Si on ne considère qu'une seule bande, quel est l'espace mémoire utilisé ? En réalité, il y a plusieurs bandes et il faut ajouter 24 octets pour chaque nouvelle bande (le stockage des 2 premiers sommets) Modélisation Géométrique
Structure par faces Chaque face contient un pointeur vers ses sommets et vers les faces adjacentes Chaque sommet pointe sur une face adjacente Pas d'accès direct aux arêtes Octets par sommet ? Modélisation Géométrique
Structure par demi-arêtes Une arêtes est décomposée en deux demi-arêtes orientées Pour chaque demi-arête, on mémorise un pointeur vers la demi-arête opposée, le sommet vers lequel elle pointe, la face à laquelle elle appartient et la demi-arête suivante Chaque sommet contient un pointeur sur une demi-arête sortante et chaque face, un pointeur vers une de ses demi-arête Très pratique pour parcourir un maillage de diverses façons Octets par sommet ? (120) Modélisation Géométrique
Visualisation OpenGL d'un maillage Construction de l’objet : Sa liste de sommets GLfloat sommets[] = {x0, y0, z0, … xn, yn, zn}; Ses attributs, par exemples les normales GLfloat normales[] = {nx0, ny0, nz0, nxn, nyn, nzn}; Sa liste d’index GLuint index[] = {0, 1, 2, 5, 0, 4, . . . }; Modélisation Géométrique
Visualisation OpenGL d'un maillage Types de représentation pour OpenGL : GL_TRIANGLES : il faut donner les index des facettes triangulaires, GL_QUADS : il faut donner les index des quadrilatères, GL_TRIANGLE_STRIP : la liste ordonnée des index pointant sur les sommets des bandes de triangles. Dans le tableau d’index, il st possible d’utiliser un séparateur pour séparer les différentes bandes de triangles, GL_QUAD_STRIP : idem, mais liste de quadrilatères, … Modélisation Géométrique
Rendu OpenGL // Activation du mode de tracé par tableaux de sommets glEnableClientState (GL_VERTEX_ARRAY); glEnableClientState (GL_NORMAL_ARRAY); // si on utilise les normales glEnableClientState (...); // si on utilise d'autres attributs (couleur, coordonnées texture, ...) // Affectation des différents tableaux glVertexPointer (3, GL_FLOAT, 0, sommets); glNormalPointer (GL_FLOAT, 0, normales); // si on utilise les normales // … + autres tableaux s’il y a (couleur,…) // Tracé du maillage triangulaire glDrawElements (GL_TRIANGLES, nb_index, GL_UNSIGNED_INT, index); // Désactivation du mode tracé glDisableClientState ( ………..); // un pour chaque glEnableClientState Modélisation Géométrique
Rendu optimisé Les “Vertex Array” sont une façon simple de visualiser les maillages. Vous optiendrez un rendu plus efficace en utilisant des “Vertex Buffer Objects” (VBO). Modélisation Géométrique
Normale à une face La normale a une facette est obtenu en faisant le produit vectoriel de sa première arête avec la deuxième. Attention à l’orientation des normales quand on stocke un maillage => les sommets des faces doivent toujours être stockés dans le même sens. Les normales donnent l’orientation vers l’extérieur d’un objet fermé. Elles sont aussi fondamentales pour l’éclairage. S1 S2 S3 N 2 1 2 3 (S2-S1) (S3-S2) ║(S2-S1) (S3-S2) ║ N = 3 1 N Modélisation Géométrique
Normales aux sommets Approche naïve: somme normée des normales unitaires des faces adjacentes Approches plus avancées : les normales sont pondérées Si on suppose que le calcul de la normale est extrêmement local, les i sont les angles que forment chaque facette au point On peut aussi prendre l’aire des facettes adjacentes pour i Dans tous les cas, on obtient une approximation plus ou moins bonne de la normale à la surface. Ns = Nfi ║ Nfi ║ Ns = i Nfi ║ i Nfi ║ Modélisation Géométrique
Exercice : Charger un fichier Ecrire un algorithme permettant de charger un maillage triangulaire stocké par sommets partagés dans un fichier avec les contraintes suivantes : Les deux premières valeurs du fichier sont le nombre de sommets puis le nombre de facettes. Le maillage doit être chargé de façon cohérente pour être visualisé avec un tableau de sommet (Vertex Array). On souhaite aussi fournir les normales en chaque sommet afin de pouvoir éclairer l'objet lors de sa visualisation. Modélisation Géométrique