H-RT – podsumowanie
H-RayTracer został z grubsza przedstawiony przeze mnie w jednym z zeszłorocznych wpisów. Dzisiaj chcę przedstawić projekt bardziej szczegółowo i przy okazji podsumować moje – póki co skromne – osiągnięcia na jego polu. H-RT to silnik renderujący sceny 3D metodą śledzenia promieni. Docelowo ma on wspierać rendering oparty na algorytmach mających podstawy fizyczne. Droga do tego jest jeszcze dość długa, ale już dzisiaj H-RT potrafi generować proste obrazy. Przykład takiego renderingu jest poniżej:

Modele odbicia światła
Głównym zadaniem, jakie sobie postawiłem rozpoczynając pracę nad raytracerem było zbadanie możliwości współczesnych modeli lokalnego odbicia światła. Nie jest to jeszcze zadanie skończone, gdyż w kolejce jest jeszcze parę modeli. Do dzisiaj udało mi się jednak zaimplementować następujące:
- Phong
- Ashikhmin-Shirley
- Cook-Torrance
- Ward
- He-Torrance-Sillion-Greenberg
Warto zwrócić uwagę zwłaszcza na ten ostatni model. Jest on chyba jednym z najbardziej skomplikowanych obliczeniowo, a przy okazji uwzględnia wiele efektów fizycznych związanych z odbiciem światła. Model ten jest około 90 razy wolniejszy od modelu AS (i to z prekalkulacją danych). Daje też dość ciekawe efekty (zakładając że go poprawnie zaimplementowałem
), o których nie omieszkam napisać kiedy indziej.
Inne możliwości
Póki co silnik potrafi renderować dość proste bryły/kształty, czyli: kule, walce, dyski, płaszczyzny i trójkąty. Do badań modeli odbicia to w zupełności wystarczy, natomiast w przyszłości zostaną dodane kolejne (np. możliwość renderowania siatki trójkątów). Zaimplementowany jest także system filtrów (gaussowski, box, trójkątny, sinc), które w końcowej fazie “składają” obraz z promieni. Ponadto zostały zaimplementowane światła punktowe i powierzchniowe. Obraz wyjściowy może zostać zapisany bądź w formacie PNG bądź w formacie HDR (High-Dynamic-Range). Engine także może wewnętrznie operować na danych spektralnych (światło można zdefiniować wtedy w postaci spektralnej), a nie tylko RGB. Aktualnie jestem w fazie dodawania wsparcia dla polaryzacji światła, więc i ten “aspekt optyczny” będzie brany pod uwagę w czasie generowania obrazu.
Słabością aktualnej wersji H-RT (co wyklucza jego szersze zastosowanie) jest brak wsparcia dla raytracingu stochastycznego. Zmieni się to w jednej z kolejnych wersji (gdzie planuję zaimplementować path-tracing). Na dzień dzisiejszy, po dopracowaniu wsparcia dla polaryzacji światła, mam zamiar zamrozić kod raytracera i skupić się na usuwaniu błędów i przyspieszaniu renderingu. Poza tym czeka mnie napisanie pracy magisterskiej, w czasie którego będą bardzo intensywnie używał H-RayTracera. Dopiero po – mam nadzieję udanej – obronie praca nad nowymi możliwościami ruszy na nowo.
Być może ktoś przeglądając mojego bloga zauważył w odsyłaczach link do strony domowej projektu