Éste es el cuarto post de la serie sobre aliasing. En el segundo post de la serie vimos porqué se producía aliasing cuando digitalizamos señales. Los peores escenarios ocurren cuando se reduce el número de muestras para representar la señal, o cuando la propia señal incluye datos a frecuencia muy altas. En concreto, hay un valor mágico conocido como el teorema de Nyquist, que indica la mitad de la velocidad de muestreo que debemos usar. Si la señal de origen tiene información a una mayor frecuencia que esa medida, tendremos problemas de aliasing.
En otras palabras: debemos tener al menos una frecuencia de muestreo del doble de aquella frecuencia más alta de la señal origen.
Esto nos deja dos formas de evitar el aliasing:
- Aumentar la frecuencia de muestreo
- Tener menos detalles de la señal de entrada:
a) Suavizar (a.k.a. blur) la señal de entrada para eliminar las frecuencias altas.
b) Suavizar (a.k.a. filter) al vuelo a medida que vamos tomando las muestras.
La opción 2.a se suele aplicar como preprocesamiento, haciéndolo muy eficiente. Pero no es buena idea cuando necesitamos muestrear datos a diferentes frecuencias dependiendo de la situación (por ejemplo las texturas necesitan escalarse dependiendo de la distancia de la camara). Si pre-suavizamos la señal de acuerdo a la frecuencia más baja nunca podremos reconstruirla, el resultado será demasiado borroso cuando la reconstruyamos a altas frecuencias. Y si pre-suavizamos a alta frecuencia, tendremos problemas de aliasing cuando la reconstruyamos a baja frecuencia.
La opción 2.b se puede ajustar dinámicamente a la frecuencia, pero es muy costosa de implementar.
Una tercera opción es asumir que todo es digital y no entrar en esto. En algunas situaciones es posible trabajar sólo con ecuaciones matemáticas, transformando una señal en otra aplicando transformaciones matemáticas a las ecuaciones que las describen. Esta solución evita de manera inherente la solución digital, evitando así producir cualquier aliasing, pero las matemáticas se vuelven muy complejas. No suele usarse esto, pero muchos renderizadores offline lo usan como RenderMan.
Bueno, ya está bien de teoría. En el próximo post veremos algo de práctica.
Juan María Laó Ramos.
Artículo original