woensdag 8 oktober 2008

Bounding Volume Hierarchies (BVH)

Tijd voor een korte update. Na 2 dagen hard werken is het gelukt om een simpele bounding volume hierarchy te bouwen. De code was snel geschreven en draaide heel snel. Alleen zijn segmentation violations redelijk pijnlijk om te debuggen :(.

Voor diegenen die de bounding hierarchy nog niet helemaal doorhebben kan misschien de volgende tekening een verduidelijking zijn. Het principe is eenvoudig, we bouwen rond alle objecten uit onze scene een doos. Die doosjes steken we terug in andere doosjes tot we uiteindelijk bij een doos uitkomen die alle objecten van de scene omvat.



De hierarchy (gewoon een boomstructuur) wordt heel simpel opgebouwd door de objecten alternerend aan de linker- en de rechtertak toe te voegen. Weinig efficïent maar het geeft wel al een geweldige speedup (zie tabel verder). Wat ik nog moet implementeren is het deleten van de met new gealloceerde knopen. Een beetje tricky omdat ik in principe in het midden van de hierarchie een knoop kan deleten waardoor al zijn kinderen voor eeuwig en 3 dagen (of toch tot de volgende reboot) in het geheugen achterblijven. Bovendien moet ik er ook op letten dat ik geen bladeren (de echte objecten) delete.

Ondertussen kan ik renderen aan de volgende snelheden:










figuur#driehoeken#seconde
kegel321
cilinder643
bol4808
torus102417
theepot4032355
konijntje5110360



Op de grafiek is duidelijk te zien dat de grootste snelheidswinsten te halen zijn bij kleine scenes, waarschijnlijk omdat ik mijn hierarchie opbouw op de meest crappy manier.



Eigenlijk zijn mijn grafieken ook crappy aangezien er een heel gat gaapt tussen 1024 driehoeken en dan 4032. Hierover interpoleren is wel heel scherp afronden.

Geen opmerkingen: