Самый подробный обзор AMD FSR (1-3): он лучше NVIDIA DLSS — и вот почему


Привет, постоянные и не очень читатели!
В первой части цикла я разобрал технологию DLSS во всех её версиях — с предпосылками и историей появления, байками и мемами про Хуанга и даже применением в бизнес-приложениях (чиво?). Материал вышел огромным, и, вероятно, самым подробным про DLSS в Рунете. Почитать можно здесь: «Судный день грядёт [часть 1]: глобальный разбор апскейлера DLSS — от игр к работе»
Теперь пора обозреть пролетарскую FSR (FidelityFX Super Resolution) — технологию улучшения изображения от AMD, которая, по моему мнению, превосходит DLSS от NVIDIA. Почему? Расскажу в конце статьи.
Ремарка!
Негеймеры — держать ряды! В мире 3D-графония есть нейроштуки, которые улучшают качество картинки и дают больше кадров в секунду (FPS). Геймеры выясняют между собой, у кого апскейлер длиннее (NVIDIA vs AMD и DLSS vs FSR соответственно), и попутно спорят, не сломали ли эти технологии их любимую индустрию.
Но прежде чем сравнивать FSR и DLSS, подробно разберём сабж. Интересно, что первая версия AMD FSR основана не на модных матричных ядрах (аналог тензорных у NVIDIA) и нейросетях, а на переделанном математическом фильтре Ланцоша (который придумал не Ланцош вовсе, но об этом позже) из XX века. Так что FSR 1.0 — обычный пространственный апскейлер, а не нейронный.
В общем, освобождайте 5-10 минут, присаживайтесь, ложитесь, вставайте (или в какой там позе вы читаете) — и начинаем.
FSRавнительно честный способ получить больше FPS — как NVIDIA обогнала AMD на несколько лет

AMD FSR (FidelityFX Super Resolution) — это открытая технология масштабирования изображения, вышедшая в июне 2021 года, позволяющая нативно рендерить кадры в пониженном разрешении и восстанавливать их до целевого с помощью фильтров, сохраняя высокую частоту кадров. В последующих версиях она обросла дополнительным функционалом (FSR 3.0 добавила генерацию кадров, а FSR 4.x уже использует машинное обучение с FP8), но об этом позже.
Когда NVIDIA в 2018 году представила миру DLSS 1, который в итоге провалился, а ещё через два года — сверхуспешный DLSS 2, инженерам из AMD нечего было противопоставить в течение почти трёх лет.
Это было сокрушительное аппаратное, программное и идеологическое поражение. Шах и мат, атеисты красные. AMD буквально застали врасплох. Да, у AMD был пакет открытых инструментов для разработчиков FidelityFX (с фильтром резкости Contrast Adaptive Sharpening, или CAS), вошедший в итоге в FSR, но никакого комплексного алгоритма масштабирования — прямого конкурента DLSS — у них не было.
Интересно, что провал DLSS 1.0 (мыло, артефакты, привязка к дорогим RTX-картам, обучение под каждую игру отдельно), пожалуй, даже сыграл на руку NVIDIA с точки зрения конкуренции — многие посчитали ИИ-реконструкцию изображения в видеоиграх тупиковой ветвью. Позже DLSS 2.0 доказал, что это не так — и тогда AMD пришлось экстренно разрабатывать ответ.
Но у них не было аппаратных блоков для ускорения ИИ-вычислений во всех актуальных на тот момент ускорителях. Напомню, это видеокарты серии Radeon RX 5000 и новейшие на то время RX 6000 на микроархитектуре RDNA 2 (сюда же PS5). Аналог тензорных ядер (матричные ядра) появился лишь в 2020 году — в серверном ускорителе AMD Instinct MI100 (микроархитектура CDNA 1), а в консьюмерских решениях — аж в 2022 году на архитектуре RDNA 3 (серия Radeon RX 7000) и в 2025 году во флагманской сегодня RDNA 4 (серия Radeon RX 9000).
Помимо аппаратных ограничений, AMD нужно было разработать и обучить нейросети (для работы, например, на ядрах общего назначения). Но они пошли другим путём.
Как устроен FSR 1.0 — читая математика vs машинное обучение

Вынуждено или нет, но FSR 1.0 — это алгоритм масштабирования изображения, не требующий специализированных аппаратных блоков для ИИ, что и стало его конкурентным преимуществом. Инженеры не стали копировать DLSS и собрали FSR на базе адаптивного повышения резкости (модифицированный фильтр Ланцоша) и традиционных методов пространственного апскейлинга (без информации о предыдущих кадрах).
Это позволило AMD сделать технологию FSR воистину народной (открытой — под лицензией MIT) и выгодно обставить презентацию с точки зрения маркетинга.
Вот, мол, владельцы всех брошенных старых GTX (на GTX не было DLSS, так не было тензорных ядер), всех Radeon выше серии RX 500, консолей и устройств со встроенной графикой Intel / Radeon, держите наш новый апскейлер FSR 1.0 — работает везде, где есть API DirectX 11/12 и Vulkan 1.1.
ВАЖНО! FSR до 4 версии не использует машинное обучение (в отличие от DLSS и XeSS) — это чисто процедурный фильтр, поэтому работает на любых ускорителях и платформах без специализированных аппаратных блоков.
Главный плюс FSR 1.0 — он давал огромный прирост FPS (иногда — кратный), почти не нагружая GPU. Также его можно было встроить в любую игру/программу (даже поверх видео или старых игр через утилиты, вроде Magpie или Lossless Scaling), потому что ему не нужны были векторы движения для работы. Позже даже вышла технология Radeon Super Resolution (RSR) — тот же FSR 1.0, но сразу встроенный в видеодрайвер AMD (работает в полноэкранном режиме на уровне видеокарты для любых игр, даже если разработчик не добавил поддержку FSR).
Но и минусов хватало. Причем с избытком.
Во-первых, FSR 1.0 требовал относительно качественного изображения с уже выполненным сглаживанием. Если подключить FSR 1.0 к плохо реализованному сглаживанию TAA (про него можете подробно почитать в первой части), результат масштабирования будет посредственным. Игры с плохим и(или) дорогим сглаживанием приходилось сначала оптимизировать (и балансировать между резким масштабированием FSR и качеством базового сглаживания) из-за чего время интеграции FSR 1.0 увеличивалось.
Во-вторых, FSR 1.0 мылил картинку и терял мелкие детали: текст (который на текстурах), провода, листва, сетки — всё превращалось в кашу, особенно в движении и на расстоянии. А всё что не двигалось — дрожало и покрывалось пиксельным шумом. Визуальный интерфейс (HUD, Heads-Up Display), кстати, FSR не трогал — он апскейлил только 3D-сцену (и это хорошо). Тот же RSR, упомянутый выше, растягивал весь кадр, а потому попутно мылил элементы интерфейса и текст.
В основе FSR 1.0 — EASU и фильтр Ланцоша

В версиях FSR (FidelityFX Super Resolution) 1.0/1.5 за апскейлинг изображения отвечает пространственный фильтр EASU (Edge Adaptive Spatial Upsampling). Он получает один кадр (и только его — без предыдущих) в низком разрешении и за один проход восстанавливает изображение до целевого разрешения.
Фильтр EASU не просто растягивает картинку, он анализирует соседние пиксели, ищет изменения градиентов и по ним определяет, где проходят границы объектов. На основе этой информации для каждого нового сгенерированного пикселя рассчитываются веса.
Ремарка! Когда алгоритм увеличивает картинку, ему нужно, по сути, придумать и вставить новые пиксели между старыми. Чтобы узнать, какого цвета должен быть новый пиксель, он берёт цвета нескольких соседних (оригинальных) пикселей и смешивает их. Вес показывает, вклад какого из соседей больше, а какого — меньше.
Цвет нового пикселя вычисляется по формуле: (Цвет Пикселя №1 × Вес №1) + (Цвет Пикселя №2 × Вес №2) + …
Сумма всех весов обычно равна 1 (или 100%).
Ядро EASU основано на модифицированном фильтре Lanczos-2. Инженеры AMD адаптировали его под задачу апскейлинга и сделали веса пространственно адаптивными. Сама AMD называла EASU локально адаптивным эллиптическим фильтром, похожим на фильтр Ланцоша.
Фильтр Ланцоша (Lanczos) — это математический алгоритм для изменения размера изображений. Если обычные простые методы (например, билинейный) просто сглаживают и замыливают пиксели при растягивании, то Lanczos пытается сохранить резкость текстур и мелких деталей. Фильтры Lanczos-1, Lanczos-2 и Lanczos-3 отличаются радиусом ядра, который определяет количество соседних пикселей, участвующих в интерполяции. Инженеры AMD выбрали именно Lanczos-2 (также известный как 2-lobe Lanczos) для FSR, потому что у него отличный баланс скорости обработки в реальном времени и качества картинки.

Lanczos-2 означает, что для создания одного нового пикселя алгоритм обрабатывает окно размером 4 × 4 пикселя (12 пикселей). Тот же Lanczos-3 требует уже 6 × 6 (36 пикселей) — по сути трёхкратная разница. Далее он использует математическую волну (синусоиду): пиксели, которые находятся совсем рядом, получают большой положительный вес (сильно влияют на цвет). А пиксели чуть дальше — получают меньший или отрицательный вес.

Ремарка!
В математике есть идеальная функция для восстановления сигналов — Sinc (кардинальный синус). Если бы мы могли использовать её, то картинки растягивались бы вообще без потери качества. Но у функции Sinc есть один ма-а-а-аленький недостаток — она бесконечная. Чтобы посчитать один пиксель, компьютеру пришлось бы обработать вообще все пиксели во Вселенной. Так что ждём квантовых компьютеров :)
Отрицательный вес — важная фича Lanczos: на границах объектов он искусственно делает темную сторону чуть темнее, а светлую — чуть светлее. Для человеческого глаза это выглядит как очень высокая резкость, будто картинку не растягивали, а изначально сняли в высоком разрешении.
Сам Корнелий Ланцош к фильтру Lanczos прямого отношения не имеет, так как умер в 1974 году — тогда графики в современном её понимании ещё не существовало, а компьютеры работали в основном на перфокартах.
Но при жизни Ланцош придумал σ-аппроксимацию (сигма-приближение Ланцоша). Он показал, как взять бесконечные математические ряды (волны) и отрезать от них лишнее с помощью специального сглаживающего множителя (окна), чтобы формулы стали конечными, но при этом не потеряли своей точности.
А фильтр придумал метеоролог Клод Дюшон в 1979 году. Он решал задачу по обработке климатических данных (такова легенда), в которой нужно было сглаживать цифровые сигналы, поступающие с метеостанций, и отсекать лишний шум, сохраняя пики (резкие изменения погоды).
Он взял бесконечный кардинальный синус (Sinc) и применил к нему σ-факторы Ланцоша — специальное сглаживание, которое уменьшает колебания Гиббса после усечения ряда. В результате получился конечный фильтр, пригодный для практической обработки цифровых данных.
Из уважения к автору математического метода Дюшон назвал это дело фильтром Ланцоша (Lanczos filter), вписав имя математика (а не своё) в историю.
К сожалению, фотографию Клода Дюшона я не нашел, но нашел его публикации. Если отыщете фото — закреплю в комментариях и добавлю в статью.
В чём заключается доработка AMD?
Обычный Lanczos использует фиксированное ядро — его форма определяется заранее и не меняется в зависимости от того, что находится под фильтром. AMD же сделала фильтр пространственно адаптивным — EASU сначала анализирует окружающие пиксели, а уже потом формирует ядро и рассчитывает его веса.
Причём без всякого машинного обучения. EASU смотрит на локальные изменения яркости и пытается определить, где проходит выраженная граница и в каком направлении.

Для этого EASU сначала берёт 12 ближайших выборок (taps) вокруг обрабатываемой области и анализирует их.
У четырёх центральных пикселей алгоритм отдельно оценивает направление и длину локальной структуры. Для анализа используется очень дешёвая аппроксимация яркости: luma ≈ r + 2g + b. Затем EASU интерполирует результаты анализа в нужной точке и использует их для формирования итогового адаптивного ядра. На однородной области EASU может использовать нейтральную форму фильтра, а возле выраженной границы — изменить его форму и веса с учётом направления этой границы.

Почему AMD выбрала именно 12 выборок, а не, например, 16? Причина аппаратная. EASU должен сначала проанализировать эти выборки, а затем использовать их при построении фильтра. Чтобы не читать одни и те же данные из памяти дважды, шейдер старается удерживать их в регистрах GPU. В 32-битном варианте 12 выборок требуют 36 регистров. Если увеличить окно, то под временные данные и логику шейдера останется меньше регистров. AMD старалась удержать общее использование примерно на уровне 64 регистров или ниже — это хороший верхний предел для её GPU того времени, позволяющий эффективно скрывать задержки.
И уже вся эта информация используется для формирования финального адаптивного ядра фильтра.
Важно, что алгоритм EASU за один проход один раз берет пиксели, один раз проводит анализ, поиск градиентов (направлений линий) и само растягивание картинки (математику Ланцоша), а затем один раз выдаёт готовый результат. Это и позволило FSR 1.0 минимально нагружать память и работать даже на старых или слабых встроенных видеокартах.

Также инженеры AMD заменили честную тригонометрию (синусы) простой полиномиальной аппроксимацией (формула из умножений и сложений — MAD или Multiply-Add). А всё потому, что считать даже ограниченные синусы для миллионов пикселей в каждом кадре при 60+ FPS — слишком затратно для видеокарты. Также инженеры использовали векторные инструкции FP16 (половинная точность) — на современных архитектурах (AMD RDNA/NVIDIA Turing и новее) они позволяют выполнять две операции за один такт вместо одной в FP32, удваивая скорость обработки.
Но отмечу, что у FSR есть и второй проход обработки (тоже математически простой) — поверх результата от EASU применяется упомянутый выше фильтр резкости RCAS (Robust Contrast Adaptive Sharpening). Чтобы сделать контур объекта резким, RCAS анализирует шаблон из 5 пикселей в форме креста (центральный пиксель + верхний, нижний, левый, правый) уже после апскейла. RCAS настолько быстрый и простой, что почти не влиял на производительность, но улучшал изображение, хотя часто и перебарщивал с контурами, создавая ореол вокруг объектов.
Если подытожить, то технология очень хорошая для статичного изображения, коими игры не являются. Без боли для глаз FSR 1.0 можно было использовать только в режиме максимального качества на 4K-мониторах, а лучше — телевизорах, где ты физически далеко от пикселей. На FullHD-экранах технология, КМК, практически бесполезна, так как превращает всё в размытое месиво — лучше просто снизить разрешение дисплея или настройки графики (в этом плане дела чуть лучше, чем были у DLSS 1).
Но зато FSR 1 показал, что AMD тоже кое что умеют — и сдаваться NVIDIA без боя не собираются.
Что ж, самое сложное и интересное разобрали, дальше будет проще :)
Обзор FSR 2 — заглянем в прошлое

Переход к FSR 2.0 (FidelityFX Super Resolution 2.0- 2.3.4) был жестким, так как значительную часть технологии разработали с нуля. Внутри AMD понимали, что пространственный апскейлинг (в рамках одного кадра) — не конкурент DLSS, а значит нужно переходить на временной (Temporal upscaling — с использованием векторов движения и истории кадров).

Бывший директор по игровому инжинирингу AMD Николя Тибьеро (перешел в Intel) в интервью вспоминал, что команда разработчиков чудовищно перерабатывала. Самым сложным было заставить апскейлер быстро работать без тензорных ядер и ИИ-блоков. Когда инженерам удалось снизить время обработки кадра ниже критической отметки в несколько миллисекунд, в лаборатории AMD, по воспоминаниям участников, все кричали от радости.
Как работает FSR 2?

FSR 2 начинает обработку кадра раньше в конвейере (и более комплексно), чем FSR 1. Теперь эта технология заменяет сглаживание TAA, а потому любая постобработка включается уже после апскейла.

Ремарка! В Pre-upscale post-processing входят эффекты, вроде отражений в экранном пространстве, окружающей окклюзии в экранном пространстве, шумоподавления (тени, отражения) и экспозиция (опционально). А в post-upscale post-processing: зернистость пленки, хроматическая аберрация, виньетирование, тонмаппинг, глубина резкости, размытие в движении.
Допустим, игра рендерит сцену в разрешении 1920 × 1080, а вывести её нужно в 3840 × 2160 — классика в консольном гейминге, где как раз всё и работает в основном на FSR.
Ремарка! Разработчики относительно быстро внедряли FSR 2.0 и выше благодаря консолям. И PlayStation 5, и Xbox Series X/S построены на чипах AMD Radeon. Ходили слухи, что архитекторы консолей (включая легендарного Марка Церни из Sony) тесно работали с AMD и буквально требовали дать им открытый инструмент для экономии ресурсов GPU в тяжелых играх с трассировкой лучей. За неимением альтернатив FSR стал стандартом для консольного геймдева: разработчики оптимизировали игру под PS5 и Xbox с FSR, а затем переносили всё на ПК.

В исходном FullHD-кадре слишком мало данных для качественной реконструкции мелких деталей. Даже самые лучшие алгоритмы не смогут из одного кадра узнать, что за мельчайший рисунок на текстуре надо восстановить, что делать с волосами и шерстью, тонкими проводами и металлическими сетками вдалеке.
Но когда есть предыдущие кадры, алгоритм видит один и тот же объект в разных положениях относительно пиксельной сетки. В одном кадре тонкая линия может попасть ровно между двумя пикселями, а в другом — немного сместиться и попасть уже в другую область.
Если обычный TAA тоже работает с предыдущими кадрами, то почему его заменили апскейлеры? Всё просто — он собирает сэмплы в том же разрешении, что рендерится изображение. FSR 2 же должен накопить информацию из кадров, отрендеренных, например, в 1920 × 1080, и получить из неё изображение 3840 × 2160.

Представим пиксель, который нужно получить в итоговом 4K-кадре. В исходном FullHD-изображении ему соответствует область с несколькими соседними пикселями. FSR 2 вычисляет вклад каждого из них и собирает новый high-resolution sample из их взвешенной суммы. Но занимается этим уже не EASU из FSR 1, а знакомый нам Lanczos
Вес каждого исходного сэмпла зависит от его положения относительно целевого пикселя. Напомню: ближайшие влияют сильнее, удалённые — слабее. Это и есть ресемплинг отрендеренного разрешения в целевое разрешение.
Всего у FSR есть 5 режимов качества (как и у DLSS): нативное сглаживание (опционально), качество, сбалансированный, производительность и ультра-производительность.
Режим качества апскейлинга FSR | Описание | Коэффициент масштабирования | Входное разрешение | Итоговое разрешение |
Native AA Нативное сглаживание | Режим собственного сглаживания обеспечивает качество изображения, превосходящее качество при нативном рендеринге, при незначительном снижении производительности. | 1.0x по каждой оси (1.0x от площади кадра) (100% от разрешения экрана) | 1920 x 1080 2560 x 1440 3840 x 2160 | 1920 x 1080 2560 x 1440 3840 x 2160 |
Quality Качество | Качественный режим обеспечивает качество изображения, равное или превосходящее собственный рендеринг, при значительном увеличении производительности. | 1.5x по каждой оси (2.25x от площади кадра) (67% от разрешения экрана) | 1280 x 720 1706 x 960 2560 x 1440 | 1920 x 1080 2560 x 1440 3840 x 2160 |
Balanced Сбалансированный | Сбалансированный режим предлагает идеальный компромисс между качеством изображения и увеличения производительности. | 1.7x по каждой оси (2.89x от площади кадра) (59% от разрешения экрана) | 1129 x 635 1506 x 847 2259 x 1270 | 1920 x 1080 2560 x 1440 3840 x 2160 |
Performance Производительность | Режим производительности обеспечивает качество изображения, аналогичное обычному рендерингу, при значительном увеличении производительности. | 2.0x по каждой оси (4x от площади кадра) (50% от разрешения экрана) | 960 x 540 1280 x 720 1920 x 1080 | 1920 x 1080 2560 x 1440 3840 x 2160 |
Ultra Performance (Optional) Ультра-производительность (необязательно) | Режим сверхпроизводительности обеспечивает высочайший прирост производительности при сохранении качества изображения, характерного для собственного рендеринга. | 3.0x по каждой оси (9x от площади кадра) (33% от разрешения экрана) | 640 x 360 854 x 480 1280 x 720 | 1920 x 1080 2560 x 1440 3840 x 2160 |
Архитектура FSR 2 сложнее FSR 1 — на вход ему нужны цвет текущего кадра, глубина (он сопоставляет текущий кадр с предыдущими и накапливает информацию о сцене во времени) и векторы движения объектов.
Чем больше информации мы берём из предыдущих кадров, тем больше потенциально полезных деталей можем восстановить, но и тем выше риск, что вместе с полезной информацией мы притащим в новый кадр след старого изображения.
Перед рендерингом каждого кадра положение пиксельной сетки немного смещается — применяется так называемый jitter. Алгоритм каждый раз смотрит на сцену с немного другой точки. Это как фотографировать кого-то с едва заметным смещением камеры — снимки будут иметь слегка разную перспективу. А при правильном совмещении таких кадров можно получить информацию, которой не было на этих кадрах по отдельности (или её было недостаточно), чтобы восстановить мелкие детали.

Но, конечно, нельзя просто просто наложить предыдущий кадр поверх текущего из-за того самого смещения — объекты перемещаются, камера поворачивается и т.д. Для этого алгоритму и нужны векторы движения aka motion vectors от движка игры — они показывают, куда переместился каждый объект из предыдущего кадра в текущий. Векторы движения должны быть скорректированы с учетом джиттера, так как на неподвижных изображениях векторы должны быть нулевыми. Для корректного отслеживания контуров используется ближайший вектор в окрестности 3x3. Это называется дилатацией (dilation).

Процесс, когда FSR 2 берёт пиксель из предыдущего кадра, чтобы понять, где он должен находиться сейчас, называется репроекцией истории (history reprojection). Этот механизм двигает пиксели старого кадра на новые места, используя векторы движения.
Пример! В предыдущем кадре у нас была тонкая линия провода. В текущем кадре она немного сместилась. Алгоритм вычисляет, где этот провод находился раньше, берёт оттуда цвет и точно совмещает с новым положением — теперь эту информацию можно использовать для повышения чёткости.
История для каждого участка изображения получает разный вес. Если алгоритм уверен в истории — она получает большой вес. Если история подозрительна — её влияние уменьшается, а текущий кадр начинает доминировать.
Пример! Из-за движения провода за ним внезапно открылся новый участок стены (которого раньше вообще не было видно), старых данных для этой сцены в истории нет, а потому использовать историю здесь нельзя.
Механизм, который проверяет это, называется обнаружением дизокклюзий (detecting disocclusion). Сначала FSR 2 реконструирует глубину предыдущего кадра. Затем сравнивает текущую глубину с реконструированной предыдущей глубиной. Глубина — это специальная карта (черно-белое изображение), на которой каждый пиксель пронумерован. Числа показывают, как далеко пиксель находится от глаз игрока (камеры).
После этого идёт коррекция истории (history rectification) — этап, на котором алгоритм решает, как именно поступить с историей пикселей, которые не прошли проверку на дизокклюзию (или другие тесты на валидность). Например, буфер глубины фиксируют аномальные различия, алгоритм мгновенно распознает дизокклюзию и полностью сбрасывает вес старой истории для этой точки до нуля, чтобы избежать появления грязных шлейфов (ghosting).

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

Например, есть механизм Locking (блокировка), который защищает ультратонкие линии (шириной в 1 пиксель), чтобы они не исчезали и не мерцали при движении. Механизм заставляет историю таких линий сохраняться и получать больший вес.
Ещё есть специальные маски. Например, для увеличения точности алгоритм использует специальные маски — Reactive Mask и Transparency & Composition Mask. Они указывают FSR 2, на каких участках кадра находится полупрозрачный дым, стекло или элементы интерфейса (HUD). Благодаря этому алгоритм понимает, что сквозь них виден движущийся фон, и не пытается размазать или заблокировать эти эффекты. Работает неидеально, но результат в итоге лучше, чем без таких масок.
На деле механизмов у FSR 2 намного больше, если есть желание — можете почитать в документации. Я же рассказал про самое важное, а значит пора переходить к FSR 3.
FSR 3 — зачем генерить пиксели, если можно генерить кадры

В середине 2023 года вышел FSR 3 (FidelityFX Super Resolution 3.0-3.1.5), главной фичей которого стала функция Frame Generation (генерация промежуточных кадров). Третья версия сочетает временной апскейлинг из FSR 2 и генерацию кадров (прирост до 2-3 раз). Работает это дело за счёт трёх решений — Frame Interpolation (интерполяция кадров), технологии Optical Flow (оптический поток) и Anti-Lag.

И да, это снова ответ на технологию Frame Generation в DLSS 3 от NVIDIA, вышедшую в 2022 году. У NVIDIA 60 FPS, которые реально рендерит компьютер, превращаются в примерно 120 отображаемых кадров — для этого в GeForce RTX 40 есть специальный аппаратный блок Optical Flow Accelerator (OFA). Он анализирует движение пикселей между кадрами, а нейросеть DLSS использует optical flow вместе с motion vectors и другими данными игрового движка для построения промежуточного изображения. Главный минус DLSS 3 — их Frame Gen работает только на RTX 40 и новее, тогда как FSR 3 Frame Generation от AMD работает фактически на всех видеокартах.

Интересно, что с версии AMD FSR 3.1 алгоритм FSR Frame Generation можно комбинировать с абсолютно любой технологией апскейлинга (в 3.0 была привязка именно к апскейлеру FSR) или вообще использовать без масштабирования: например, с нативным рендерингом + TAA.
Ремарка! Владельцы относительно устаревших карт Nvidia RTX 20-й и 30-й серий (где нет официального DLSS 3 Frame Gen) могут включить качественный апскейлинг DLSS 4 для четкости картинки, а генерацию промежуточных кадров отдать внутриигровому FSR 3.1.
Теперь про технологию Frame Interpolation (интерполяция кадров) из FSR — это глобальный алгоритм, по сути, общее название технологического процесса. Он берёт два реальных кадра (предыдущий и текущий), анализирует изменения между ними и математически дорисовывает промежуточный кадр.
Интерполяция кадров существует в двух вариантах (оба аналитических — не ИИ).
ВАЖНО! Не путайте FSR Frame Generation из FSR 3.0-3.1.5 с современным стэком FSR Redstone из FSR 4 — там технология полностью перешла на машинное обучение. Версия FSR 3 Frame Generation работает чисто на аналитических алгоритмах и обычных шейдерах любого GPU (AMD RX 5000/6000/7000, NVIDIA RTX 20/30/40 и Intel Arc и т.д).
Первый вариант — AMD Fluid Motion Frames (AFMF / AFMF 2.1) — это конкретная программная функция, которую AMD встроила на уровне драйвера (Radeon Software). AFMF использует Frame Interpolation, но делает это поверх готовой картинки на вашем мониторе (в пространстве 2D-экрана), без интеграции в движок игры. Аналогично работала и RSR, о которой я писал выше.
Второй вариант — это внутриигровая технология AMD FSR Frame Generation. Этот алгоритм внедряется разработчиками в движок самой игры (на этапе интеграции SDK). Генератор кадров получает доступ к низкоуровневым данным рендеринга: векторам движения, цвету и буферу глубины сцены. Он точно знает, куда смещаются объекты в 3D-пространстве, поэтому промежуточные кадры получаются гораздо точнее, а интерфейс игры (HUD) не покрывается шлейфами и артефактами при резких поворотах камеры.
Пару слов об FidelityFX Optical Flow (оптическом потоке) — это программная технология оценки видимого движения объектов между последовательными кадрами видео или в играх. Важнейший инструмент в генерации кадров от AMD. По сути это метод компьютерного зрения, который анализирует изображение блоками 8×8 пикселей и оценивает движение каждого блока. В FSR 3 эти оценки объединяются с масштабированными векторами движения, которые передаёт игровой движок.
На вход подается одна сцена, а на выходе получаются два значения, соответствующие рассчитанным векторам движения с детализацией по блокам, и флаг обнаружения смены сцены. Результат обнаружения смены сцены нужен для внутреннего использования алгоритмом.
Работа алгоритма разделена на два этапа: подготовительный и основной. На подготовительном этапе строится пирамида яркости и обнаруживаются существенные изменения сцены.

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

Результат последней итерации и становится итоговыми данными, которые алгоритм передаёт дальше.

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

Чтобы Frame Generation от AMD не перегружал ускоритель, AMD разработала технологию FSR3 Async (Asynchronous Compute) — это встроенный режим оптимизации в технологии генерации кадров. Видеокарта сначала рендерит обычный кадр игры, затем полностью останавливается, вычисляет промежуточный (сгенерированный) кадр, и только после этого переходит к следующему. Эффективно, но, к сожалению, создает задержки (инпутлаг aka input lag).

Чтобы залатать и эту течь AMD разработала технологию AMD Anti-Lag — она включается принудительно с генерацией кадров и заставляет CPU подготавливать кадры строго в тот момент, когда GPU готов их обработать, что устраняет очереди (процессор перестает спамить видеокарту кадрами про запас). Это минимизирует время от нажатия на клавишу до появления действия на экране.
Первая версия Anti-Lag (базовый) работала на уровне драйвера в приложении AMD Software: Adrenalin Edition для большинства игр.
Модифицированный Anti-Lag+ (доступен на RX 7000 и новее) встроен глубоко в код игры и дает максимальный эффект, почти полностью компенсируя задержку от FSR 3, но его отозвали из-за проблем с анти-читами.
Вторая версия Anti-Lag 2 уже интегрируется разработчиками через официальный GPUOpen SDK и работает нативно в поддерживаемых играх — без конфликтов с системами защиты.

К сожалению, несмотря на все старания AMD, у Frame Generation есть недостатки: нестабильность картинки и артефакты (и чем меньше исходных кадров, тем заметнее проблема). Для фреймгена критически важен высокий исходный FPS (у NVIDIA, к слову, тоже). Если нативный рендеринг игры ниже 60 кадров, то генератор начинает жестко сбоить: появляются сильные разрывы изображения по горизонтали на две или более частей (тиринг), а вокруг персонажей возникают шлейфы и желейные искажения.
На этом рассказ о FSR 3 можно заканчивать.
Вместо выводов: чем же FSR лучше DLSS?

Сначала отмечу, что AMD FSR 4 использует машинное обучение и полностью заменяет AMD FSR 3, так как объединяет в себе весь функционал AMD FSR 2/3/4 и при необходимости, на неподдерживаемых ускорителях, переключается на легаси FSR 3.1.5. FSR 4 настолько ушел от предыдущих версий, что заслуживает отдельного полноценного обзора.
Итак, именно FSR 3.1.5, по моему мнению, лучше DLSS 3.7 (или же более новых версий на сериях RTX 20/30), так как даёт аналогичный функционал, слегка проигрывающий по качеству (различия искать надо с лупой в лабораторных условиях), но работающий почти везде. Если бы NVIDIA не хотела заработать все деньги мира, она бы разработала нечто похожее, чтобы владельцы GTX/RTX 20/30 серий тоже могли получить свой аналитический Frame Gen.
Да, DLSS сопоставимой с FSR версии чуть лучше, FG там стабильнее, но не во всех технических моментах NVIDIA превосходит AMD. В некоторых конкретных сценах FSR может вести себя не хуже или просто иначе. К тому же у FSR 3.1.5 очень небольшие вычислительные затраты: на RX 7900 XTX (предыдущее поколение) апскейлинг в 4K занимает около 1 мс в режиме Quality и 0,8 мс в Performance. Так как всё зависит от чистой шейдерной производительности, то на актуальных флагманах показатели кратно ниже. У DLSS же затраты жестко привязаны к поколению и количеству тензорных ядер. На условной RTX 4060 время обработки 4K-кадра силами DLSS будет выше (в районе 1.5–2 мс), потому что физических тензорных ядер там меньше. То есть преимущество DLSS по качеству на некоторых ускорителях может вытекать в большую стоимость самого апскейлинга.
Иногда владельцам видеокарт NVIDIA лучше включить FSR, чтобы получить больше FPS и меньшие задержки при сопоставимом качестве.
Плюс FSR изначально спроектирован как открытое ПО (Open Source) и поставляется в виде интуитивного пакета FidelityFX API — разработчики могут сами настраивать глубину интеграции. А режим с Native AA в FSR, который позволяет получить очень качественное временное сглаживание вообще на любом железе (аналог, DLAA, привязан к NVIDIA) — это отдельный плюсик в карму AMD.
Приведу простую аналогию с миром бокса.
DLSS — это абсолютный чемпион-тяжеловес. Он очень силен, но проводит бои только на своем домашнем ринге (видеокарты RTX) и в экипировке спонсоров (аппаратные тензорные ядра и OFA), но контракт запрещает ему драться на других рингах. Его фирменный правый апперкот отправляет в нокаут (качество картинки и генерации очень хороши).
FSR — это боксер-универсал средней весовой категории. Он хитрый, быстрый, техничный, может драться на любом ринге, в любом подвале, на любой улице и по любым правилам (запускается на AMD, NVIDIA, Intel и консолях). Фирменного апперкота у него нет, зато обычные джебы почти всегда попадают куда надо (качество картинки и генерации хорошие, но есть нюансы).
И если этих боксеров вывести на один ринг, то получится интересный бой, где тяжеловес, вероятно, выиграет по очкам, но может и проиграть по неединогласному решению судей. Хотя их бой, скорее всего, вообще не состоится — они чемпионы в разных лигах (условный PS5 и ПК).
И всё бы хорошо, но FSR 4 и будущий FSR 5 борются c DLSS в одной весовой категории супертяжей. Новые FSR уходят в сторону проприетарности из-за привязки к аппаратным матричным блокам (хотя там тоже интересная история, про которую я расскажу в следующей статье). AMD ещё и сотрудничает с Sony PlayStation над развитием FSR, а Sony (вместе с AMD) развивает свою PSSR, основанную на FSR — так называемый Project Amethyst.
Но про это и многое другое будет в следующем лонгриде. Спасибо, что дочитали до конца!
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.