Supersampling

  • Por
  • 17 de enero de 2012
  • Valoración:
  • 2 Comentarios
  • Desarrollo
El supersampling es la técnica para evitar los problemas de aliasing en gráficos por ordenador.
Bienvenidos al quinto post de la serie sobre aliasing que estoy realizando y que voy publicando en DesarrolloWeb.com y en Speakingin.net. En esta ocasión volvemos con un tema tratado anteriormente en el blog de Shawn Hargreaves que resulta especialmente interesante.

Supersampling

El supersampling es la técnica "simple" por fuerza bruta para evitar los problemas de aliasing en gráficos por ordenador.

Para evitar el aliasing, el teorema de Nyquist nos dice que debemos muestrear una señal a al menos a una frecuencia dos veces mayor a la frecuencia más alta de la señal de origen. Pero ¿cómo renderizamos una escena a una resolución mucho mayor?

Está claro que no queremos que la imagen final tenga una resolución bestial. No es bueno tener más pixeles que los que nuestra pantalla es capaz de mostrar. Así que una vez que tenemos nuestra preciada imagen, a alta resolución, libre de aliasing, tan sólo tenemos que reescalarla al tamaño final, usando un filtro para maximizar la calidad de la imagen.

Aquí tenemos un ejemplo, primero renderizamos a 64x64 sin aplicar técnicas de antialiasing, y la renderizamos a 256x256 (supersampling 16x) y volvemos a reducirla a 64x64 usando el filtro de "Best Quality" de Paint.NET (Si hiciésemos esto en los juegos en tiempo de juego, podemos usar un pixel shader para aplicar filtros de alta calidad):

64x64 sin aliasing:

64x64 después de aplicar el proceso descrito:

Si ampliamos ambas imágenes podemos ver las diferencias:

Como se ha incrementado la resolución de todas las operaciones de renderizado, el supersampling corrige muchos tipos de aliasing de un solo golpe:

  • Aliasing de vértices de triángulos.
  • Aliasing geométrico.
  • Aliasing de textura.
  • Aliasing de sombras.
De hecho el único problema de aliasing que no corrige el supersampling es el temporal.

El problema de esto es el coste. Incluso cuando tan sólo se dobla la resolución horizontal y vertical (haciendo un supersampling de 4x), tenemos que renderizar un número de pixeles cuatro veces mayor. Cuatro veces más texturas y cálculo de sombras, sin mencionar el aumento del framebuffer y la memoria, dejando a la GPU con un rendimiento cuatro veces menor. Y esto es tan sólo por un supersampling 4x, que no está para nada cerca de evitar los aliasing de texturas, geometrías y sombras.

¿Os acordáis del teorema de Nyquist? Para evitar el aliasing, hay que considerar el ratio entre la escala máxima y mínima a la que una señal puede ser reconstruida:

  • Partiendo de una textura, como por ejemplo la de un lado de un edificio.
  • ¿A qué distancia está el jugador para llegar al edificio?
  • Para que los gráficos sean buenos, queremos que la textura esté a una resolución suficiente para que mantenga los detalles cuando se recomponga a la escala máxima.
  • Ahora el jugador empieza a alejarse del edificio.
  • La textura se hace más pequeña, por ejemplo, se recompone a una frecuencia menor.
  • Después de un rato, se recompondrá a una frecuencia tan pequeña, por debajo del límite de Nyquist, que ocurrirá el aliasing.
  • ¡SuperSampling al rescate!
  • Activamos un supersamplin de 2x, el aliasing desaparece.
  • Pero el jugador continua alejándose del edificio.
  • Cuando la textura alcanza la mitad de su tamaño a la que veríamos el aliasing, volvemos a lo mismo.
Es muy normal que los objetos cambien su tamaño en un factor de más de 100 a medida que nos movemos por el mundo. Pero esto sería totalmente impracticable ya que tendríamos que incrementar la resolución de la renderización en 100x tanto a lo ancho como a lo alto, incrementando el trabajo de la GPU en un orden de 10.000 veces más.

Por esta razón el supersampling no es muy usado, por eso esta serie de artículos no ha terminado. Pero es un punto de partida para entender otras técnicas más avanzadas de antialiasing.

Un escenario de uso de supersampling es cuando conectamos la XBOX 360 a una televisión con definición estándar. La mayoría de juegos de Xbox se renderizan en resoluciones HD como 1280x720, dejando en manos del hardware el trabajo de escalar las imágenes a la resolución de salida. Eso es supersampling. Gracias al trabajo del hardware, esos píxeles de sobra no se tiran, sino que se usan para crear una imagen sin aliasing de 640x480.

Otro escenario en el que los juegos usan supersampling es cuando hacen capturas de pantalla. Las build internas de MotoGP incluían un modo especial que permitía renderizar la misma escena usando diferentes matrices de proyección, combinando literalmente miles de imágnes a 640x480 para crear una captura de pantalla de 16384*16384, que podíamos descargarnos para tener una resolución más sana en Photoshop. ¿Truco?, puede. Pero es el motor de juego y sombras que se usa en los modelos y texturas que usa el hardware de Xbox. Las imágenes son tan perfectas, que se veían bien incluso cuando se imprimían en un poster gigante.

Nota: Este artículo es una traducción libre del post Supersampling de Shawn Hargreave.

Autor

Juan María Laó Ramos

Project Manager at Syderis Technologies S.L.

Comentarios

Mario

23/1/2012
Artículos de aliasing
Llevo viendo estos artículos en DesarrolloWeb un tiempo y he visto que están redactados de forma que parece que son tuyos. Supongo (espero) que no lo haces con mala intención, pero así no funciona la web.

Deberías decir claramente que estos artículos son traducciones casi literales del blog de Shawn Hargreaves, que habló sobre estos mismos temas en su blog http://blogs.msdn.com/b/shawnhar, de cuando aún era desarrollador de XNA en Microsoft.

Pon que esa es tu fuente y tú eres el traductor. Si no, parecerá que te los estás atribuyendo.

eugim

24/1/2012
Referencia a los post de Shawn Hargreaves
Hola Mario!
Muchas gracias por tu comentario. Ya hemos hecho referencia a los post que han servido de referencia para la creación de estos artículos de teoría de juegos.
Un saludo!

Compartir