Etude des structures de données au coeur des algos 3D des FPS

publicité
Comment afficher rapidement un
univers immense ?
Univers immense ?
• Exemples : un bâtiment, un circuit, une ville, une
région...
• Un tel univers peut contenir des millions de
polygones : on ne va pas tous les afficher.
• Nous avons créé un univers de 60000 polygones.
• Pour aller vite : ne dessiner que ceux qui sont
visibles (dans le champ de vision de la caméra).
Le champ de vision s’appelle le frustrum
C’est l’espace compris entre les 6 plans.
Calculer la partie visible = frustrum culling
Exemple d’algorithme naïf
• Tester tous les polygones ? Beaucoup trop
long.
• Si l’univers est plat et statique, plaquer une
grille avec des cases de taille égales.
• Pré-calcul : on associe une case à chaque
polygone.
• On ne dessine que les polygones dont les
cases sont dans le champ de vision.
Illustration de l’algorithme
précédent
• Exemple vu de
dessus
• Imaginons que
chaque case
contienne 1000
polygones :
1000 tests au
lieu de 64000.
Mais ce n’est pas aussi simple !
• Une simple grille ne suffit pas ! Ce n’est pas
efficace et on a aussi envie aussi de :
– Calculer des collisions,
– Gérer les niveaux de détails
– Ne pas afficher ce qui se trouve « derrière un
mur ».
• Les quatre algorithmes que nous avons étudiés
répondent à certaines de ces conditions.
Algorithme à base de quadtrees
Principe
• Comme une grille, sauf que les carrés ne
font pas tous la même taille.
• Quadtree = arbre à 4 branches.
• On découpe l’univers en carrés. Chaque
noeud/feuille est associé à un carré.
• Intérêt : on peut laisser de côté de grandes
parties de l’univers.
Exemple de quadtree
Chaque feuille contient une
liste de polygones
Comparaison grille/quadtree
Beaucoup moins de tests avec le quadtree !
Téléchargement