какое сглаживание лучше fxaa или taa

Сглаживание в играх

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

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

Как всегда две версии: видео и текстовая.

Зачем оно нужно?

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

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

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

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

какое сглаживание лучше fxaa или taa

Сглаживание в играх

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

Это важно понимать ведь в зависимости от алгоритма, сглаживание может применяться как к готовому 2D кадру, так и на этапе создания 3D сцены что по итогу влияет на качество изображение, а также на нагрузку системы.

SSAA (SuperSample Anti-Aliasing)

Самое простое, самое качественное и самое прожорливое, всё это про сглаживание SSAA, или как его ещё называют метод избыточной выборки.

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

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

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

MSAA (MultiSample Anti-Aliasing)

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

Больше не отрисовываются объекты, которые не видит игрок. Так же было решено изменить то, к чему применять сглаживание. Ведь SSAA применял сглаживание ко всему в кадре, в то время как MSAA применяет его только к границам объектов. Что по итогу сделало сглаживание чуть хуже, но за то довольно ощутимо снизило нагрузку на видеокарту.

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

какое сглаживание лучше fxaa или taa

Следующие алгоритмы, про которые пойдёт речь, применяются к готовому 2D кадру, что в разы снижает требование к системе, но также и качество сглаживание. Данные методы убирают лесенки, но дают «любимое» многими мыло.

FXAA (Fast approXimate Anti-Aliasing)

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

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

какое сглаживание лучше fxaa или taa

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

какое сглаживание лучше fxaa или taa

SMAA (Subpixel Morphological Anti-Aliasing)

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

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

какое сглаживание лучше fxaa или taa

Нагрузка на систему при использовании данного алгоритма чуть выше, чем у FXAA, но и качество лучше. Мыло хоть и не исчезло окончательно, но его явно стало меньше.

TXAA\TAA (Temporal Anti-Aliasing)

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

По заверениям людей из Nvidia, качество TXAA x2 будет сопоставимо MSAA x8, но при этом потреблять ресурсов он будет как MSAA x2. И в целом — это так, но с двумя оговорками. Первая иногда можно заметить шлейфы у объектов, это как раз те самые участки предыдущих кадров, которые ещё не успели выгрузиться из памяти видеокарты. И вторая, изображение с данным алгоритмом мылится, особенно те объекты, которые находятся близко к игроку.

Данные проблемы должен решить новый алгоритм сглаживания, которым сейчас занимается Nvidia. ATAA адаптивное временное сглаживание. Это будет похоже по принципу на TXAA, но при создании маски, по которой будет применяться сглаживание будет так же использоваться технология трассировки лучей. Вот только что-то мне подсказывает что уже вряд ли мы получим ATAA, ведь всё это перекачивало в DLSS.

какое сглаживание лучше fxaa или taa

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

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

Объясню вкратце – у нас есть два 27` монитора, один из них обладает разрешением экрана 1920х1080 а второй 3840×2160, и думаю тут и так понятно, что плотность пикселей у 4К монитора в разы выше, чем у FullHD. За счёт чего и произойдёт сглаживание сцены. Вот только для это потребуется и надлежащая мощность вашего железа и конечно же 4К монитор.

Заключение

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

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

А на этом у меня всё, если я где-то допустил ошибк_(и, у), то буду рад тому, что бы меня исправили. Всем большое за прочтение и до встречи в следующих блогах!

Источник

Типы сглаживания и их принудительное включение в играх

какое сглаживание лучше fxaa или taa

какое сглаживание лучше fxaa или taa

Содержание

Содержание

Любой хотя бы раз видел в игре настройку «Сглаживание», оно же Antialiasing. Это функция, позволяющая устранить эффект лесенки на краях объектов и сделать изображение менее пилообразным. Производители видеокарт создали немало различных методик, общее количество которых исчисляется десятками. Многие из них устарели и забыты, а некоторые используются до сих пор.

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

Типы сглаживания

В качестве образца будет использоваться игра Track Mania вкупе с Full HD разрешением монитора. Видеокарта GTX 1070. Первый скриншот «чистый», без сглаживания. Просматривать рекомендуется в полном размере.

какое сглаживание лучше fxaa или taa

FXAA (Fast approXimate Anti-Aliasing)

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

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

какое сглаживание лучше fxaa или taa

SMAA (Subpixel Morphological Anti-Aliasing)

Продвинутое пост-сглаживание, основанное на FXAA и MLAA. Дает ощутимо лучший результат, но потребляет чуть больше ресурсов видеокарты. Имеет четыре степени качества.

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

какое сглаживание лучше fxaa или taa

MSAA (Multi-Sample Anti-Aliasing)

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

Когда в играх вы выбираете степень сглаживания x2, х4 или x8 подразумевается именно MSAA.

какое сглаживание лучше fxaa или taa

SSAA (Super-Sample Anti-Aliasing)

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

При выборе настройки SSAA x 4 объект увеличивается в четыре раза с каждой стороны (вертикаль и горизонталь), что дает внутреннее разрешение 7680×4320 от изначального 1920×1080.

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

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

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

Иногда в настройках попадается SSAA x 0.5. При его использовании игровое разрешение уменьшается вчетверо (до 960×540), что ухудшает качество картинки, но дает прирост производительности.

какое сглаживание лучше fxaa или taa

DSR (Dynamic Super Resolution)

Технология от NVIDIA, позволяющая использовать разрешения, превышающие возможности вашего монитора. Максимальное значение x 4, что соответствует формату 2160p. По качеству немного превосходит SSAA x2.

И если SSAA работает с внутренним разрешением игры, то DSR запускает игру в настоящем 4К, которое затем даунскелится до родного разрешения монитора. Это дает возможность снимать видео и делать скриншоты в 3840×2160 на мониторе с меньшим разрешением.

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

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

У AMD есть свой аналог, названный VSR (Virtual Super Resolution).

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

какое сглаживание лучше fxaa или taa

Комбинации и ответвления

Производители частенько любят хитрить со сглаживанием, комбинируя методы. В качестве примера TXAA: на самом деле это всего лишь одновременная работа MSAA и FXAA низкого качества. Адаптивным сглаживанием называют SSAA + MSAA. Многокадровое сглаживание MFAA это просто надстройка для MSAA, призванная улучшить качество (через панель управление не заработала ни в одной игре).

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

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

Кстати, DSR и SSAA можно использовать одновременно. Track Mania в этом случае запускается в разрешении 16К (15360×8640), при 26 кадрах в секунду.

В итоге игра 2006 года почти «поставила на колени» GTX 1070. Ну а про игры типа Metro Redux и говорить нечего, всего 1-3 фпс.

Использование

FXAA

Для активации нам понадобится программа FXAA Tool.

В главном окне программы убираем галочку Pre Sharpen. Далее нажимаем кнопку «Add», программа попросит нас ввести имя профиля (можете написать любое), а затем необходимо указать путь к папке с игрой.

какое сглаживание лучше fxaa или taa

Переходим во вкладку «AntiAliasing». Двигая ползунок влево и вправо, мы изменяем баланс между производительностью и качеством. После того, как необходимый уровень выбран, нажимаем кнопку «Save». Теперь при каждом запуске игры сглаживание будет включаться автоматически. Чтобы его убрать достаточно в главном меню нажать кнопку «Remove».

какое сглаживание лучше fxaa или taa

SMAA

Для его использования необходимо скачать программу SweetFX.

Первым делом нажимаем кнопку Add new game и указываем путь на файл запуска игры (.exe).

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

Нажимаем кнопку Add SweetFX.

какое сглаживание лучше fxaa или taa

Заходим в настройки SweetFX Injector settingsи выбираем желаемый уровень качества.

какое сглаживание лучше fxaa или taa

Лучше всего поставить SMAA_PRESET_HIGH. Нажимаем Save settings, а затем в главном окне Save new config.

какое сглаживание лучше fxaa или taa

Как и в случае с FXAA Tool при каждом запуске игры сглаживание будет включаться автоматически. Чтобы его убрать необходимо в главном меню нажать кнопку “Remove SweetFX”.

MSAA \ SSAA \ VSR (Radeon)

Новая панель управления от AMD максимально упрощена. Чтобы активировать VSR, нужно лишь нажать соответствующую кнопку в разделе «Дисплей». После этого в играх появятся новые доступные разрешения.

какое сглаживание лучше fxaa или taa

Активация MSAA и SSAA также не доставит никаких проблем. Переходим во вкладку «Игры» и изменяем несколько настроек.

Избыточная выборка — это SSAA, а множественная выборка — это MSAA.

какое сглаживание лучше fxaa или taa

MSAA \ SSAA \ DSR (GeForce)

Для включения DSR необходимо перейти в раздел «Управление параметрами 3D» и выбрать строчку «DSR-Степень».

какое сглаживание лучше fxaa или taa

Появится небольшое окно, в котором вы сможете выбрать, во сколько раз большие от оригинального разрешения вам нужны. К примеру, x1.78 соответствует разрешению 2560×1440, а x4 соответствует 3840×2160. После этого выбранные разрешения станут доступны в параметрах рабочего стола, а также в самих играх.

какое сглаживание лучше fxaa или taa

Также необходимо выставить параметр «DSR-плавность» на значение 0 %. В противном случае изображение будет слегка размыто.

какое сглаживание лучше fxaa или taa

Для включения MSAA, в этом же разделе (Управление параметрами 3D) нужно изменить два параметра.

какое сглаживание лучше fxaa или taa

Затем нажимаем кнопку «Применить».

Для настроек 3D имеется две вкладки: глобальные параметры и программные настройки. Если вы меняет параметры в первой вкладке, то они применяются ко всем приложениям, а если вы меняете значения во второй вкладке, то настройки применяются только к выбранной вами игре.

Для SSAA сглаживания настройки в панели управления не предусмотрено (исключение — старые видеокарты).

Включить его получиться только с помощью сторонней утилиты NVIDIA Profile Inspector.

Для сброса настроек вы можете нажать на значок NVIDIA.

какое сглаживание лучше fxaa или taa

Сравнение

Для сравнения качества было решено выделить фрагмент картинки, затрагивающие провода, текстовую надпись Track Mania и дорожные перила.

какое сглаживание лучше fxaa или taa

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

какое сглаживание лучше fxaa или taa

А теперь сравним влияние сглаживания на FPS в игре.

какое сглаживание лучше fxaa или taa

Исходные материалы

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

Track Mania Nations — игра, использованная для демонстрации типов сглаживания доступна для бесплатного скачивания на странице в Steam.

Вывод

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

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

Источник

Как работает рендеринг 3D-игр: сглаживание с помощью SSAA, MSAA, FXAA, TAA и других методик

какое сглаживание лучше fxaa или taa

3D-игры состоят из тысяч, если не миллионов разноцветных прямых линий и других рёбер. А из-за того, как происходит их обработка для вывода на экран, эти линии иногда могут выглядеть изломанными и искажёнными. В пятой части нашего исследования рендеринга в 3D-играх мы расскажем, какие методики используются для сглаживания рёбер миров, в которые мы играем. Хорошие новости — на этот раз математики будет не так много!

Часть 1: обработка вершин

Кто виноват

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

Так как пикселизированная версия линии больше не является истинной линией, её перемещение или размещение рядом с другими фигурами создаёт множество визуальных артефактов, которые мы и называем «искажениями» (aliasing).

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

какое сглаживание лучше fxaa или taa

Разрешения 10 x 7 пикселей не совсем хватает для отображения этого треугольника без искажений

Некоторые сигналы меняются не в пространстве, а во времени, и здесь мы тоже получаем искажения при сэмплировании с заданными интервалами. Например, для преобразования аналоговой аудиодорожки в цифровую требуется измерять уровень звука через определённые доли секунды (допустим, в случае CD audio это каждые 0,02 миллисекунды).

Различия между сигналом, созданным из сэмпла, и оригинальным сигналом создают временные искажения, с которыми обычно справляются благодаря повышению частоты сэмплирования. Но что если сигнал на самом деле является последовательностью движений? Когда мы следим за реальным миром, окружающие нас предметы движутся без дискретности, поэтому когда это движение преобразуется в поток «снимков», получаются искажения.

В мире кинематографа это приводит к странно выглядящим движениям, например, колёса автомобиля как будто вращаются в обратном направлении. Это проявляется и в 3D-графике, когда частота кадров рендеринга сцены недостаточна для полной передачи движения объектов и персонажей, из-за чего края выглядят размытыми или зазубренными; последний дефект усугубляется пространственным искажением.

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

Зачем? Потому, что если бы и то, и другое было чрезвычайно велико, то искажение не представляло бы проблемы. Если взять старый бенчмарк, например 3DMark03, и запустить его на современной системе, то мы сможем сфокусироваться исключительно на пространственных искажениях.

какое сглаживание лучше fxaa или taa

Показанное выше изображение, взятое из первого теста Wings of Fury, сделано с разрешением 1280 x 720 пикселей. Четырнадцать лет назад, когда лучшими графическими картами были ATI Radeon 9800 XT и Nvidia GeForce FX 5900 Ultra, самые большие мониторы имели разрешение примерно 1600 x 1200, поэтому разрешение теста можно считать примерно низким или средним разрешением (сродни современному 1080p).

какое сглаживание лучше fxaa или taa

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

В этом следует винить относительно низкую степень сэмплирования, поэтому логичнее всего будет её увеличить; давайте теперь рассмотрим ту же сцену в 4K (3840 x 2160 пикселей).

какое сглаживание лучше fxaa или taa

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

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

В случае такой старой программы, как 3DMark03, на современном PC переход от 1280 x 768 к 3840 x 2160 снизил среднюю частоту кадров с 1670 до 1274 FPS, то есть увеличение количества пикселей на 740% снизило производительность всего на 24%. Однако в более новых программах ситуация будет иной.

Это легко продемонстрировать, запустив современный 3DMark при различных разрешениях; на графике ниже показана средняя частота кадров первого теста графики в бенчмарке Time Spy.

какое сглаживание лучше fxaa или taa

Переход с 720p на 4K — это повышение разрешения на 800%, но частота кадров упала на 81%. Хотя игры могут и не демонстрировать этот паттерн в точности, но современные AAA-игры не очень от него отличаются. Это говорит нам, что если мы хотим максимально снизить влияние искажений, нам нужен способ получше, чем повышение разрешения растра — чем ниже частота кадров, тем хуже становятся временные искажения.

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

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

Supersampling anti-aliasing (SSAA)

Этот способ, часто называемый также full scene anti-aliasing — самый старый и простой из всех. Он заключается в рендеринге сцены с повышенным разрешением, с последующим сэмплированием и смешением результата в меньшее количество пикселей. Например, монитор может иметь максимальное разрешение 1920 x 1080, но игра рендерится с разрешением 3840 x 2160, а затем картинка масштабируется и передаётся на экран.

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

Разумеется, мощности современных GPU позволяют использовать более сложные алгоритмы сэмплирования и смешения. Но давайте вкратце рассмотрим, как это работает. На изображении ниже показано действие классического 4x SSAA. «4x» означает, что вычислением арифметического среднего смешивается вместе 4 сэмпла (также называемых taps) для получения окончательного цвета. Для этого растровое разрешение увеличивается по каждой из осей в два раза.

какое сглаживание лучше fxaa или taa

Заметили, что сэмплы в этом примере расположены точно в центрах пикселей? Так как сами пиксели имеют дискретную площадь, позиции сэмплов можно установить в любой точке этой области. Много лет назад AMD и Nvidia экспериментировали со всевозможными паттернами сэмплирования для обеспечения наилучшего сглаживания.

Описанный выше паттерн и способ смешения называется box filter, однако существует его популярное улучшение с использованием повёрнутой сетки позиций сэмплов (RGSS). Проблема SSAA заключается в том, что все эти дополнительные пиксели необходимо обрабатывать, и как мы видели из тестов 3DMark, повышение разрешения растра запросто может сильно снизить частоту кадров.

По большей части суперсэмплирование можно заменить более эффективными алгоритмами, однако оно обрело новую жизнь в качестве параметра драйверов графических карт AMD и Nvidia. AMD называет свою технологию Virtual Super Resolution (VSR), а Nvidia — Dynamic Super Resolution (DSR).

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

Multisample anti-aliasing (MSAA)

Этот способ возник как результат работы исследовательских лабораторий Silicon Graphics в начале 90-х. По сути, это SSAA, но применённая только там, где это на самом деле нужно. Ну, на самом деле, внутри технологии есть не только это, но такое объяснение поможет вам понять, как работает алгоритм.

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

Но как это сделать? Оказывается, что необходимая для этого информация уже есть. Когда 3D-мир вершины преобразуется в 2D-плоскость растра, пиксели, создающие форму всевозможных разных примитивов в сцене, содержат не только информацию о цвете и текстурах, но и глубину.

какое сглаживание лучше fxaa или taa

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

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

какое сглаживание лучше fxaa или taa

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

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

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

Поэтому для multisample anti-aliasing требуется много видеопамяти и широкий канал передачи данных (плюс возможность быстрого считывания/записи в z-буферы), зато эта методика не требует большой вычислительной нагрузки на шейдеры. Давайте воспользуемся старым примером кода AMD, чтобы посмотреть, как она выглядит и чем отличается от SSAA.

какое сглаживание лучше fxaa или taa

Код запускает сцену с простыми текстурами и освещением, но со множеством геометрии, поэтому искажения на её рёбрах бросаются в глаза намного сильнее. В верхнем левом углу есть любопытная информация — для рендеринга каждого кадра в среднем требуется 0,18 миллисекунд, а для смешивания в окончательный результат — всего 0,02 мс. Буфер цвета (тот, который мы видим) занимает 7,4 МБ, как и буфер глубин.

Также можно приблизить отдельные области картинки, чтобы увидеть всю ужасность искажений. Не забывайте, что мы могли бы отрендерить всё это в более высоком разрешении, но это просто увеличит время рендеринга. Но если мы применим к сцене 4x SSAA, то именно это и произойдёт.

какое сглаживание лучше fxaa или taa

Обратите внимание, что в представленном выше изображении время рендеринга увеличилось до 0,4 мс (рост на 122%), а время смешивания (под названием «Resolve») удвоилось. Кроме того, размер буферов цвета и глубин увеличился в четыре раза. Такова цена использования SSAA, и хотя любой современный GPU с лёгкостью справится с этой сценой, в новых 3D-играх ситуация окажется ужасной.

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

какое сглаживание лучше fxaa или taa

Показатели времени рендеринга сцены почти вернулись к тем, когда не применялось сглаживание, что хорошо, однако ещё больше стало время смешивания. Общий занятый объём памяти тоже находится примерно посередине между отсутствием AA и 4xSSAA, поэтому, похоже, что MSAA определённо стоит использовать.

Даже искажения на рёбрах примитивов кажутся меньшими, однако это больше связано с использованным паттерном сэмплирования, а не с самим принципом работы MSAA. На самом деле, если посмотреть на текстуру стены в увеличенной области, становится очевидным один недостаток multisample AA.

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

Что же делать, если методики supersampling и multisampling anti-aliasing неидеальны?

Fast approximate anti-aliasing (FXAA)

В 2009 году Nvidia представила другой способ улучшения изломанных краёв фигур в 3D-сцене. SSAA пользуется исключительно «грубой силой», MSAA — аппаратными функциями и трюками в коде. FXAA спроектирована так, чтобы выполняться исключительно через шейдеры. После появления этой методики её несколько раз совершенствовали и сегодня она активно применяется в играх.

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

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

какое сглаживание лучше fxaa или taa

Последовательность выполнения FXAA: нахождение пикселей на рёбрах, определение ориентации, их сдвиг, размытие готового изображения.

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

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

FXAA имеет серьёзные преимущества по сравнению с SSAA и MSAA. Во-первых, это настолько простой фрагмент кода, что его способен выполнить практически любой GPU; даже дешёвые модели способны выполнить эту процедуру всего за несколько миллисекунд.

Во-вторых, она сглаживает все рёбра, а не только периметры фигур. Например, текстуры с прозрачностью (часто используемые для дыма, мусора и листвы) будут сглажены, на что MSAA не способна.

какое сглаживание лучше fxaa или taa

Без AA (слева) и FXAA (справа) — обратите внимание, что деревья и элероны крыла выглядят намного плавнее

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

Точность этого способа не так высока, как у SSAA или MSAA, потому что он не может передавать субпиксельные детали — по сути, это просто хитрый фильтр, который может создавать довольно бесформенно выглядящие текстуры. Но благодаря своей малозатратности и создаю достаточно эффективных результатов, FXAA по-прежнему используется спустя 12 лет, хотя и в переработанном виде.

Существуют и другие полноэкранные алгоритмы поиска рёбер. Источником вдохновения для разработчиков FXAA стало созданная Intel Morphological anti-aliasing (MLAA); эта методика была усовершенствована разработчиком игр Crytek и испанским Университетом Сарагосы, которые дали ей название Enhanced Sub-pixel MLAA (сокращённо SMAA).

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

Temporal anti-aliasing (TAA)

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

Мы начинаем с рендеринга кадра и его отображения; однако также мы сохраняем значения пикселей в блок памяти, называемый буфером истории (history buffer). Затем рендерер переходит к следующему кадру последовательности и обрабатывает его, но перед его отображением сэмплирует буфер истории, а результаты сэмплирования смешиваются с текущим кадром. Затем в буфер истории сохраняется этот результат, скопированный для создания окончательного изображения, а готовый буфер помечается как готовый для отображения на мониторе.

какое сглаживание лучше fxaa или taa

Общая схема временного сглаживания.

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

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

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

какое сглаживание лучше fxaa или taa

Самый популярный алгоритм TAA.

Временное сглаживание (Temporal AA) может создавать избыточное размытие, а также проблему под названием ghosting, при которой края движущихся объектов выглядят размазанными, а не смягчёнными.

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

Кроме использования значений скоростей, большинство реализаций алгоритма TAA выполняют ещё один процесс проверки сэмплов истории; это не позволяет использовать значения из предыдущих кадров, не относящиеся к текущему кадру (например, они могут оказаться скрытыми за сдвинувшимся объектом). В этой методике обычно используется ограничивающий параллелепипед, выровненный по координатным осям (axis-aligned bounding box, AABB), в котором по осям отложена хроматичность буфера истории; она отсекает все пиксели, имеющие цвет за пределами этих границ.

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

какое сглаживание лучше fxaa или taa

Без AA (слева) и TAA (справа) — обратите внимание на размытие деталей на крыле

Для разработчиков кодировать всё это значительно сложнее, чем добавить в игру SSAA или MSAA. Но современные GPU способны быстро вычислять все необходимые шейдеры; в то время как алгоритмы supersampling и multisampling для каждого кадра требуют множества сэмплов, TAA, по сути, распределяет эти сэмплы на несколько кадров. Это означает, что в играх, не сильно ограниченных объёмом вычисляемых шейдеров, TAA можно реализовать ценой относительно малого снижения производительности.

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

И это ещё не всё!

Четыре описанные выше методики, особенно FXAA и TAA, активно используются в играх для PC и консолей. Но есть и множество других алгоритмов.

Например, когда Nvidia выпустила серию графических карт GeForce 9, то объявила и о создании модифицированной версии MSAA под названием Multi-Frame Sampled Anti-aliasing (MFAA). По сути, GPU изменяет паттерн сэмплирования с каждым последующим кадром, то есть на кадр приходится меньшее количество создаваемых и смешиваемых сэмплов.

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

Позже этот разработчик GPU вложил значительные ресурсы в разработку алгоритма сглаживания с использованием искусственного интеллекта под названием Deep Learning Super Sampling (DLSS), впервые появившегося в 2018 году вместе с выпуском чипов Turing.

В первой версии DLSS компания Nvidia должна была обучать нейросеть глубокого обучения (DNN) на конкретных играх сравнением кадров низкого разрешения с кадрами в высоком разрешении со включенным SSAA. Современная версия использует более обобщённую сеть и получает дополнительную информацию в виде векторов движения для определения того, как должен выглядеть кадр, как если бы он рендерился с более высоким разрешением.

какое сглаживание лучше fxaa или taa

Хотя основное преимущество DLSS заключается в повышении производительности (например, рендеринг выполняется при 1080p, но нейросеть повышает разрешение до 1440p), система, по сути, применяет AA, потому что её целевыми данными является изображение.

AMD сейчас работает над собственной версией такой системы и после её выпуска мы можем наконец увидеть, как алгоритмы AA с глубоким обучением постепенно заменяют традиционные, но пока этого не случилось. Такие системы реализовать не проще, чем, допустим, TAA, а визуальные результаты не всегда идеальны.

Исследования более совершенных техник сглаживания продолжаются, но мы и так уже проделали длинный путь со времён Riva TNT и Half-Life, когда нам приходилось мириться с зазубренными полигонами, потому что на их устранение не хватало производительности.

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

Источник

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

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