24.01.2014 Views

Praca magisterska BVH

Praca magisterska BVH

Praca magisterska BVH

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

18 Technika śledzenia promieni<br />

Trawersowanie pakietów promieni<br />

Interesującą techniką przyspieszania przeglądania drzewa jest śledzenie pakietów<br />

promieni. Pakiet taki składa się przeważnie z 4, a czasem z 16 promieni. Wykorzystywana<br />

jest tu zbieżność promieni pierwotnych i instrukcje SIMD, o których więcej<br />

znajduje się w punkcie 1.2.4. Dzięki instrukcjom SIMD można szybciej znajdować<br />

przecięcia promieni z kolejnymi węzłami struktury. Zbieżność promieni pozwala<br />

na ograniczenie liczby trawersowań struktury. Możliwe jest to w związku z tym, że<br />

promienie z sąsiadujących pikseli w wielu przypadkach trafiają w ten sam obiekt,<br />

a czasem nawet w ten sam trójkąt w scenie. Taki obiekt znajduje się przeważnie<br />

w jednym bądź dwóch sąsiednich liściach, przez co nie trzeba dla kolejnych<br />

promieni trawersować początkowej ścieżki danego drzewa.<br />

Problem pojawia się dla promieni odbitych bądź załamanych. Pakiet takich<br />

promieni może stać się rozbieżny, przez co traci się dla tych promieni możliwość<br />

zmniejszenia liczby trawersowań struktury. Zdecydowanie bardziej opłaca się w takim<br />

wypadku trawersować osobno każdy z promieni. Przykład takiej sytuacji znajduje<br />

się na rysunku 1.9.<br />

Rysunek 1.9. Przykład rozbieżności pakietu promieni po odbiciu od kulistej powierzchni.<br />

Źródło: Rysunek pochodzi z artykułu [BEL + 07]<br />

1.2.4. Szczegóły implementacji<br />

Dobra struktura, przemyślana budowa i dobra technika trawersowania może bardzo<br />

poprawić wydajność algorytmu śledzenia promieni. Jednak detale implementacji<br />

w tym przypadku róznież mają bardzo duże znaczenie. Napisanie efektywnego<br />

kodu nie jest zadaniem łatwym. W tym rozdziale opiszę kilka szczegółów<br />

implementacyjnych, na które warto zwrócić uwagę, gdyż stosowanie lub nie, opisanych<br />

poniżej rozwiązań może dość znacznie wpłynąć na szybkość działania całego<br />

silnika.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!