O filtro antialiasing ideal teórico para dados amostrados discretamente é um filtro sinc , porque remove perfeitamente todas as frequências mais altas que a frequência Nyquist, deixando apenas todas as mais baixas. Portanto, até certo ponto, podemos esperar que filtros antialiasing que mais se assemelhem ao filtro sinc produzam imagens de melhor qualidade.
O filtro de barraca (filtro triangular) certamente se parece mais com o pico central do filtro sinc do que o filtro de caixa:
Um filtro bicúbico (por exemplo, Mitchell-Netravali) poderia capturar a forma do sinc ainda mais precisamente, incluindo seus dois primeiros lobos negativos.
A realidade da seleção de filtro é um pouco mais sutil do que "sinc aproximado, tanto quanto possível", pois existem diferentes tipos de artefatos que podem ser gerados por filtros antialiasing "não ideais", como aliasing, overblurring e ringing. Além disso, filtros diferentes podem ser mais ou menos caros em termos computacionais. Portanto, é um jogo de tentar trocar os diferentes artefatos entre si e contra o desempenho. Diferentes cenas / imagens podem favorecer uma escolha ou outra, e também é parcialmente um julgamento estético.
Quanto ao motivo pelo qual o smallpt usa um filtro de barraca em particular, eu acho que por uma combinação de desempenho (é um filtro rápido para avaliar) e brevidade - isso pode ser feito em algumas linhas de código, enquanto um filtro bicúbico levaria muito mais código.
Aliás, o smallpt realmente usa uma grade de subpixel de 2x2 e coloca um filtro de barraca em cada subpixel e calcula a média dos resultados dos quatro subpixels. Curiosamente, o efeito geral é o da soma de quatro tendas, que acaba parecendo uma pirâmide com um topo plano:
Não tenho certeza se isso foi intencional ou se foi assim que aconteceu. Meu palpite é que isso resulta em uma imagem um pouco mais nítida do que se um único filtro de barraca por pixel fosse usado (por causa do suporte mais estreito), mas provavelmente também um aliasing mais visível.
Acabei de ler os artigos da Wikipedia sobre interpolação bilinear. Um filtro de barraca é um tipo de interpolação bilinear. Uma interpolação bilinear interpola em 2 dimensões. Primeiro interpola linearmente em uma dimensão e depois na outra.
Quando você olha para esta figura, ela primeiro faz isso na coluna e depois na linha, por exemplo.
A razão pela qual isso pode ser melhor do que a média de cores é que, quando um dos pontos se aproxima do centro que outro, ele contribui mais para a cor final. Com a média das cores, todos os pontos contribuem da mesma forma, mesmo quando um ponto está mais próximo do centro do que outro.
Se todos os 4 pontos estiverem em posições fixas a uma distância igual do centro, você recebe exatamente 25% de contribuição em todos os pontos, isso é o mesmo que calcular a média.
Isso significa que, quando você implementa o anti-aliasing, processa apenas com uma resolução 4 vezes maior e depois faz uma amostragem reduzida. A saída entre as duas maneiras deve ser a mesma, tanto quanto eu entendo.
Então, qual filtro você deve usar? Bem, depende do que você quer e da sua situação. Se você escolher locais aleatórios de subpixels para suas amostras, talvez seja melhor usar uma interpolação bilinear. Se todos os pontos forem fixos e você renderizar com uma resolução mais alta, a média poderá ser útil. No final, são apenas algumas coisas de sub-pixel que normalmente você nem percebe, por isso, se houver algum tipo de AA, então é bom o suficiente. Mas essa é apenas a minha opinião e provavelmente a do espectador médio de animação 3D ou algo assim.
Uma interpolação bicúbica oferece uma aparência mais suave. Bicubic:
Bilinear:
Qual é melhor? Bem, depende do que você gosta, e eu não acho que haverá uma enorme diferença.
Minhas fontes: https://en.wikipedia.org/wiki/Reconstruction_filter#Image_processing
https://en.wikipedia.org/wiki/Bilinear_interpolation
https://en.wikipedia.org/wiki/Bicubic_interpolation
(As imagens são da Wikipedia e são de domínio público)
Espero que ajude, só quero dizer que não sou profissional nisso, sou apenas alguém que gosta de coisas de computação gráfica. Pode ser que eu cometi alguns erros. Se sim, basta dizer e eu mudo!
fonte