Carsten Dachsbacher Christian Vogelgsang Marc Stamminger Sequential Point Tree Carsten Dachsbacher Christian Vogelgsang Marc Stamminger Présentation : Thomas BARTHES Matthieu CORVAISIER
Plan Rendu par points, objectifs et mise en œuvre Point Trees Sequential Point Trees Point Tree Hierarchy Approximations et erreurs Du récursif au séquentiel Rendu récursif Séquentialisation réarrangement Extensions Rendu hybride point/polygone Couleurs et textures Performances Conclusion
Rendu par points Avantages: Inconvénients: Très efficace pour le rendu d’objets complexes Gestion facile et pratique du niveau de détails Inconvénients: Sélection des points effectuée par le CPU La puissance du GPU n’est donc pas exploitée Objectif: décharger un maximum de calculs depuis le CPU vers le GPU
Mise en œuvre Obtenir une version séquentielle d’un arbre de points hiérarchique Traitement de cette liste par le GPU: Sélection du niveau de détails Affichage de splats figurant les points
Sequential Point Tree
Point Tree Hierarchy Construction d’un octree représentant la hiérarchie des points uniformément répartis sur l’objet Calcul des moyennes des positions et des normales des points intermédiaires Chaque nœud représente un morceau de l’objet Un nœud équivaut à l’union de tous ses fils Structure de données d’un nœud: Point central p Normale moyenne n Diamètre de la sphère englobante d
Approximation d’un nœud par un disque Chaque nœud de l’arbre peut être approximé par un disque Même point central Même normale Même diamètre L’erreur d’approximation est décrite par deux valeurs Erreur perpendiculaire eP Erreur tangentielle eT
Erreur perpendiculaire (1) eP = distance minimum entre 2 plans parallèles au disque qui englobent tous les disques fils
Erreur perpendiculaire (2) Espace image: projection d’une erreur image ëP ëP = eP * sin(v,n) / |v| ëP: varie en fonction de sinus(v,n) v: vecteur du point de vue n: vecteur normal du disque ëP rend compte du fait que les erreurs le long des silhouettes sont moins acceptables (discontinuités) Plus le point de vue est éloigné, plus ëP est faible
Erreur tangentielle (1) eT = diamètre du disque père – largeur minimale de l’ensemble des disques fils Mesure si un disque parent couvre une trop grande surface Conséquences: erreurs sur les bords des surfaces
Erreur tangentielle (2) Espace image: projection d’une erreur image ëT ëT = eT * cos(v,n) / |v| ëT: varie en fonction de cosinus(v,n) v: vecteur du point de vue n: vecteur normal du disque ëT rend compte du fait que les erreurs dans les plans faisant face au point de vue sont moins acceptables (trous) Plus le point de vue est éloigné, plus ëT est faible
Erreur géométrique Simplification: combinaison des erreurs perpendiculaire et tangentielle en une seule erreur géométrique eG = √(eP² + eT²) Espace image: projection d’une erreur image ëG ëG = eG / |v| ëG ne dépend plus de l’angle du point de vue
Rendu Récursif (1) Un objet est affiché par un parcours en profondeur de la hiérarchie de points Pour chaque nœud, l’erreur image ë est calculée Si ë dépasse un seuil acceptable ε, et si le nœud n’est pas une feuille fils parcourus récursivement Cas contraire affichage d’un splat de taille d/r (diamètre du nœud projeté dans l’espace image) ε défini par l’utilisateur
Rendu Récursif (2) Densité des points adaptée : À la distance du point de vue: r Aux propriétés locales de la surface
Séquentialisation (1) Problème : procédure récursive non adaptée pour un traitement séquentiel rapide par le GPU Solution : réarranger l’arbre de données en une liste remplacer la procédure de rendu récursif par une boucle séquentielle parcourant cette liste Arrangement optimisé : toutes les entrées sélectionnées dans la liste sont regroupées dans un même segment
Séquentialisation (2) CPU: GPU: Mémorise dans chaque nœud les valeurs rmin et rmax Stocke les nœuds dans une liste non hiérarchique Trie la liste en fonction des rmax GPU: Test non récursif: r Є [rmin,rmax] Affichage
Séquentialisation (3)
Séquentialisation (4) Problème en cas de variation de r
Réarrangement Le segment de liste exhaustif est envoyé au GPU Le GPU effectue le test d’appartenance à [rmin,rmax] Test vérifié : point rendu par un splat de diamètre d/r Test non vérifié : point occulté (placé à l’infini) Pourcentage de points occultés : 10 à 40 % (dépend de la variation de r)
Rendu Hybride Extension possible des sequential point trees : Parties de l’objet rendues par des points Parties de l’objet rendues par des polygones But : sélection des polygones par le GPU
Couleur et Texture (1) Possibilité de mémoriser la couleur dans un nœud Couleur d’un nœud interne = moyenne de celle de ses fils Problème avec les grands splats : contours flous Obligation de reconsidérer l’erreur géométrique Solution : augmenter l’erreur de chaque point pour forcer l’affichage de petits splats
Couleur et Texture (2)
Performances (1) Matériel et logiciel : ATI Radeon 9700 avec DirectX Affichage : Statues et arbres : sequential point trees Sol, ciel et autres modèles : polygones (triangles) 77 millions de points envoyés par seconde au GPU, qui en affiche 50 millions après culling Textures et données géométriques sont stockées dans la mémoire de la carte graphique
Performances (2) Frame rates de l’ordre de 36 à 90 fps, avec une charge CPU de 5 à 15% sur un Pentium 2.4GHz Essais avec nouvelle NVIDIA NV30 résultats préliminaires, affichage possible de 80 millions de points par seconde après sélection par le GPU Modèles avec lumière dynamique Illumination locale calculée dans le vertex shader 60 millions de splats affichés par seconde après culling du GPU vertex shader exécuté 85 millions de fois par seconde
Conclusion Sequential point trees version séquentielle des point trees hiérarchiques Sélection du niveau de détails gérée quasi entièrement par le GPU, avec un simple vertex program Affichage effectif de 50 millions de points par secondes sur un GPU actuel, faible charge CPU (idéal pour jeux vidéos…) Extension proposée pour rendu hybride point/polygone, sans apparition d’artefacts
(La page web pour télécharger l’article et la vidéo) (Et pour finir) MAGNETO, SERGE… (La page web pour télécharger l’article et la vidéo) http://www9.informatik.uni-erlangen.de/Persons/Stamminger/Research/Research/spt
(Au cas où)