web-dev-qa-db-fra.com

Quand utiliser le partitionnement d'espace binaire, Quadtree, Octree?

J'ai récemment découvert les arbres de partitionnement d'espace binaire et leur application aux graphiques 3D et à la détection de collision. J'ai également parcouru brièvement le matériel relatif aux quadtrees et octrees. Quand utiliseriez-vous des arbres quadruples sur des arbres bsp, ou vice versa? Sont-ils interchangeables? Je serais satisfait si j'avais suffisamment d'informations pour remplir un tableau comme celui-ci:

            | BSP | Quadtree | Octree
------------+----------------+-------
Situation A |  X  |          |
Situation B |     |     X    |
Situation C |     |          |   X

Que sont A, B et C?

67
Martin

Il n'y a pas de réponse claire à votre question. Cela dépend entièrement de la façon dont vos données sont organisées.

Quelque chose à garder à l'esprit:

Quadtrees fonctionne mieux pour les données qui sont principalement bidimensionnelles comme le rendu de carte dans les systèmes de navigation. Dans ce cas, il est plus rapide que les octets car il s'adapte mieux à la géométrie et maintient les structures de nœuds petites.

Octrees et BVH (Bounding Volume Hierarchies) bénéficient si les données sont en trois dimensions. Cela fonctionne également très bien si vos entités géométriques sont regroupées dans un espace 3D. (voir Octree vs BVH ) (archivé de original)

L'avantage d'Oc- et Quadtrees est que vous pouvez arrêter de générer des arbres à tout moment. Si vous souhaitez rendre des graphiques à l'aide d'un accélérateur graphique, il vous permet de générer simplement des arbres au niveau d'un objet et d'envoyer chaque objet en un seul appel à l'API graphique. Cela fonctionne beaucoup mieux que d'envoyer des triangles individuels (quelque chose que vous devez faire si vous utilisez pleinement les arbres BSP).

Les arbres BSP sont vraiment un cas spécial. Ils fonctionnent très bien en 2D et 3D, mais générer de bons arbres BSP est une forme d'art à part entière. Les arbres BSP ont l'inconvénient que vous devrez peut-être diviser votre géométrie en morceaux plus petits. Cela peut augmenter le nombre total de polygones de votre ensemble de données. Ils sont agréables pour le rendu, mais ils sont bien meilleurs pour la détection des collisions et le lancer de rayons.

Une belle propriété des arbres BSP est qu'ils décomposent une soupe polygonale en une structure qui peut être parfaitement rendue en arrière (et vice versa) à partir de n'importe quelle position de caméra sans faire de tri réel. L'ordre de chaque point de vue fait partie de la structure de données et se fait lors de la compilation de l'arbre BSP.

C'est d'ailleurs la raison pour laquelle ils étaient si populaires il y a 10 ans. Quake les a utilisés car il a permis au moteur graphique/rasterizer logiciel de ne pas utiliser un z-buffer coûteux.

Tous les arbres mentionnés ne sont que des familles d'arbres. Il y a aussi des octrees lâches, des arbres hybrides kd-arbres et beaucoup d'autres structures connexes.

64
Nils Pipenbrinck

La plus grande différence pratique entre les arbres BSP et d'autres types d'arbres 3D est que les arbres BSP peuvent être plus optimaux mais ne fonctionnent que sur la géométrie statique . En effet, les arbres BSP sont généralement très lents à construire, prenant souvent des heures ou des jours pour un niveau de jeu urbain statique typique.

Les deux principales raisons pour lesquelles les arbres BSP prennent plus de temps à construire sont (a) qu'ils utilisent des plans de fractionnement non alignés sur les axes, qui prennent plus de temps à trouver de manière optimale, et (b) qu'ils subdivisent la géométrie sur les limites des axes, garantissant qu'aucun objet ne traverse les plans divisés.

D'autres types d'arbres 3D (Octrees, Quadtrees, kd-tree, Bounding-Volume-Hierarchy) utilisent des volumes de délimitation alignés sur l'axe, et les volumes sont (facultativement) autorisés à se chevaucher, donc les objets contenus n'ont pas besoin d'être coupés sur le volume limites. Ces deux éléments rendent les arbres moins optimaux que les arbres BSP, mais plus rapides à construire et plus faciles à modifier pour les objets dynamiques.

Extrapoler ces facteurs dans des situations ...

Les zones extérieures utilisent généralement des représentations au sol basées sur le champ de hauteur, soit de simples cartes de hauteur ou des techniques de cartographie géographique plus complexes comme ROAM. Le sol lui-même ne participe pas à la partition de l'espace 3D, seulement des objets placés au sol.

Les mondes contenant de nombreuses instances de géométrie plus simple et similaire (maisons, arbres, astéroïdes, etc.) utiliseront souvent un arbre non BSP (tel qu'un BVH), car placer la géométrie dans un arbre BSP signifierait dupliquer et diviser le la géométrie détaillée de chaque instance.

À l'inverse, un grand maillage statique personnalisé sans instanciation, comme une scène urbaine ou un environnement intérieur complexe, utilisera généralement un arbre BSP pour des performances d'exécution améliorées. Le fait que l'arbre BSP divise la géométrie sur les limites des nœuds est utile pour les performances de rendu, car les nœuds BSP peuvent être utilisés comme lots de rendu de triangle pré-organisés. L'arbre BSP peut également être optimisé pour l'occlusion, en évitant d'avoir à dessiner des parties de l'arbre BSP qui sont connues pour être derrière une autre géométrie.

Voir aussi: Octree vs BVH (archivé de original), Tutoriel sur la hiérarchie des volumes limites , Tutoriel BSP .

12
David Jeske

Un BSP est le meilleur pour les environnements urbains.

Un Quadtree est préférable lorsque vous utilisez une carte de hauteur pour le terrain, etc.

Un octree est préférable lorsque vous avez des amas de géométrie dans un espace 3D, comme un système solaire.

6
TraumaPony

Les BSP sont une bonne option pour accélérer la détection de collision, selon la saveur que vous utilisez. Ils sont particulièrement rapides aux tests ponctuels et linéaires ou aux rayons, un peu moins rapides et un peu plus compliqués pour les choses avec du volume.

Quant à leur utilisation dans les graphiques, les BSP sont à peu près obsolètes. Octrees fonctionne bien pour des choses comme l'abattage de visibilité brute, tout comme les arbres AABB.

3
Mike F

Habituellement, ces choses n'ont pas de réponse claire. Je dirais que A, B et C sont le résultat d'une fonction de la taille de votre espace et de la quantité de choses que vous différenciez.

0
Sam Hoice

Un BSP est préférable pour un espace plus petit et plus simple avec lequel vous souhaitez uniquement faire l'occlusion. Si vous voulez toutes les intersections pour un rayon donné, vous devrez passer à un quad/octree.

Quant au quadtree vs octree - de combien de dimensions vous souciez-vous beaucoup? Deux dimensions signifie un quadtree, quatre un octree. Comme indiqué, comme quadtree peut fonctionner dans trois espaces, mais si vous voulez que chaque dimension reçoive un traitement approprié, un octree est le chemin à parcourir.

0
hazzen

Je n'ai pas beaucoup d'expérience avec les BSP, mais je peux dire que vous devriez aller avec des octets sur des quadruples lorsque vous la scène que vous rendez est grande. Autrement dit, la hauteur est plus de la moitié de la largeur et de la profondeur - petite règle d'or. En règle générale, les octrees n'apporteront pas un coût énorme par rapport aux arbres quadruples et ils ont le potentiel d'accélérer un peu les choses. YMMV.

0
Cody Brocious