Избыточная выборка (SSAA)
Множественная выборка (MSAA)
Выборка со смещением (Quincunx)
Множественная краевая выборка (CSAA, CFAA и EQAA)
Адаптивная выборка (AAA и TrAA)
Сглаживание постобработкой (FXAA и MLAA)
Субпиксельное сглаживание (SMAA и CMAA)
Временное сглаживание (TAA, TXAA, MFAA, TSSAA и DLAA)
Временное сглаживание на основе масштабирования (DLSS и FSR 2.0)
Любому человеку, игравшему в компьютерные игры, скорее всего знакомы «лесенки» на изображении. Какой бы реалистичной ни казалась графика, эти искажения мешают воспринимать игровую картинку как единое целое. Именно поэтому с начала появления 3D-игр производители видеокарт и игровых движков борются с ними с помощью сглаживания. Каким оно бывает и как работает?
Изображение, формируемое графическим движком компьютерной игры, отличается от картинки реальной видеозаписи не только уровнем реалистичности. В «сыром» виде 3D-картинка обладает большим количеством стыков полигонов разных цветов, которые игрок воспринимает как «лесенки».
С этим призвано бороться сглаживание. Несмотря на огромное количество его видов, основной принцип работы любого сглаживания, за исключением основанных на постобработке, прост: чтобы убрать искажения, для каждой точки на итоговой картинке просчитывается несколько точек, называемых сэмплами. Затем сэмплы объединяются и смешиваются, образуя итоговый цвет целевой точки. Количество сэмплов определяет уровень сглаживания, которое всегда кратно двум — 2x, 4x, и так далее.
В процессе эволюции видеокарт и графики в играх способы сглаживания тоже эволюционировали и усовершенствовались. Как же развивалось сглаживание в играх с появления компьютерной 3D-графики и по сей день?
Избыточная выборка (SSAA)
Избыточная выборка, или Super Sampling Anti-Aliasing (SSAA), является старейшим типом сглаживания. Суть его работы достаточно проста — картинка просчитывается в большем разрешении, а потом принудительно уменьшается до разрешения устройства вывода.
Несмотря на появление на сегодняшний день большого количества других типов сглаживаний, SSAA до сих пор является самым качественным методом, устраняющим искажения. Но при этом и самым требовательным — просчет картинки в большем разрешении кратно снижает производительность. Например, для игры в разрешении 1920 x 1080 при SSAA 4x видеокарте требуется просчитывать картинку размером 3840 x 2160 точек. Это значительно увеличивает требования к ее мощности и объему графической памяти. SSAA 4x снижает производительность в 2 раза и более, более щадящий SSAA 2x — примерно в полтора раза.
В 90-х годах графическое оборудование было не особо быстрым, поэтому проблема производительности с применением SSAA была достаточно острой. В итоге, массовые игры перешли на другие типы сглаживания. Но к концу первого десятилетия нового века AMD и NVIDIA возродили принудительный SSAA в драйверах. Для его применения в нужной игре необходимо принудительно включить настройку в драйвере и выбрать уровень сглаживания. Такой способ работает во многих приложениях, но бывают и редкие исключения: в некоторых играх он попросту не включается, в некоторых — приносит дополнительные артефакты изображения.
Принудительный способ может использоваться и для актуальных видеокарт, но во многих современных проектах и так есть встроенный SSAA в настройках. Правда, теперь под другим названием — масштаб изображения. Если классический суперсэмплинг был представлен кратными режимами, то современная реализация позволяет практически плавно настраивать исходное разрешение, чтобы добиться более точного компромисса между качеством и производительностью для каждой индивидуальной конфигурации оборудования.
К разновидности SSAA можно отнести и другие современные технологии: Dynamic Super Resolution (DSR) от NVIDIA и Virtual Super Resolution (VSR) от AMD. Кроме графики с этими технологиями просчитывается в повышенном разрешении и сам интерфейс игры, что делает его более мелким. Также драйвером накладывается размытие на итоговую картинку. Потери производительности при этом схожие.
Множественная выборка (MSAA)
Тяжесть SSAA подтолкнула компьютерный мир к поиску технологии, которая будет сглаживать края, но при этом не так сильно просаживать производительность. Ей стала Multi Sampling Anti-Aliasing (MSAA), или множественная выборка.
Принцип MSAA чем-то похож на SSAA, но с одним важным отличием. При SSAA в повышенном разрешении просчитывается вся картинка. При MSAA же сначала анализируется буфер глубины, а потом повышенное количество сэмплов накладывается только в местах, где видны стыки ребер полигонов. Это приводит к значительному повышению производительности по сравнению с аналогичным количеством сэмплов SSAA. Если первый при пресете 4x снижает производительность минимум в пару раз, то включение второго в таком же режиме стоит в среднем лишь около трети всей производительности.
Но есть у MSAA и свои недостатки. При движении в кадре может возникать небольшая рябь, для сглаживания прозрачных текстур он подходит плохо. В играх, чьи движки полагаются на отложенный рендеринг, из-за особенностей последнего реализовать MSAA достаточно сложно и более затратно для производительности. Поэтому чаще всего в таких проектах этот тип сглаживания можно вообще не обнаружить.
При всем этом MSAA за всю историю сглаживания — самый распространенный алгоритм, работающий как на старом, так и на новом оборудовании. Его можно встретить как в проектах прошлых лет, так и в современных, часто — в комбинации с другим доступным методом сглаживания. Однако штраф производительности MSAA на фоне современных методов довольно велик, из-за чего сейчас разработчики игр чаще всего обращают внимание на другие виды сглаживания.
Выборка со смещением (Quincunx)
В начале 2000-х, с приходом в игры DirectX 8 и шейдеров, компания NVIDIA разрабатывает новый тип сглаживания, который легче классического MSAA — Quincunx. Суть его работы отличается от предыдущих типов сглаживания и основана на смещении: вместо классических сэмплов строго по сетке точек берется сэмпл, смещенный на половину точки вправо и вверх.
По сути, видеокарта просчитывает только два сэмпла, как при MSAA 2x. Но из-за наличия смещенных точек каждому пикселю итогового изображения достается уже пять сэмплов, и само сглаживание даже превосходит MSAA 4x. Но есть у такого способа один существенный недостаток. Из-за того, что сэмплы берутся не только от целевой точки, но и от соседних, изображение теряет четкость и становится размытым.
После появления карт поколения DirectX 9 Quincunx применялся в игровых проектах все реже и реже, ведь мощности карт стало достаточно на MSAA, с которым не приходилось идти на компромиссы в виде размытости. Чуть позже можно было встретить более новую реализацию Quincunx в виде QSAA 2x, которая представляла собой комбинацию метода с SSAA 2x, но большого распространения и она не получила.
Множественная краевая выборка (CSAA, CFAA и EQAA)
С приходом карт поколения DirectX 10 и появлением универсальных шейдеров, NVIDIA решает улучшить стандартный мультисэмплинг и дает свет новой технологии — Coverage Sampling Anti-Aliasing, или CSAA. Он представляет собой гибридный подход, сочетающий усреднение результата MSAA с информацией от соседних пикселей. При одинаковом с MSAA количестве выборок, края при CSAA сглаживаются больше, а производительность ухудшается лишь незначительно. Работает такой метод только на картах GeForce 8000 серии и выше.
CSAA можно встретить в основном в проектах 2008-2011 годов, в дальнейшем игроделы технологию практически не использовали. Иногда встречается еще более редкий вариант — QCSAA, который удваивает количество выборок по сравнению с обычным вариантом. Недостатки у CSAA такие же, как и у его «родителя» MSAA. К тому же при слишком большом количестве выборок (а у QCSAA оно может достигать аж 64) производительность снижается довольно сильно.
Примерно в то же время компания AMD реализовала сглаживание, аналогичное CSAA, для карт Radeon. Оно получило название Custom Filter Anti-Aliasing (CFAA). CFAA обладает четырьмя уровнями качества, которые отличаются по принципу работы. Самый простой из них — Box. Это аналог MSAA без дополнительных выборок. Второй — Narrow-tent, дублирует возможности CSAA. Третий, Wide-tent, является аналогом QCSAA с большим количеством выборок. Последний — Edge-detect, тоже похож на QCSAA, но использует еще один проход, который в конце дополнительно проходит только по острым краям полигонов.
Преимущества и недостатки CFAA аналогичны разработке конкурента. Нативно CFAA поддерживается совсем небольшим количеством игр конца первого десятилетия, но принудительно может быть форсирован из драйвера для практически любого проекта, который поддерживает MSAA. В 2010 году AMD представлен еще один похожий вариант сглаживания — Enhanced Quality Anti-Aliasing (EQAA). Доработанный алгоритм должен показывать лучший результат, сохранив былую производительность.
Адаптивная выборка (AAA и TrAA)
Так как ни одно из сглаживаний, основанных на множественной выборке, не может справиться с прозрачными текстурами, в середине нулевых обе компании добавили в драйверы для видеокарт еще один метод сглаживания. Он имеет гибридный подход, который может справиться со сглаживанием прозрачных текстур, но при этом не так тяжел, как чистый SSAA. Это — Adaptive Anti-Aliasing (AAA) у AMD и Transparency Anti-Aliasing (TrAA) у NVIDIA.
Принцип работы такого сглаживания прост: берутся выборки как SSAA, так и MSAA. При минимальном для такого сглаживания значении 4x каждой из выборок делается по две, при значении 8x — комбинируется 2x SSAA с 4x MSAA. Такой подход довольно затратен для производительности, но все же легче классического SSAA 4x. Нативно в играх такая настройка практически никогда не встречается, но форсировать из драйвера ее можно для любой игры с поддержкой MSAA.
Сглаживание постобработкой (FXAA и MLAA)
В поисках метода сглаживания без потерь производительности производители видеокарт пришли к сглаживанию на основе постобработки готового изображения.
Первой такой способ в конце нулевых предложила NVIDIA, назвав его Fast approXimate Anti-Aliasing — FXAA. Его суть в том, что специальный алгоритм ищет на уже отрендеренной картинке края объектов. Затем пиксели, попавшие в эти зоны, сдвигаются на небольшое расстояние, чтобы создать размытие краев.
FXAA сглаживает все изображение, независимо от типов текстур. Но главный его недостаток в том, что он размывает изображение, делая его не таким четким. Хотя есть и плюсы — такой подход работает на шейдерах и минимально влияет на производительность. Даже на старых видеокартах производительность с FXAA остается практически такой же, как и без него.
Похожий подход использует сглаживание Morphological Anti-Aliasing (MLAA), первоначально разработанное Intel. В нем для вычислений используются не шейдерные процессоры видеокарты, а центральный процессор компьютера. Эта реализация дает меньшую размытость изображения, но взамен обладает другим недостатком — прозрачные текстуры она не сглаживает.
Субпиксельное сглаживание (SMAA и CMAA)
Сглаживание на основе постобработки — самое быстрое, но из-за размытости изображения подходит далеко не во всех ситуациях. Именно поэтому в начале второго десятилетия в игровых проектах появилось дальнейшее развитие технологий FXAA и MLAA. Оно получило название Subpixel Morphological Anti-Aliasing (SMAA). К созданию данного типа сглаживания приложили руку разработчики небезызвестных игр серии Crysis и оригинального Far Cry — компания Crytek.
Эта технология, как и множественная краевая выборка, насчитывает несколько реализаций. Самая простая из них — SMAA 1x. Этот алгоритм был создан на основе MLAA, и в новой реализации гораздо менее агрессивно работает с краями, практически не замыливая итоговое изображение.
Более сложный и качественный SMAA T2x вдобавок к этой технике использует временную компоненту. Реже встречающийся SMAA S2x вместо временной компоненты комбинирует постобработку с MSAA 2x. Старший, но при этом достаточно редко встречающийся в игровых проектах SMAA 4x комбинирует все вышеописанные способы, позволяя добиться максимального качества. Однако, в отличие от младших режимов, штраф производительности у него самый большой. Две базовые реализации SMAA — 1x и T2x — достаточно легки и не сильно влияют на производительность, чаще всего отнимается лишь несколько процентов. При этом они не мылят картинку, а по качеству T2x не сильно уступает младшим вариантам MSAA.
Благодаря комбинации методов SMAA 1x и FXAA появилось еще одно прогрессивное сглаживание — Conservative Morphological Anti-Aliasing (CSAA). Сочетая преимущества обоих типов, оно мылит изображение меньше FXAA, но при этом сглаживает линии лучше базового SMAA 1x. Производительность при таком методе практически не страдает, но по распространенности в играх CMAA уступает старшему брату.
Временное сглаживание (TAA, TXAA, MFAA, TSSAA и DLAA)
В годы появления SMAA NVIDIA уже работала над новым типом сглаживания, и вскоре после выхода GeForce 600 серии представила его публике. Оно получило название Temporal approXimate Anti-Aliasing (TXAA). Реализация от NVIDIA была разработана для ее собственных карт GeForce. И хотя начало было положено именно TXAA, популярность получила похожая по принципу работы технология Temporal Anti-Aliasing (TAA), которая работает на любых видеокартах. Именно она является самым распространенным типом сглаживания в современных игровых проектах на сегодняшний день.
Механизм временного сглаживания отличается от привычных методов использованием в качестве основы сглаживаемой картинки не только текущего, но и прошлых кадров изображения. При таком сглаживании в одном кадре используется только одна выборка. Движок игры собирает информацию о векторах движения объектов в каждом кадре, и для построения каждого нового кадра со сглаживанием использует сэмплы из прошлых кадров.
Такой подход дает качественное изображение, особенно в статике — где-то на уровне гибридного подхода AAA, часто превосходя MSAA. А в движении, благодаря используемой информации от прошлых кадров, не возникает мерцания, как при использовании MSAA и основанных на ней техник. Но есть у этого метода недостатки, несвойственные другим типам сглаживаний. Первый — размытость. В отличие от FXAA, который «мылит» все подряд, TAA часто переусердствует с тонкими линиями и краями, в результате чего они выглядят специфически «толсто» и довольно неестественно. Второй недостаток — шлейфы объектов, которые могут возникнуть при быстром движении камеры.
Несмотря на это, штраф к производительности у TAA небольшой — чуть выше SMAA, на уровне или чуть ниже MSAA 2x. Именно поэтому TAA и его разновидности являются основными типами сглаживания в современных играх. В некоторых проектах он даже сделан неотключаемым без возможности выбора альтернативного метода сглаживания. К тому же, по мере доработки алгоритмов, точность и качество такого сглаживания можно улучшить для каждой отдельной игры, что было невозможно с классическими методами сглаживания.
В 2015 году специально для карт линейки GeForce 900 NVIDIA представила Multi Frame Anti-Aliasing (MFAA). Он является комбинацией TAA с MSAA, являясь менее требовательным по сравнению с последним. Широкого распространения метод не получил, ограничившись лишь несколькими игровыми проектами.
Помимо вышеописанных методов, существует еще TSSAA — Temporal Super Sampling Anti-Aliasing, то есть комбинация возможностей TAA и SSAA. Он более качественный, но при этом и более «тяжелый» для графического оборудования. Нативно TSSAA можно найти лишь в нескольких игровых проектах. Сейчас разработчики предпочитают разделять TAA и SSAA, представляя последний как масштаб рендера в настройках игры. Такой подход более гибкий и позволяет точнее подстраиваться под производительность конфигурации.
Недавно компанией NVIDIA был представлен ещё один вид временного сглаживания — Deep Learning Anti-Aliasing (DLAA). Он комбинирует методы TAA с вычислениями на тензорных ядрах, присутствующих только в картах серии RTX.
Временное сглаживание на основе масштабирования (DLSS и FSR 2.0)
Временное масштабирование, если закрыть глаза на его небольшие недостатки, является лучшим способом сохранить качество при минимальных потерях производительности. Но появление трассировки лучей в 2018 году сделало поддерживающие её игровые проекты очень тяжелыми для рендера даже без всяких сглаживаний, а уж со сглаживанием — и тем более.
Именно поэтому после появления карт серии RTX компания NVIDIA представила технологию масштабирования Deep Learning Super Sampling (DLSS), которая была призвана убить двух зайцев одновременно: и производительность повысить, и про сглаживание при этом не забыть. В основе метода лежит все то же временное масштабирование, но с одним трюком. Если при обычном TAA каждый кадр рендерится в исходном разрешении, то при активном DLSS разрешение рендера меньше исходного. Несколько кадров пониженного разрешения алгоритм склеивает в один на основе все тех же векторов движения, образуя итоговую картинку. За счет рендера в меньшем разрешении поднимается производительность, за счет временной компоненты — добавляется сглаживание.
Для работы DLSS использует специальные тензорные ядра, входящие в состав видеокарт RTX. Первая версия DLSS, увидевшая свет в начале 2019, требовала предварительного обучения нейросети на суперкомпьютерах для каждой определенной игры, а в процессе работы постоянно сопоставляла картинку с эталонными примерами, «вшитыми» в игру. Это было достаточно неудобно для разработчиков и затрудняло внедрение алгоритма в большое количество игр. DLSS 2.0, датируемая 2020 годом, исправила эту недоработку, научив нейросеть анализировать картинку «на лету». Внедрять вторую версию технологии тоже стало легче, и вскоре ее стали поддерживать многие крупные игровые движки. Текущая версия DLSS поддерживает четыре пресета качества, отличающиеся входным разрешением. Благодаря этому можно гибко регулировать работу технологии для достижения нужной производительности. Качество изображения в старших режимах достаточно близко к нативной картинке со сглаживанием TAA.
Как и в случае с временным сглаживанием, уникальной для собственного железа разработка NVIDIA была недолго. Уже в этом году AMD выпустила на рынок аналогичную открытую технологию без привязки к определенному «железу» — Fidelity FX Super Resolution 2.0 (FSR 2.0).
Первая версия FSR представляла масштабирование с похожим на FXAA алгоритмом сглаживания. А вот вторая, как и DLSS, является масштабированием на основе временного сглаживания, только без задействования специфических тензорных ядер — в варианте AMD аналогичную работу выполняют шейдеры. К тому же, внедрить ее в игровые проекты при поддержке последними TAA очень просто, что в ближайшем будущем явно поспособствует массовому распространению FSR 2.0.
Как показывают тесты, FSR 2.0 при одинаковом исходном разрешении не уступает DLSS 2.0 ни в качестве, ни в производительности. Как и конкурент, разработка AMD имеет четыре пресета, благодаря которым можно гибко управлять работой технологии для достижения компромисса между качеством и производительностью.
Заключение
Сглаживание в играх прошло долгий путь, на всем протяжении которого уменьшалось его влияние на производительность: SSAA мог просадить количество кадров в несколько раз, а современные технологии масштабирования DLSS и FSR, наоборот, могут повысить производительность.
По этой причине раньше качественное сглаживание было доступно только топовым видеокартам, а сейчас его можно получить и на бюджетных — иногда почти «бесплатно», а иногда еще и вдобавок к повышенной производительности. Технологии временного сглаживания вытесняют прошлые разработки, и в ближайшем будущем их работа будет только совершенствоваться, радуя глаз игроков еще более четкой и сглаженной картинкой без отрицательного влияния на производительность.