Экранное сглаживание

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Пример сглаживания — изображение слева не сглажено, к изображению справа применено сглаживание x4.
Буква а с ClearType-сглаживанием (слева) и без сглаживания (справа) на TFT-мониторе.
Пример сэмплов в сглаживании.

Сгла́живание (англ. anti-aliasing) — технология, используемая в обработке изображений с целью сделать границы кривых линий более гладкими, убирая возникающие на краях объектов «зубцы». Впервые сглаживание было применено в 1972 году в Массачусетском технологическом институте в Architecture Machine Group, которая позже стала основной частью MIT Media Lab.

Основной принцип сглаживания

[править | править код]

Основной принцип сглаживания — использование возможностей устройства вывода для показа оттенков цвета, которым нарисована кривая. В этом случае пиксели, соседние с граничным пикселем изображения, принимают промежуточное значение между цветом изображения и цветом фона, создавая градиент и размывая границу.

Применяется два варианта сглаживания:

  • Общее сглаживание отрисовкой излишне крупного не сглаженного изображения с последующим уменьшением разрешения.
  • Специализированные алгоритмы сглаживания, работающие на изображениях определённого типа (например, Алгоритм Ву для отрисовки отрезков).

Следует заметить, что сглаживание зависит от гаммы монитора. В частности, среднее между 0,2 и 0,8 — это не обязательно 0,5, а . Особенно это заметно на тонких узорах и тексте. Поэтому сглаживание наилучшего качества получается только тогда, когда известна.

Виды сглаживаний

[править | править код]

Примечание: сглаживание влияет на фреймрейт (кол-во кадров в секунду) в зависимости от ПСП (пропускной способности памяти) видеокарты.

Deep Learning Anti-Aliasing — эксклюзивная для RTX видеокарт технология сглаживания, опирающаяся на искусственный интеллект, которая использует тот же процесс, что и DLSS от Nvidia. В целом, это та же DLSS, только без масштабирования. Вместо того, чтобы увеличивать изображение, Nvidia использует свои технологии с искусственным интеллектом для улучшения сглаживания в родном разрешении.

Чтобы понять, что такое DLAA, нужно обратиться к TAA. TAA собирает только один образец на пиксель, в отличие от MSAA, которая собирает несколько образцов. Эти образцы собираются для получения среднего значения цвета, сглаживая неровности. TAA «трясет» пиксели во время сбора образцов, что позволяет собрать больше информации для усреднения без использования нескольких образцов.

Это отличное решение, и оно превосходит по качеству MSAA, при значительно меньших затратах на производительность. Но проблема в том, что TAA не очень хорошо справляется с движением. Образцы из дрожащих пикселей приводят к появлению шлейфа и не могут быть использованы, когда в сцене что-то перемещается. Это печально известная сторона TAA.

DLAA — это та же TAA, но она решает проблему с движением. Модель искусственного интеллекта может отслеживать движение, изменение освещения и края сцены и вносить соответствующие коррективы. Это позволяет обойти старые образцы, с которыми приходится иметь дело TAA, и получить более чистое изображение. Единственное различие между ними заключается в том, что DLSS использует сглаживание для получения приемлемого качества изображения, не теряя в производительности, а DLAA использует сглаживание для обеспечения наилучшего качества изображения, жертвуя производительностью.

Supersample Anti-Aliasing — избыточная выборка сглаживания[1], также называемое полноценным или полноэкранным сглаживанием[2], используется для исправления алиасинга «зубцов» на полноэкранных изображениях[3]. SSAA было доступно на ранних видеокартах, вплоть до DirectX 7. В модельный ряд AMD HD6ХХХ он включён в качестве особенности (только для игр на DirectX 9), также он был включён в драйверы NVIDIA Fermi для всех игр, начиная с игр на DirectX 9 и заканчивая играми на DirectX 11 с использованием любых видеокарт NVIDIA с поддержкой DirectX 10 и выше.

В результате изображение с SSAA выглядит более мягко и реалистично. Однако у фотографических изображений с простым сглаживанием (например, суперсэмплинг, а затем усреднение) может ухудшиться внешний вид некоторых типов линейных рисунков или диаграмм (изображение будет выглядеть размыто), особенно там, где линии наиболее горизонтальны или вертикальны. В этих случаях может быть использован хинтинг.

Полноэкранное сглаживание позволяет устранить характерные «зубцы» на границах полигонов. Однако следует учитывать, что полноэкранное сглаживание сильно нагружает видеокарту, что приводит к падению частоты кадров.

Качество сглаживания ограничено пропускной способностью видеопамяти, поэтому видеокарта с быстрой памятью сможет просчитать полноэкранное сглаживание с меньшим ущербом для производительности, чем слабая видеокарта. Сглаживание можно включать в различных режимах. Например, сглаживание x4 даст более качественное изображение, чем сглаживание x2, но значительно снизит производительность. Сглаживание SSAAx2 удваивает разрешение, тогда как SSAAx4 его учетверяет[4].

Multisample Anti-Aliasing — алгоритм пришедший на смену SSAA, работающий только с геометрией, благодаря этому дающий схожий эффект сглаживания с SSAA, но при меньшей нагрузке.

Coverage Sampling Anti-Aliasing — продолжение «эволюции» SSAA➔MSAA➔CSAA. Улучшение достигнуто за счёт того, что в буфер кадра передается ещё информация о субсэмпле с соседнего пикселя. Что в итоге помогает рассчитать более точное сглаживание. При равных уровнях (x2, x4, x8…) CSAA и MSAA, качество всегда будет выше у CSAA, а по нагрузке они равны.

Quality Coverage Sampling Anti-Aliasing — улучшенная версия CSAA, за счёт использования вдвое большего количества семплов для анализа.

Adaptive Anti-Aliasing — у MSAA есть проблема при сглаживании краёв на прозрачных объектах. Данный алгоритм призван устранить данную проблему. Является объединением MSAA и SSAA. Данный вид рекомендуется обладателям мощных видеокарт. Используется только у AMD.

Transparency Anti-Aliasing — аналог AAA, но от Nvidia.

Custom Filter Anti-Aliasing — алгоритм, включающий в себя 4 фильтра: box, narrow-tent, wide-tent и edge-detect. Каждый фильтр, это разный подход к реализации MSAA. Используется только у AMD.

  • box: стандартный MSAA.
  • narrow-tent: аналог CSAA.
  • wide-tent: аналог QCSAA.
  • edge-detect: при проходе фильтра edge detection по отрендеренному изображению, для определённых им пикселей, которые определяются как границы полигонов или резкие цветовые переходы, используется более качественный метод антиалиасинга с большим количеством семплов, а для остальных пикселей с меньшим.

Temporal approXimate Anti-Aliasing — алгоритм от Nvidia, который использует основу MSAA. В формуле расчёта используется время, данные по пикселям из предыдущих кадров и данные из обрабатываемой сцены. После чего происходит усреднение по цвету. Это позволяет избавиться от мерцания и подёргивания объектов в игре. Вдали даёт качественную картинку, однако немного мылит близкие объекты и нагрузка почти как у MSAA, хотя качество при тех же значениях лучше. Со слов разработчика: TXAAx2 сравнимо по качеству с MSAAx8, но по нагрузке сравнимо с MSAAx2, а TXAAx4 выше по качеству чем MSAAx8, но по нагрузке сравнимо с MSAAx4. Отлично подходит для сглаживания в динамике.

Temporal Anti-Aliasing — аналог TXAA, но не от Nvidia.

Temporal Super Sampling Anti-Aliasing — аналог TXAA, но не привязанный к видеокартам Nvidia и основывающийся на суперсэмплинге.

Fast approXimate Anti-Aliasing — алгоритм от Nvidia[5], представляющий собой однопроходный пиксельный шейдер, который обсчитывает результирующий кадр на этапе постобработки. Является более производительным решением, по сравнению с традиционным MSAA, что, однако, сказывается на точности работы и качестве изображения.

Morphological Anti-Aliasing — аналог FXAA от компании Intel. Ищет «зубчатые» границы на каждом кадре, похожие на буквы Z, L или U, и смешивает цвета соседних пикселей, входящих в каждую такую часть. Алгоритм переведён на использование процессора, а не видеокарты. Отсюда его можно рекомендовать обладателям слабых видеокарт с более-менее производительным процессором. Из-за более сложного алгоритма изображение получается более качественным, чем у FXAA. Имеется реализация у AMD, но технически может использовать и Nvidia. Имеет проблему: сглаживание не работает на прозрачных текстурах. Поэтому в довесок этой постобработки нужно подключать ещё и TrAA или AAA для улучшения изображения. Время обработки занимает 0,9 мс. Так же есть алгоритмы MLAA реализованные на видеокартах.

Multiframe Sampled Anti-Aliasing — алгоритм от Nvidia, эксклюзивный для видеокарт поколения Maxwell. Благодаря чередованию позиций выборок, MFAAx4 оказывает такое же влияние на производительность, как и MSAAx2, однако обеспечивает качество изображения на уровне MSAAx4.[6]

Subpixel Reconstruction Anti-Aliasing — двухпроходный алгоритм от Nvidia. Очень схож с MLAA, но работает с буферами глубины и картами нормалей, из-за чего лучше определяет границы для сглаживания и затененные края. Время выполнения в целом очень низкое, основное время в алгоритме уходит на обработку затенения. На выходе могут появляться артефакты. Для сравнения, на сглаживание изображения с разрешением 1280x720 (HDV 720p) методом SSAA уходит около ~5-10 мс, а SRAA 1,8 мс.

Subpixel Morphological Anti-Aliasing — комбинация из MSAA, SSAA и MLAA. По сути улучшенный MLAA с добавлением локального контраста, поиском паттернов и использованием большего числа семплов. Иногда может добавляться ещё и временная избыточная выборка. Ресурсов потребляет больше чем MLAA, но задействует при этом видеокарту, а не процессор.

Можно встретить разновидности:

  • SMAAx1: классический алгоритм SMAA, включающий точный поиск расстояний, работа с локальным контрастом для определения краёв, геометрических объектов и поиск диагональных линий. Время обработки занимает 1,02 мс.
  • SMAATx2: SMAA x1 + алгоритмы из TSSAA. Время обработки занимает: 1,32 мс.
  • SMAASx2: SMAA x1 + алгоритмы из MSAA. Время обработки занимает: 2,04 мс.
  • SMAAx4: SMAA x1 + алгоритмы из SSAA, MSAA, TSSAA и TMSAA. Время обработки занимает: 2,34 мс.

Conservative Morphological Anti-Aliasing — комбинация из FXAA и SMAAx1. Идеально подходит для слабых и средних видеокарт. Отличие от FXAA происходит за счёт обработки линий краёв длиной до 64 пикселей. Используется алгоритм, с обрабатыванием только симметричных разрывов цветов, чтобы избежать ненужного размытия. Отличие от SMAAx1 происходит за счёт менее полного сглаживания объектов, так как обрабатывается меньше типов фигур и обладает повышенной временной стабильностью, то есть меньше мерцаний объектов.

Примечания

[править | править код]
  1. AnandTech — AMD’s Radeon HD 5870: Bringing About the Next Generation Of GPUs. Дата обращения: 15 марта 2011. Архивировано 17 марта 2011 года.
  2. Jason Gregory and Jeff Lander. Game Engine Architecture (неопр.). — A K Peters, Ltd.[англ.], 2009. — С. 39. — ISBN 9781568814131.
  3. M. Carmen Juan Lizandra. Graphic libraries for Windows programming (неопр.) // Crossroads, the ACM Student Magazine. — ACM, 2000. — June (т. 6, № 4). — doi:10.1145/333424.333433.
  4. Rayce185. Anti-aliasing: The Basics. overclock (январь 2009). Дата обращения: 12 мая 2018. Архивировано 13 мая 2018 года.
  5. Источник. Дата обращения: 12 июня 2011. Архивировано 12 ноября 2020 года.
  6. Nvidia. ТЕХНОЛОГИЯ MFAA. nvidia.com.ua. nvidia.com.ua. Дата обращения: 17 апреля 2020. Архивировано 23 июля 2018 года.

Литература

[править | править код]