Gli ottre (o anche solo i quadrifogli) e gli alberi Kd sono entrambi buoni schemi di partizionamento spaziale per scopi generici e se la tua pipeline di costruzione e / o motore li sta generando, scoprirai che sono utili in tutti i modi per ottimizzare le query iterazioni /. Funzionano suddividendo un volume fisso in modo gerarchico, il che rende le query come il raycasting nello spazio degli oggetti molto economiche per le quali cercare (ottimo per i controlli delle collisioni).
Le gerarchie di volumi limitanti funzionano in modo leggermente diverso (aggregano i volumi degli oggetti nella struttura anziché gli spazi di suddivisione) e sono un modo semplice per tagliare le cose non necessarie dall'iterazione. Ma poiché BVH non pone alcuna restrizione sul modo in cui due nodi di pari livello sono collegati, non è un ottimo schema per capire l'ordine di rendering o per interrogazioni di collisioni arbitrarie.
I sistemi BSP sono utili quando si suddivide il mondo in base a singoli poligoni, ma per oggetti più grandi un approccio basato sul volume ha più senso.
Soprattutto, vale la pena notare che nessuno di questi sistemi è perfetto per determinare l'ordine di rendering per la trasparenza, anche l'approccio BSP. Sarà sempre possibile costruire una geometria che rompe il tuo algoritmo, a meno che tu non sia in grado di suddividere i poligoni al volo. Ciò che probabilmente stai cercando è una soluzione "best effort", in cui la geometria può essere ordinata correttamente nella maggior parte dei casi; e il team artistico può suddividere i modelli per tutti i casi che non funzionano (perché il modello / i poligoni sono anormalmente grandi, lunghi o autointersecanti). I modelli / nodi più piccoli sono sempre molto più facili da ordinare "correttamente", ma si paga in termini di iterazione.
Kd-trees e Oct / quad-tree sono entrambe buone soluzioni per scopi generici, per le quali è possibile scrivere un'implementazione adatta alla piattaforma, ma alla fine dovrai bilanciare la profondità / complessità del tuo albero di partizionamento spaziale con il costo di iterandolo e le spese generali per modello (ad es. disegnare il costo della chiamata). Se stai prendendo di mira XNA, ti consiglierei di mantenerlo semplice e di alto livello, e se ci sono problemi di ordinamento con alcuni dei contenuti, allora considera fortemente di cambiare il contenuto prima di provare a migliorare il tuo motore fino a quando non può farcela; i rendimenti diminuiscono molto rapidamente dopo l'implementazione dell'ordinamento di rendering più semplice.