Path tracing
Path tracing (z ang. „śledzenie ścieżek”) – komputerowa technika tworzenia fotorealistycznych obrazów scen trójwymiarowych, w której analizowane są losowo wybrane, metodą Monte Carlo, ścieżki promieni światła. Analizując dostatecznie dużo różnych promieni, możliwe jest wyznaczenie bardzo dobrej aproksymacji globalnego rozkładu światła. Metoda została zaproponowana przez Jamesa Kajiya w 1986 roku, jako rozwiązanie tzw. równania oświetlenia.
Algorytm path tracingu jest dość podobny do ray tracingu rekursywnego. Przewagą tej metody nad ray tracingiem jest łatwe modelowanie promieniujących powierzchni – w ray tracingu rozważane są jedynie światła punktowe. Wadą natomiast jest większa liczba obliczeń, zwykle dla jednego piksela obrazu należy przeanalizować od kilkadziesięciu do kilkuset ścieżek.
Algorytm przebiega następująco:
- Z punktu, w którym znajduje się obserwator, wypuszczane są promienie.
- Jeśli promień trafi w jakiś obiekt, z punktu przecięcia (rekursywnie) wypuszczane są kolejne promienie (co najmniej jeden), przy czym kierunek nowych promieni jest losowy; od jakości funkcji losującej zależy jakość obrazu, a każdy obiekt może pochłaniać lub emitować światło.
- Tworzenie pojedynczej ścieżki kończy się, gdy głębokość rekursji przekroczy pewien limit. Wówczas wyznacza się ostateczne natężenie światła, jakie dociera do obserwatora: składa się na nie natężenie światła pochodzące od obiektów emitujących, które następnie na ścieżce jest tłumione; tłumienie zależy od współczynnika pochłaniania światła dla każdego trafionego obiektu (funkcja BRDF) uwzględniające m.in. kąt pomiędzy promieniem padającym i odbitym.
Pseudokod dla path tracingu, w którym generowany jest tylko jeden promień na każdym etapie:
funkcja path_trace(promień) begin if głębokość rekurencji > limit then return natężenie domyślne;
if promień przecina pewien obiekt then begin promień odbity = losowy promień z punktu przecięcia; natężenie = path_trace(promień odbity);
return natężenie emitowane przez obiekt + (natężenie * BRDF); end; else return natężenie domyślne; end.
Bi-directional path tracing
edytujBi-directional path tracing jest modyfikacją path-tracingu, w której równocześnie budowane są dwie ścieżki: jedna prowadząca do obserwatora oraz druga wyprowadzana ze źródła światła. Każdy punkt z drugiej ścieżki jest traktowany jako źródło promieniowania, które wnosi coś do natężenia na ścieżce do obserwatora. Ostatecznie natężenie na ścieżce do obserwatora jest wyznaczane podobnie jak w zwykłym path tracingu.