Corrigiendo el temblor y el tartamudeo

¿Qué son el jitter y el stutter?

Jitter y stutter son dos alteraciones diferentes en el movimiento visible de objetos en la pantalla que pueden afectar a un juego, incluso cuando se ejecuta a velocidad completa. Estos efectos son principalmente visibles en juegos donde el mundo se mueve a una velocidad constante en una dirección fija, como juegos de carreras o plataformas.

Distinguiéndolos

Un juego que se ejecute a una velocidad de fotogramas normal sin mostrar ningún efecto va a parecer fluido:

../../_images/motion_normal.gif

Un juego que presenta jitter se sacudirá constantemente de manera muy sutil:

../../_images/motion_jitter.gif

Finalmente, un juego que presenta stutter parecerá suave, pero dará la impresión de detenerse o retroceder un fotograma cada pocos segundos:

../../_images/motion_stutter.gif

Jitter (temblor)

Puede haber muchas causas de jitter, la más típica ocurre cuando la frecuencia de físicas del juego (generalmente 60 Hz) se ejecuta a una resolución diferente a la frecuencia de actualización del monitor. Verifica si la frecuencia de actualización de tu monitor es diferente de 60 Hz.

En general, esto no es un problema, dado que la mayoría de los monitores son de 60 Hz y, a partir de Godot 3.1, se introdujo un temporizador de fotogramas que intenta sincronizarse con el refresco lo mejor posible.

En ocasiones, solo algunos objetos parecen temblar (como el personaje o el fondo). Esto ocurre cuando se procesan en fuentes de tiempo diferentes (uno se procesa en el paso de físicas mientras que otro se procesa en el paso inactivo). Godot 3.1 ha realizado algunas mejoras en este aspecto, desde permitir que los cuerpos cinemáticos sean animados en el ciclo _process regular, hasta correcciones adicionales en el temporizador de cuadros (frame timer) para abordar este problema.

Nota

Puedes utilizar la interpolación de físicas para mitigar el temblor relacionado con la física. Consulta el complemento "smoothing-addon" de lawnjelly, que puede ser agregado a cualquier proyecto para habilitar la interpolación de físicas. Esto te permitirá lograr una apariencia más suave y consistente en la simulación de físicas.

Stutter (tartamudeo)

El tartamudeo puede ocurrir debido a dos razones diferentes. La primera y más obvia es que el juego no pueda mantener un rendimiento de fotogramas completo. Resolver esto es específico del juego y requerirá optimización para mejorar el rendimiento.

El segundo motivo es más complicado, ya que a menudo no está relacionado con el motor del juego, sino con el sistema operativo subyacente. A continuación, te proporciono información sobre el tartamudeo en diferentes sistemas operativos.

Windows

Windows es conocido por causar tartamudeo en juegos en modo de ventana. Esto depende en gran medida del hardware instalado, la versión de los controladores y los procesos que se ejecutan en paralelo (por ejemplo, tener muchas pestañas de navegador abiertas puede causar tartamudeo en un juego en ejecución). Para evitar esto, a partir de la versión 3.1, Godot eleva la prioridad del juego a "por encima de lo normal". Esto ayuda considerablemente, pero es posible que no elimine completamente el tartamudeo.

Eliminar completamente este problema requeriría otorgar a tu juego privilegios completos para convertirse en "tiempo crítico", lo cual no se recomienda. Algunos juegos pueden hacerlo, pero se aconseja aprender a convivir con este problema, ya que es común en juegos de Windows y la mayoría de los usuarios no juegan en modo de ventana (los juegos que se juegan en una ventana, como juegos de rompecabezas, generalmente no presentarán este problema de todas formas).

Para el modo de pantalla completa, Windows otorga una prioridad especial al juego, por lo que el tartamudeo ya no es visible y es muy raro. Así es como se juega la mayoría de los juegos.

Linux (X11)

El tartamudeo puede ser visible en Desktop Linux, pero esto generalmente está asociado con diferentes controladores de video y compositores. Los controladores Nouveau a menudo presentan este problema, mientras que los controladores propietarios de AMD o NVidia no lo hacen. Algunos compositores también pueden desencadenar este problema (por ejemplo, KWin), por lo que se recomienda probar con un compositor diferente para descartarlo como causa del tartamudeo.

No hay una solución alternativa para el tartamudeo causado por los controladores o compositores, aparte de informarlo como un problema a los desarrolladores de los controladores o compositores.

macOS

En general, macOS no presenta tartamudeo, aunque recientemente se han reportado algunos errores al ejecutar en pantalla completa (esto es un error de macOS). Si tienes una máquina que muestra este comportamiento, por favor avísanos.

Android

En general, Android no presenta tartamudeo ni sacudidas porque la actividad en ejecución obtiene toda la prioridad. Dicho esto, puede haber dispositivos problemáticos (se sabe que algunos modelos antiguos de Kindle Fire presentan este problema). Si ves este problema en Android, por favor avísanos.

iOS

Los dispositivos iOS generalmente no presentan tartamudeo, pero los dispositivos más antiguos que ejecutan versiones más recientes del sistema operativo pueden experimentar problemas. Esto generalmente es inevitable.

Informar problemas de tartamudeo o sacudidas

Si estás informando un problema de tartamudeo o sacudidas (abriendo un reporte) que no es causado por ninguna de las razones mencionadas anteriormente, por favor especifica de manera muy clara toda la información posible sobre el dispositivo, el sistema operativo, las versiones de los controladores, etc. Esto puede ayudar a identificar y resolver el problema de manera más efectiva.

Asegúrate también de usar el término correcto (jitter o stutter) basado en el comportamiento exhibido. Esto ayudará a comprender tu problema mucho más rápido. Proporciona un proyecto que se pueda utilizar para reproducir el problema y, si es posible, una captura de pantalla que muestre el error.