В последние годы искусственный интеллект приобретает все большую популярность. Стоит только попросить, и Siri сообщит вам результат футбольного матча, который вы пропустили вчера вечером. Рекомендации в Spotify подскажут, чем пополнить музыкальную библиотеку, а Amazon попытается предсказать, какой продукт вы купите в следующий раз, когда этого еще не знаете даже вы.
Не обошел стороной он и игровую индустрию. Пока в геймерской среде сравнивают графику вышедшей на ПК Death Stranding с технологией DLSS и без нее, на днях стало известно, что в процессорах NVIDIA Ampere будет задействована уже DLSS 3.0. При этом она будет работать с любой игрой с TAA (Temporal Anti-Aliasing) и драйвером Game Ready. Это означает, что разработчикам понадобится подстроить технологию к своим играм — впрочем, этот процесс будет проходить куда легче, чем сейчас.
В этой статье мы рассмотрим, как NVIDIA использует машинное обучение для улучшения нашего игрового опыта.
Что такое DLSS?
Качество графики в современных играх только возрастает, а вместе с ним растет вычислительная сложность производимых операций. Этому мы обязаны трассировке лучей, имитирующей настоящее освещение в реальном времени, тем самым оставляя предварительно запеченные отражения пережитком прошлого. Вычислительная сложность рейтрейсинга связана с тем, что разрешение современных игр превышает старые добрые 1080p. Отсюда необходимость ускорения расчетов во время рендеринга.
Deep Learning Super Sampling (DLSS) — технология NVIDIA, использующая глубокое машинное обучение для повышения частоты кадров в играх, требующих сложных графических вычислений. С DLSS геймеры могут использовать более высокие настройки и разрешение, не беспокоясь при этом за стабильность fps.
В частности, DLSS выполняет задачу суперразрешения. С его помощью изображение с разрешением, скажем, 1080p может быть увеличено до 4K с минимальными потерями в качестве. Это избавляет от необходимости воспроизводить игру в 4K (и тем самым, вероятно, расплавить ваш ПК). Разрешение по-прежнему будет 1080p, что позволяет сохранить более высокую частоту кадров, однако благодаря масштабированию при помощи DLSS разницы с 4K вы практически не заметите.
Архитектура DLSS 2.0
По сути, DLSS — это нейронная сеть, обученная на суперкомпьютерах NVIDIA. Выход этой нейросети сравнивается с эталонным изображением с разрешением 16K, а ошибка между ними возвращается сети по петле обратной связи. Чтобы не возникло проблем со скоростью, DLSS использует тензорные ядра, являющиеся основой процессоров RTX 2000 (и в будущем RTX 3000). Это позволяет значительно ускорить тензорные операции и повысить эффективность обучения ИИ и задач, связанных с высокопроизводительными вычислениями.
Эволюция DLSS: от 1.0 к 2.0
DLSS 1.0 обучался для каждой игры отдельно, а оттого учился чрезвычайно долго. Еще он не поддерживал 4-х кратный апсэмплинг (upsampling), например, из 1080p до 4K, и имел ряд других недостатков в качестве изображения, которые не стоили улучшения частоты кадров.
DLSS 2.0 — более общий алгоритм, лишенный ограничений на обучение и апсэмплинг, а также имеющий меньшую задержку вывода за счет использования тензорных ядер: она составляет порядка 1,5 мс при 4K на RTX 2080ti — и в некоторых случаях обеспечивает результат даже лучше, чем исходное изображение.
Изображения с DLSS имеют конечное разрешение 1080p
В DLSS 1.0 максимально можно увеличить разрешение 720p до 1080p, тогда как DLSS 2.0 может масштабировать до 1080p даже разрешение 540p. Как видно на примере, изображение при 540p выглядит совсем размытым. При этом результат с DLSS 2.0 оказался лучше, чем с DLSS 1.0, и даже немного лучше исходной картинки. То есть, DLSS 2.0 справляется с заполнением пикселей эффективнее, чем DLSS 1.0, даже несмотря на то, что последнему нужно перемасштабировать не такую большую разницу в разрешении.
Умение DLSS 2.0 масштабировать изображение с разрешением 540p в сочетании с малой задержкой, обусловенной самим методом, дает существенное увеличение производительности по сравнению с предшественником.
Время рендеринга с DLSS 2.0 и без него (в мс)
Подробнее о принципе работы DLSS
При рендеринге геометрии сцены в играх (например, в треугольнике) количество используемых пикселей (или sampling rate — субпиксельная маска) определяет, как будет выглядеть изображение.
При использовании сетки сэмплирования 4×4 для рендеринга треугольника мы видим, что результат оставляет желать лучшего.
С увеличением сетки сэмплирования в 4 раза — до 8×8 — изображение оказывается больше похожим на предполагаемый треугольник. В этом и заключается суть DLSS: преобразовать изображение с низким разрешением в более высокое.
Суть DLSS
В результате при той же стоимости рендеринга, что и у низкокачественного изображения, вы получите изображение с более высоким разрешением.
Цель DLSS
Это фактически решает уже не новую проблему супер-разрешения.
Давайте кратко рассмотрим, как развивались методы повышения разрешения с помощью ИИ.
Single Image Super-Resolution
Эта техника позволяет получать изображения с высоким разрешением из более низкого при помощи методов интерполяции, таких как билинейный, бикубический и фильтр Ланцоша. Можно реализовать ее и с помощью глубоких нейронных сетей, но тогда возникает проблема искажения новых пикселей, полученных на основе данных обучения. Это приводит к тому, что изображение будет казаться правдоподобным, но не слишком похожим на исходное. Метод выдает чрезмерно гладкую, не детализированную картинку и нестабилен во времени, что приводит к несогласованности и мерцанию кадров.
Single Image Super-Resolution
Давайте сравним несколько результатов таких техник супер-разрешения на основе одного изображения с тем, что предлагает DLSS 2.0.
Целевое разрешение — 1080p
Очевидно, что результат DLSS 2.0 лучше, чем метод бикубической интерполяции и ESRGAN — архитектуры нейронной сети, использующей метод генеративно-состязательной сети для достижения супер-разрешения. В результате папоротники в случае DLSS 2.0 выглядят даже более детальными, чем на оригинальном изображении.
Multi-frame Super-Resolution
Этот метод использует несколько изображений с низким разрешением для получения изображения с высоким. Он помогает восстановить детали лучше, чем предыдущий подход. В основном он разрабатывался для видео- и серийной фотосъемки, а потому не задействует специфическую для рендеринга информацию. Одним из примеров его использования можно назвать выравнивание кадров при помощи оптического потока вместо геометрических векторов движения. В данном случае вычисления оказываются дешевле, а результаты точнее. Этот подход видится более многообещающим, чем предыдущий, и подводит нас к следующей технике.
Spatial-Temporal Super Sampling
Этот метод использует несколько кадров для супер-сэмплинга изображений.
У нас есть текущий кадр. Предположим, что предыдущий выглядит на него похожим. Используя более низкий sampling rate, мы можем увеличить общее число отсчетов, необходимое для реконструкции изображения.
Гистограмма метода Spatial-Temporal Super Sampling
Проблема в том, что в играх все постоянно находится в движении. Поэтому для исправления истории кадров данный метод суперсэмплинга вынужден производить эвристический поиск, например, по принципу Neighbour Clamping. Эти эвристики вносят свой вклад в размытость, временную нестабильность, муар, лаги и ghosting.
Нежелательные эффекты от Neighbour Clamping
Временное мерцание и муар на изображениях с Neighbour Clamping
DLSS 2.0: Deep Learning-based multi-frame reconstruction
Нейронная сеть DLSS учится на десятках тысяч обучающих изображений, предназначенных для выполнения реконструкции лучшей, чем могут предложить эвристики, тем самым устраняя эффекты от них. Это приводит к гораздо более качественному результату с использованием данных нескольких кадров.
Реализуя DLSS в движке, в первую очередь необходимо провести рендеринг сцены в низком разрешении: всей ее геометрии, динамического освещения, эффектов в экранном пространстве и трассировки лучей. После этого можно применить DLSS на этапе, когда обычно происходит анти-алиасинг — ведь технология выполняет ровно ту же функцию, только еще с супер-сэмплингом. Затем происходит постобработка изображения, включающая размытие в движении, блум, хроматическую абберацию, тональную компрессию и другие эффекты.
DLSS — не просто алгоритм обработки изображения. Обычно он работает в совокупности с рендерингом, поэтому и его процесс тоже необходимо пересмотреть. Впрочем, в случае DLSS 2.0 эти изменения не так сложно реализовать, как случалось до этого.
Тесты производительности
Последний тайтл Remedy Control поддерживает как трассировку лучей, так и и DLSS. Как видно на графике выше, RTX 2060 получил прирост производительности с 8 кадров в секунду до примерно 36,8 кадров в секунду за счет DLSS, что значительно повысило играбельность проекта. Этот результат оказался даже лучше, чем в случае с RTX 2080ti без DLSS, что еще раз доказывает, насколько эффективна эта технология.
Digital Foundry сравнил качество изображения с использованием DLSS 1.9 и 2.0 в этом видео.
Слева — Control с DLSS 1.9, справа — с DLSS 2.0. Изображения получены на RTX 2060 с разрешением 1080p и затем отмасштабированы до 4K
На сравнении выше мы видим, как DLSS 2.0 отрисовывает пряди волос, искаженные в случае DLSS 1.9.
Заключение
DLSS доступен только для графических процессоров на базе RTX 2000 и Turing (и на будущих графических процессорах RTX 3000 на базе Ampere) и на данный момент поддерживает лишь несколько игр. DLSS 2.0 поддерживается еще меньшим количеством тайтлов, но уровень детализации при нем может превосходить даже оригинальное изображение, а частота кадров при этом остается высокой. Это действительно классное достижение NVIDIA, и у технологии определенно многообещающее будущее.