ГЛАВНАЯ Визы Виза в Грецию Виза в Грецию для россиян в 2016 году: нужна ли, как сделать

За что отвечает вертикальная синхронизация. Настройки графики в играх: на что они влияют? Цикл обновления дисплея

Наверняка многие любители компьютерных игр сталкивались с рекомендацией отключать в играх так называемую «вертикальную синхронизацию» или 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.

Переводим... Перевести Китайский (упрощенное письмо) Китайский (традиционное письмо) Английский Французский Немецкий Итальянский Португальский Русский Испанский Турецкий

К сожалению, мы не можем перевести эту информацию прямо сейчас - пожалуйста, повторите попытку позже.

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

Введение

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

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

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

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

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

Цикл обновления дисплея

Частота обновления экрана ПК (screen refresh rate) синхронизируется с частотой графического адаптера (видеокарты). Рассмотрим самый общий пример ­– когда видеокарта и монитор поддерживают частоту 60Гц. Эта комбинация возможна благодаря тому, что монитор синхронизируется с сигналом 60Гц, поступающим с видеокарты. На самом деле, монитор поддерживает синхронизацию даже в случаях незначительного отклонения частоты выходного сигнала графического адаптера (например, 60,06 Гц вместо стандартных 60 Гц).

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

Рисунок 1 – Обновление дисплея

Артефакты разрыва изображения

Следует учитывать потенциальную проблему неравномерного обновления буфера графического адаптера. Если содержимое буфера видеопамяти изменилось в момент, когда изображение на мониторе еще полностью не отрисовалось (цикл обновления не завершен), то на экране будет показана только часть нового изображения, следующая после строки развертки (см. Рис. 2 ). Этот артефакт изображения, при котором на верхней части экрана показывается старое изображение, а на нижней части – новое изображение, получил название «разрыва» (tearing). В сущности, этот термин весьма нагляден, так как получающееся в итоге изображение выглядит как бы «разорванным» пополам.

Рисунок 2 – Артефакты «разрыва» изображения

Команда Flip

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

По этой причине был предложен алгоритм синхронизации переключения буфера (Flip). Команда Flip весьма проста по своей сути – она позволяет программе обновлять изображение в любой момент цикла обновления экрана, однако его результат фактически не передается в видеопамять до тех пор, пока не завершится текущий цикл. Таким образом, обновление изображения на мониторе происходит в интервал, следующий за выполнением команды Flip. При использовании метода синхронизации буфера «разрывы» изображения исключены, так как команда Flip гарантирует, что к каждому циклу обновления будет готово полное новое изображение (см. Рис. 3 ). Тем не менее, в следующем разделе мы продемонстрируем, что использование одной лишь команды Flip не гарантирует решения всех проблем.

Рисунок 3 – Последовательность команды Flip

Потенциальные проблемы

Использование алгоритма синхронизации дает большие преимущества и помогает устранить артефакты «разрыва» изображения, но остается одна существенная проблема.

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

Рисунок 4 – Несовпадение частоты кадров и частоты дисплея

Этот факт подразумевает, что если частота обновления дисплея не совпадает с частой кадров воспроизводимого содержимого или не является кратной величиной, полноценное воспроизведение содержимого на дисплее невозможно. На Рис. 4 показан частный случай данной проблемы. В рассматриваемом сценарии частота кадров содержимого меньше, чем частота обновления дисплея. По причине фазового сдвига между этими двумя частотами интервалы выполнения команды Flip для двух кадров в конечном итоге растянутся на полный цикл обновления (обратите внимание на синхронизацию кадров 3 и 4). В результате кадр 3 будет отображаться почти в два раза дольше, чем требуется. Таким образом, следует стремиться к совпадению частоты кадров и частоты обновления дисплея, хотя это и не всегда возможно.

Рассматриваемая ситуация только усугубляется в случае, если разница между частотой кадров и частотой обновления дисплея невелика. Когда время смены кадров близко к интервалам циклов обновления даже небольшие неточности в расчетах программного таймера могут привести к тому, что несколько последовательных команд Flip будут сбиваться относительно начала обновления. Это означает, что некоторые команды Flip будут выполняться слишком рано, а некоторые слишком поздно, что приведет к появлению «дублированных» и «выпавших» кадров. Данный случай проиллюстрирован на Рис. 5 – таймер срабатывает некорректно (через неравные промежутки), в результате кадры 2 и 4 не показываются, а кадры 3 и 5 показываются дважды.

Рисунок 5 – Результат использования Flip при сбоях таймера

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

Привязка команд Flip по времени

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

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

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

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

GetScanLine() - это стандартная процедура, которая может использоваться для получения данных о том, какая строка развертки в настоящий момент обновляется на дисплее. Если известно общее количество строк и текущая строка развертки, то не составляет труда определить состояние цикла обновления дисплея. Например, если общее количество строк дисплея составляет 1024, а процедура GetScanLine() возвращает значение 100, текущий цикл обновления в данный момент определяется отношением 100 к 1024, то есть завершен примерно на 10 процентов. Применение GetScanLine() позволяет приложению отслеживать состояние цикла обновления и на его основе определять, к какому циклу привязывать следующий отображаемый кадр, и настраивать таймер на нужное время переключения буфера. Ниже приводится примерный алгоритм:

Рисунок 6

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

Альтернативное решение для записанного содержимого

Рассматриваемые нами проблемы относятся ко всем сценариям воспроизведения видео, как в случае вещания в прямом эфире, так и при воспроизведении записанного видео. Однако, в последнем случае можно прибегнуть и к альтернативному решению. Если разница между частотой кадров содержимого и частотой обновления дисплея невелика, можно скорректировать частоту кадров видео (и таким же образом скорректировать аудиопоток) таким образом, чтобы он соответствовал частоте обновления экрана, без ухудшения качества содержимого. В качестве примера возьмем воспроизведение телевизионного сигнала стандартного разрешения с частотой 59,94 кадров в секунду (с деинтерлейсингом по алгоритму Bob) на мониторе с частотой 60 Гц. За счет ускорения воспроизведения видео и аудио до 60 кадров в секунду можно добиться того, что время смены кадров будет соответствовать интервалам обновления экрана и при этом не будут возникать артефакты изображения.

Резюме

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

Что же такое вертикальная синхронизация в играх? Эта функция отвечает за правильное отображение игр на стандартных LCD мониторах с частотой 60 Гц. Когда она включена, частота кадров ограничена до 60 Гц, а на экране не отображаются никакие прерывания. Ее отключение приведет к увеличению частоты кадров, но в то же время возникнет эффект разрыва экрана (screen tearing).

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

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

Отключение вертикальной синхронизации также имеет свои плюсы и минусы. В первую очередь предоставляется неограниченная частота кадров FPS и тем самым полностью убираем упомянутый input lag. Это удобно в играх типа Counter-Strike, где важна реакция и точность. Передвижение и прицеливание очень четкие, динамические, каждое движение мыши происходит с высокой точностью. В некоторых случаях сможем получить большую частоту FPS, так как V-Sync в зависимости от видеокарты может немного уменьшить производительность оборудования (разница порядка 3-5 FPS). К сожалению, недостатком является то, что без вертикальной синхронизации получаем эффект разрыва экрана. При поворотах или смене движения в игре мы замечаем, что изображение разрывается на две или три горизонтальные части.

Включить или отключить V-Sync?

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

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

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

Синхронизация по вертикали на видеокартах NVIDIA

В видеокартах GeForce функция находится на Панели управления Nvidia. Нажмите правой кнопкой мыши на рабочем столе Windows 10, а затем выберите «Панель управления Nvidia».

На боковой панели выберите вкладку «Управления параметрами 3D» в разделе «Параметры 3D». Справа отобразятся доступные настройки.

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

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

V-Sync на графике AMD

В случае с видеокартами AMD выглядит совершенно так же, как и в Nvidia. Кликните правой кнопкой мыши на рабочем столе, а затем перейдите в Панель Panel Catalyst Control Center.

Затем раскрываем слева вкладку «Игры» и выбираем «Настройки 3D-приложений». Справа отобразится список доступных вариантов, которые можно принудительно включить с позиции настроек видеокарты AMD Radeon. Когда находимся на вкладке «Системные параметры», то выбираем для всех.

Если нужно установить параметры индивидуально для каждой игры в отдельности, то следует нажать на кнопку «Добавить» и указать EXE файл. Она будет добавлена в список в виде новой закладки и при переходе на нее можно задать параметры только для этой игры.

Когда выбрали вкладку с добавленным приложением или системными параметрами (общими), то найдите в списке опцию «Жди на вертикальное обновление». Появится поле для выбора, где сможем принудительно включить или отключить эту опцию.

V-Sync на интегрированной видеокарте Intel HD Graphics

Если используем интегрированный чип Intel HD Graphics, также доступна панель управления. Она должна быть доступна при нажатии правой кнопкой мыши на рабочем столе или через комбинацию клавиш Ctrl + Alt + F12.

На панели Intel переходим на вкладку Режим настройки – Панель управления — Трехмерная графика, а затем в пользовательские настройки.

Здесь находим поле с синхронизацией по вертикали Vertical Sync. Можно включить ее принудительно, установив значение на «Включено» или установить на «Настройки приложения». К сожалению, в опциях карты Intel HD нет функции принудительного отключения – только можно включить V-Sync. Так как отключить вертикальную синхронизацию в видеокарте не представляется возможным, то сделать это можно только в настройках самой игры.

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

Анизотропная фильтрация

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

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

Учитывая объем обрабатываемых данных (а в сцене может быть множество 32-битовых текстур высокого разрешения), анизотропная фильтрация особенно требовательна к пропускной способности памяти. Уменьшить трафик можно в первую очередь за счет компрессии текстур, которая сейчас применяется повсеместно. Ранее, когда она практиковалась не так часто, а пропуская способность видеопамяти была гораздо ниже, анизотропная фильтрация ощутимо снижала количество кадров. На современных же видеокартах она почти не влияет на fps.

Анизотропная фильтрация имеет лишь одну настройку - коэффициент фильтрации (2x, 4x, 8x, 16x). Чем он выше, тем четче и естественнее выглядят текстуры. Обычно при высоком значении небольшие артефакты заметны лишь на самых удаленных пикселах наклоненных текстур. Значений 4x и 8x, как правило, вполне достаточно для избавления от львиной доли визуальных искажений. Интересно, что при переходе от 8x к 16x снижение производительности будет довольно слабым даже в теории, поскольку дополнительная обработка понадобится лишь для малого числа ранее не фильтрованных пикселов.

Шейдеры

Шейдеры - это небольшие программы, которые могут производить определенные манипуляции с 3D-сценой, например, изменять освещенность, накладывать текстуру, добавлять постобработку и другие эффекты.

Шейдеры делятся на три типа: вершинные (Vertex Shader) оперируют координатами, геометрические (Geometry Shader) могут обрабатывать не только отдельные вершины, но и целые геометрические фигуры, состоящие максимум из 6 вершин, пиксельные (Pixel Shader) работают с отдельными пикселами и их параметрами.

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

Шейдеры очень продуктивно работают в параллельном режиме, и именно поэтому в современных графических адаптерах так много потоковых процессоров, которые тоже называют шейдерами. Например, в GeForce GTX 580 их целых 512 штук.

Parallax mapping

Parallax mapping - это модифицированная версия известной техники bumpmapping, используемой для придания текстурам рельефности. Parallax mapping не создает 3D-объектов в обычном понимании этого слова. Например, пол или стена в игровой сцене будут выглядеть шероховатыми, оставаясь на самом деле абсолютно плоскими. Эффект рельефности здесь достигается лишь за счет манипуляций с текстурами.

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

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

Эффект чаще всего применяется для каменных мостовых, стен, кирпичей и плитки.

Anti-Aliasing

До появления DirectX 8 сглаживание в играх осуществлялось методом SuperSampling Anti-Aliasing (SSAA), известным также как Full-Scene Anti-Aliasing (FSAA). Его применение приводило к значительному снижению быстродействия, поэтому с выходом DX8 от него тут же отказались и заменили на Multisample Аnti-Аliasing (MSAA). Несмотря на то что данный способ давал худшие результаты, он был гораздо производительнее своего предшественника. С тех пор появились и более продвинутые алгоритмы, например CSAA.

Учитывая, что за последние несколько лет быстродействие видеокарт заметно увеличилось, как AMD, так и NVIDIA вновь вернули в свои ускорители поддержку технологии SSAA. Тем не менее использовать ее даже сейчас в современных играх не получится, поскольку количество кадров/с будет очень низким. SSAA окажется эффективной лишь в проектах предыдущих лет, либо в нынешних, но со скромными настройками других графических параметров. AMD реализовала поддержку SSAA только для DX9-игр, а вот в NVIDIA SSAA функционирует также в режимах DX10 и DX11.

Принцип работы сглаживания очень прост. До вывода кадра на экран определенная информация рассчитывается не в родном разрешении, а увеличенном и кратном двум. Затем результат уменьшают до требуемых размеров, и тогда «лесенка» по краям объекта становится не такой заметной. Чем выше исходное изображение и коэффициент сглаживания (2x, 4x, 8x, 16x, 32x), тем меньше ступенек будет на моделях. MSAA в отличие от FSAA сглаживает лишь края объектов, что значительно экономит ресурсы видеокарты, однако такая техника может оставлять артефакты внутри полигонов.

Раньше Anti-Aliasing всегда существенно снижал fps в играх, однако теперь влияет на количество кадров незначительно, а иногда и вовсе никак не cказывается.

Тесселяция

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

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

Технология тесселяции известна в кинематографе еще с 80-х го-дов, однако в играх она стала поддерживаться лишь недавно, а точнее после того, как графические ускорители наконец достигли необходимого уровня производительности, при котором она может выполняться в режиме реального времени.

Чтобы игра могла использовать тесселяцию, ей требуется видеокарта с поддержкой DirectX 11.

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

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

Если частота обновления монитора составляет 60 Гц, и видео-карта успевает просчитывать 3D-сцену как минимум с таким же количеством кадров, то каждое обновление монитора будет отображать новый кадр. Другими словами, с интервалом 16,66 мс пользователь будет видеть полное обновление игровой сцены на экране.

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

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

Post-processing

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

High dynamic range (HDR)

Эффект, часто используемый в игровых сценах с контрастным освещением. Если одна область экрана является очень яркой, а другая, наоборот, затемненной, многие детали в каждой из них теряются, и они выглядят монотонными. HDR добавляет больше градаций в кадр и позволяет детализировать сцену. Для его применения обычно приходится работать с более широким диапазоном оттенков, чем может обеспечить стандартная 24-битовая точность. Предварительные просчеты происходят в повышенной точности (64 или 96 бит), и лишь на финальной стадии изображение подгоняется под 24 бита.

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

Bloom

Bloom нередко применяется совместно с HDR, а еще у него есть довольно близкий родственник - Glow, именно поэтому эти три техники часто путают.

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

Film Grain

Зернистость - артефакт, возникающий в аналоговом ТВ при плохом сигнале, на старых магнитных видеокассетах или фотографиях (в частности, цифровых изображениях, сделанных при недостаточном освещении). Игроки часто отключают данный эффект, поскольку он в определенной мере портит картинку, а не улучшает ее. Чтобы понять это, можно запустить Mass Effect в каждом из режимов. В некоторых «ужастиках», например Silent Hill, шум на экране, наоборот, добавляет атмосферности.

Motion Blur

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

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

SSAO

Ambient occlusion - техника, применяемая для придания сцене фотореалистичности за счет создания более правдоподобного освещения находящихся в ней объектов, при котором учитывается наличие поблизости других предметов со своими характеристиками поглощения и отражения света.

Screen Space Ambient Occlusion является модифицированной версией Ambient Occlusion и тоже имитирует непрямое освещение и затенение. Появление SSAO было обусловлено тем, что при современном уровне быстродействия GPU Ambient Occlusion не мог использоваться для просчета сцен в режиме реального времени. За повышенную производительность в SSAO приходится расплачиваться более низким качеством, однако даже его хватает для улучшения реалистичности картинки.

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

Cel shading

Игры с эффектом Cel shading начали делать с 2000 г., причем в первую очередь они появились на консолях. На ПК по-настоящему популярной данная техника стала лишь через пару лет, после выхода нашумевшего шутера XIII. С помощью Cel shading каждый кадр практически превращается в рисунок, сделанный от руки, или фрагмент из детского мультика.

В похожем стиле создают комиксы, поэтому прием часто используют именно в играх, имеющих к ним отношение. Из последних известных релизов можно назвать шутер Borderlands, где Cel shading заметен невооруженным глазом.

Особенностями технологии является применение ограниченного набора цветов, а также отсутствие плавных градиентов. Название эффекта происходит от слова Cel (Celluloid), т. е. прозрачного материала (пленки), на котором рисуют анимационные фильмы.

Depth of field

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

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

Лицезреть эффект глубины резкости в гипертрофированной форме можно на некоторых фотографиях. Именно такую степень размытия часто и пытаются симулировать в 3D-сценах.

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

Влияние на производительность

Чтобы выяснить, как включение тех или иных опций сказывается на производительности, мы воспользовались игровым бенчмарком Heaven DX11 Benchmark 2.5. Все тесты проводились на системе Intel Core2 Duo e6300, GeForce GTX460 в разрешении 1280×800 точек (за исключением вертикальной синхронизации, где разрешение составляло 1680×1050).

Как уже упоминалось, анизо-тропная фильтрация практически не влияет на количество кадров. Разница между отключенной анизотропией и 16x составляет всего лишь 2 кадра, поэтому рекомендуем ее всегда ставить на максимум.

Сглаживание в Heaven Benchmark снизило fps существеннее, чем мы того ожидали, особенно в самом тяжелом режиме 8x. Тем не менее, поскольку для ощутимого улучшения картинки достаточно и 2x, советуем выбирать именно такой вариант, если на более высоких играть некомфортно.

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

Для вертикальной синхронизации было выбрано более высокое разрешение, чтобы fps не ограничивался вертикальной частотой развертки экрана. Как и предполагалось, количество кадров на протяжении почти всего теста при включенной синхронизации держалось четко на отметке 20 или 30 кадров/с. Это связано с тем, что они выводятся одновременно с обновлением экрана, и при частоте развертки 60 Гц это удается сделать не с каждым импульсом, а лишь с каждым вторым (60/2 = 30 кадров/с) или третьим (60/3 = 20 кадров/с). При отключении V-Sync число кадров увеличилось, однако на экране появились характерные артефакты. Тройная буферизация не оказала никакого положительного эффекта на плавность сцены. Возможно, это связано с тем, что в настройках драйвера видеокарты нет опции принудительного отключения буферизации, а обычное деактивирование игнорируется бенчмарком, и он все равно использует эту функцию.

Если бы Heaven Benchmark был игрой, то на максимальных настройках (1280×800; AA - 8x; AF - 16x; Tessellation Extreme) в нее было бы некомфортно играть, поскольку 24 кадров для этого явно недостаточно. С минимальной потерей качества (1280×800; AA - 2x; AF - 16x, Tessellation Normal) можно добиться более приемлемого показателя в 45 кадров/с.