El viaje de hoy: anti-aliasing
- El anti-aliasing es una forma de arte que ha evolucionado durante décadas mediante matemáticas, técnicas creativas e innovación constante.
- Existen diversos enfoques como SSAA, SMAA y DLAA, y cada uno busca lograr el mismo objetivo de una manera distinta.
- En este artículo se explora cómo funcionan estos métodos y se presenta una nueva forma de resolver el problema: el anti-aliasing analítico.
Configuración
- Para entender el algoritmo de anti-aliasing, se implementa dibujando un círculo en movimiento usando un canvas de WebGL.
- Si la resolución es tan alta que no se aprecia el aliasing, se puede bajar la resolución para comprobarlo.
Análisis técnico
- No es indispensable entender el código de GPU, pero ayuda a comprender la parte analítica.
- El círculo no se dibuja geométricamente, sino mediante un shader.
SSAA
- SSAA significa super sampling anti-aliasing, y consiste en renderizar a una resolución mayor y luego hacer downsampling.
- La implementación es sencilla, pero requiere mucha memoria y cómputo.
- Se necesita una colocación adecuada de muestras y una integración profunda con el pipeline de renderizado.
MSAA
- MSAA realiza super sampling solo en la silueta del modelo, la geometría superpuesta y los bordes de texturas.
- Está implementado por hardware, y su disponibilidad depende del hardware.
- En ciertas situaciones, puede no tener costo de rendimiento.
Anti-aliasing de posprocesado
- En 2009, el paper de Alexander Reshetov dio origen a MLAA.
- FXAA es un algoritmo desarrollado con inspiración en MLAA; tiene bajo costo de rendimiento y es fácil de implementar.
- Es más efectivo en escenas complejas.
Anti-aliasing analítico
- El anti-aliasing analítico aborda el problema al revés: conoce la forma necesaria y dibuja en pantalla píxeles ya anti-aliased.
- No requiere buffers adicionales ni hardware especial, y puede ejecutarse incluso en WebGL 1.0 básico o OpenGLES 2.0.
- Calcula el tamaño del píxel para desvanecer el borde de la forma.
Implementación
- Con campos de distancia con signo, se puede conocer en cada punto muestreado la distancia hasta la forma deseada.
- Para calcular el tamaño del píxel se usan las funciones dFdx, dFdy y fwidth.
- El blending se realiza con alpha blending o MSAA + Alpha to Coverage.
- Se puede usar linearstep en lugar de smoothstep para optimizar el rendimiento.
Conclusión
- El anti-aliasing analítico ofrece bordes suaves al desvanecer con precisión los límites de la forma.
- Existen varias formas de implementarlo, y se puede elegir entre rendimiento y precisión.
1 comentarios
Comentarios en Hacker News