Qual é o raciocínio fundamental para o anti-aliasing usando várias amostras aleatórias em um pixel?


12

Nos gráficos, é comum coletar várias amostras dentro dos limites de um pixel e combiná-las (geralmente apenas uma média) para obter uma cor final de pixel de amostra. Isso tem o efeito de neutralizar uma imagem.

Por um lado, isso faz sentido para mim, porque o que você está efetivamente fazendo é integrar a cor do pixel na área que o pixel representa. Nessa linha de raciocínio, a média de amostras "aleatórias" parece ser a configuração ideal para a integração monte carlo. ("aleatório" pode ser estratificado, baseado em ruído azul, sequências de baixa discrepância etc.)

Por outro lado, isso parece errado (ou pelo menos não tão correto quanto poderia ser) do ponto de vista do processamento de sinal digital. Desse ponto de vista, parece que estamos coletando muitas amostras e diminuindo a amostragem usando um filtro de caixa (box blur) para obter o valor final do pixel. Sob essa luz, parece que o ideal é usar filtragem sinc em vez de calcular a média das amostras. Pude ver que o filtro de caixa é uma aproximação mais barata ao pensamento sincero nesse sentido.

Isso me deixa um pouco confuso. A ideia principal de integrar a área de pixels e a média está correta? Ou é que estamos diminuindo a amostragem e devemos usar sinc, mas estamos usando um filtro de caixa porque é rápido?

Ou é algo totalmente diferente?

Um pouco relacionado: Anti-aliasing / Filtering em Ray Tracing


Respostas:


9

Do ponto de vista do processamento de sinal, você está amostrando um sinal de domínio contínuo e precisa filtrá-lo para se livrar de frequências além do limite de Nyquist. É essa filtragem que leva à integração sobre a área de pixels - ou, mais geralmente, à integração com o suporte do seu kernel antialiasing (que não precisa ser uma caixa).

Considere a sua função de renderização que utiliza um ponto de amostra no espaço da tela e retorna a cor encontrada nesse ponto. (Vamos ignorar qualquer problema de amostragem aleatória no momento e supor que ela retorne uma cor renderizada "perfeita" para esse ponto específico.) Essa função define efetivamente um sinal de domínio contínuo 2D. Ou, em outras palavras, define uma imagem de resolução infinita , pois nada impede que essa função tenha recursos em escalas arbitrariamente pequenas. Em termos de domínio da frequência: a função não é limitada por banda; pode incluir componentes de frequências espaciais arbitrariamente altas.x,y

Agora você deseja convertê-lo em um número finito de pixels. Assim como a digitalização de um sinal de áudio, quando você o amostrar, você obterá o alias, a menos que elimine primeiro as frequências além do limite de Nyquist imposto pela taxa de amostragem. Em outras palavras, você precisa se livrar de recursos menores que a grade de pixels. Para fazer isso, você aplica um filtro passa-baixo. O filtro passa-baixas ideal é a função sinc, mas, por várias razões de praticidade, usamos outros filtros (que não eliminam perfeitamente as frequências além do limite de Nyquist, mas pelo menos as atenuam).

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

ffiltrado(x,y)=f(x,y)k(x-x,y-y)dxdy

ffiltrado

kk=1k=0 0f

kk


Excelente resposta, como sempre.
ivokabel

4

Você está de fato fazendo as duas coisas. Você está integrando a área e, como o resultado ainda é de amostras discretas, você está reconstruindo o sinal para que ele funcione continuamente. Portanto, a filtragem de ordem superior. (O olho humano também é um amostrador discreto, por isso também reconstrói o sinal)

Levei um tempo considerável para aceitar essa explicação. O que me ajudou foi um artigo de Tony Apodaca intitulado The Lore of TDs .


Obrigado pelo ótimo link! o último link nessa página parece mergulhar direto nisso. Em termos práticos, você sabe se fazer algo acima de um desfoque de caixa realmente dá muita diferença visual? Ou daria algum impulso à convergência?
Alan Wolfe

2
É a melhor cartilha para conceitos de renderização de gráficos 3D que eu já vi (não é tanto sobre coisas físicas ou de rastreamento, mas enfim). Uma imagem filtrada sinc é muito mais nítida do que o filtro de caixa, dando uma aparência muito borrada. Convergiria mais rápido, duvido.
Joojaa

Parece que esse link se foi agora. A que título você estava se referindo como a melhor cartilha 3d que você já leu?
johnbakers
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.