Что такое вертикальная синхронизация и зачем она нужна?

Скорее всего многие любители PC игр сталкивались с рекомендацией отключать в играх так называемую «вертикальную синхронизацию» или VSync в настройках видюхи. Во многих тестах производительности графических контроллеров отдельно подчеркивается, что тестирование производилось при отключенной VSync. Что же это такое, и зачем оно надо, если многие «продвинутые специалисты» советуют отключать эту функцию?

Что такое вертикальная синхронизация и зачем она нужна

Чтобы понять смысл вертикальной синхронизации, необходимо совершить небольшой экскурс в историю. Первые компьютерные мониторы работали с фиксированными разрешениями и с фиксированными частотами развертки. С появлением мониторов EGA появилась необходимость выбора различных разрешений, что обеспечивалось двумя режимами работы, которые задавались полярностью сигналов синхронизации изображения по вертикали. Мониторам, поддерживающим разрешение VGA и выше, потребовалась уже точная настройка частот развертки. Для этого использовались уже два сигнала, отвечающие за синхронизацию изображения как по горизонтали, так и по вертикали. В современных мониторах за подстройку развертки в соответствии с установленным разрешением отвечает специальная микросхема-контроллер.

Для чего же в настройках видеокарт сохранен пункт «вертикальная синхронизация», если монитор может автоматически настраиваться в соответствии с установленным в драйвере режимом? Дело в том, что, несмотря на то, что видюхи способны генерировать очень большое число кадров в секунду, мониторы не могут его качественно отображать, в результате чего возникают различные артефакты: полосность и «рваное» изображение. Чтобы этого избежать, в видюшках предусматривается режим предварительного опроса монитора о его вертикальной развертке, с которой и синхронизируется число кадров в секунду — всем знакомые fps. Иными словами, при частоте вертикальной развертки 85 Гц число кадров в секунду в любых играх не будет превышать восьмидесяти пяти.

Частота вертикальной развертки монитора означает, сколько раз обновляется экран с изображением в секунду. В случае с дисплеем на основе электронно-лучевой трубки, сколько бы кадров в секунду не позволял «выжать» из игры графический ускоритель, частота развертки физически не может быть выше установленной. В жидкокристаллических мониторах не существует физического обновления всего экрана: тут отдельные пиксели могут светиться или не светиться. Однако сама технология передачи данных через видеоинтерфейс предусматривает, что на монитор от видюхи передаются кадры с определенной скоростью. Так что, с долей условности, понятие «развертки» применимо и к ЖК-дисплеем.

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

К примеру, монитор работает с частотой развертки 75 Гц, а видеокарта в какой-либо игре генерирует сто кадров в секунду. Иными словами, графический ускоритель работает примерно на треть быстрее, чем система обновления монитора. За время обновления 1-го экрана карта вырабатывает 1 кадр и треть следующего — в результате на дисплее прорисовывается две трети текущего кадра, а его треть заменяется третью кадра следующего. За время очередного обновления карта успевает сгенерировать две трети кадра и две трети следующего, и так далее. На монитор же в каждые два из трех тактов развертки мы наблюдаем треть изображения от другого кадра — изображение теряет плавность и «дергается». Особенно заметен данный дефект в динамичных сценах или, к примеру, когда ваш персонаж в игре осматривается.

Однако было бы в корне неправильным считать, что если видеокарте запретить генерировать более 75 кадров в секунду, то с выводом изображения на дисплей с частотой вертикальной развертки 75 Гц все было бы в порядке. Дело в том, что в случае с обычной, так называемой «двойной буферизацией», кадры на монитор поступают из первичного кадрового буфера (front buffer), а сам рендеринг осуществляется во вторичном буфере (back buffer). По мере заполнения вторичного буфера кадры поступают в первичный, однако ввиду того, что операция копирования между буферами занимает определенное время, если обновление развертки монитора придется на сегодняшний день, подергивания изображения все равно избежать не удастся.

Вертикальная синхронизация как раз и решает эти проблемы: монитор опрашивается на предмет частоты развертки и копирование кадров из вторичного буфера в первичный запрещается до того момента, пока изображение не обновится. Эта технология прекрасно работает, когда скорость генерации кадров в секунду превышает частоту вертикальной развертки. Но как же быть, если скорость рендеринга кадров падает ниже частоты развертки? К примеру, в некоторых сценах у нас число fps снижается со 100 до 50.

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

Получается, что в случае с вертикальной синхронизацией и двойной буферизацией качественное изображение мы может получить только в том случае, когда число кадров в секунду равно одному из дискретной последовательности значений, рассчитываемых как соотношение частоты развертки к некоторому положительному целому числу. К примеру, при частоте обновления 60 Гц число кадров в секунду должно быть равным 60 или 30 или 15 или 12 или 10 и т.д. Если потенциальные возможности карты позволяют генерировать менее 60 и более 30 кадров в секунду, то реальная скорость рендеринга будет падать до 30 fps.



Вернемся к нашему примеру с частотой развертки 75 Гц и 100 кадрам в секунду. При включении вертикальной синхронизации артефакты изображения пропадают. Когда скорость рендеринга в особо сложных сценах снижается примерно до 60 fps и включена VSync, реальная же скорость расчета кадров падает почти вдвое. Иными словами, вертикальная синхронизация в сочетании с двойной буферизацией хороша только тогда, когда скорость рендеринга не падает ниже частоты развертки, ввиду того, что в других случаях производительность резко падает.

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

Работает тройная буферизация следующим образом (при скорости рендеринга 50 кадров в секунду и частоте обновления монитора 75 Гц). Первый кадр находится в первичном буфере, две трети второго кадра обрабатываются во вторичном буфере. После обновления экрана первым кадром во вторичный буфер поступает последняя треть второго кадра, а треть третьего кадра начинает «рендериться» в третьем буфере. После второго обновления экрана первым кадром второй кадр копируется в первичный буфер, а первая треть третьего кадра перемещается во вторичный буфер. Оставшиеся две трети кадра номер три обрабатываются в третьем буфере, осуществляется первое обновление экрана вторым кадром, а кадр три полностью переносится во вторичный буфер. Затем данный процесс повторяется с начала.

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

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

После прочтения этого материала у некоторых может возникнуть вопрос: так стоит задействовать вертикальную синхронизацию в настройках видюхи или лучше все-таки ее отключить. Однозначного ответа на данный вопрос нет. Очевидно, что если вы просто хотите увидеть, на что способна ваша видеокарта и «прогнать» какие-то синтетические или игровые тесты, то VSync лучше отключить. В данном случае вы не собираетесь наслаждаться картинкой или игровым процессом, а просто хотите получить информацию о максимальной производительности видюхи в тех или иных единицах измерения. Еще все тестирования графических процессоров проводятся с отключенной вертикальной синхронизацией, так что в реальных игровых ситуациях карта может оказаться заметно медленней, чем о ней отзывались в том или ином тесте.

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

Посмотрим на примере «Центра управления» для видеокарт ATI (Catalyst Control Center), как включить или отключить вертикальную синхронизацию и тройную буферизацию. Напомним, что Catalyst Control Center работает только при наличии установленной в системе среды .NET Framework 1.1, которую можно бесплатно закачать с сайта Misrosoft. Этой утилитой пользоваться необязательно — все видюхи ATI могут работать и с традиционной «Панелью управления» (Control Panel).

Control Panel ATI

Чтобы получить доступ к настройкам VSync, необходимо в «дереве» слева выбрать пункт 3D и подпункт All Settings — раздел Wait For Vertical Refresh. По умолчанию установлены следующие настройки: вертикальная синхронизация отключена, но ее может задействовать запущенное приложение. Это самая разумная настройка, и в подавляющем большинстве случаев ее изменять не стоит. Если перевести рычажок в крайнее левое положение, то VSync будет принудительно отключена, в крайнее правое — принудительно включена. Крайнее левое положение обеспечит максимально возможную производительность, а крайнее правое — наивысшее качество. Тут же можно включить вертикальную синхронизацию, но если приложение ее не требует, то она использоваться не будет.

Панелью управления АТИ

Включить тройную буферизацию можно, зайдя в пункт 3D и подпункт API Specific. Тут сразу становится очевидным, почему эту возможность поддерживают далеко не все игры: тройная буферизация возможна лишь для приложений, работающих с программным интерфейсом (API) OpenGL. Соответствующая строчка предусмотрена именно в настройках для этого API — второй пункт снизу. По умолчанию тройная буферизация отключена.

Наконец, еще раз подчеркнем, что все вышеизложенное касается и ЭЛТ-, и ЖК-мониторов. Несмотря на принципиальные отличия в принципах вывода изображения, для видюхи (то есть, ее драйвера, операционки и конкретного приложения) это однотипные устройства, на которые отправляются сгенерированные кадры с определенной частотой. Впрочем, владельцам жидкокристаллических дисплеев повезло больше: для этих мониторов типичная частота развертки — всего 60 Гц, а при наличии мощной видюхи скорость рендеринга будет падать ниже 60 fps в редких случаях.

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


Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:
Комментарий отправится на модерацию