Jakie jest podstawowe uzasadnienie antyaliasingu przy użyciu wielu losowych próbek w pikselu?

12

W grafice często pobiera się wiele próbek w granicach piksela i łączy je razem (najczęściej po prostu średnią), aby uzyskać końcowy kolor piksela próbki. Ma to efekt wygładzania obrazu.

Z jednej strony ma to dla mnie sens, ponieważ to, co skutecznie robisz, polega na zintegrowaniu koloru piksela nad obszarem reprezentowanym przez piksel. W tym myśleniu uśrednianie „losowych” próbek wydaje się być idealną konfiguracją do integracji z Monte Carlo. („losowy” może być warstwowy, oparty na niebieskim szumie, sekwencje o niskiej rozbieżności itp.)

Z drugiej strony wydaje się to niewłaściwe (a przynajmniej nie tak poprawne, jak mogłoby być) z punktu widzenia cyfrowego przetwarzania sygnałów. Z tego punktu widzenia wydaje się, że pobieramy dużo próbek, a następnie próbkujemy w dół za pomocą filtra skrzynkowego (rozmycie ramki), aby uzyskać końcową wartość pikseli. W tym świetle wydaje się, że idealnym rozwiązaniem byłoby użycie filtrowania cynkowego zamiast uśredniania próbek. Widziałem, że filtr pudełkowy jest tańszym przybliżeniem do myślenia w tym kierunku.

To mnie trochę zdezorientowane. Czy podstawowa idea, że ​​integrujemy obszar pikseli i uśrednianie jest poprawna? A może próbujemy w dół i powinniśmy używać sinc, ale używamy filtra pudełkowego, ponieważ jest szybki?

A może to coś zupełnie innego?

Trochę powiązane: Antyaliasing / Filtrowanie w Ray Tracing

Alan Wolfe
źródło
Znajduję
Alan Wolfe

Odpowiedzi:

9

Z punktu widzenia przetwarzania sygnału próbkujesz sygnał w domenie ciągłej i musisz go przefiltrować, aby pozbyć się częstotliwości przekraczających limit Nyquista. To właśnie filtrowanie prowadzi do integracji w obszarze pikseli - lub bardziej ogólnie, do integracji z jądrem antyaliasingu (które nie musi być pudełkiem).

Rozważ funkcję renderowania, która pobiera punkt próbki w przestrzeni ekranu i zwraca kolor znaleziony w tym punkcie. (W tej chwili zignorujmy wszelkie problemy z losowym próbkowaniem i załóżmy, że zwraca „idealnie” renderowany kolor dla tego konkretnego punktu.) Ta funkcja skutecznie definiuje sygnał 2D w domenie ciągłej. Innymi słowy, definiuje obraz o nieskończonej rozdzielczości , ponieważ nic nie stoi na przeszkodzie, aby ta funkcja miała funkcje w dowolnie małych skalach. Pod względem częstotliwości: funkcja nie jest ograniczona pasmem; może zawierać elementy o dowolnie wysokich częstotliwościach przestrzennych.x,y

Teraz chcesz przekonwertować go na skończoną liczbę pikseli. Podobnie jak w przypadku digitalizacji sygnału audio, podczas jego próbkowania otrzymasz aliasing, chyba że najpierw wyeliminujesz częstotliwości przekraczające limit Nyquista narzucony przez częstotliwość próbkowania. Innymi słowy, musisz pozbyć się funkcji mniejszych niż siatka pikseli. Aby to zrobić, zastosuj filtr dolnoprzepustowy. Idealny filtr dolnoprzepustowy jest funkcja sinc, ale z różnych względów praktycznych używamy inne filtry (które nie eliminują całkowicie częstotliwości poza limit Nyquista, ale przynajmniej je osłabiać).

f(x,y)k(x,y)

ffiltered(x,y)=f(x,y)k(xx,yy)dxdy

Następnie obraz jest bezpieczny do próbkowania, więc końcowe wartości pikseli uzyskuje się po prostu oceniając na współrzędnych pikseli.ffiltered

Jeśli jest filtrem pola, który wygląda jak w polu piksela, a innym miejscu, to upraszcza to po prostu integrację nad polem piksela. Ale jak wspomniano, filtr pudełkowy nie jest tak świetny i istnieją lepsze opcje, takie jak filtry namiotowe, bicubyczne i gaussowskie.k = 1 k = 0 fkk=1k=0f

W każdym razie, skoro mamy już całkę, możemy do niej użyć Monte Carlo i połączyć ją z dowolnymi innymi całkami, które chcielibyśmy zrobić - do oświetlenia, rozmycia ruchu i tak dalej. Możemy nawet zastosować ważność próbkowania do współczynnika całki, generując próbki dla każdego piksela, które są rozmieszczone wokół środka pikseli zgodnie z .kkk

Nathan Reed
źródło
Doskonała odpowiedź, jak zawsze.
ivokabel
4

Robisz obie rzeczy. Integrujesz obszar, a ponieważ twój wynik to wciąż dyskretne próbki, rekonstruujesz sygnał, aby działał w sposób ciągły. Dlatego filtrowanie wyższego rzędu. (Również ludzkie oko jest dyskretnym próbnikiem, więc również rekonstruuje sygnał)

Pogodzenie się z tym wyjaśnieniem zajęło mi sporo czasu. Pomógł mi artykuł Tony'ego Apodaca zatytułowany Wiedza niszczycieli .

joojaa
źródło
Dzięki za świetny link! ostatni link na tej stronie wydaje się dokładnie w to zagłębiać. W praktyce, czy zdarza ci się wiedzieć, czy robienie czegokolwiek powyżej rozmycia ramki naprawdę daje dużą różnicę wizualną? Czy może pobudzi konwergencję?
Alan Wolfe
2
Jest to najlepszy podkład do koncepcji renderowania grafiki 3D, jaki kiedykolwiek widziałem (Trudne nie tyle o fizycznym, albo śledzeniu rzeczy, ale i tak). Obraz z filtrem cynkowym jest znacznie ostrzejszy niż filtr pudełkowy, który zapewnia bardzo niewyraźny wygląd. Czy zbiegałby się szybciej, wątpię.
joojaa,
Wygląda na to, że ten link już zniknął. Jakiego tytułu nazywasz najlepszym 3D podkładem, jaki przeczytałeś?
johnbakers