El filtro antialiasing ideal teórico para datos muestreados discretamente es un filtro sinc , porque elimina perfectamente todas las frecuencias más altas que la frecuencia de Nyquist, dejando solo todas las más bajas. Por lo tanto, hasta cierto punto, podemos esperar filtros antialiasing que se parezcan más al filtro sinc para producir imágenes de mejor calidad.
El filtro de tienda (filtro triangular) ciertamente se parece más al pico central del filtro de sinc que al filtro de caja:
Un filtro bicúbico (p. Ej., Mitchell-Netravali) podría capturar la forma del seno incluso con mayor precisión, incluidos sus dos primeros lóbulos negativos.
La realidad de la selección de filtros es un poco más sutil que "sinc aproximado tanto como sea posible", ya que existen diferentes tipos de artefactos que pueden ser generados por filtros antialiasing "no ideales", como aliasing, overblurring y ringing. Además, los diferentes filtros pueden ser más o menos computacionalmente caros. Entonces es un juego de tratar de intercambiar los diferentes artefactos entre sí y contra el rendimiento. Diferentes escenas / imágenes pueden favorecer una opción u otra, y también es en parte un juicio estético.
En cuanto a por qué smallpt usa un filtro de tienda en particular, supongo que una combinación de rendimiento (es un filtro rápido para evaluar) y brevedad, se puede hacer en un par de líneas de código, mientras que un filtro bicúbico tomaría un montón más código.
Por cierto, smallpt en realidad usa una cuadrícula de subpíxeles de 2x2 y coloca un filtro de tienda en cada subpíxel , luego promedia los resultados de los cuatro subpíxeles. Entonces, el efecto general es, curiosamente, el de la suma de cuatro carpas, que termina pareciendo una pirámide con una parte superior plana:
No estoy seguro de si esto fue intencional, o simplemente resultó ser la forma en que funcionó. Supongo que esto da como resultado una imagen algo más nítida que si se usara un solo filtro de tienda por píxel (debido al soporte más estrecho), pero probablemente también un alias más visible.
Acabo de mirar los artículos de Wikipedia sobre la interpolación bilineal. Un filtro de tienda es una especie de interpolación bilineal. Una interpolación bilineal se interpola en 2 dimensiones. Primero se interpola linealmente en una dimensión y luego en la otra.
Cuando miras esta imagen, primero lo hace en la columna y luego en la fila, por ejemplo.
La razón por la que esto podría ser mejor que promediar colores, es que cuando uno de los puntos se acerca más al centro que otro, contribuye más al color final. Al promediar los colores, todos los puntos contribuyen por igual, incluso cuando un punto está más cerca del centro que otro.
Si los 4 puntos están en posiciones fijas a una distancia igual del centro, entonces obtienes exactamente un 25% de contribución en todos los puntos, eso es lo mismo que promediar.
Esto significa que cuando implementa el anti-alias simplemente renderizando a una resolución 4 veces mayor, y luego bajando la muestra. La salida entre las 2 formas debería ser la misma, por lo que yo entiendo.
Entonces, ¿qué filtro debes usar? Bueno, depende de lo que quieras y de tu situación. Si elige ubicaciones aleatorias de subpíxeles para sus muestras, entonces podría ser mejor usar una interpolación bilineal. Si todos los puntos son fijos y solo renderiza con una resolución más alta, el promedio podría ser útil. Al final, esto es solo algunas cosas de subpíxeles que normalmente no se notan o apenas se notan, por lo que si hay algún tipo de AA, entonces es lo suficientemente bueno. Pero esa es solo mi opinión y probablemente la del espectador promedio de animación 3D o algo así.
Una interpolación bicúbica le da un aspecto más suave. Bicúbico:
Bilineal:
¿Cual es mejor? Bueno, depende de lo que te guste, y no creo que haya una gran diferencia.
Mis fuentes: https://en.wikipedia.org/wiki/Reconstruction_filter#Image_processing
https://en.wikipedia.org/wiki/Bilinear_interpolation
https://en.wikipedia.org/wiki/Bicubic_interpolation
(Las imágenes son de Wikipedia y son de dominio público)
Espero que esto ayude, solo quiero decir que no soy un profesional en esto, solo soy alguien a quien simplemente le gustan las cosas de gráficos por computadora. Podría ser que cometí algunos errores. Si es así, ¡solo dilo y lo cambio!
fuente