zondag 5 oktober 2008

Bounding Boxes

Vandaag, een regenachtige zondag, dus een excuus om achter de computer door te brengen. Nog een beetje verder geprogrammeerd aan mijn ray tracer. Ondertussen is de normaaltransformatie geïmplementeerd en de shading werkt nu (op het eerste zicht) correct.

Verder ben ik begonnen met een poging om een eerste versnellingsstructuur in mijn ray tracer te bouwen namenlijk "bounding boxes". Voor de niet ingewijden een korte uitleg. Een bounding box is een doosje waarin je objecten uit je scene steekt (meshes). Als je nu de stralen (rays) in de scene schiet test je eerst of de stralen de box raken, pas als de straal de box raakt ga je daadwerkelijk kijken wat erin zit. Als een straal de box niet raakt moeten we dus ook niet meer verder kijken wat erin zit. Het voordeel van deze aanpak is dat we veel dure straal-driehoekintersectie testen niet moeten doen, in plaats daarvan doen we relatief goedkope box-driehoekintersectie testen. Bounding boxes zijn niet het enige alternatief je kan de objecten bijvoorbeeld ook in bollen of andere geometrische figuren steken (zie figuur).



Momenteel zijn mijn bounding boxes nog niet hiërarchisch opgebouwd. In mensentaal: als we een doosje opentrekken vinden we direct een lief konijntje, een teepot of iets anders. Bij hierarchishe boundingboxes is elk doosje op zijn beurt weer opgebouwd uit kleinere doosjes tot we uiteindelijk het laatste doosje openen waar een of meerdere driehoeken inzitten.

Als we onze figuren vergelijken met de eerste plaatjes dan ziet bijvoorbeeld de donut er al veel smakelijker uit.
















Hoewel bounding boxes een simple versnellingstructuur is kunnen we toch al een snelheidswinst vaststellen (zie volgende tabel).









figuur#driehoeken#seconde
kegel323
cilinder645
bol48036
torus1024102
theepot4032843
konijntje5110696


Om een onbekende reden is de rendertijd voor de teepot verhoogt van 534 seconden naar 855 seconden, hier heb ik echter (nog) geen verklaring voor.

Geen opmerkingen: