Path tracer - wielowarstwowe materiały i ważność próbkowania

12

Obecnie próbuję wdrożyć znacznik ścieżki Monte Carlo. Przeprowadziłem badania i wydaje się, że powszechnym podejściem do materiałów jest stosowanie modelu warstwowego. Coś takiego:

wprowadź opis zdjęcia tutaj

Kiedy światło uderza w powierzchnię, Fresnel mówi nam, ile tego światła odbija się od pierwszej warstwy, a ile przechodzi do drugiej i tak dalej.

Zrobiłem więc coś podobnego, ale prostszego: tylko jedna warstwa zwierciadlana i jedna warstwa rozproszona. Jeszcze nie transmitancja. Jak dotąd tak dobrze, używam prostego cosinusowego ważonego brdf dla mojego rozproszonego i modelu Cook-Torrance z mikropasowaniem dla mojego lustrzanego.

Teraz pojawia się najtrudniejsza część: co powinienem zrobić, gdy promień trafi na powierzchnię? Zwykle wybieram brdf odpowiadający materiałowi powierzchni, próbuję kierunek padającego światła, oceniam brdf i dzielę według właściwej funkcji rozkładu prawdopodobieństwa.

Ale tutaj uderzenie powierzchni skutecznie odpowiada wielu materiałom. Naiwnym sposobem radzenia sobie z tym byłoby próbkowanie raz dla każdej trafionej warstwy. Ale to wyraźnie stanowi źródło ogromnego przeboju wydajności, przez co moja ścieżka skutecznie staje się drzewem.

Czy jest lepsze rozwiązanie?

kastan
źródło
1
Czy nie możesz „monte-carlo” warstw materiału? Np. Zważ każdą warstwę zgodnie z ich współczynnikiem odbicia i wybierz jedną losowo na tej podstawie. Głębsze warstwy będą wymagały pewnego tłumienia w oparciu o sumę absorpcji wszystkich warstw nad nimi.
PaulHK
PaulHK Właśnie to robię w mojej ścieżce śledzenia, rosyjskiej ruletce dla każdego interfejsu między warstwami, więc nie ma rozgałęzień. Niestety moja implementacja jeszcze się nie zakończyła, więc nie mam informacji dotyczących faktycznej wydajności. Swoją implementację oparłem na artykule „Arbitralnie warstwowe powierzchnie mikro-twarzy” autorstwa Andrei Weidlich i Aleksandra Wilkie, który wydaje się być bardziej ograniczony niż ramy Wenzela Jakoba (wskazane w odpowiedzi Stefana), ale który jest w stanie generowania całkiem dobrych wyników i jest znacznie prostszy do wdrożenia.
Christian Pagot

Odpowiedzi:

7

Wenzel Jakob i in. Przedstawili ramy dla materiałów warstwowych na SIGGRAPH 2014. Sekcja 6.2 wyjaśnia ważność próbkowania. Jeśli wolisz kod niż równania, metoda jest implementowana w rendererze Mitsuba .

Stefan Werner
źródło
2
Należy zauważyć, że metoda Jakoba i in. polega na renderowaniu tabelarycznych danych BSDF w niektórych wyspecjalizowanych reprezentacjach Fouriera. Szczegółowe informacje znajdują się również w odpowiednim raporcie technicznym . Implementacja typu open source jest również dostępna w najnowszej, trzeciej edycji PBRT . Pliki BSDF mogą być generowane przy pomocy layerlab w Pythonie.
tizian