Scène de test (60000 polygones, 4000m2)
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 ! Rapidement = 60 images/s au moins ! 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 frustum En 3D, c’est l’espace compris entre les 6 plans. Calculer la partie visible = frustum 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 vue de dessus : les cases visibles sont grisées Champs de vision
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, Avoir des algos pour tous les types d’environnement Ne pas afficher ce qui se trouve « derrière un mur »… etc… 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 cases ne font pas toutes la même taille. On associe à chaque case les polygones qu’elle contient Construction On part d’une case qui fait toute la surface de l’univers On découpe récursivement l’univers en cases de plus en plus petites. Au final, on a un « arbre de cases », chaque case étant découpée en 4 cases
Exemple de quadtree
Comparaison grille/quadtree Intérêt : on teste d’abord si les grands carrés sont visibles. Si ils ne le sont pas, on les élimine. Sinon, on considère des carrés plus petits. Beaucoup moins de tests avec le quadtree !
Exemple avec notre scène de test
Conclusion sur les quadtrees Surtout adapté à des scènes plates (les polygones sont posés sur un plan). Peu adaptés pour des bâtiments à étages : on va par exemple afficher des polygones sous le sol. Les prochains algorithmes répondent à ces limitations…