Ścieżka śledzenia Cook-Torrance BRDF

27

- 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:

Zdjęcie referencyjne Mitsuba.

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.

Renderowany obraz

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 .

Lo(p,wo)=Le+ΩLi(p,wi)fr(wo,wi)cosθdω
pwowiLowoLipwicosθ=nwi

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 .

1Nk=1NLi(p,wk)fr(wk,wo)cosθp(wk)
pwk

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

fr(wi,wo)=DFGπ(nwi)(nwo)
D=1m2(nh)4exp((nh)21m2(nh)2)
F=cspec+(1cspec)(1wih)5
G=min(1,2(nh)(nwo)woh,2(nh)(nwi)woh)
h=wo+wi|wo+wi| i to kolor zwierciadlany. Wszystkie równania, z wyjątkiem , zostały wyodrębnione z oryginalnej pracy. , znany również jako przybliżenie Schlicka , jest wydajnym i mniej dokładnym przybliżeniem rzeczywistego terminu Fresnela.cspecFF

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ę m0.2

p(wk)=12π
wiwk
1Nk=1NLi(p,wk)(DFGπ(nwk)(nwo))cosθ(12π)
Teraz możemy anulować i usunąć sumę, ponieważ wystrzeliwujemy tylko jeden losowy promień z punktu przecięcia. z Ponieważ , możemy to jeszcze bardziej uprościć π
2Li(p,wk)(DFG(nwk)(nwo))cosθ
cosθ=nwk
2Li(p,wk)(DFGnwo)

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ć.1π

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 D1πfr14

Dnew=1πm2(nh)4exp((nh)21m2(nh)2)
frnew(wi,wo)=DFG4(nwi)(nwo)
π2Li(p,wk)(DnewFGnwo)
które działały ładnie! PS: Problem polega teraz na lepszym zrozumieniu, w jaki sposób nowe sformułowanie i pomaga w utrzymaniu oszczędności energii ... ale to już inny temat.Dfr

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.

Christian Pagot
źródło
Nie jestem pewien, czy nadal odwiedzasz tę stronę, ale mam pytanie dotyczące twojego równania Fresnela i opublikowałem je tutaj
PeteUK

Odpowiedzi:

12

Zgodnie z tym artykułem , w twoim powinno być : więc skończyłbyś na 1πfr14

fr=DFG4(nwi)(nwo),
π2Li(p,wk)(DFGnwo).
wilk
źródło
Widziałem to inne sformułowanie dla Cook-Torrance BRDF, w którym równanie jest mnożone przez zamiast . Jednak ostatecznie efekt tej modyfikacji jest bardzo niewielki, ponieważ podstawilibyśmy 2, występujące w równaniu końcowym, przez 1,57 ( ). Zrobiłem tutaj test (na wszelki wypadek ...) i rzeczywiście problem nie zniknął. 141π=π2
Christian Pagot
@Capagot Współczynnik jest czasem włączany do natężeń światła (zgodnie z konwencją) i pomijany w BRDF; zobacz także to pytanie . Ale jest to bardziej powszechne w renderowaniu w czasie rzeczywistym niż w śledzeniu ścieżki. Mówisz też, że twoje testy lambertowskie idealnie pasują do Mitsuby, więc wydaje się mniej prawdopodobne, że to jest problem ... wciąż warto się nad tym zastanowić. 1/π
Nathan Reed,
@Capagot Myślę, że brakuje W funkcji dystrybucja . Artykuł, do którego zawiera ten czynnik w rozkładzie Beckmanna, którego używasz, więc posiadanie w i w powinno załatwić sprawę. 1πD14fr1πD
wolle
@NathanReed Przeczytałem artykuł o osadzaniu w kolorze. Jednak z powodu, o którym wspomniałeś, byłem przekonany, że to nie jest problem. π
Christian Pagot
@wolle Dokładnie! Właściwie już rzuciłem okiem na wspomniany artykuł, ale tego nie zauważyłem! Właśnie zmieniłem moją implementację, aby uwzględnić w i we , a teraz wszystko działa jak urok! Dołączę aktualizację pytania wraz z odpowiedzią! Dziękuję Ci! 1πD14fr
Christian Pagot
13

Publikuję to dla każdego, kto zastanawia się nad myleniem warunków i .1π14

Termin jest błędem z oryginalnego odniesienia do Cook-Torrance.1π

W rzeczywistości cały termin pochodzi od jakobianu transformacji z odbijanego kąta bryłowego do normalnego kąta bryłowego.14(nωi)

Według większości artykułów termin pojawił się po raz pierwszy w [Torrance, 67] .14

Aby uzyskać ładne wyjaśnienie tego terminu, należy sprawdzić [Nayar, 91] , załącznik D. Oto obraz z tego samego artykułu:

dω=dωr4cosθi

Joe Stam zgadza się również z wyrażeniem Nayara w [Stam 01, Model iluminacji dla warstwy skóry ograniczonej przez nierówne powierzchnie], załącznik B.14

Samu
źródło