13
Scène de test (60000 polygones, 4000m2)

Scène de test (60000 polygones, 4000m2). Comment afficher rapidement un univers immense ?

Embed Size (px)

Citation preview

Page 1: Scène de test (60000 polygones, 4000m2). Comment afficher rapidement un univers immense ?

Scène de test (60000 polygones, 4000m2)

Page 2: Scène de test (60000 polygones, 4000m2). Comment afficher rapidement un univers immense ?

Comment afficher rapidement un univers immense ?

Page 3: 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).

Page 4: Scène de test (60000 polygones, 4000m2). Comment afficher rapidement un univers immense ?

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

Page 5: Scène de test (60000 polygones, 4000m2). Comment afficher rapidement un univers immense ?

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.

Page 6: Scène de test (60000 polygones, 4000m2). Comment afficher rapidement un univers immense ?

Illustration de l’algorithme précédent

• vue de dessus : les cases visibles sont grisées

Champs de

vision

Page 7: Scène de test (60000 polygones, 4000m2). Comment afficher rapidement un univers immense ?

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.

Page 8: Scène de test (60000 polygones, 4000m2). Comment afficher rapidement un univers immense ?

Algorithme à base de quadtrees

Page 9: Scène de test (60000 polygones, 4000m2). Comment afficher rapidement un univers immense ?

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

Page 10: Scène de test (60000 polygones, 4000m2). Comment afficher rapidement un univers immense ?

Exemple de quadtree

Page 11: Scène de test (60000 polygones, 4000m2). Comment afficher rapidement un univers immense ?

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 !

Page 12: Scène de test (60000 polygones, 4000m2). Comment afficher rapidement un univers immense ?

Exemple avec notre scène de test

Page 13: Scène de test (60000 polygones, 4000m2). Comment afficher rapidement un univers immense ?

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…