Что такое FSR — и как эта технология увеличивает разрешение в играх
Объясняем принцип работы самого доступного апскейлера.
Иллюстрация: Катя Павловская для Skillbox Media
В предыдущей статье, посвящённой тонкостям апскейлинга, мы рассказывали об устройстве DLSS — технологии, которая искусственно увеличивает разрешение в играх. К своей второй версии она оказалась настолько удачной, что быстро стала стандартом индустрии. Правда, с DLSS есть проблема: эта технология доступна только владельцам видеокарт NVIDIA, что существенно ограничивает потенциальное количество пользователей.
Впрочем, компания AMD вовремя заметила спрос на апскейлинг и предложила свой аналог технологии, под названием FSR. Ей не требуются ни специальные вычислительные ядра, ни нейросети, в отличие от DLSS. Звучит слишком хорошо, чтобы быть правдой. Разбираемся, как устроен алгоритм FSR и приходится ли в её случае платить за универсальность качеством.
Содержание
Связь апскейлинга и сглаживания
Любой разговор о современных алгоритмах апскейлинга начинается со сглаживания. Мы подробно описывали взаимосвязь этих аспектов в тексте про DLSS. Для лучшего понимания рекомендуем прочитать и его. Здесь же вкратце напомним основной принцип.
Сглаживание в играх избавляет изображение от эффекта алиасинга, или «лесенок», — неприятных угловатых участков пикселей по краям объектов. Если смешать контрастные участки картинки пикселями промежуточного цвета, этого эффекта получится избежать.
При кажущейся простоте качественно сгладить изображение непросто. Если действовать в лоб и разом смешать все контрастные участки картинки, она станет мыльной. Зато такой способ почти не влияет на производительность, поэтому его до сих пор можно встретить в играх.
Чтобы качественнее обработать изображение, движку нужна новая информация о кадре. Добиться этого можно, если, например, отрендерить изображение в повышенном разрешении, а затем сжать до необходимого. В таком случае системе будет доступно больше информации, и она сгладит только нужные углы. Иными словами, так можно отличить «лесенки» от обычных контрастных участков, которые не нужно трогать. Очевидно, что такие методы неминуемо нагружают систему.
Долгое время разработчикам приходилось выбирать что-то из двух зол: либо быстро, но плохо, либо хорошо, но затратно. Ситуация изменилась в начале 2010-х годов, когда в индустрии появился TAA, метод темпорального (то есть временного) сглаживания.
Он использует предыдущие кадры игры для нахождения нужной информации. Делается это при помощи незаметного сдвига картинки на расстояние меньше пикселя. Человеческий глаз не замечает эту дрожь, но движку этого достаточно для того, чтобы оценить нюансы сцены и правильно определить «лесенки» для сглаживания. В результате системе удаётся эффективно сгладить изображение без необходимости выдумывать новые пиксели.
Впрочем, назвать TAA эталонным методом тоже нельзя. Опытные игроки отметят, что очень часто включение такого сглаживания мылит картинку и создаёт графические артефакты. Это возникает из-за того, что наложение двух соседних кадров не всегда проходит без последствий. Например, если объект движется очень быстро (как в гонках) или появляется из воздуха, то на изображении может появиться шлейф из предыдущего кадра.
Чтобы избежать этих проблем, разработчики используют эвристические алгоритмы — различные механизмы, которые не гарантируют результата, но, как правило, неплохо чистят картинку.
Что такое FSR 1.0
С технической точки зрения сглаживание и апскейлинг — очень похожие задачи. Системе нужно дополнить сцену новой информацией с максимальным качеством при минимально возможной затрате ресурсов.
Первый массовый апскейлер, DLSS от NVIDIA, сразу пошёл по пути темпорального сглаживания и начал искать новую информацию в предыдущих кадрах. Это оптимальное решение, ведь для апскейлинга алгоритму нужно дорисовать как минимум половину новых пикселей. Однако FSR оказался более консервативным методом. Первая версия алгоритма напоминает не TAA, а, скорее, постпроцессинговое сглаживание. То есть, грубо говоря, это фильтр, имитирующий качественную картинку.
FSR часто называют апскейлером, хотя первая версия технологии занималась интерполяцией — заполнением промежуточных неизвестных пикселей. Это гораздо менее амбициозная задача. Под увеличением разрешения, как правило, подразумевают увеличение качества: мелкие детали становятся чётче, а мелкий текст вдалеке от игрока можно прочесть. Интерполяция же таких результатов добиться не сможет. Если в исходном изображении текст был бесформенной массой пикселей, то даже умелый алгоритм без новой информации не сумеет превратить её в стройные буквы.
Билинейная интерполяция — самый распространённый пример интерполяции. Представим, что у нас есть кадр 2×2 пикселя. Его нужно масштабировать до сетки из девяти пикселей. В таком случае «оригинальные» пиксели окажутся по бокам, а промежуточные примут усреднённые значения. Такое масштабирование работает по умолчанию во многих фоторедакторах. Более того, если в игре просто выбрать пониженное разрешение без сглаживания, то оно автоматически апскейлится до разрешения монитора при помощи одного из таких простых алгоритмов.
Похожих алгоритмов существует множество. Как правило, они отличаются математическими формулами подсчёта неизвестных значений, но показывают похожие по качеству результаты. Радикально отличается от прочих разве что метод ближайшего соседа. Он буквально дублирует информацию от ближайшего известного пикселя. Изображение в результате получается очень угловатым и резким.
Но в чём смысл FSR 1.0, если он фундаментально делает то же самое, что и автоматическое заполнение пикселей при пониженном разрешении? Дело в том, что FSR использует более сложный алгоритм, а также динамически накладывает на кадр фильтры резкости, которые создают иллюзию чёткого изображения. Вместо примитивной интерполяции FSR использует фильтр Ланцоша. Это более сложная математическая функция, которая фокусируется на эллипсоидных формах. Это позволяет качественнее сглаживать округлые линии.
Затем FSR 1.0 использует фильтры для избавления от артефактов, свойственных методу Ланцоша, а также увеличивает резкость кадра. Итоговый результат получается неоднозначный. Игрок без труда различит изображение в нативном высоком разрешении от кадра, сгенерированного FSR. Поэтому технологию поначалу рассматривали не как полноценный апскейлер, а, скорее, как набор фильтров, которые лишь приглаживают картинку в низком разрешении.
Первая FSR сильно проигрывала решению от NVIDIA. К тому моменту конкурент уже выпустил DLSS 2.0, который в ряде случаев не уступал по качеству картинке в настоящем повышенном разрешении. Технология AMD была настолько менее впечатляющей, что в промоматериалах изображение сравнивали с устаревшими технологиями вроде билинейной интерполяции.
Помимо этого, FSR была не очень практичной. Для работы ей нужно было заранее сглаженное изображение, в то время как DLSS уже тогда одновременно и улучшала, и сглаживала кадр. Более того, если игрок использовал TAA, то свойственные методу артефакты лишь приумножались при применении FSR. То есть картинка в некоторых случаях становилась менее опрятной.
Что такое FSR 2.0
Очевидно, что такой способ апскейлинга — тупиковый вариант развития. На фоне слабых результатов первой версии FSR и успеха DLSS, технологии от конкурента, AMD пришлось срочно придумывать принципиально новое решение. Компания оказалась в затруднительном положении. Для получения качественных результатов без потери производительности необходимо использовать темпоральные методы наподобие DLSS.
Напомним: в основе темпорального апскейлинга лежит идея о том, что можно объединить несколько изображений низкого разрешения в одно качественное. Для этого каждое из них смещается относительно предыдущего на субпиксельное расстояние. В таком случае движок получит настоящую информацию о нюансах сцены и, в теории, выведет изображение, не уступающее настоящему кадру в высоком разрешении.
Но как показывает практика, если действовать в лоб и накладывать изображения друг на друга по принципу TAA, картинка обрастёт множеством артефактов, от которых очень сложно избавиться. Это наглядно демонстрирует тот факт, что в индустрии уже много лет существует алгоритм TAAU, апскейлер на основе обычной TAA. Его можно было без труда встроить в игру на Unreal Engine, но разработчики этим не занимались, ведь итоговая картинка получалась очень грязной.
NVIDIA решила эту задачу при помощи нейросети, которая очищает каждый кадр отдельно. Для этого используются тензорные ядра, которых попросту нет в видеокартах AMD. Чтобы решить эту проблему, FSR 2.0 использует векторы движения и глубины, которые технология получает от движка. Они позволяют системе лучше понять, как сильно меняется изображение между кадрами. Поэтому накладывать их друг на друга становится проще.
DLSS тоже использует эту информацию, но благодаря нейросети многие элементы в случае этой технологии автоматизированы. FSR же приходится выполнять много ручных вычислений. Например, оценивать важность новой информации в свежем смещённом кадре. Также алгоритму от AMD приходится досконально чистить изображение от артефактов. Определять потенциальный гостинг помогают карты тональности и глубины сцены.
Иными словами, FSR старается избавиться от проблем TAAU при помощи грубой силы. Все возникающие при наложении кадров проблемы AMD постепенно решает при помощи информации от движка и новых алгоритмов подсчёта. С каждой новой версией технологии это получается всё лучше. Впрочем, важно отметить, что такой ручной подход до сих пор не гарантирует идеального результата. Даже актуальные версии FSR 2 страдают от проблем с гостингом, мерцающими объектами, а также тонкой геометрией вроде проводов.
* * *
FSR — самый доступный и популярный апскейлер. Объективно он уступает актуальной версии DLSS, но с каждым годом разница между методами становится меньше. Сегодня решение от AMD делает картинку существенно качественнее, а доступность алгоритма положительно влияет на индустрию. Так, FSR доступен на современных консолях, что позволяет разработчикам инвестировать мощности устройств в новые технологии, не боясь потерять потенциальную аудиторию.