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:

hrt-sample1.png

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.

1 komentarz to “H-RT – podsumowanie”

  1. Biter:

    Zapowiada się obiecująco, powodzenia :)

Skomentuj