Глубина резкости в компьютерной графике. Как правильно настраивать игры - отключаем «бесполезные» настройки графики

Методы, применяемые в рендерерах, используют модель камеры-пинхола (в которой входная апертура → 0, а следовательно, все объекты будут в фокусе). Симуляция апертуры конечного размера и, следовательно, глубины резкости, требует дополнительных усилий.


Точка в сцене проецируется на картинную плоскость в виде пятна рассеяния.

Общий обзор

Способы реализации глубины резкости можно разделить на две большие группы: методы пространства объектов (object space) и методы пространства изображения (image space).

Методы пространства объектов работают с 3D-представлением объектов сцены и таким образом применяются во время рендера. Методы пространства изображения, также известные как методы постобработки (postprocess), оперируют с растровыми изображениями, полученными при помощи стандартной модели камеры-пинхола (полностью в фокусе). Для достижения эффекта глубины резкости эти методы размывают участки изображения, учитывая карту глубины (depth map). Вообще, методы пространства объектов способны выдать более физически точный результат и обладают меньшим числом артефактов, нежели методы пространства изображения, в то время как методы пространства изображения значительно быстрее.
Методы пространства объектов бывают основаны или на геометрической оптике, или на волновой оптике. В большинстве приложений используется геометрическая оптика, чего достаточно для достижения подавляющего большинства целей. Однако в расфокусированных изображениях не последнюю роль могут играть дифракция и интерференция; для их учёта и необходимо применять законы волновой оптики.

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

Методы пространства объектов (object space approaches)

Распределённая трассировка лучей (distributed ray tracing)

Метод напрямую симулирует геометрическую оптику. Вместо трассировки одного луча на семпл (в оригинале - пиксель, но я счёл это неуместным, т.к. количество просчитанных лучей будет изменяться в зависимости от настроек AA и редко когда равняется одному пикселю), что симулирует камеру-пинхол, надо выбрать несколько лучей, чтобы получить аналог изображения, полученного на камеру с конечной апертурой. Лучи для каждого семпла исходят из одной точки на картинной плоскости, но направлены в разные участки линзы. После преломления линзой луч испускается в сцену.

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

Метод реализован в шейдере mia_lens_bokeh: // параметры шейдера struct depth_of_field { miScalar focus_plane_distance; miScalar blur_radius; miInteger number_of_samples; }; miBoolean depth_of_field (miColor *result, miState *state, struct depth_of_field *params) { // получаем параметры miScalar focus_plane_distance = *mi_eval_scalar(¶ms->focus_plane_distance); miScalar blur_radius = *mi_eval_scalar(¶ms->blur_radius); miUint number_of_samples = *mi_eval_integer(¶ms->number_of_samples); miVector camera_origin, camera_direction, origin, direction, focus_point; double samples, focus_plane_z; int sample_number = 0; miColor sum = {0,0,0,0}, single_trace; // переводим в другую систему координат miaux_to_camera_space(state, &camera_origin, &camera_direction); // ищем точку пересечения focus_plane_z = state->org.z - focus_plane_distance; miaux_z_plane_intersect(&focus_point, &camera_origin, &camera_direction, focus_plane_z); // считаем заданное количество семплов while (mi_sample(samples, &sample_number, state, 2, &number_of_samples)) { miaux_sample_point_within_radius(&origin, &camera_origin, samples, samples, blur_radius); mi_vector_sub(&direction, &focus_point, &origin); mi_vector_normalize(&direction); miaux_from_camera_space(state, &origin, &direction); mi_trace_eye(&single_trace, state, &origin, &direction); miaux_add_color(&sum, &single_trace); } // нормализуем результат miaux_divide_color(result, &sum, number_of_samples); return miTRUE; }

мануала mental ray , картинка оттуда же).

Реалистичные модели камеры (realistic camera models)

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

Группы линз в объективе (картинка Pat Hanrahan).

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

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

Объективы с разным фокусным расстоянием: с изменением фокусного расстояния и модели линзы меняется перспектива и могут появляться искажения (например, как на верхней картинке) - картинка Pat Hanrahan.

Пример шейдера, реализующего объектив-фишай: struct fisheye { miColor outside_color; }; miBoolean fisheye (miColor *result, miState *state, struct fisheye *params) { miVector camera_direction; miScalar center_x = state->camera->x_resolution / 2.0; miScalar center_y = state->camera->y_resolution / 2.0; miScalar radius = center_x < center_y ? center_x: center_y; miScalar distance_from_center = miaux_distance(center_x, center_y, state->raster_x, state->raster_y); if (distance_from_center < radius) { mi_vector_to_camera(state, &camera_direction, &state->dir); camera_direction.z *= miaux_fit(distance_from_center, 0, radius, 1, 0); mi_vector_normalize(&camera_direction); mi_vector_from_camera(state, &camera_direction, &camera_direction); return mi_trace_eye(result, state, &state->org, &camera_direction); } else { *result = *mi_eval_color(¶ms->outside_color); return miTRUE; } }

Результат применения шейдера (код взят из мануала mental ray , картинка оттуда же).

Буфер накопления (accumulation buffer)

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

Симуляция распространения волн (wawe propagation)

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

Разброс (splatting)

При рендере сцена представляется не как набор геометрических примитивов с текстурами, а в виде набора точек. Точки разбрасываются по определённому закону, чаще всего по Гауссовскому. Для достижения большей скорости, при разбросе точек используется операция свёртки, учитывающая функцию размытия точки (point spread function, PSF). В случае размытия по Гауссу, параметром PSF является стандартное отклонение.

Полученные точки хранятся в дереве и при выборе точки из размытой области поиск производится в определённом радиусе. Это позволяет просчитывать меньшее количество семплов в расфокусированных областях изображения.

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

Изображение, полученное методом разброса. В размытых областях плотность семплирования меньше (картинка Jaroslav Krivanek).

Аналитическая видимость (analytical visibility)

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

Методы пространства изображения (image-space approaches)

Идеальный метод постобработки должен обладать следующими свойствами:

Линейная фильтрация (linear filtering)

Один из первых методов получения DoF на этапе постобработки. В зависимости от глубины точки (определяется по карте глубины) меняются параметры функции размытия (PSF). Чем больше радиус PSF, тем более низкая производительность фильтра. Фильтр можно выразить формулой:

где B - размытое изображение, psf - ядро фильтра, x и y - координаты в выходном изображении, S - исходное изображение, i и j - координаты во входном изображении.

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

Буфер распределения лучей (ray distribution buffer)

В методе предлагается учитывать видимость объектов, тем самым мы можем избавиться от нехватки интенсивности. Вместо создания размытого изображения, сначала для каждой точки создаётся буфер распределения лучей, исходящих из неё. В такой буфер входят возможные координаты, в какие может прийти свет от точки, с глубиной. После просчёта буферов распределения лучей для всех точек вычисляется среднее значение цвета. Метод работает с видимостью объектов достаточно корректно, но требует больше памяти и вычислений, в сравнении с линейной фильтрацией. Заметим, что набор карт, полученных методом RDB, называется световым полем (light field).

Послойная глубина резкости (layered DoF)

Метод предназначен для частного случая расположения объектов: объекты должны быть параллельны картинной плоскости. Объекты делятся на слои, слои размывается по отдельности в частотном домене (используя быстрое преобразование Фурье). FFT позволяет использовать PSF больших радиусов без влияния на производительность. Метод не имеет недостатка нехватки интенсивности и работает очень быстро, но область его применения сильно ограничена.

Пересечение и дискретизация (occlusion and discretization)

Ограничение, накладываемое предыдущим методом, очень строгое. Изображение делится на слои, таким образом глубина семплов изображения округляется до выбранной глубины ближайшего слоя. Полученное изображение будет иметь артефакты дискретизации в форме полос или жёстких границ по линиям пересечения слоёв. В данном методе проблема таких артефактов решается при помощи использования ID объектов, полученных методом нахождения границ (или по карте ObjectId). Если один объект принадлежит двум слоям, слои объединяются. Ещё одна проблема метода - частичное пересечение. Для размытия объектов на заднем плане используется аппроксимация по видимым семплам.

На верхнем изображении видны чёрные полосы - артефакты, происходящие от применения послойного размытия без использования ObjectId (картинка Barsky).

Размытие, учитывающее особенности глаза человека (vision-realistic rendering)

Глаз человека сложно описать в виде аналитической модели, состоящей из нескольких линз - как это можно сделать для объектива. В данном методе при помощи специального прибора, называемого wavefront aberrometer (я не решился это перевести) определяется набор PSF, соответствующих глазу человека. Далее используется размытие по слоям в соответствии с полученными PSF. Метод позволяет получать изображения, видимые людьми с заболеваниями зрения.

Изображение, учитывающее особенности глаза человека, больного кератоконусом (картинка Barsky).

Упорядочение по важности (importance ordering)

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

Гибридный перцептивный метод (perceptual hybrid method)

Особенности восприятия изображения человеком таковы, что детали в центре более важны, чем детали по краям изображения. Центр изображения можно размыть более медленным и точным способом, в то время как для периферии используется быстрая аппроксимация размытия. Для быстрого размытия используется пирамида Гаусса, уровень размытия выбирается в зависимости от глубины пикселя; результат обладает артефактами.

Повторяемая свёртка (repeated convolution)

Метод предназначен для быстрого применения в интерактивных приложениях. Работает на аппаратных устройствах, где можно эффективно реализовать операцию свёртки с ядром размера 3x3 пикселя. Свёртка выполняется несколько раз, тем самым достигается большая величина размытия. Производительность падает с ростом радиуса размытия. На PSF накладывается ограничение: она должна быть Гауссовской.

Глубина резкости на GPU

Глубину резкости можно считать и на GPU. Один из методов преложили Scheueremann и Tatarchuk.
Учитывая глубину пикселя, по законам оптики определяем величину пятна рассеяния, и в пределах пятна выбираем семплы, которые и формируют цвет пикселя в результате. В целях оптимизации памяти, в участках изображения, где CoC имеет большой радиус, берутся пиксели не входного изображения, а уменьшенного в несколько раз. Для уменьшения количества артефактов нехватки интенсивности, в расчёт берётся ещё и глубина пикселей. Метод обладает артефактам ненепрервыности глубины.

Интегральная матрица (summed area table)

В качестве альтернативы семплирования в пределах CoC, усреднённый цвет области пикселей изображения можно найти, используя интегральную матрицу (SAT). В данном случае скорость вычислений высока и не падает с увеличением радиуса размытия, к тому же нет необходимости в генерации изображения меньшего разрешения. Изначально метод предназначался для сглаживания текстур, но в дальнейшем был адаптирован и для глубины резкости, в том числе и на GPU. Метод обладает практически всеми видами артефактов.

Метод пирамид (pyramidal method)

Сцена разделяется на слои, в зависимости от глубины. Пиксели, находящиеся близко к границе слоёв, относятся не к ближайшему слою, а частично к нескольким слоям: таким образом исключаются артефакты дискретизации на границах слоёв. Затем экстраполируются значения пикселей, отсутствующих в слоях (тех, которые закрыты объектами на переднем плане). После этого каждый слой размывается методом пирамид , для исключения артефактов используется вес точки. Полученные слои смешиваются с учётом прозрачности слоёв. Метод быстрее послойных методов, использующих FFT, но накладывает ограничения на используемую PSF.

Изображение было размыто с использованием метода пирамид (картинка Magnus Strengert).

Сепарабельное размытие (separable blur)

Точно так же, как и в методах классического размытия, не учитывающего глубину (box blur, gaussian blur), в расчёте глубины резкости можно применять сепарабельные PSF. Сначала изображение размывается по горизонтали, затем по вертикали - в результате мы получаем скорость, зависимую не от площади пятна не резкости, а от его диаметра. Метод поддаётся реализации на GPU и может быть применён в реальном времени. Идея применения сепарабельных функций проиллюстрирована на рисунке:


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

Симуляция рассеяния тепла (simulated heat diffusion)

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

Карта position map, используемая вместо карты глубины в этом методе, содержит информацию о трёх измерениях точки, а не только о глубине (картинка Barsky).

Обобщённая и семантическая глубина резкости

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

Физически неправильное размытие (картинка Kosloff и Barsky)

Световые поля (light fields)

Световые поля изначально были описаны как метод, описывающий изображение сцены с разных точек, не зависящий от сложности сцены. Стандартный способ кодирования световых полей - двухплоскостная параметризация (two-plane parametrization). Выбираются две параллельные плоскости; каждый луч описывается точкой на обеих плоскостях. В результате получается четырёхмерная структура данных. С полученными данными можно производить манипуляции, такие как изменение плоскости фокусировки или глубины резкости.

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

Кроме того, мы можем сфокусироваться на разных участках изображения, применяя быстрое преобразование Фурье в четырёхмерном пространстве.

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

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


Световое поле: маленькая часть RAW-изображения с сенсора Lytro. Мы видим микролизны, расположенные перед матрицей.

Пятнистия (dappled) фотография

Способ, описанный выше, требует много точек матрицы для кодирования одного пикселя, следовательно, обладает низким разрешением. Действительно, разрешение этой камеры где-то 800 пикселей по большей стороне при матрице 11MPix. Проблема может быть решена использованием сенсоров с очень высоким разрешением (но это приведёт к удорожанию сенсоров и запредельно большому размеру структуры данных).

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

Увеличение расфокусировки (defocus magnification)

Хорошо было бы уметь применять эффект глубины резкости и в «обычной» фотографии, без светового поля (где, в отличие от рендера, нет карты глубины). Данный метод предполагает определение размытия и его увеличение (в методе предполагается, что размытие в фотографии уже есть, но недостаточное - например, фотография сделана на мыльницу, где из-за размера матрицы невозможно достичь большого радиуса размытия). Чем больше размытие, уже присутствующее в изображении, тем ещё большее размытие будет применено дополнительно.

Автофокус

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

Заключение

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

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

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


трилинейная

анизотропная

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

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

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

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

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

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

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

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.

AA off AA on

Учитывая, что за последние несколько лет быстродействие видеокарт заметно увеличилось, как 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 г., причем в первую очередь они появились на консолях. На ПК по-настоящему популярной данная техника стала лишь через пару лет. С помощью 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 кадров/с.



Эти настройки производительности имеют совсем небольшое визуальное воздействие.

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

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

Тени

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

Размытие в движении

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

Глубина резкости

Глубина резкости в играх, как правило, относится к эффекту размытия вещей на заднем плане. Точно так же как и размытие в движении, этот параметр отвлекает наши глаза и создает качество, как у фильмах – это не всегда отлично смотрится. К тому же эта настройка может повлиять на производительность, особенно, если она неправильно использована. Её нужно настраивать, отталкиваясь от личных предпочтений и от того, в какую игру вы играете.

Динамическое отражение

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

Избыточная выборка сглаживания (суперсемплинг, SSAA)

С включённым суперсемплингом, игра делает кадры с более высоким разрешением, нежели разрешение самого экрана, а затем сжимает их обратно до размера дисплея. Это может улучшить вид игр, но если ваш ПК не является особым монстром (как наш любимый Large Pixel Collider), SSAA разрушит вашу производительность. В большинстве случаев, она не стоит того, чтобы её применяли, особенно, когда существует столько альтернатив суперсемплингу.

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

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

Motion blur

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

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

Eyeball grime

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

Этот кинематографический приём нужен для имитации слабости киноаппаратуры, но когда вы играете в FPS, вы представляете себя на месте героя-человека, а не на месте камеры с оружием в штативе. Eyeball grime не собирает тонкий слой пыли как настоящая камера, и не создаёт ярких бликов от источника света. Eyeball grime не даёт вам ничего, а только лишает возможности видеть что-либо, нарушая целостность игрового мира.

Chromatic aberration

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

Film grain

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

Представьте себе, что в аудио файлы всей игры добавили шипение – это сравнимо с эффектом Film grain, другими словами визуальный шум. Даже там где это тематически оправдано, как например в Left 4 Dead , в котором это применяется для отсылки к трешовым фильмам про зомби, если взять и выключить это, станет только лучше и легче глазам. К счастью во многих играх есть возможность отключить это полностью.

Depth of field

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

Lens flare

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

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

Динамические отражения и рассказ о тормозах в Overwatch

Данная история основана на личном опыте. Мы отпустим из внимания то, что занятой «бизнес-дядька» все же решил установить эту убивалку времени от Blizzard, но факт остается фактом. Конечно, мой слабенький компьютер вряд ли бы запустил игру на высоких настройках, даже на средних выдавал жалкие 26 FPS. Мне потребовалось долгое время в графическом меню, прежде чем легким щелчком мыши были отключены «Динамические отражения». Вы удивитесь, но мой FPS сразу прыгнул на ~30%, и я смог сыграть с бо льшим комфортом, чем раньше.

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

SSAA – Supersampling


Данная настройка позволяет рендерить кадры с высоким разрешением на вашем мониторе с более низким. Не будем вдаваться в технологии, но как показал мой личный опыт - включение SSAA не шибко влияет на общие впечатления об игре. Да, конечно, картинка кажется чуть более естественной, чем просто с AA, но данная опция сжирает огромное количество ресурсов. К слову, огромное количество консольных игр экономят ресурсы системы именно на этом показателе. Спросите у консольщиков:) Сильно ли они расстроены?

Отключить Motion Blur - лучше, чем любое благословение

Я, если честно, даже под дулом пистолета не понимаю тех людей, которым нравится Motion Blur. Он раздражает, размазывает картинку, делает её менее реалистичной! И при этом, сволочь, жрет ресурсы!!!


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

Блуждают тени возле дома - разных сказочных зверей


За всю свою жизнь я нашел только одного человека, который подошел ко мне и реально (!) заметил, что на моём рабочем PC тени выглядят немного пиксельно. Так вышло, что данная привычка выработалась у меня с детства. Тогда я впервые столкнулся с игрой на маломощном компьютере, и мои исследования выявили, что отключения теней - стабильно добавляли до 10 FPS. Всякие - «глубокие тени», «очень глубокие» и прочее - мало влияет на общее ощущение от графики, но сильнее всего грузит систему. Человеческий мозг устроен так, что не особо замечает такие маловажные вещи - в первую очередь делая акцент на феерии спецэффектов и персонаже в центре экрана.

Глубина резкости


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

Поверьте, всё, что выше - вы спокойно можете отключить и вряд ли потеряете многое. И я, как человек, сам страдающий от бед со слабым рабочим PC, с удовольствием приму другие советы в комментариях!!