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:
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?
źródło
Odpowiedzi:
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 .
źródło