Eikö BVH pidä luoda sijaintihierarkian, eikä pelkän dynaaminen-staattinen jaon perusteella?
Miten muuten voisi tietää, että osutaanko etualalla liikkuvaan objektiin vai taka-alan kiinteään geometriaan?
Vai meinaatko, että ajetaan efektiivisesti kaksi törmäystarkistusta erillisissä BVH:issa ja valitaan lähempi?
BVHsta
saa tehdä ihan millaisen tahansa, kunhan vaan kaikki mitä BVHssa on määritelty laatikon sisälle myös oikeasti on sen laatikon sisällä.
Se, kuinka optimaalinen se rakenne on vaikuttaa vain siihen, paljonko niitä törmäystarkastuksia tehdään. Jos BVH-puu on "huono", siitä on vaan vähemmän hyötyä ja törmäystarkastuksia joudutaan tekemään enemmän.
Eli, BVH on puurakenne, sinne voidaan juuritasolle laittaa kaksi päähaaraa, toinen staatisille ja toinen dynaamisille objekteille. Näiden sisllä kaikki alihaarat pyritään sitten tekemään niiden paikan mukaan.
Staattisen haaran ylimmän tason laatikon kooksi tulee yleensä koko pelikentän koko.
Dynaamisen haaran ylimmän laatikon kooksi tulee käytännössä se alue, minkä sisällä kentässä on mitään dynaamista geometriaa, eli esim. pelihahmoja tai tuhottavia asioita.
Nämä menevät suurelta osin päällekkäin, ja suurin osa säteistä osuu molempiin korkean bokseihin ja käy sitten läpi näiden molempien boksien sisällä olevia alihaaroja, mutta sen itse törmäystarkasteluja tekevän koodin (tai raudan) ei tarvi tietää mitään tästä jaottelusta, sille ne on vaan saman puun haaroja, se puu on vaan vähän isompi ja "epäoptimaalinen" törmäystarkastelujen määrän suhteen.
Käytännössä tämä jaottelusta johtuva puun epäoptimaalisuus tarkoittaa usein ehkä muutamaa törmäystarkastusta lisää per säde, mutta niitä pitää muutenkin tehdä ~30, joten muutama lisää ei ole paha. Toki se, kuinka epätasaisesti se dynaaminen kama on sijoiteltuna ja paljonko sitä on, vaikuttaa paljon tähän overheadiin. Jos sitä on paljon ja tasaisesti ympäri kenttää, overhead on suurempi. Mutta jos siellä on vaikka vain pelihahmot eikä mitään muuta, muutamalla tarkastuksella saadaan yleensä todettua, että säde ei osu pelihahmojen bokseihin.
Siinä tapauksessa, että geometriaa on enemän ja ripoteltuna joka puolelle kenttää kannattaa jako tehdä siten alemmalla tasolla; Jokainen tuhottava tai muuttuva/liikkuva objekti saa oman (dynaamisen) BVH-haaransa siten että siitä ylemmän tason (staattinen) boksi sisältää kaiken sen alueen missä se voi olla. Ja sitten joka frame generoidaan nämä alihaarat uudestaan(mikäli objekti on tuhottu/muuttuntu/liikkunut). ELi esim. aukeavaa ovea varten olisi staattinen boksi joka kattaisi koko sen alueen, minkä ovi kattaa missä tahansa asennossa, ja sen sisällä sitten dynaamisesti generoituna BVH-puuhaara sen paikan mukaan missä se ovi oikeasti sillä hetkellä on. Tämä vaatii kuitenkin selvästi enemmän vaivaa koodarilta ja kenttäsuunnittelulta, pitää ottaa huomioon nämä "missä kaikkialla tämä objekti voi olla"-boksit.