Le filtre anti-crénelage idéal théorique pour les données échantillonnées discrètement est un filtre sinc , car il supprime parfaitement toutes les fréquences supérieures à la fréquence de Nyquist, tout en laissant seul toutes les fréquences inférieures. Donc, dans une certaine mesure, nous pouvons nous attendre à des filtres anti-crénelage qui ressemblent plus au filtre sinc pour produire des images de meilleure qualité.
Le filtre de tente (filtre triangle) ressemble certainement plus au pic central du filtre sinc que le filtre carré:
Un filtre bicubique (par exemple Mitchell-Netravali) pourrait capturer la forme du sinc encore plus précisément, y compris ses deux premiers lobes négatifs.
La réalité de la sélection des filtres est un peu plus subtile que "approximative sinc aussi bien que possible", car il existe différents types d'artefacts qui peuvent être générés par des filtres d'anticrénelage "non idéaux", tels que l'aliasing, le sur-flou et la sonnerie. De plus, différents filtres peuvent être plus ou moins coûteux en calcul. C'est donc un jeu d'essayer d'échanger les différents artefacts les uns contre les autres et contre les performances. Différentes scènes / images peuvent favoriser un choix ou un autre, et c'est aussi en partie un jugement esthétique.
Quant à savoir pourquoi smallpt utilise un filtre de tente en particulier, je suppose que pour une combinaison de performances (c'est un filtre rapide à évaluer) et de brièveté - cela peut être fait en quelques lignes de code, tandis qu'un filtre bicubique prendrait beaucoup plus code.
Soit dit en passant, smallpt utilise en fait une grille de sous-pixels 2x2 et place un filtre de tente à chaque sous - pixel , puis fait la moyenne des résultats des quatre sous-pixels. L'effet global est donc, curieusement, celui de la somme de quatre tentes, qui finit par ressembler à une pyramide à toit plat:
Je ne sais pas si c'était intentionnel, ou si c'était juste la façon dont cela avait fonctionné. Je suppose que cela donne une image un peu plus nette que si un seul filtre de tente par pixel était utilisé (en raison du support plus étroit), mais probablement aussi un aliasing plus visible.
Je viens de regarder des articles Wikipedia sur l'interpolation bilinéaire. Un filtre de tente est une sorte d'interpolation bilinéaire. Une interpolation bilinéaire interpole sur 2 dimensions. Il interpole d'abord linéairement sur une dimension puis sur l'autre.
Lorsque vous regardez cette image, elle le fait d'abord sur la colonne puis sur la ligne par exemple.
La raison pour laquelle cela pourrait être meilleur que la moyenne des couleurs, c'est que lorsque l'un des points se rapproche du centre d'un autre, il contribue davantage à la couleur finale. En faisant la moyenne des couleurs, tous les points contribuent également, même lorsqu'un point est plus proche du centre qu'un autre point.
Si tous les 4 points sont sur des positions fixes à égale distance du centre, alors vous obtenez exactement 25% de contribution sur tous les points, c'est la même chose que la moyenne.
Cela signifie que lorsque vous implémentez l'anticrénelage en effectuant simplement un rendu à une résolution 4 fois supérieure, puis en l'échantillonnant. La sortie entre les 2 voies devrait être la même, si je comprends bien.
Alors, quel filtre utiliser? Eh bien, cela dépend de ce que vous voulez et de votre situation. Si vous choisissez des emplacements de sous-pixels aléatoires pour vos échantillons, il peut être préférable d'utiliser une interpolation bilinéaire. Si tous les points sont fixes et que vous effectuez un rendu à une résolution plus élevée, la moyenne peut être utile. En fin de compte, ce ne sont que des choses sous-pixels que normalement vous ne remarquez pas ou à peine, donc s'il y a une sorte de AA, alors c'est assez bon. Mais c'est juste mon opinion et probablement celle du spectateur moyen de l'animation 3D ou quelque chose comme ça.
Une interpolation bicubique vous donne un aspect plus lisse. Bicubique:
Bilinéaire:
Ce qui est mieux? Eh bien, cela dépend de ce que vous aimez, et je ne pense pas qu'il y aura une énorme différence.
Mes sources: https://en.wikipedia.org/wiki/Reconstruction_filter#Image_processing
https://en.wikipedia.org/wiki/Bilinear_interpolation
https://en.wikipedia.org/wiki/Bicubic_interpolation
(Les images proviennent de Wikipédia et sont du domaine public)
J'espère que cela aide, je veux juste dire que je ne suis pas un professionnel, je suis juste quelqu'un qui aime les trucs d'infographie. Il se peut que j'aie fait des erreurs. Si oui, dites-le et je le change!
la source