Исправление джиттеров и задержек

Что такое джиттеры и задержки?

Джиттер и задержка это два разных изменения в визуальном движении объектов по экрану которые могут влиять на игру, даже при запуске на полной скорости. Эти эффекта главным образом видны в играх где мир движется с постоянной скоростью в фиксированном направлении, такие как раннеры или платформеры.

Различия между ними

Игра запущенная с нормальной частотой кадров и без использования эффектов будет проигрываться гладко:

../../_images/motion_normal.gif

Игра с джиттером будет постоянно дёргаться в непонятной манере:

../../_images/motion_jitter.gif

Наконец, игра с задержкой будет проигрываться плавно, но будет приостанавливаться или откатывать кадр назад каждые пару секунд:

../../_images/motion_stutter.gif

Джиттер

Существует много причин вызывающие джиттер, самая обычная возникает когда игра с частотой физики (обычно 60 Гц) запускается в разрешении отличном от частоты обновления монитора. Проверьте если ваша частота монитора отличается от 60 Гц.

This is generally not a problem, given that most monitors are 60 Hz, and starting with Godot 3.1, a frame timer was introduced that tries to synchronize with refresh as well as possible.

Иногда только некоторые объекты начинают джиттерить (персонажи или задний фон). Это возникает когда они обрабатываются через различные источники времени (один обрабатывается на стадии физики, тогда как другой на стадии ожидания). Godot 3.1 внёс некоторые улучшения в эти процессы, от допуска тел с кинематикой к анимации в обычном цикле _process, до дальнейших исправлений в таймере кадра.

Примечание

You can use physics interpolation to mitigate physics-related jittering. See lawnjelly's smoothing-addon for an add-on that can be dropped into any project to enable physics interpolation.

Задержка

Задержка может возникнуть из-за двух разных причин. Первое, и самое очевидное, если игра не может поддерживать производительность частоты кадров. Исправление этого зависит от игры и может потребоваться провести оптимизацию.

Другая причина более сложная, поскольку часто не связывается с движком или игрой но зависит от операционной системы. Здесь показана некоторая информация о задержках на различных OS.

Windows

Система Windows часто вызывает задержки в оконных играх. Это часто зависит от установленного железа, версий драйверов или процессов запущенных параллельно (т.е. если открыто много вкладок браузера это может привести в задержкам в запущенной игре). Для избегания этого, начиная с 3.1, Godot поднимает приоритет игрового процесса на Выше Нормального. Это значительно помогает, но может не до конца исправлять задержки.

Eliminating this completely requires giving your game full privileges to become "time critical", which is not advised. Some games may do it, but it is advised to learn to live with this problem, as it is common for Windows games and most users won't play games windowed (games that are played in a window, e.g. puzzle games, will usually not exhibit this problem anyway).

Для полноэкранного режима, Windows даёт игре специальный приоритет, так что игровые задержки не будут видны и станут очень редкими. Так работает большинство игр.

Linux (X11)

Задержка может быть видима в Десктопном Linux, но обычно она связывается с различными видео драйверами или композиторами. Драйверы Nouveau часто демонстрируют это, тогда как проприетарные AMD или NVidia - нет. Некоторые композиторы могут вызывать эту проблему(напр. KWin), так что советуем пытаться пробовать другие если какой-то вызывает проблему.

Не существует обходных путей для исправления задержек в драйвере или композиторе кроме как сообщения о проблеме разработчикам драйвера или композитора.

MacOS

В целом, macOS свободна от задержек, хотя недавно были найдены некоторые ошибки при запуске в полноэкранном режиме. Если вы владеете устройством демонстрирующим данное поведение, пожалуйста сообщите нам.

Android

Android в целом лишён джиттеров и задержек поскольку запущенный процесс получает полный приоритет. Однако, на некоторых устройствах могут возникать проблемы (старые Kindle Fire известны этим). Если вы увидели проблему на вашем Android устройстве, пожалуйста сообщите нам.

iOS

Устройства iOS в целом работают без задержек, но на старых устройствах запущенных на новых версиях операционной системы могут проявляться ошибки. Это в целом нельзя избежать.

Доклад о задержках и джиттерах

Если вы докладываете о задержке или джиттере (открывая проблему) не вызванную ни какой из вышеперечисленных проблем, пожалуйста точно опишите информацию об устройстве, операционной системе, версии драйверов, итд. Это может помочь для лучшего решения.

Также убедитесь что используете правильную терминологию (джиттер(jitter) или задержка(stutter)) в зависимости от наблюдаемого поведения. Это помогает намного быстрее понять вашу проблему. Предоставьте проект демонстрирующий вашу проблему, и если возможно видео захват экрана с демонстрацией ошибки.