GamerDicExplicado

FPS, tearing y V-Sync, explicado: qué pasa entre la tarjeta gráfica y el monitor

Un monitor de 60 Hz y una tarjeta gráfica que no van al mismo ritmo: de dónde sale el corte del tearing, qué hace V-Sync, lo que cuesta, y cómo G-Sync y FreeSync lo resuelven al revés.

Todos los números de esta página son valores de ejemplo y la propia página los calcula: un monitor de 60 Hz con 1.080 líneas, una tarjeta gráfica a 90 fps y fotogramas de 16 y 18 ms. No son medidas de ningún juego, tarjeta o monitor concreto. Las cuentas (tiempo = 1000 / frecuencia; posición del barrido = fracción del refresco ya dibujada) son el modelo de esta página, no una cita. Las definiciones vienen de Wikipedia; la caída de 60 a 30 fps con doble búfer la describe GameCritics.

El monitor dibuja de arriba abajo: a 60 Hz, cada refresco dura 16,7 ms.

El monitor no enseña la imagen de golpe: la dibuja línea a línea, de arriba abajo, y vuelve a empezar: a 60 Hz lo hace 60 veces por segundo, así que cada refresco dura 1000 / 60 = 16,7 ms. A los 10 ms la línea de barrido va por el 60 % de la altura, la línea 648 de 1.080. Mientras tanto, la tarjeta gráfica deja cada fotograma terminado en un búfer, una zona de memoria donde espera.

Sin coordinación, la tarjeta cambia el búfer al terminar el fotograma, con el monitor a medio dibujar.

Sin nada que los coordine, la tarjeta gráfica cambia el búfer en cuanto termina un fotograma, aunque el monitor esté a mitad de la imagen. Lo que queda por encima de la línea de barrido ya salió del fotograma viejo; lo que queda por debajo sale del nuevo. Eso es el tearing: dos fotogramas distintos en una misma imagen, separados por una línea. Wikipedia lo resume así: la señal de vídeo no está sincronizada con la tasa de refresco.

A 90 fps en 60 Hz el corte salta: línea 720, línea 360, limpio, y vuelta a empezar.

La tarjeta da 90 fps, un fotograma cada 1000 / 90 = 11,11 ms, y el monitor va a 60 Hz. Cambia a los 11,11, 22,22 y 33,33 ms. El primero pilla el barrido en el 66,7 % de la altura (línea 720); el segundo, ya en el refresco siguiente, en el 33,3 % (línea 360); el tercero cae justo al empezar un refresco y no corta. Cada 33,33 ms, lo mismo: 2 refrescos, 3 fotogramas, un corte por refresco.

60 fps en 60 Hz sin sincronizar: desfase del 40 %, corte fijo en la línea 432.

Que los dos números coincidan no lo arregla. Con 60 fps en un monitor de 60 Hz, pero sin sincronizar, cada cambio de búfer llega en el mismo punto de cada refresco. Si llega cuando el barrido va por el 40 % de la altura, el corte aparece siempre en la línea 432 y no se mueve. Wikipedia lo recoge: también puede haber tearing entre dos frecuencias iguales si no están sincronizadas, con el corte fijo.

Con V-Sync, el cambio solo se hace entre dos refrescos: ningún corte, cada imagen es un fotograma.

La sincronización vertical, V-Sync, hace esperar a la tarjeta gráfica. Con el fotograma terminado, no puede tocar la imagen visible hasta que el monitor acaba el refresco en curso: el cambio se hace en el pequeño intervalo entre el final de un refresco y el principio del siguiente, el intervalo de borrado vertical. Así el monitor nunca dibuja dos fotogramas en la misma pasada, y el corte desaparece. Cada imagen en pantalla es un fotograma entero.

Primer coste: aunque la tarjeta pueda dar 90 fps, en pantalla hay 60.

El primer precio es un tope. Con V-Sync, los fps de la tarjeta quedan limitados a la tasa de refresco del monitor: en este ejemplo puede hacer 90 fps, pero solo se ven 60, uno por refresco. Con doble búfer termina cada fotograma en 11,11 ms y después se queda parada 5,56 ms hasta el siguiente refresco. V-Sync no sube los fps: como mucho los deja en la tasa de refresco.

Segundo coste: listo a los 10 ms, espera 6,67 ms; listo a los 16 ms, espera 0,67 ms.

El segundo precio es la espera. Un fotograma que está listo 10 ms después del último refresco tiene que esperar 16,67 − 10 = 6,67 ms hasta el siguiente; uno listo a los 16 ms espera 0,67 ms. Según cuándo termine, la espera va de 0 a 16,7 ms, y la imagen llega a la pantalla así de vieja. Por eso V-Sync añade input lag. El retraso de la red es otra cosa y tiene su propia explicación.

Lag y ping, paso a paso

Si un fotograma tarda 18 ms, con doble búfer no llega al refresco: de golpe, 30 fps.

Cada fotograma tarda ahora 18 ms, 1,33 ms más que un refresco: sin V-Sync, 55,6 fps. Con doble búfer hay dos imágenes, la visible y la que se dibuja; la terminada espera 15,33 ms al refresco de los 33,33 ms, y entretanto la tarjeta no puede empezar otra. Cada fotograma ocupa dos refrescos: 30 fps, un 46 % menos. Con 16 ms cabe: 60 fps. El siguiente escalón: 50 ms, 20 fps.

Con un tercer búfer la tarjeta no para: 55,6 fotogramas nuevos por segundo, no 30.

Con un tercer búfer, en el modelo más simple, la tarjeta empieza el siguiente fotograma sin esperar: siempre hay uno listo, según GameCritics. Los de 18 ms terminan a los 18, 36, 54, 72 y 90 ms y se muestran en el primer refresco libre: 33,33, 50, 66,67, 83,33 y 100 ms. La espera baja de 15,33 a 10 ms y llegan 55,6 fotogramas nuevos por segundo. A cambio, un fotograma más en cola y algo más de retraso.

Con G-Sync o FreeSync el monitor espera al fotograma: 18 ms, 55,6 Hz, sin corte ni espera.

La sincronización adaptativa le da la vuelta. Con G-Sync de NVIDIA, FreeSync de AMD o el VRR de HDMI, el monitor no empieza cada refresco según su propio horario: espera a que llegue el fotograma. El mismo fotograma de 18 ms se muestra en cuanto está listo, a los 18 ms, sin corte y sin espera. El monitor refresca a 55,6 Hz, la tarjeta da 55,6 fps, y el escalón de los 33,33 ms no existe.

Solo dentro de su rango: de 30 a 144 Hz, entre refrescos pasan de 6,94 a 33,3 ms.

Un monitor adaptativo tiene un rango, por ejemplo de 30 a 144 Hz (Wikipedia). Entre dos refrescos pasan como mínimo 1000 / 144 = 6,94 ms y como mucho 1000 / 30 = 33,3 ms. Con 5 ms por fotograma (200 fps), cada fotograma espera 1,94 ms: por encima del rango se comporta como un monitor fijo. Con 40 ms por fotograma (25 fps) queda por debajo; para eso FreeSync tiene Low Framerate Compensation.

Límites del modelo: el barrido ocupa todo el refresco (un monitor real reserva una parte para el intervalo de borrado vertical, así que la línea baja algo más deprisa), el cambio de búfer es instantáneo y cada fotograma tarda siempre lo mismo. En un juego real los tiempos varían de un fotograma a otro, de modo que con V-Sync y doble búfer el juego cruza el escalón de los 16,67 ms una y otra vez, salta entre 60 y 30 fps y la imagen avanza a tirones. Una tarjeta, un monitor, sin cola de fotogramas del driver, sin opciones como V-Sync adaptativo o limitadores de fps, sin el tiempo de respuesta del monitor ni el del mando o el ratón; lo que pasa en la red está en Lag y ping, paso a paso. La sincronización adaptativa se muestra solo dentro de su rango; cómo se comporta un monitor por debajo de su mínimo no se describe. Las esperas son por tanto un mínimo idealizado, no una medida.

Términos del diccionario

Fuentes

  1. Screen tearing, Wikipedia (varios fotogramas en una sola pasada; vídeo no sincronizado con la tasa de refresco; también con frecuencias iguales, con el corte fijo; V-Sync limita los fps a la señal de vídeo y causa input lag)
  2. Multiple buffering, Wikipedia (el cambio de página evita el tearing si se hace durante el intervalo de borrado vertical)
  3. Variable refresh rate, Wikipedia (el monitor ajusta su refresco a los fotogramas; rango de ejemplo de 30 a 144 Hz; un fotograma listo antes del intervalo espera a que llegue)
  4. FreeSync, Wikipedia (sincronización adaptativa de AMD sobre Adaptive-Sync de VESA; Low Framerate Compensation para fps por debajo del mínimo)
  5. G-Sync, Wikipedia (sincronización adaptativa de NVIDIA: el refresco se adapta a los fotogramas de la tarjeta)
  6. GameCritics, Triple buffering (doble búfer: si no llegan 60 fps, la tarjeta espera 2/60 de segundo y los fps caen a la mitad, 30; con triple búfer siempre hay un fotograma listo)