[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
О причине размытого изображения на мониторе.
TerminatorДата: Пятница, 13.06.2014, 15:43 | Сообщение # 1
Группа: Администраторы
Сообщений: 134
Награды: 3
Репутация: 14
Статус: Оффлайн
Наверняка многие любители компьютерных игр сталкивались с рекомендацией отключать в играх так называемую «вертикальную
синхронизацию» или VSync в настройках видеокарты.
Во многих тестах производительности графических контроллеров отдельно подчеркивается, что
тестирование производилось при отключенной VSync.
Что же это такое, и зачем оно нужно, если многие «продвинутые специалисты» советуют отключать эту функцию?
Чтобы понять смысл вертикальной синхронизации, необходимо совершить небольшой экскурс в историю.
Первые компьютерные мониторы работали с фиксированными разрешениями и с фиксированными частотами развертки.
С появлением мониторов EGA появилась необходимость выбора различных
разрешений, что обеспечивалось двумя режимами работы, которые задавались
полярностью сигналов синхронизации изображения по вертикали.
Мониторам, поддерживающим разрешение VGA и выше, потребовалась уже точная настройка частот развертки.
Для этого использовались уже два сигнала, отвечающие за синхронизацию изображения как по горизонтали, так и по вертикали.
В современных мониторах за подстройку развертки в соответствии с
установленным разрешением отвечает специальная микросхема-контроллер.
Для чего же в настройках видеокарт сохранен пункт «вертикальная
синхронизация», если монитор способен автоматически настраиваться в
соответствии с установленным в драйвере режимом?
Дело в том, что, несмотря на то, что видеокарты способны генерировать очень большое число
кадров в секунду, мониторы не могут его качественно отображать, в
результате чего возникают различные артефакты: полосность,размытие и
«рваное» изображение.
Чтобы этого избежать, в видеокартах предусматривается режим предварительного опроса монитора о его
вертикальной развертке, с которой и синхронизируется число кадров в
секунду — всем знакомые fps.
Иными словами, при частоте вертикальной развертки 85 Гц число кадров в секунду в любых играх не будет превышать
восьмидесяти пяти.
Частота вертикальной развертки монитора означает, сколько раз обновляется экран с изображением в секунду.
В случае с дисплеем на основе электронно-лучевой трубки, сколько бы
кадров в секунду не позволял «выжать» из игры графический ускоритель,
частота развертки физически не может быть выше установленной.
В жидкокристаллических мониторах не существует физического обновления
всего экрана: здесь отдельные пиксели могут светиться или не светиться.
Однако сама технология передачи данных через видеоинтерфейс предусматривает,
что на монитор от видеокарты передаются кадры с определенной скоростью.
Поэтому, с долей условности, понятие «развертки» применимо и к ЖК-дисплеем.
Откуда же появляются артефакты изображения?
В любой игре количество генерируемых кадров в секунду постоянно меняется, в зависимости от сложности картинки.
Поскольку частота развертки у монитора постоянная, рассинхронизация между fps,
передаваемыми видеокартой, и скоростью обновления монитора приводит к
искажению изображения, которое как бы разделяется на несколько
произвольных полос: одна часть из них успевает обновиться, а другая —
нет.
К примеру, монитор работает с частотой развертки 75 Гц, а видеокарта в какой-либо игре генерирует сто кадров в секунду.
Иными словами, графический ускоритель работает примерно на треть быстрее, чем система обновления монитора.
За время обновления одного экрана карта вырабатывает 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).
VSync
Чтобы получить доступ к настройкам VSync, необходимо в «дереве» слева выбрать пункт 3D и подпункт «All
Settings» — раздел «Wait For Vertical Refresh».
По умолчанию установлены следующие настройки: вертикальная синхронизация отключена,
но ее может задействовать запущенное приложение.
Это самая разумная настройка, и в подавляющем большинстве случаев ее изменять не стоит.
Если перевести рычажок в крайнее левое положение, то VSync будет
принудительно отключена, в крайнее правое — принудительно включена.
Крайнее левое положение обеспечит максимально возможную производительность, а крайнее правое - наивысшее качество.
Здесь же можно включить вертикальную синхронизацию, но если приложение ее не требует, то она использоваться не будет.
VSync
Включить тройную буферизацию можно, зайдя в пункт «3D» и подпункт «API Specific».
Здесь сразу становится очевидным, почему эту возможность поддерживают далеко
не все игры: тройная буферизация возможна лишь для приложений,
работающих с программным интерфейсом (API) OpenGL.
Соответствующая строчка предусмотрена именно в настройках для этого API - второй пункт снизу.
По умолчанию тройная буферизация отключена.
Наконец, еще раз подчеркнем, что все вышеизложенное касается и ЭЛТ-, и ЖК-мониторов.
Несмотря на принципиальные отличия в принципах вывода изображения, для
видеокарты (то есть, ее драйвера, операционной системы и конкретного
приложения) это однотипные устройства, на которые отправляются
сгенерированные кадры с определенной частотой.
Впрочем, владельцам жидкокристаллических дисплеев повезло больше: для этих мониторов
типичная частота развертки — всего 60 Гц, а при наличии мощной
видеокарты скорость рендеринга будет падать ниже 60 fps в редких
случаях.


 
  • Страница 1 из 1
  • 1
Поиск: