Дела

Вертикальная синхронизация

Grok.Ru

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

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

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

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

Вертикальная синхронизация призвана решать эти проблемы.

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

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

Стоит ли отключать вертикальную синхронизацию видеокарты или все же оставить ее?

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

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

    Нет таковых

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

Отключил у себя эту вертикальную синхронизацию и чувствую себя просто отлично!

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

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

<DIV9gt;Наверняка многие любители компьютерных игр сталкивались с рекомендацией отключать в играх так называемую "вертикальную синхронизацию" или VSync в настройках видеокарты. Во многих тестах производительности графических контроллеров отдельно подчеркивается, что тестирование производилось при отключенной VSync. Что же это такое, и зачем оно нужно, если многие "продвинутые специалисты" советуют отключать эту функцию?</DIV9gt;

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

<P9gt;Для чего же в настройках видеокарт сохранен пункт "вертикальная синхронизация", если монитор способен автоматически настраиваться в соответствии с установленным в драйвере режимом? Дело в том, что, несмотря на то, что видеокарты способны генерировать очень большое число кадров в секунду, мониторы не могут его качественно отображать, в результате чего возникают различные артефакты: полосность и "рваное9quot; изображение. Чтобы этого избежать, в видеокартах предусматривается режим предварительного опроса монитора о его вертикальной развертке, с которой и синхронизируется число кадров в секунду - всем знакомые fps. Иными словами, при частоте вертикальной развертки 85 Гц число кадров в секунду в любых играх не будет превышать восьмидесяти пяти.</P9gt;

<P9gt;Частота вертикальной развертки монитора означает, сколько раз обновляется экран с изображением в секунду. В случае с дисплеем на основе электронно-лучевой трубки, сколько бы кадров в секунду не позволял "выжать9quot; из игры графический ускоритель, частота развертки физически не может быть выше установленной. В жидкокристаллических мониторах не существует физического обновления всего экрана: здесь отдельные пиксели могут светиться или не светиться. Однако сама технология передачи данных через видеоинтерфейс предусматривает, что на монитор от видеокарты передаются кадры с определенной скоростью. Поэтому, с долей условности, понятие "развертки9quot; применимо и к ЖК-дисплеем. </P9gt;

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

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

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

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

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

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

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

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

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

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

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

<P9gt;После прочтения этого материала у некоторых может возникнуть вопрос: так стоит задействовать вертикальную синхронизацию в настройках видеокарты или лучше все-таки ее отключить. Однозначного ответа на этот вопрос нет. Очевидно, что если вы просто хотите посмотреть, на что способна ваша видеокарта и "прогнать9quot; какие-то синтетические или игровые тесты, то VSync лучше отключить. В этом случае вы не собираетесь наслаждаться картинкой или игровым процессом, а просто хотите получить информацию о максимальной производительности видеокарты в тех или иных единицах измерения. Кстати, все тестирования графических процессоров проводятся с отключенной вертикальной синхронизацией, поэтому в реальных игровых ситуациях карта может оказаться заметно медленней, чем о ней отзывались в том или ином тесте.</P9gt;

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

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

<P9gt;Чтобы получить доступ к настройкам VSync, необходимо в "дереве9quot; слева выбрать пункт 3D и подпункт All Settings - раздел Wait For Vertical Refresh. По умолчанию установлены следующие настройки: вертикальная синхронизация отключена, но ее может задействовать запущенное приложение. Это самая разумная настройка, и в подавляющем большинстве случаев ее изменять не стоит. Если перевести рычажок в крайнее левое положение, то VSync будет принудительно отключена, в крайнее правое - принудительно включена. Крайнее левое положение обеспечит максимально возможную производительность, а крайнее правое - наивысшее качество. Здесь же можно включить вертикальную синхронизацию, но если приложение ее не требует, то она использоваться не будет.</P9gt;

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

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

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

При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

32 − 31 =