Статья

Почему игры выглядят «мыльно»: сглаживание TAA, пониженное разрешение и что делать

Почему игры выглядят «мыльно»: сглаживание TAA, пониженное разрешение и что делать

Во что поигратьВо что поиграть·2 ч назад·
0
··0·
Если коротко: «мыло» в современных играх чаще всего делает не ваша видеокарта и не монитор, а временное сглаживание TAA. Оно убирает лесенки, смешивая текущий кадр с несколькими прошлыми, а в движении это смешивание размывает детали и оставляет шлейфы. Второй частый виновник — рендер в пониженном разрешении: динамическое разрешение или ползунок масштаба ниже 100%. Лечится это не отключением TAA (станет хуже), а заменой: DLAA или FSR Native AA, апскейлер в режиме Quality, рендер выше разрешения экрана через DLDSR или VSR и аккуратная резкость.
Мы — «Во что поиграть», и вопрос «почему новая игра на 1440p выглядит мутнее, чем старая на 1080p» нам задают чуть ли не чаще, чем про FPS. Ответ упирается в один конкретный механизм, и когда его понимаешь, настройки графики перестают быть лотереей. Давайте разберём его по шагам.

Откуда берутся лесенки и почему старое сглаживание сломалось

Экран — это сетка пикселей, а игровой мир состоит из наклонных линий, тонких проводов и мелкой листвы. Когда край объекта проходит через пиксель наискосок, пиксель всё равно может принять только один цвет. Получаются ступеньки — алиасинг. Хуже статичных ступенек только их движение: при малейшем повороте камеры тонкий провод то попадает в пиксель, то нет, и начинает мерцать.
Честное решение известно давно — суперсэмплинг: посчитать кадр в нескольких точках внутри каждого пикселя и усреднить. Но это кратно дороже. Компромиссом в 2000-х стало MSAA: видеокарта брала несколько точек только на краях треугольников и не пересчитывала освещение для каждой из них. Пока игры рисовались «в один проход», это работало отлично.
Потом индустрия массово перешла на отложенный рендеринг (deferred shading): сначала в буферы записываются геометрия и материалы, а свет считается отдельным проходом — так можно позволить себе сотни источников света. И тут MSAA сломалось. Ещё в 2005 году разработчики S.T.A.L.K.E.R. в главе GPU Gems 2 об отложенном освещении прямо написали, что такой рендерер «просто несовместим» с аппаратным сглаживанием тогдашних видеокарт, и сглаживание пришлось делать шейдерами.
Есть и вторая причина, менее очевидная. MSAA лечит только края геометрии. А в современной картинке с физически корректными материалами главная «рябь» живёт внутри треугольников: блики на металле, мелкие нормали, тонкие детали текстур. Брайан Карис из Epic Games в докладе о временном сглаживании Unreal Engine 4 формулирует это так: MSAA слишком дорого с отложенным рендерингом и не влияет на алиасинг шейдинга, которого внутри треугольников больше, чем на их краях. Документация Unreal Engine 5 до сих пор пишет, что MSAA доступно только с forward-рендерером, а алиасинг материалов, текстур и прозрачности оно не затрагивает.

FXAA и SMAA: дёшево, но картинка не стоит на месте

Следующей волной стали «пост-фильтры» FXAA, MLAA, SMAA. Они смотрят на готовый кадр, ищут контрастные границы и размывают их вдоль. Это почти бесплатно и работает с любым рендерером. Но у фильтра нет информации о том, что находится внутри пикселя: провод толщиной в треть пикселя он просто не видит. Карис в том же докладе отдельно отмечает, что такие фильтры не стабильны во времени — даже обычные ступеньки на них мерцают при движении камеры.
Отсюда знакомая многим картина: на скриншоте с FXAA всё более-менее гладко, а в игре по краям крыш и проводов бегает «рябь». Именно с этой рябью и пришли бороться временным сглаживанием.

Как работает TAA: кадр из нескольких прошлых кадров

Идея TAA красивая. Если суперсэмплинг дорог в одном кадре — давайте размажем его во времени. Каждый кадр камера сдвигается на долю пикселя: в UE4, по словам Кариса, это делали через небольшую правку проекционной матрицы по последовательности Хальтона (2,3). Сцена та же, но точки выборки внутри пикселя каждый раз другие. Затем результат смешивается с накопленной «историей» по формуле экспоненциального среднего: новый пиксель = α × текущий кадр + (1 − α) × история.
Красота экспоненциального среднего в том, что оно помнит, по сути, бесконечно много кадров, а хранить надо один буфер. Если для примера взять α = 0,1, текущий кадр даёт лишь 10% результата, а кадры старше десяти шагов в сумме — ещё около 35%. Пока камера стоит, это почти идеальный суперсэмплинг: лесенки исчезают, провода перестают мерцать, и всё это примерно по цене одного прохода.
Временное сглаживание: каждый новый кадр вносит небольшую долю, остальное — накопленная история. В статике это даёт гладкость, в движении — мягкость и шлейфы

Почему TAA мылит именно в движении

Проблемы начинаются, когда что-то двигается. Пиксель истории для текущей точки теперь лежит в другом месте экрана — или вообще не существует, если объект только что из-за чего-то выглянул. Движок ищет его по векторам движения (velocity buffer). Здесь возникают сразу три источника размытия, и все три Карис перечисляет честно.

Пересэмплирование истории

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

Шлейфы (ghosting)

Если вектор движения неточен или его нет — у частиц, прозрачных объектов, прокручиваемых текстур, — старый цвет «прилипает» к экрану, и за персонажем тянется хвост. Чтобы бороться с этим, TAA ограничивает историю диапазоном цветов соседних пикселей текущего кадра (neighborhood clamping). Хвосты укорачиваются, но мелкие детали, которые в текущем кадре не попали в выборку, режутся вместе с ними.

Смещение мип-уровней и мягкий фильтр

Ради стабильности под движением используется сглаженный фильтр восстановления шириной около двух пикселей, а текстуры подтягиваются с поправкой мип-уровней. Карис прямо пишет, что поверх можно добавить отдельный фильтр резкости — то есть мягкость тут не баг, а заложенный компромисс.
Вот и «ага»-момент: в статике TAA собирает больше информации, чем есть в одном кадре, а в движении — меньше, потому что историю приходится частично выбрасывать и размывать. Поэтому на скриншоте игра выглядит отлично, а при повороте мыши «плывёт». Это не ваш монитор и не сжатие видео.

Почему просто выключить TAA — плохая идея

Первое, что хочется сделать, — найти в настройках «Сглаживание: Выкл» или прописать отключение в конфиге. Иногда это работает, но чаще получается рябь, решётчатые волосы и шумные тени. Причина в том, что TAA давно стал не только сглаживанием, а общим шумодавом движка.
В том же докладе 2014 года есть раздел про «приятный побочный эффект»: раз TAA всё равно усредняет кадры, отражения в экранном пространстве и затенение окружающим светом можно считать с меньшим числом выборок и шумом, а TAA их «дочистит». Карис называет TAA «файрволом» в цепочке рендера. Там же он перечисляет следующих кандидатов на такой трюк: стохастическую прозрачность, мягкие тени, объёмный свет. Сегодня многие движки так и делают — считают эти эффекты «шумно», рассчитывая на последующее временное накопление. Убрали TAA — и все эти «полуфабрикаты» вылезают наружу.
Поэтому правильная логика не «выключить», а «заменить на временное сглаживание получше» или «дать TAA больше пикселей».

Пониженное разрешение: второе мыло, которое часто путают с первым

Многие игры по умолчанию считают кадр не в разрешении вашего монитора. Ползунок «Масштаб рендеринга» или «Screen Percentage» на 70–80%, включённое динамическое разрешение, которое при просадках FPS снижает его каждый кадр, или апскейлер в режиме Performance — всё это значит, что пикселей посчитано меньше, чем показано. В Unreal Engine временное сглаживание прямо совмещено с апскейлом: в документации Epic про сглаживание и апскейлинг TAAU по умолчанию работает вместе с Screen Percentage, а TSR в UE5 заявлен как способ приблизиться к качеству 4K при входном разрешении от 1080p.
Отличить одно мыло от другого просто. Остановите камеру и посмотрите на провода, сетку забора, текст на вывесках. Если и в покое мутно — дело в разрешении рендера. Если в покое чётко, а в движении плывёт — это TAA. Как устроены сами апскейлеры, какие у них режимы и множители, мы подробно разбирали отдельно.
Сначала определите, какое именно «мыло» вы видите: от этого зависит, что включать

Что с этим делать: от бесплатного к дорогому

1. Вернуть родное разрешение

Поставьте масштаб рендеринга на 100% и отключите динамическое разрешение, если FPS позволяет. Проверьте, что в Windows и игре выставлено родное разрешение монитора: картинка 1080p на 1440p-панели всегда будет мягкой.

2. Заменить TAA на DLAA или FSR Native AA

Это лучшая сделка для большинства. DLAA у NVIDIA и Native AA у AMD — это алгоритмы апскейлеров, работающие без апскейла, то есть с входом в 100% разрешения. По описанию AMD, режим Native AA в FSR 3 использует масштаб 1,0 по каждой оси, заменяет в игре любой TAA и даёт картинку лучше нативного рендера ценой самой высокой из режимов нагрузки. Логика та же, что у TAA, — история кадров, — но с более умным отбором того, что из истории выбросить. Шлейфов и мыла заметно меньше.
Если FPS не хватает, апскейлер в режиме Quality нередко выглядит лучше «родного» разрешения с обычным TAA: дело не в магии, а в том, что встроенный TAA игры часто проще.

3. Добавить резкость, но знать её предел

Фильтры резкости — штатные в игре, Radeon Image Sharpening, ползунок в DLSS — повышают контраст на границах. AMD прямо пишет, что её Contrast Adaptive Sharpening создавался под изображения после TAA, потому что временная обратная связь вносит переменное размытие, а адаптивная резкость подкручивает слабее там, где и так чётко. Но резкость не восстанавливает информацию, которой нет: если провод потерялся, она не нарисует его обратно. Перебор даёт белые ореолы вокруг краёв и подчёркивает шум, поэтому лучше немного не докрутить, чем перекрутить.

4. Отрендерить выше разрешения монитора: DLDSR и VSR

Самый «честный» способ: дать TAA больше пикселей, а потом сжать их под экран. У NVIDIA это DSR и его нейросетевая версия DLDSR. В анонсе драйвера от января 2022 года NVIDIA пишет, что DLDSR 2.25X по качеству сравним с DSR 4X, но быстрее, и работает на видеокартах RTX. Включается в Панели управления NVIDIA: «Управление параметрами 3D» → «Коэффициенты DSR». После этого в игре появляется новое разрешение, его и выбирают.
У AMD аналог — Virtual Super Resolution. В инструкции AMD по VSR сказано, что функция работает независимо от движка и фактически даёт суперсэмплинг тем играм, где его нет. Цена у обоих способов одна: видеокарта честно считает больше пикселей, и FPS падает. Поэтому это вариант для старых или нетяжёлых игр либо в паре с апскейлером: например, DLDSR выше разрешения экрана плюс DLSS Quality — популярная связка у тех, кому важна чёткость.

5. Отдельные эффекты

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

Миф: «мыло — это заговор ленивых разработчиков»

В сети популярна мысль, что TAA ставят, чтобы скрыть недоделанную графику. Реальность скучнее. Отложенный рендеринг сделал MSAA непрактичным, пост-фильтры не справляются с мерцанием, а суперсэмплинг слишком дорог. TAA оказался единственным массовым способом получить стабильную картинку без мерцания, и движки стали на него опираться. Сам Карис в выводах доклада пишет, что временной суперсэмплинг готов к продакшену, но «требует много перцептивной настройки» — и именно качество этой настройки отличает чёткую игру от мутной.
Так что претензия «почему мыло» справедлива, но адресована обычно не самой технологии, а её реализации в конкретной игре. Хорошие новости в том, что DLAA, FSR Native AA и апскейлеры позволяют заменить эту реализацию на более совершенную, не трогая остальной рендер. А если хочется разобраться, чем апскейл отличается от генерации кадров, у нас есть отдельный разбор.

Коротко

- Лесенки — следствие сетки пикселей. MSAA плохо работает с отложенным рендерингом и не лечит рябь внутри материалов, FXAA и SMAA мерцают в движении. - TAA копит информацию из прошлых кадров со сдвигом камеры на долю пикселя: в статике это почти суперсэмплинг, в движении — размытие, шлейфы и срезанные детали. - Выключать TAA обычно хуже: на него рассчитаны волосы, тени и отражения. - Сначала проверьте масштаб рендеринга и динамическое разрешение — это второе, независимое мыло. - Лучшие замены: DLAA или FSR Native AA, апскейлер в Quality, DLDSR/VSR при запасе FPS. - Резкость возвращает контраст, но не детали: держите её умеренной.
0

Пока нет комментариев

Мыло в играх: что такое TAA и как убрать размытие