Сглаживание
Сгла́живание (англ. anti-aliasing) — технология, используемая для устранения эффекта («лесенки» или «зубчатости»), возникающих на краях одновременно выводимых на экран множеств отдельных друг от друга плоских или объёмных изображений. Сглаживание было придумано в 1972 году в Массачусетском технологическом институте в Architecture Machine Group, которая позже стала основной частью Media Lab.
Основной принцип сглаживания
Основной принцип сглаживания — использование возможностей устройства вывода для показа оттенков цвета, которым нарисована кривая. В этом случае пиксели, соседние с граничным пикселем изображения, принимают промежуточное значение между цветом изображения и цветом фона, создавая градиент и размывая границу.
Применяется два варианта сглаживания:
- Общее сглаживание отрисовкой излишне крупного не сглаженного изображения с последующим уменьшением разрешения.
- Специализированные алгоритмы сглаживания, работающие на изображениях определённого типа (например, Алгоритм Ву для отрисовки отрезков).
Следует заметить, что сглаживание зависит от гаммы монитора. В частности, среднее между 0,2 и 0,8 — это не обязательно 0,5, а . Особенно это заметно на тонких узорах и тексте. Поэтому сглаживание наилучшего качества получается только тогда, когда известна.
Виды сглаживаний
Примечание: сглаживание влияет на фреймрейт (кол-во кадров в секунду) в зависимости от ПСП (пропускной способности памяти) видеокарты.
SSAA
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].
MSAA
Multisample Anti-Aliasing — алгоритм пришедший на смену SSAA, работающий только с геометрией, благодаря этому дающий схожий эффект сглаживания с SSAA, но при меньшей нагрузке.
CSAA
Coverage Sampling Anti-Aliasing — продолжение "эволюции" SSAA➔MSAA➔CSAA. Улучшение достигнуто за счёт того, что в буфер кадра передается ещё информация о субсэмпле с соседнего пикселя. Что в итоге помогает рассчитать более точное сглаживание. При равных уровнях (x2, x4, x8...) CSAA и MSAA, качество всегда будет выше у CSAA, а по нагрузке они примерно равны.
QCSAA
Quality Coverage Sampling Anti-Aliasing — улучшенная версия CSAA, за счёт использования вдвое большего количества сэмплов для анализа.
AAA
Adaptive Anti-Aliasing — у MSAA есть проблема при сглаживании краёв на прозрачных объектах. Данный алгоритм призван устранить данную проблему. Является объединением MSAA и SSAA. Данный вид рекомендуется обладателям мощных видеокарт. Используется только у AMD.
TrAA
Transparency Anti-Aliasing — аналог AAA, но от Nvidia.
CFAA
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 по отрендеренному изображению, для определённых им пикселей, которые определяются как границы полигонов или резкие цветовые переходы, используется более качественный метод антиалиасинга с большим количеством сэмплов, а для остальных пикселей с меньшим.
TXAA
Temporal approXimate Anti-Aliasing — алгоритм от Nvidia, который использует основу MSAA. В формуле расчёта используется время, данные по пикселям из предыдущих кадров и данные из обрабатываемой сцены. После чего происходит усреднение по цвету. Это позволяет избавиться от мерцания и дёрганья объектов в игре. Вдали даёт качественную картинку, однако немного мылит близкие объекты и нагрузка почти как у MSAA, хотя качество при тех же значениях лучше. Со слов разработчика, TXAAx2 сравнимо по качеству с MSAAx8, но по нагрузке сравнимо с MSAAx2, а TXAAx4 выше по качеству чем MSAAx8, но по нагрузке сравнимо с MSAAx4. Отлично подходит для сглаживания в динамике.
TAA
Temporal Anti-Aliasing — аналог TXAA, но не от Nvidia.
TSSAA
Temporal Super Sampling Anti-Aliasing — аналог TXAA, но не привязанный к видеокартам Nvidia и основывающийся на суперсэмплинге.
FXAA
Fast approXimate Anti-Aliasing — алгоритм от Nvidia[5], представляющий собой однопроходный пиксельный шейдер, который обсчитывает результирующий кадр на этапе постобработки. Является более производительным решением, по сравнению с традиционным MSAA, что, однако, сказывается на точности работы и качестве изображения.
MLAA
Morphological Anti-Aliasing — аналог FXAA от компании Intel. Ищет "зубчатые" границы на каждом кадре, похожие на буквы Z, L и U, и смешивает цвета соседних пикселей, входящих в каждую такую часть. Алгоритм переведён на использование процессора, а не видеокарты. Отсюда его можно рекомендовать обладателям слабых видеокарт с более-менее производительным процессором. Из-за более сложного алгоритма изображение получается более качественным, чем у FXAA. Имеется реализация у AMD, но технически может использовать и Nvidia. Имеет проблему: сглаживание не работает на прозрачных текстурах. Поэтому в довесок этой постобработки нужно подключать ещё и TrAA или AAA для улучшения изображения. Время обработки занимает 0,9 мс. Так же есть алгоритмы MLAA реализованные на видеокартах.
MFAA
Multiframe Sampled Anti-Aliasing — алгоритм от Nvidia, эксклюзивный для видеокарт поколения Maxwell. Благодаря чередованию позиций выборок, MFAAx4 оказывает такое же влияние на производительность, как и MSAAx2, однако обеспечивает качество изображения на уровне MSAAx4.[6]
SRAA
Subpixel Reconstruction Anti-Aliasing — двухпроходный алгоритм от Nvidia. Очень схож с MLAA, но работает с буферами глубины и картами нормалей, из-за чего лучше определяет границы для сглаживания и затененные края. Время выполнения в целом очень низкое, основное время в алгоритме уходит на обработку затенения. На выходе могут появляться артефакты. Для сравнения, на сглаживание изображения с разрешением 1280x720 (HDV 720p) методом SSAA уходит около ~5-10 мс, а SRAA 1,8 мс.
SMAA
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 мс.
CMAA
Conservative Morphological Anti-Aliasing — комбинация из FXAA и SMAAx1. Идеально подходит для слабых и средних видеокарт. Отличие от FXAA происходит за счёт обработки линий краёв длиной до 64 пикселей. Используется алгоритм, с обрабатыванием только симметричных разрывов цветов, чтобы избежать ненужного размытия. Отличие от SMAAx1 происходит за счёт менее полного сглаживания объектов, т. к. обрабатывается меньше типов фигур и обладает повышенной временной стабильностью, т. е. меньше мерцаний объектов.
См. также
Примечания
- AnandTech — AMD’s Radeon HD 5870: Bringing About the Next Generation Of GPUs
- Jason Gregory and Jeff Lander. Game Engine Architecture (неопр.). — A K Peters, Ltd., 2009. — С. 39. — ISBN 9781568814131.
- M. Carmen Juan Lizandra. Graphic libraries for Windows programming (неопр.) // Crossroads, the ACM Student Magazine. — ACM, 2000. — June (т. 6, № 4). — doi:10.1145/333424.333433.
- Rayce185. Anti-aliasing: The Basics . overclock (январь 2009).
- http://developer.download.nvidia.com/assets/gamedev/files/sdk/11/FXAA_WhitePaper.pdf
- Nvidia. ТЕХНОЛОГИЯ MFAA . nvidia.com.ua. nvidia.com.ua. Дата обращения: 17 апреля 2020.
Литература
- Данил Гридасов. Под микроскопом. GeForce CSAA vs. Radeon CFAA . i3D-Quality. iXBT (23 октября 2008). Дата обращения: 30 сентября 2010.
- Kristof Beets, Dave Barron. Анализ методов сглаживания на основе super-sampling . iXBT (7 июня 2000). Дата обращения: 30 сентября 2010.
- Technical Report CSAA (30 октября 2006).