💡 Path tracing
Progresywny path tracer WebGL2 renderujący scenę Cornell box. Każda klatka dodaje jedną próbkę Monte Carlo na piksel; obserwuj, jak przez setki próbek wyłaniają się miękkie cienie, przenikanie koloru i kaustyki.
Fizycznie dokładne renderowanie metodą całkowania Monte Carlo. Każdy piksel wystrzeliwuje wiele promieni, które losowo się odbijają, aż dotrą do źródła światła — uśrednienie wyników daje z czasem obraz bez szumu.
🔬 Co pokazuje
Równanie renderowania (Kajiya, 1986) oblicza wychodzące światło L na powierzchni jako całkę światła wpadającego pomnożonego przez BRDF po całej półkuli. Monte Carlo rozwiązuje to, próbkując losowe kierunki zgodnie z rozkładem BRDF. Każda próbka jest nieobciążona — obraz zbiega się do dokładnego oświetlenia globalnego przy nieskończonej liczbie próbek. Miękkie cienie, przenikanie koloru i kaustyki wyłaniają się automatycznie z fizyki, bez specjalnego kodu.
🎮 Jak korzystać
Przeciągnij, aby obracać kamerę. Obraz stopniowo się doprecyzowuje — każda klatka dodaje więcej próbek na piksel. Przełączaj między gotowymi scenami, aby zobaczyć Cornell box, skupiska kul i powierzchnie odbijające. Zwiększ maksymalną liczbę odbić, aby uchwycić wielokrotnie odbite światło pośrednie. Licznik próbek pokazuje, ile promieni na piksel się już zakumulowało. Kliknij Reset Accumulation, aby zacząć od nowa po zmianie sceny.
💡 Czy wiesz, że?
RenderMan od Pixara używa path tracingu do renderowania każdej klatki filmu — pojedyncza klatka produkcyjna może zgromadzić ponad 10 000 próbek i zająć godziny na farmie renderującej. Tempo zbieżności Monte Carlo path tracingu wynosi 1/√N: podwojenie jakości wymaga poczwórnej liczby próbek. Sprzętowe śledzenie promieni na GPU (NVIDIA RTX) zadebiutowało w 2018 roku, umożliwiając po raz pierwszy path tracing w czasie rzeczywistym w grach dzięki akceleracji sprzętowej zapytań przecięcia BVH, które dominują w obliczeniach path tracingu.
O tej symulacji
To progresywny path tracer Monte Carlo renderujący scenę Cornell box w całości na GPU w WebGL2. Każda klatka wystrzeliwuje jeden losowo rozproszony promień na piksel i przybliża równanie renderowania, całkując światło wpadające razy BRDF powierzchni po całej półkuli. Próbki gromadzą się w buforze zmiennoprzecinkowym typu ping-pong, więc szum spada, a miękkie cienie, przenikanie koloru i odbicia wyostrzają się przez setki próbek na piksel. To rzetelny, oparty na fizyce obraz tego, jak naprawdę przenosi się światło.
🔬 Co pokazuje
Jednokierunkowy path tracer równania renderowania. Rozproszone ściany odbijają światło z próbkowaniem półkuli ważonym cosinusem; kule metalowe, lustrzane i chropowate używają kierunków odbicia ze stożkiem chropowatości. Prostokątny emiter na suficie oświetla scenę, ścieżki kończą się na emisji, a ruletka rosyjska usuwa słabe ścieżki po czwartym odbiciu. Klatki mieszają się z wagą 1/(n+1), a na końcu stosowane jest mapowanie tonalne ACES i korekcja gamma.
🎮 Jak korzystać
Użyj Pause/Resume, aby wstrzymać lub wznowić akumulację, oraz Reset, by wyczyścić bufor. Suwak „Max bounces” (1-8) ustala głębokość ścieżki, wychwytując więcej światła pośredniego przy wyższych wartościach. „Exposure” (0,2-3,0) skaluje jasność przed mapowaniem tonalnym. Przyciski Scene przełączają między gotowymi scenami Cornell, Spheres i Mirror; każda zmiana resetuje akumulację. Statystyki na żywo pokazują próbki na piksel, FPS i rozdzielczość, z paskiem postępu do 512 spp.
💡 Czy wiesz, że?
Path tracing Monte Carlo zbiega się z tempem 1/√N, więc zmniejszenie widocznego szumu o połowę wymaga poczwórnej liczby próbek. Dlatego wczesne klatki wyglądają ziarniście, a czyste obrazy wymagają setek próbek, by się wyklarować.
Najczęściej zadawane pytania
Czym jest path tracing?
Path tracing to technika renderowania symulująca sposób, w jaki światło porusza się w scenie: promienie są śledzone, gdy odbijają się od powierzchni, aż dotrą do źródła światła. Numerycznie rozwiązuje równanie renderowania metodą całkowania Monte Carlo, czyli uśrednia wiele losowych próbek na piksel. Wynikiem jest fizycznie poprawne oświetlenie globalne, obejmujące miękkie cienie, odbicia i pośrednie przenikanie koloru.
Dlaczego obraz zaczyna się jako szum, a potem się wyczyszcza?
Każda klatka dodaje tylko jedną losowo wybraną ścieżkę światła na piksel, więc pojedyncza próbka jest zgrubnym, ziarnistym oszacowaniem. Symulacja akumuluje te oszacowania klatka po klatce i uśrednia je z wagą 1/(n+1). W miarę wzrostu liczby próbek na piksel w kierunku celu 512, losowy błąd maleje, a obraz zbiega się do gładkiego obrazu bez szumu.
Co robią suwaki Max bounces i Exposure?
Max bounces ustala, ile razy promień może się odbić, zanim jego ścieżka zostanie zakończona, od 1 do 8. Wyższe wartości wychwytują więcej pośredniego, wielokrotnie odbitego światła, np. przenikanie koloru między ścianami, kosztem wolniejszej zbieżności. Exposure skaluje zakumulowaną jasność od 0,2 do 3,0 przed mapowaniem tonalnym ACES, pozwalając rozjaśnić lub przyciemnić końcowy obraz bez zmiany bazowego renderu.
Czy to jest fizycznie dokładne?
To nieobciążony estymator równania renderowania, więc przy nieskończonej liczbie próbek zbiega się do dokładnego rozwiązania oświetlenia globalnego, co czyni go fizycznie uzasadnionym. Jest jednak uproszczony na potrzeby przeglądarki: geometria to niewielki zestaw płaszczyzn i kul, model odbić lustrzanych to przybliżony stożek chropowatości, a nie pełny model GGX, i nie ma transportu spektralnego ani refrakcyjnego szkła. Sam transport światła podlega jednak realnej fizyce.
Czym jest Cornell box i po co się go używa?
Cornell box to klasyczna scena testowa opracowana na Uniwersytecie Cornella: pomieszczenie w kształcie sześcianu z czerwoną lewą ścianą, zieloną prawą ścianą, neutralną podłogą, sufitem i tylną ścianą oraz źródłem światła na suficie. Kolorowe ściany ułatwiają dostrzeżenie rozproszonego przenikania koloru i miękkich cieni powierzchniowych, dzięki czemu stała się standardowym testem porównawczym do walidacji rendererów oświetlenia globalnego względem rzeczywistych pomiarów.