miércoles, 8 de julio de 2009

VGAs y juegos: mejor activar el Triple Buffering

En la web de Anandtech nos hablan sobre videojuegos y opciones gráficas. Citan que en general recomiendan jugar a los videojuegos con las mismas opciones gráficas en las que realizan los tests de rendimiento, excepto un tema evidente: el Vsync, ya que esto limita los resultados de rendimiento y es algo que no interesa para los tests pero sí para la experiencia correcta de juego.

Este corto artículo está dedicado al Triple Buffering, y para situarnos nos explican como funcionan las cosas en este aspecto, nos comentan que inicialmente entre el ordenador/tarjeta gráfica y la pantalla había un único buffer, y sobre él se escribían los cambios gráficos. Así cuando un objeto cambia se ve un molesto efecto de parpadeo. Para evitar este molesto caso habitual a medida que se desarrollaban los juegos se creó un doble buffer, uno para leer los datos y mostrarlos por pantalla, el "front buffer" y otro dónde se escribían los futuros gráficos a mostrar el "back buffer". Así, una vez terminado de escribir todo en el "back buffer" y por lo tanto con la imagen a mostrar terminada, se intercambian ambos y la pantalla muestra la imagen que contiene este buffer, mientras se empiezan a escribir los siguientes datos en el otro buffer. Esto es el double buffering.

El problema con el double buffering aparece en el momento de intercambiar ambos buffers, ya que puede que la pantalla esté aún recibiendo los datos de un buffer y se le cambien los datos del resto de la imagen, así vemos la habitual línea de separación o tearing de la imagen. Esto se nota más en escenas con grandes cambios visuales, como al girar una esquina, y sobre todo con juegos que tengamos altas tasas de FPS. La solución al molesto tearing es activar el Vsync o sincronismo vertical.

Pero el Vsync no está libre de problemas, ya que puede producir problemas de rendimiento y provocar, por ejemplo, que si en un momento la VGA no es capaz de ofrecer cambios en menos de 16,67 ms, se baje automáticamente a 30 FPS y por lo tanto la experiencia de juego no sea tan fluida. Además si el juego se podría ejecutar a 200 FPS y se está frenando a 60 FPS, estamos tardando un poco más en ver los cambios realizados y por lo tanto vemos lo que ocurre con un poco de latencia, o input lag. Comentan que siempre existirá "input lag", pero conviene minimizar el efecto.

Así con Double Buffering tenemos que escoger entre ver una escena con tearing o sufrir un retraso artificial con la posibilidad de notar el input lag al activar el Vsync. Por suerte la solución para no perder suavidad visual ni sufrir problemas de retrasos visuales existe y se llama Triple Buffering:

El Triple Buffering utiliza dos buffers de escritura, así se puede enviar hacia la pantalla una imagen totalmente terminada, mientras ya se escribe en el segundo buffer para poder actualizar cuanto antes la imagen sin perder tiempo. El triple buffer consume algo de memoria gráfica, nos comentan que son entre 15 y 25MB de VRAM, algo que consideran poco importante en VGAs de 512MB o más.

Nos explican que con FRAPS no veremos el rendimiento real de un juego con Triple Buffering activado ya que este programa sólo contabiliza las veces que el "front buffer" es actualizado y no los back buffers. También nos comentan que el triple buffering sí que puede mostrar un poco más de lentitud o input lag que con un doble buffering sin vsync, pero es poco apreciable.

Nos muestran un ejemplo gráfico con una escena de un caballo en movimiento y concluyen que el Triple Buffering nos ofrece las ventajas del double buffering sin el vsync activado, pero además con los beneficios del Vsync y sin ninguna de sus pegas. Aquí tenemos el ejemplo de los caballos dónde podemos ver como con doble buffering hay tearing o una línea que corta los pies de los caballos, y con double buffering con Vsync vemos como las imágenes presentan importantes saltos o input lag:

Por cierto y muy importante: nos explican que no todos los juegos permiten activar el Triple Buffering, ya que esta opción debe encontrarse dentro del menú gráficos del juego, puesto que si bien existe la opción en el panel de control de las tarjetas gráficas, ésta sólo se activa para juegos OpenGL, no teniendo efecto con los títulos Direct3D, que son la mayoría.

No hay comentarios: