- Przepraszam za długi post, ale wolę to zrobić, ponieważ „ Diabeł tkwi w szczegółach ” :)
Piszę znacznik ścieżki od zera i działa on dobrze na idealnie rozproszone (lambertowskie) powierzchnie ( tj . Test pieca wskazuje - przynajmniej wizualnie - na oszczędność energii, a renderowane obrazy pasują do tych wygenerowanych za pomocą renderera Mitsuba dla tego samego parametry). Teraz wdrażam obsługę specyficznego terminu oryginalnego modelu mikrofacet Cook-Torrance, aby renderować niektóre metalowe powierzchnie. Wydaje się jednak, że ten BRDF odbija więcej energii niż otrzymany. Zobacz przykładowe obrazy poniżej:
Powyższy obraz: odniesienie Mitsuba (zakładane jako prawidłowe) obraz: Śledzenie ścieżki z bezpośrednim próbkowaniem światła, ważność próbkowania półkuli, maksymalna długość ścieżki = 5, 32 warstwowe spp, filtr pudełkowy, chropowatość powierzchni = 0,2, RGB.
Powyższy obraz: rzeczywisty renderowany obraz: śledzenie ścieżki naiwnej brutalnej siły, równomierne próbkowanie półkuli, maksymalna długość ścieżki = 5, 4096 warstw spp, filtr pudełkowy, chropowatość powierzchni = 0,2, RGB. Pomimo pewnych różnic w odniesieniu do ustawień renderowania, jasne jest, że renderowany obraz nie będzie zbieżny z odniesieniem pokazanym wcześniej.
Wydaje mi się, że nie jest to problem z implementacją, ale problem dotyczący właściwego użycia modelu Cooka-Torrance'a w ramach równań renderujących. Poniżej wyjaśniam, jak oceniam lustrzany BRDF i chciałbym wiedzieć, czy robię to poprawnie, a jeśli nie, dlaczego.
Zanim przejdziemy do drobiazgowych szczegółów, zauważ, że renderer jest dość prosty: 1) implementuje tylko algorytm śledzenia ścieżki naiwnej brutalnej siły - bez bezpośredniego próbkowania światła, bez dwukierunkowego śledzenia ścieżki, bez MLT; 2) wszystkie próbki są jednolite na półkuli powyżej punktu przecięcia - w ogóle nie ma znaczenia pobieranie próbek, ani dla powierzchni rozproszonych; 3) ścieżka promienia ma ustaloną maksymalną długość 5 - brak rosyjskiej ruletki; 4) promieniowanie / współczynnik odbicia jest informowany przez krotki RGB - brak renderowania widmowego.
Model mikropacetowy Cook Torrance
Teraz spróbuję skonstruować ścieżkę, którą podążałem, aby zaimplementować wziernikowe wyrażenie oceniające BRDF. Wszystko zaczyna się od równania renderowania gdzie to punkt przecięcia na powierzchni, to wektor obserwacji, to wektor światła, to blask wychodzący po , jest zdarzenie na promieniowanie wzdłuż i .
Powyższą całkę ( tj. Współczynnik odbicia równania renderowania) można aproksymować za pomocą następującego estymatora Monte Carlo gdzie jest funkcją gęstości prawdopodobieństwa (PDF), która opisuje rozkład próbkowania wektory .
Do faktycznego renderowania należy określić BRDF i PDF. W przypadku terminu specular modelu Cook-Torrance używam następującego BRDF gdzie W powyższych równaniach
Obowiązkowe byłoby stosowanie ważnego próbkowania w przypadku renderowania gładkich powierzchni zwierciadlanych. Modeluję jednak tylko dość szorstkie powierzchnie ( ), dlatego zdecydowałem się na chwilę zachować jednakowe próbkowanie (kosztem dłuższych czasów renderowania). W tym przypadku plik PDF to Przez zastąpienie jednolitego pliku PDF i Cook-Torrance BRDF estymatorem Monte Carlo (zwróć uwagę, że to podstawiony przez , zmienna losowa), otrzymuję
Tak właśnie oceniam wyrażenie, gdy promień uderza w powierzchnię zwierciadlaną, której współczynnik odbicia jest opisany przez Cook-Torrance BRDF. Jest to wyrażenie, które wydaje się odzwierciedlać więcej energii niż otrzymane. Jestem prawie pewien, że coś jest z tym nie tak (lub w procesie wyprowadzania), ale po prostu nie mogę tego zauważyć.
Co ciekawe, jeśli pomnożę powyższe wyrażenie przez , otrzymam wyniki, które wyglądają poprawnie. Jednak odmówiłem, ponieważ nie mogę tego matematycznie uzasadnić.
Każda pomoc jest bardzo mile widziana! Dziękuję Ci!
AKTUALIZACJA
Jak wskazano poniżej @wolle, niniejszy artykuł przedstawia nową formułę lepiej nadającą się do śledzenia ścieżki, w której funkcja rozkładu normalnego (NDF) obejmuje współczynnik , a BRDF zawiera współczynnik. Zatem i Po włączeniu powyższych równań do skończyłem z równaniem renderowania
AKTUALIZACJA 2
Jak zauważył PeteUK , autorstwo sformułowania Fresnela przedstawionego w oryginalnym tekście mojego pytania zostało błędnie przypisane Cookowi i Torrance'owi. Formuła Fresnela stosowana powyżej jest znana jako przybliżenie Schlicka i nosi imię Christophe Schlicka. Oryginalny tekst pytania został odpowiednio zmodyfikowany.