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.