Octtrees (ou mesmo apenas quadtrees) e Kd-trees são bons esquemas de particionamento espacial de uso geral e, se seu pipeline de construção e / ou mecanismo os estiver gerando, você descobrirá que eles são úteis de várias maneiras diferentes para otimizar consultas / iterações. Eles funcionam subdividindo um volume fixo de uma maneira hierárquica, o que torna consultas muito baratas como o raycasting no seu espaço de objeto (ótimo para verificações de colisão).
As hierarquias de volume delimitadoras funcionam de uma maneira ligeiramente diferente (elas agregam os volumes dos objetos na árvore em vez de subdividir os espaços) e são uma maneira simples de impedir que coisas desnecessárias sejam repetidas. Mas como o BVH não impõe restrições sobre a relação entre dois nós irmãos, não é um esquema tão bom para descobrir a ordem de renderização ou para consultas arbitrárias de colisão.
Os sistemas BSP são bons quando você está subdividindo o mundo com base em polígonos individuais, mas para objetos maiores, uma abordagem baseada em volume faz mais sentido.
Acima de tudo, vale ressaltar que nenhum desses sistemas é perfeito para determinar a ordem de renderização da transparência, mesmo a abordagem BSP. Sempre será possível construir geometria que quebre seu algoritmo, a menos que você possa subdividir polígonos em tempo real. O que você provavelmente está procurando é uma solução de "melhor esforço", onde a geometria pode ser ordenada corretamente na maioria dos casos; e a equipe de arte pode subdividir modelos para qualquer um dos casos que não funcionam (porque o modelo / polígonos são anormalmente grandes, longos ou se interceptam). Modelos / nós menores são sempre muito mais fáceis de classificar 'corretamente', mas você paga por isso em termos de sobrecarga de iteração.
Kd-trees e Oct / quad-trees são boas soluções de uso geral, para as quais uma implementação amigável da plataforma pode ser escrita, mas no final, você precisará equilibrar a profundidade / complexidade de sua árvore de particionamento espacial com o custo de iterando-o e a sobrecarga por modelo (ou seja, custo da chamada de desenho). Se você estiver direcionando o XNA, recomendo que você o mantenha simples e de alto nível, e se houver problemas de classificação em parte do conteúdo, considere fortemente mudar o conteúdo antes de tentar melhorar seu mecanismo até que ele possa lidar com ele; os retornos diminuem muito rapidamente após a implementação da classificação de renderização mais básica.