Какой fps вам нужен?

Современный геймер очень часто наслышан о существовании такого понятия как fps (“frames per second”/кадров в секунду), но недостаточно хорошо разбирается в том как частота кадров влияет на игровой процесс.

Действительно ли оправдана неограниченно высокая частота кадров? Есть ли смысл в том, чтобы она превышала частоту обновления монитора?

Портал Techspot попытался разобраться и получить ответ на этот, несомненно насущный, вопрос.

Подробнее о частоте кадров

Сегодня мы обсудим один из самых часто задаваемых вопросов касательно игр на ПК: какой fps вам нужен? Должна ли частота кадров  совпадать с максимальной частотой обновления вашего монитора (скажем, 60 кадров в секунду на 60-герцовом мониторе) или лучше если частота кадров будет наибольшей из возможных, к примеру - 500 в секунду?

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

Но факт остаётся фактом - игра на fps, значительно более высоком чем частота обновления монитора, действительно положительно сказывается на качестве игрового процесса. Это очень сокращенный ответ на вопрос для всех тех, кто не планирует читать статью до конца. А теперь, давайте перейдем к объяснениям почему всё работает именно так.

Предположим, что у нас есть монитор с частотой обновления в 60 герц. Другими словами, изображение на мониторе обновляется каждую 1/60 секунды, точнее - каждые 16.7 мс. Во время игры нет никаких гарантий, что видеокарта будет способна отрендерить каждый кадр именно за 1.67 миллисекунды. Иногда этот процесс может занять 20 мс, иногда 15 мс, а иногда даже 8 мс. Такова уж природа рендера игр на видеокартах.

С такой разницей в скорости рендера отдельных кадров, возникает разброс и в отправке отрендеренных кадров на монитор. Кадр попадает на дисплей как только полностью отрендерится при выключенной вертикальной синхронизации, а при включённой синхронизации дисплей сначала полностью обновляется и лишь потом отправляет новый кадр.

Выключенная вертикальная синхронизация, “Vsync off”

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

Разрывы

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

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

Включённая вертикальная синхронизация, “Vsync on”

Теперь посмотрим, что происходит при включенной вертикальной синхронизации: видеокарта, вместо того, чтобы отправить новый кадр сразу на дисплей, “подставляет” её в буфер. В первом буфере хранятся кадры над которыми в данный момент ведётся работа, а во втором - кадры, которые дисплей отображает в конкретный момент. Второй буфер не изменяется во время обновления, поэтому на дисплей выводятся данные только одного, полностью отрендеренного, кадра, в результате не происходит разрывов посреди обновления изображения на экране.

Подробнее о включенной вертикальной синхронизации

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

Впрочем, с вертикальной синхронизацией есть две проблемы.

Если видеокарта не успевает отрендерить кадр… все тормозит

Во-первых, если скорость рендера вашей видеокарты меньше частоты обновления монитора (скажем, она выдаёт лишь 40 кадров в секунду на мониторе с частотой 60 Гц), то графический процессор попросту не будет успевать отрендерить полный кадр ко времени обновления дисплея, а значит данные продублируются. Это вызывает так называемые “подвисания”, ведь некоторые кадры отображаются только единожды, в то время как другие - дважды.

Включенная вертикальная синхронизация на 60 Гц-дисплее при 200 кадрах в секунду

Теперь перейдем ко второй проблеме, которая проявляется, если ваша видеокарта, наоборот, очень быстрая и может рендерить кадры со скоростью большей, чем частота обновления монитора. Скажем, карта может выдать 200 кадров в секунду, тем самым выдавая по кадру каждые 5 мс, если, конечно, у вас не 60 Гц дисплей с “окном” обновления в 16.7 мс.

С включённой вертикальной синхронизацией ваша видеокарта создаст следующий кадр за 5 мс, но затем наступят 11.7 мс ожидания следующего цикла обновления второго буфера, а значит и отображения кадра на мониторе для старта работы над следующим кадром. Поэтому с включённой вертикальной синхронизацией количество кадров в секунду не будет превышать частоту обновления монитора, поскольку видеокарте отдается команда проводить рендер не быстрее частоты обновления.

А вот тут и начинается путаница.

Очень часто мы слышим нечто вроде: “блокировать частоту кадров на уровне частоты обновления монитора с помощью вертикальной синхронизации - полезно, ведь иначе дополнительные кадры будут уходить впустую, не отображаясь на экране, и я в результате получу сплошные разрывы”. Многие указывают на то, что вертикальная синхронизация помогает экономить ресурсы видеокарты; пусть карта не тратит их впустую, нет смысла рендерить со скоростью выше частоты обновления монитора - просто поставьте ограничение кадров.

Это рассуждения довольно логичны и отчасти правдивы, но лишь отчасти. А всё потому, что при этом не учитывается время обработки команд и то, сколько времени нужно для их отображения на дисплее.

Включенная синхронизация и команды

Чтобы объяснить, что при этом происходит, давайте рассмотрим диаграмму синхронизации, на которую наложим диаграмму команд, поступающих с клавиатуры и мыши (обычно записываются каждую 1 мс). И давайте снова обратимся к примеру, в котором наша видеокарта может рендерить 200 кадров в секунду,а частота обновления дисплея составляет 60 Гц.

На этом простом графике изображена включенная синхронизация и простая буферная система. Видеокарта начинает рендерить кадр сразу после того, как была получена команда с мышки. Затем проходят 5 мс, за которые рендерится кадр, и остаётся 11.7 мс простоя перед тем, как кадр отправляется в буфер дисплея.

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

Даже в самом лучшем случае у нас будет задержка, как минимум, в 16.7 мс между введёнными командами и отображением результатов этих команд на дисплее.

Принимая во внимание задержку в выводе команд, время обработки процессора и т.д., задержка между вводом команд и частотой обновления монитора запросто может превышать 50 мс.

Выключенная вертикальная синхронизация с командами, дисплей 60 Гц, 200 кадров в секунду


А теперь давайте рассмотрим диаграмму с выключенной вертикальной синхронизацией. Видеокарта продолжает заниматься рендером кадра вне зависимости от частоты обновления дисплея и на превращение введённой команды в итоговый кадр уходит 5 мс. Дисплей может начать отображать новый кадр сразу, хотя порой может отобразиться лишь его часть. В результате этого, задержка между введённой командой и её отображением на дисплее уменьшается с 16.7 мс до 5 мс. И больше никаких вспомогательных буферов - вы получите именно такую скорость, плюс задержка на введение команды самого монитора.

И вот так вы сможете получить преимущество. В данном случае, при игре на 200 кадрах в секунду, выключенная вертикальная синхронизация на 60-герцовом мониторе, даст результат задержки ввода всего лишь в 5 мс, а с включённой синхронизацией эта задержка достигнет 16.7 мс, если не больше.

Пусть дисплей и не в состоянии отобразить все 200 кадров в секунду, он отображает команды ближе ко времени к заявленным 1/60 секунды, необходимым для их записи.

Этот феномен, разумеется, применим и к мониторам с высокой частотой обновления дисплея. На 144 Гц, например, вы сможете увидеть намного больше кадров в секунду, а следовательно, игра на них в целом будет более плавной. И даже на подобном мониторе, 200 кадров в секунду с выключенной вертикальной синхронизацией обеспечат вам 5 мс отклика ввода вместо 7 мс, которые вас ждут при включенной синхронизации.

А теперь, раз уж мы заговорили о разнице в миллисекундах, вам наверняка интересно заметна ли она в играх.

Тут уже зависит от конкретной игры - разница может быть как отчётливо заметной, так и незаметной вовсе. В динамичных играх вроде CS:GO, 400 кадров в секунду на 60-герцовом мониторе (с задержкой ввода примерно равной 2.5 мс) вам будет казаться, что игра лучше отзывается на движения вашей мышки, чем на 60 кадрах с задержкой в 16.7 мс (или даже больше).

В обоих случаях на дисплее новый кадр будет появляться 60 раз в секунду, однако на мониторах с частотой 144 Гц или 240 Гц игра будет казаться плавнее. Стоит отметить, что разница в задержке ввода команд огромная: на 400 кадрах в секунду задержка в 7 раз ниже. Протестируйте эти мониторы сами и вы гарантированно заметите разницу.

И это объяснение мы взяли не из воздуха - Nvidia в курсе ограничений вертикальной синхронизации в плане задержки ввода команд, именно поэтому они изобрели альтернативу под названием Fast Sync (подобная технология от AMD называется Enhanced Sync). Эта технология синхронизации дисплея работает как комбинация включенной и выключенной вертикальной синхронизации,объединив лучшие характеристики обоих режимов.

Fast Sync создаёт дополнительный буфер для вертикальной синхронизации под названием “последний отрендеренный буфер”. Это позволяет видеокарте продолжать рендерить новые кадры, которые будут попадать в него по мере готовности. Затем, во время обновления дисплея, последний отрендеренный буфер перемещается в передний буфер, к которому у дисплея есть доступ.

Fast Sync / Enhanced Sync

Главный козырь данных технологий заключается в том, что видеокарта больше не простаивает после рендера нового кадра в ожидании обновления дисплея, как это происходит в случае с включённой вертикальной синхронизацией. Вместо этого карта беспрерывно продолжает рендерить, в результате чего новые кадры выходят ближе к началу цикла обновления. Так уменьшается задержка ввода. Однако, отличие от выключенной вертикальной синхронизации, Fast Sync отправляет законченный кадр на дисплей в начале каждого цикла, вместо отправки кадра на дисплей сразу же, из-за чего исчезает проблема разрыва кадров.

Использовать Fast Sync имеет смысл только тогда, когда частота кадров выше частоты обновления дисплея. Но когда она работает, то игры становятся намного более приятными и плавными, а главное - никаких разрывов! И, как мы уже упоминали, у AMD подобная технология фигурирует под названием Enhanced Sync.

Надеемся, что эта  статья смогла ответить на часть ваших вопросов вроде того, почему игра на частоте кадров выше частоты обновления вашего монитора, кажется более чуткой к командам или почему полезно запускать игры на высокой частоте кадров, даже если кажется, что ваш монитор не может отразить эту “полезность”.

И напоследок, маленькое замечание: мы не рассматривали технологии адаптивной синхронизации вроде G-Sync и FreeSync поскольку говорили о запуске игр на частоте кадров выше частоты обновления монитора, а адаптивная синхронизация работает совершенно по-другому и не особо важна в контексте этой статьи.