Octtrees (ou même simplement quadtrees) et Kd-trees sont tous deux de bons schémas de partitionnement spatial à usage général, et si votre pipeline de construction et / ou votre moteur les génère, vous les trouverez utiles de toutes sortes de manières différentes pour optimiser les requêtes / itérations. Ils fonctionnent en subdivisant un volume fixe de manière hiérarchique, ce qui rend les requêtes telles que la diffusion de rayons dans votre espace objet très peu coûteuses à interroger (idéal pour les contrôles de collision).
Les hiérarchies de volumes limites fonctionnent d'une manière légèrement différente (elles agrègent les volumes des objets dans l'arborescence plutôt que de sous-diviser les espaces), et sont un moyen simple de supprimer les éléments inutiles de l'itération. Mais parce que BVH n'impose aucune restriction sur la façon dont deux nœuds frères sont liés, ce n'est pas un bon schéma pour déterminer l'ordre de rendu ou pour les requêtes de collision arbitraires.
Les systèmes BSP sont bons lorsque vous subdivisez le monde en fonction de polygones individuels, mais pour les objets plus grands, une approche basée sur le volume est plus logique.
Mais surtout, il convient de noter qu'aucun de ces systèmes n'est parfait pour déterminer l'ordre de rendu pour la transparence, même l'approche BSP. Il sera toujours possible de construire une géométrie qui casse votre algorithme, à moins que vous ne puissiez subdiviser des polygones à la volée. Ce que vous recherchez le plus probablement, c'est une solution «au mieux», où la géométrie peut être commandée correctement dans la majorité des cas; et l'équipe artistique peut subdiviser les modèles pour tous les cas qui ne fonctionnent pas (car le modèle / les polygones sont anormalement grands, longs ou auto-entrecroisés). Les petits modèles / nœuds sont toujours beaucoup plus faciles à trier «correctement», mais vous les payez en termes de frais d'itération.
Les arbres Kd et Oct / Quad sont tous deux de bonnes solutions à usage général, pour lesquelles une implémentation conviviale de la plate-forme peut être écrite, mais à la fin, vous allez devoir équilibrer la profondeur / complexité de votre arbre de partitionnement spatial par rapport au coût de itérer, et les frais généraux par modèle (c'est-à-dire tirer le coût des appels). Si vous ciblez XNA, je vous recommande de le garder simple et de haut niveau, et s'il y a des problèmes de tri avec une partie du contenu, alors envisagez fortement de changer le contenu avant d'essayer d'améliorer votre moteur jusqu'à ce qu'il puisse y faire face; les retours diminuent très rapidement après l'implémentation du tri de rendu le plus basique.