VSync (Vertical Synchronization) es una tecnología que sincroniza la salida de cada nuevo fotograma de la GPU con la frecuencia de actualización de la pantalla, eliminando roturas de imagen. Según Apple Metal Documentation, la sincronización con VBlank es obligatoria para un renderizado fluido en dispositivos móviles. Screen tearing ocurre cuando un fotograma se actualiza durante el barrido vertical, y VSync evita esta mezcla.
Puntos clave
VSync (Vertical Synchronization) es un mecanismo hardware-software que obliga a la GPU a esperar la señal de blanking vertical (VBlank) antes de mostrar un nuevo fotograma. Sin VSync, la GPU puede enviar fotogramas en cualquier momento, incluso cuando la pantalla está en medio de dibujar el fotograma actual, lo que provoca rotura de imagen a lo largo de una línea horizontal.
En dispositivos móviles, VSync se implementa a nivel del controlador gráfico y del sistema operativo. iOS usa sincronización VBlank a través de Metal, Android a través de SurfaceFlinger y BufferQueue. Con la sincronización vertical activada, los FPS de la aplicación no pueden superar la frecuencia de actualización de la pantalla: 60, 90 o 120 Hz según el modelo del dispositivo.
El término sincronización vertical proviene del principio de funcionamiento de los monitores CRT, donde un haz de electrones dibujaba la imagen línea por línea de arriba abajo. Tras completar un fotograma, el haz volvía a la esquina superior izquierda — este momento se llamaba blanking vertical. Los modernos LCD y OLED han conservado este término, aunque físicamente funcionan de manera diferente.
La GPU renderiza fotogramas en el back buffer, mientras que la pantalla lee del front buffer. VSync garantiza que el intercambio de búferes (swap) ocurra solo durante VBlank — cuando la pantalla ha terminado de mostrar el fotograma actual y está lista para el siguiente. Este mecanismo se llama doble búfer con sincronización VBlank.
El doble búfer usa dos búferes: un front buffer mostrado en pantalla y un back buffer en el que la GPU escribe el fotograma actual. Cuando el fotograma está listo, los búferes se intercambian. Con VSync activado, este intercambio se pospone hasta el VBlank más cercano. La GPU permanece inactiva si el fotograma está listo antes de VBlank, reduciendo el rendimiento pero eliminando el tearing.
// OpenGL — activación de VSync mediante WGL_EXT_swap_control
HDC hdc = wglGetCurrentDC();
PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT =
reinterpret_cast<PFNWGLSWAPINTERVALEXTPROC>(
wglGetProcAddress("wglSwapIntervalEXT"));
wglSwapIntervalEXT(1); // 1 = VSync activado, 0 = desactivado
VBlank es un intervalo corto entre la última línea del fotograma actual y la primera línea del siguiente. Durante este momento, la pantalla no actualiza píxeles y el intercambio de búferes ocurre sin artefactos. La duración de VBlank depende de la frecuencia de actualización: a 60 Hz en una pantalla 1080p, VBlank dura aproximadamente 1.4 ms. Si la GPU no completa el renderizado antes de VBlank, el fotograma se salta y la pantalla muestra el fotograma anterior por otro ciclo — esto se percibe como tartamudeo.
El triple búfer resuelve el problema de inactividad de la GPU añadiendo un tercer búfer. La GPU puede empezar a renderizar el siguiente fotograma inmediatamente incluso si uno de los back buffers está esperando VBlank. Esto aumenta los FPS con VSync pero añade un fotograma extra de latencia. En dispositivos móviles, el triple búfer se usa en algunos motores de juegos y en Vulkan mediante el modo Mailbox.
VSync desactivado proporciona el máximo FPS y el mínimo input lag, pero a costa de artefactos visuales. Para juegos móviles y aplicaciones con animación fluida, la elección entre VSync y su desactivación es un compromiso entre claridad de imagen y capacidad de respuesta del control.
Screen tearing es una rotura horizontal donde la parte superior de la pantalla muestra el fotograma anterior y la inferior ya muestra el siguiente. Esto ocurre cuando la GPU intercambia búferes a mitad del barrido. En dispositivos móviles, el tearing es especialmente notable durante el desplazamiento rápido o en escenas dinámicas con altas frecuencias de fotogramas. Las pantallas OLED con su respuesta instantánea hacen que el tearing sea más contrastado en comparación con LCD.
La intensidad del tearing depende de la relación entre FPS y frecuencia de actualización. A 60 FPS en una pantalla de 60 Hz, el tearing aparece como una línea estática única, mientras que a 300 FPS en 60 Hz aparecen múltiples roturas onduladas que se mueven de arriba abajo. Cuanto mayor es el FPS respecto a la frecuencia de actualización, más roturas y más visibles son.
El input lag con VSync es el retardo entre pulsar un botón y ver el resultado en pantalla. La sincronización vertical añade de media un fotograma de latencia (16.7 ms a 60 Hz), y con triple búfer — hasta dos fotogramas. Para aplicaciones casuales, este retardo es imperceptible, pero para shooters, juegos de lucha y juegos de ritmo es crítico: los profesionales notan retardos incluso de 8 ms.
Según una investigación de NVIDIA (2024), el input lag medio en CS:GO a 60 FPS sin VSync es de 22 ms, y con VSync — 39 ms. A 144 FPS, la diferencia se reduce a 14 frente a 18 ms respectivamente. En plataformas móviles, el input lag de VSync es menos crítico debido a la entrada táctil, donde la latencia hardware de la pantalla táctil (10–30 ms) enmascara el retardo adicional de sincronización.
En el desarrollo móvil, VSync se controla a través de APIs gráficas, motores de juegos y ajustes del sistema operativo. iOS proporciona menos control, Android ofrece más a través de Vulkan y OpenGL ES. La elección del modo depende del tipo de aplicación: juegos, UI o vídeo.
Unity usa el ajuste QualitySettings.vSyncCount: 0 — desactivado, 1 — VSync en cada VBlank, 2 — en cada segundo VBlank (FPS reducido a la mitad). En Unreal Engine, VSync se controla mediante el comando de consola r.VSync y DefaultEngine.ini. Para compilaciones móviles, se recomienda desactivar VSync en Unity y usar un limitador de FPS propio, ya que el VSync integrado en Android SurfaceFlinger puede crear retardos impredecibles.
// Unity — control de VSync y FPS
void Awake()
{
// 0 = VSync desactivado, 1 = VSync activado
QualitySettings.vSyncCount = 0;
// Limitador de FPS personalizado en lugar de VSync
Application.targetFrameRate = 60;
}
Vulkan proporciona control total a través de VkSwapchainPresentInfo y presentMode: VK_PRESENT_MODE_FIFO_KHR — VSync clásico, VK_PRESENT_MODE_MAILBOX_KHR — triple búfer sin espera, VK_PRESENT_MODE_IMMEDIATE_KHR — sin sincronización. Metal en iOS controla VSync mediante CAMetalLayer.displaySyncEnabled. A partir de iOS 14, Apple recomienda usar displaySyncEnabled = true por defecto para todas las aplicaciones excepto juegos de control arcade.
| Modo | Descripción | Latencia |
|---|---|---|
| FIFO | VSync clásico con espera VBlank | 1 fotograma |
| Mailbox | Triple búfer, descartando fotogramas antiguos | 1–2 fotogramas |
| Immediate | Sin sincronización, máximo FPS | 0 fotogramas |
Un limitador de FPS es una alternativa a VSync donde la aplicación limita la frecuencia de fotogramas mediante software sin esperar VBlank. Este enfoque proporciona una latencia predecible y no depende de la frecuencia de actualización de la pantalla. En Android, la limitación de FPS se implementa mediante Choreographer, en iOS — mediante CADisplayLink con control manual del tiempo de salida.
El VSync tradicional tiene un inconveniente fundamental: está ligado a una frecuencia de actualización fija de la pantalla. Si la GPU produce 45 FPS en una pantalla de 60 Hz, VSync no puede mostrar 45 fotogramas — muestra 30 (saltándose cada segundo VBlank) o alterna entre 60 y 30 con intervalos irregulares. Esto crea tartamudeo, que estropea la experiencia de juego más que el tearing.
Adaptive Sync (FreeSync, G-Sync, Apple ProMotion) resuelve este problema cambiando dinámicamente la frecuencia de actualización de la pantalla según los FPS de la aplicación. Si la aplicación produce 47 FPS, la pantalla cambia a 47 Hz — cada fotograma se muestra exactamente una vez, sin roturas ni tartamudeo. ProMotion en iOS selecciona automáticamente una frecuencia de 24 a 120 Hz, equilibrando la fluidez y el consumo de energía.
En dispositivos móviles, Adaptive Sync se está convirtiendo en el estándar: iPad Pro (2017+) con ProMotion, dispositivos Android emblemáticos con pantallas LTPO (Samsung Galaxy S23 Ultra, Google Pixel 8 Pro) soportan frecuencias de actualización dinámicas de 1 a 120 Hz. Para el desarrollador, esto significa que VSync en el sentido tradicional se reemplaza por la gestión del sistema — basta con establecer targetFrameRate, y el propio SO ajusta la frecuencia de actualización para el equilibrio óptimo entre fluidez y duración de la batería.
Preguntas frecuentes
No. Para juegos dinámicos (shooters, juegos de lucha), VSync aumenta el input lag sin beneficio significativo — el tearing en pantallas OLED móviles es menos notable debido al pequeño tamaño de la pantalla. Para juegos casuales e interfaces de usuario, VSync mejora la percepción de fluidez.
VSync reduce el consumo de energía porque la GPU no renderiza fotogramas innecesarios. Con VSync desactivado, la GPU funciona a máxima frecuencia, y cada fotograma no mostrado gasta energía y calienta el dispositivo sin beneficio para el usuario.
VSync sincroniza la salida de fotogramas con el VBlank de la pantalla, mientras que un limitador de FPS simplemente limita la frecuencia de renderizado en el código de la aplicación. El limitador de FPS no elimina el tearing pero proporciona una latencia predecible sin estar ligado a la frecuencia de actualización de la pantalla.
Cuando la GPU no completa un fotograma antes de VBlank, el VBlank se salta y el fotograma se muestra durante dos ciclos de actualización. A 60 Hz, esto produce 30 FPS. El triple búfer mitiga este efecto permitiendo a la GPU empezar el siguiente fotograma sin esperar.
Sí. iOS ProMotion (iPad Pro, iPhone 13 Pro+) soporta frecuencia dinámica 24–120 Hz. Android mediante pantallas LTPO soporta 1–120 Hz. El desarrollador no necesita gestionar esto manualmente — el sistema selecciona la frecuencia óptima automáticamente.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también