W przypadku śledzenia promieni / ścieżki, jednym z najprostszych sposobów wygładzania obrazu jest superpróbkowanie wartości pikseli i uśrednianie wyników. TO ZNACZY. zamiast strzelać do każdej próbki przez środek piksela, próbki są przesunięte o pewną wartość.
Podczas wyszukiwania w Internecie znalazłem dwie nieco różne metody:
- Generuj próbki w dowolny sposób i waż wynik za pomocą filtra
- Jednym z przykładów jest PBRT
- Wygeneruj próbki o rozkładzie równym kształtowi filtra
- Dwa przykłady są smallpt i Benedikt Bitterli „s Wolfram Renderer
Generuj i waż
Podstawowym procesem jest:
- Twórz próbki w dowolny sposób (losowo, stratyfikowane sekwencje, sekwencje o niskiej rozbieżności itp.)
- Odsuń promień kamery za pomocą dwóch próbek (xiy)
- Renderuj scenę za pomocą promienia
- Obliczyć masę za pomocą funkcji filtra i odległości próbki w stosunku do środka piksela. Na przykład Filtr skrzynkowy, Filtr namiotowy, Filtr Gaussa itp.)
- Zastosuj wagę do koloru z renderowania
Generuj w kształcie filtra
Podstawowym założeniem jest użycie odwrotnego próbkowania transformacji do tworzenia próbek, które są rozmieszczone zgodnie z kształtem filtra. Na przykład histogram próbek rozmieszczonych w kształcie Gaussa wyglądałby następująco:
Można to zrobić dokładnie lub przez binowanie funkcji do osobnego pliku pdf / cdf. smallpt używa dokładnie odwrotnego cdf filtra namiotu. Przykłady metody binowania można znaleźć tutaj
pytania
Jakie są zalety i wady każdej metody? A dlaczego miałbyś używać jednego nad drugim? Mogę wymyślić kilka rzeczy:
Generowanie i ważenie wydaje się najbardziej niezawodne, umożliwiając dowolną kombinację dowolnej metody próbkowania z dowolnym filtrem. Wymaga to jednak śledzenia ciężarów w ImageBuffer, a następnie ostatecznego rozwiązania.
Generuj w kształcie filtra może obsługiwać tylko pozytywne kształty filtrów (tj. Bez Mitchella, Catmull Roma lub Lanczosa), ponieważ nie możesz mieć negatywnego pliku pdf. Ale, jak wspomniano powyżej, łatwiej jest go wdrożyć, ponieważ nie trzeba śledzić żadnych wag.
Chociaż ostatecznie myślę, że można myśleć o metodzie 2 jako uproszczeniu metody 1, ponieważ zasadniczo wykorzystuje ona domyślną wagę filtra Box.
źródło
Odpowiedzi:
Istnieje świetny artykuł z 2006 roku na ten temat, Filtruj ważność próbkowania . Proponują metodę 2, badają właściwości i ogólnie popierają ją. Twierdzą, że ta metoda zapewnia płynniejsze wyniki renderowania, ponieważ waży wszystkie próbki, które mają równy udział w pikselu, zmniejszając w ten sposób wariancję końcowych wartości pikseli. Ma to pewien sens, ponieważ jest to ogólna maksyma w renderowaniu Monte Carlo, że próbkowanie według ważności da mniejszą wariancję niż próbki ważone.
Metoda 2 ma również tę zaletę, że jest nieco łatwiejsza do zrównoleglenia, ponieważ obliczenia każdego piksela są niezależne od wszystkich innych pikseli, podczas gdy w metodzie 1 wyniki próbek są dzielone między sąsiednie piksele (a zatem muszą być synchronizowane / przekazywane w jakiś sposób, gdy piksele są równoległe w poprzek wiele procesorów). Z tego samego powodu łatwiej jest wykonać adaptacyjne próbkowanie (więcej próbek w obszarach o dużej zmienności obrazu) przy użyciu metody 2 niż metody 1.
W artykule eksperymentowali także z filtrem Mitchella, próbkując z abs () filtra, a następnie ważąc każdą próbkę za pomocą +1 lub -1, jak sugeruje @trichoplax. Ale ostatecznie faktycznie zwiększyło to wariancję i było gorsze niż metoda 1, więc doszli do wniosku, że metoda 2 nadaje się tylko do filtrów dodatnich.
Biorąc to pod uwagę, wyniki z tego artykułu mogą nie mieć uniwersalnego zastosowania i może być nieco zależne od sceny, która metoda próbkowania jest lepsza. Napisałem wpis na blogu dotyczący tego pytanianiezależnie w 2014 r., używając syntetycznej „funkcji obrazu” zamiast pełnego renderowania, i znalazł metodę 1, aby uzyskać bardziej przyjemne wizualnie wyniki dzięki ładniejszemu wygładzaniu krawędzi o wysokim kontraście. Benedikt Bitterli również skomentował ten post, zgłaszając podobny problem ze swoim rendererem (nadmierny hałas o wysokiej częstotliwości wokół źródeł światła podczas korzystania z metody 2). Poza tym odkryłem, że główną różnicą między metodami była częstotliwość powstającego hałasu: metoda 2 daje szum o wyższej częstotliwości, „wielkości piksela”, podczas gdy metoda 1 daje szum „ziaren” o średnicy 2-3 pikseli, ale amplituda hałasu była podobna dla obu, więc to, który rodzaj hałasu wygląda mniej źle, jest prawdopodobnie kwestią osobistych preferencji.
źródło