Path tracing

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania

Path tracing – komputerowa metoda Monte Carlo tworzenia fotorealistycznych obrazów scen trójwymiarowych, w której analizowane są losowo wybrane ś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 raytracingu rekursywnego. Jedną z przewag tej metody nad raytracingiem jest łatwe modelowanie promieniujących powierzchni - w raytracingu rozważane są jedynie światła punktowe. Wada: większa liczba obliczeń, zwykle należy dla jednego piksela obrazu przeanalizować kilkadziesiąt do kilkuset ścieżek.

Przykładowa scena wygenerowana metodą path tracingu; w centrum znajduje się promieniująca kula.

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. 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 pochodzące od obiektów emitujących, które następnie ś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[edytuj | edytuj kod]

Bi-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.

Zobacz też[edytuj | edytuj kod]