Консервативное морфологическое сглаживание (CMAA) — обновление за март 2014 г.

Эта статья взята из блога Ли Дейвиса (Leigh Davies) на IDZ. Здесь описывается работа Ли и его коллеги Филипа Стругара (Filip Strugar) над новым алгоритмом сглаживания, который называется «консервативное морфологическое сглаживание». Ниже приводится содержимое блога и доступный для загрузки проект с исходным кодом.  

В этом примере представлена новая методика сглаживания на этапе постобработки, которая называется «консервативное морфологическое сглаживание». Здесь можно ее загрузить. Этот алгоритм был разработан в корпорации Intel (автор — Филип Стругар) для игры GRID2 компании Codemasters®. Он обладает более высокой производительностью по сравнению с традиционным сглаживанием с многоступенчатой выборкой (MSAA) и более высоким качеством по сравнению с существующими методиками сглаживания на этапе постобработки. В этом примере СМАА сравнивается сразу с несколькими популярными методиками постобработки и с аппаратным сглаживанием MSAA на сцене, отрисовываемой в реальном времени, и на существующем изображении. Эта сцена отрисована с помощью простой методики HDR и содержит простую анимацию, чтобы дать пользователю возможность сравнить обработку различными алгоритмами не только статических частей изображений, но и временных артефактов.

CMAA Sample using HDR & animating geometry

Алгоритм MSAA уже давно используется в компьютерных играх для сглаживания и повышения качества изображения. Обычный алгоритм MSAA работает, запуская пиксельный шейдер один раз для каждого пикселя, но тесты покрытия и наложения запускаются с более высоким разрешением (в 2–8 раз большим), затем результаты объединяются. Такой алгоритм работает значительно быстрее, чем сглаживание с избыточной выборкой, но все равно потребляет значительно больше ресурсов, чем при отсутствии сглаживания. Кроме того, его трудно использовать вместе с определенными методиками. Например, в этом примере используется нестандартный полноэкранный проход, который необходим для исправления цветовых тонов MSAA после HDR MSAA [статья Хумуса (Humus) в ShaderX6] [6].

Альтернативами сглаживанию MSAA являются сглаживание изображений на этапе постобработки (PPAA), реализованное при переносе морфологического сглаживания (MLAA) на ГП [Решетов, 2009] [1], а также дальнейшие разработки, такие как «расширенное субпиксельное морфологическое сглаживание» (SMAA) [2] и «быстрое приблизительное сглаживание» (FXAA) корпорации NVidia [3]. Эти методики сглаживания на этапе постобработки отличаются простотой в реализации (по сравнению с MSAA) и работают в сценариях, когда алгоритм MSAA нельзя использовать (например, при отложенном освещении и в других сценариях сглаживания, основанного не на геометрии), но они не обладают достаточной точностью обработки на субпиксельном уровне и менее стабильны с временной точки зрения. Кроме того, эти методики вызывают заметное размытие текстур и текста, поскольку алгоритмам обнаружения краев трудно различать между преднамеренными разрывами цветов и нежелательным сглаживанием, которое вызвано неточным рендерингом.
В настоящее время два следующих алгоритма сглаживания на этапе постобработки входят в число самых популярных.

  1. Алгоритм SMAA создан на основе MLAA, но обладает рядом усовершенствований и новшеств, а также несколькими настройками качества и производительности. В нем применяется усовершенствованное распознавание элементов изображения и адаптация локального контраста, а в более ресурсоемких разновидностях используется временная избыточная выборка, чтобы снизить временную нестабильность и повысить качество. Версия алгоритма SMAA, на которую ссылается этот документ, — последний общедоступный код v2.7.
  2. FXAA работает гораздо быстрее. Но в FXAA применяется гораздо более простая методика обнаружения разрыва цветов фигур, что приводит к значительному (и зачастую ненужному) размытию изображений. Кроме того, здесь по умолчанию довольно сильно ограничен размер ядра, поэтому сглаживание фигур с длинными краями выполняется недостаточно, а при повышении размера ядра существенно снижается производительность. В этом документе речь идет об алгоритме FXAA версии 3.8, если не указано иное (в последний момент в дополнение к версии 3.8 в пример была добавлена и новейшая версия 3.11)

В этом примере мы представляем новый алгоритм — консервативное морфологическое сглаживание (CMAA). СМАА удовлетворяет двум условиям, которым в настоящее время не соответствует ни один из существующих алгоритмов.

  1. Эффективная работа на ГП малой и средней мощности, например на интегрированных ГП, и при этом реализация высококачественного сглаживания. При разработке этого алгоритма мы установили предел в 3 мс при разрешении 1600 x 900 на процессоре Intel® Core™ 4-го поколения мощностью 15 Вт.
  2. Сведение к минимуму инвазивности, чтобы использовать алгоритм вместо 2xMSAA в самых разных областях, включая и наиболее сложные сценарии, такие как текст, повторяющиеся узоры, определенные геометрические формы (линии электропередач, проволочные заборы, листву) и движущиеся изображения.

С точки зрения потребления вычислительной мощности CMAA находится между FXAA и SMAA 1x (нагрузка составляет 0,9–1,2x по сравнению с FXAA 3.11 по умолчанию и 0,45–0,75x по сравнению с SMAA 1x) на ГП Intel HD Graphics 4-го поколения или более поздних. По сравнению с FXAA алгоритм СМАА обеспечивает гораздо более высокое качество изображения за счет правильной обработки линий краев длиной до 64 пикселей. СМАА основан на алгоритме, обрабатывающем только симметричные разрывы цветов, чтобы избежать ненужного размытия (а потому является более консервативным). По сравнению с SMAA 1x этот алгоритм производит сглаживание менее полно, поскольку обрабатывает меньше типов фигур, но также и вызывает меньше размытия, меньше искажений фигур и обладает повышенной временной стабильностью (меньше подвержен влиянию небольших изменений изображений в соседних кадрах).

CMAA содержит четыре простых логических шага (их порядок в конкретной реализации может не совпадать с изложенным здесь).

  1. Анализ изображения на предмет разрывов цветов (данные затем сохраняются в локальном сжатом «краевом» буфере). Этот метод используется не только в СМАА.
  2. Извлечение локальных доминирующих краев с небольшим ядром. (Уникальная разновидность существующих алгоритмов.)
  3. Обработка простых фигур.
  4. Обработка симметричных фигур с длинными краями. (Уникальная разновидность исходного алгоритма MLAA для обработки фигур.)

Шаг 1. Анализ изображения на предмет разрывов цветов (краев)

Обнаружение краев выполняется путем сравнения соседних цветов с помощью следующих алгоритмов:

  • сумма взвешенных по яркости поканальных различий цветов в цветовом пространстве sRGB (по умолчанию);
  • значение яркости, вычисленное по входным данным в цветовом пространстве sRGB (более быстрый способ);
  • взвешенное Евклидово расстояние [6] (наивысшее качество, самый медленный алгоритм).

Край (разрыв) существует, если разница между значениями соседних пикселей превышает заданный порог (который определяется эпмирически).

 dot( abs(colorA.rgb-colorB.rgb), float3(0.2126,0.7152,0.0722)) > fThreshold

Шаг 2. Обнаружение локально доминирующих краев (или устранение недоминирующих краев)
Этот шаг выполняет такую же задачу, что и «адаптация локального контраста» в SMAA и «тестирование локального контраста» в FXAA, но с ядром меньшего размера. Для каждого края, обнаруженного на шаге 1, значение разницы цветов, превышающее порог (dEc), сравнивается с аналогичным значением соседних 12 краев (dEn).

 The edge remains an edge if its dEc > lerp( average(dEn), max(dEn), ldeFactor), where ldeFactor is empirically chosen (defaults to 0.35).

Этот меньший размер ядра локальной адаптации несколько менее эффективен при увеличении дальности эффективного обнаружения краев. Но такой подход эффективнее при предотвращении размытия небольших фигур (например, текста), при уменьшении «шума» от менее заметных краев. Кроме того, в этом случае выше производительность и отсутствуют некоторые недостатки более крупных ядер (видимый переход размером с ядро от неразмытого к размытому).

Шаг 3. Обработка простых фигур

Края, обнаруженные на шаге 1 и уточненные на шаге 2, используются для формирования предположений о форме края перед его растеризацией (виртуальная фигура). Для обработки простых фигур все пиксели анализируются на предмет наличия фигур с 2, 3 и 4 краями, затем применяется передача цвета в соответствии с цветовым покрытием виртуальной фигуры и достижения эффекта локального сглаживания (рис. 4). Такая передача цвета не всегда симметрична, но искажения фигур сводятся к минимальному субпиксельному уровню.

 2-edge, 3-edge and 4-edge shapes; reconstructed virtual shape shown in yellow; black arrows showing anti-aliasing colour blending direction

4а. Шаг растеризации пикселей фигуры (как правило, с краями треугольной формы). Критерий для обнаружения показан на рис. 5. Обрабатываются четыре Z-образные ориентации (с разницей в 90°).

 Z-shape detection criterion is true if edges illustrated blue are present while red ones are not; green arrows show subsequent edge tracing

4б. Для каждой обнаруженной Z-образной фигуры определяется длина края влево/вправо путем отслеживания горизонтальных (для двух горизонтальных Z-образных фигур) краев с обеих сторон; отслеживание останавливается, если ни с одной из сторон таких краев нет или при обнаружении вертикального края (рис. 6).
4в. Длина края, полученная на предыдущем шаге, используется для восстановления расположения края виртуальной фигуры и для применения передачи цвета (к обеим сторонам Z-образной фигуры) в соответствии с покрытием для каждого пикселя. Этот шаг заменяет все сглаживание для этих же пикселей, сделанное на шаге 3.

 edge length tracing marked blue, with Z shape at center; reconstructed virtual shape shown in yellow; black arrows showing anti-aliasing colour blending direction

За счет естественной симметрии такого подхода лучше сохраняются цвета и фигуры всего изображения, исключаются «пограничные случаи», лучше сохраняются исходные формы, а также повышается временная стабильность.  Изменение одного пикселя (или нескольких пикселей) не приводит к значительному изменению цветов и фигур (по сравнению с SMAA 1X, FXAA 3.8/3.11 и более старыми алгоритмами на базе MLAA).

 Typical detection and handling of symmetrical Z shapes (circled in yellow)

 original image, edge detection and final anti-aliased image (with/without edges)

В тестовом примере пользовательского интерфейса показано прямое сравнение нескольких методик сглаживания, которые можно выбрать в раскрывающемся меню вместе с несколькими функциями отладки. Все изображения можно просмотреть с высоким уровнем детализации в окне увеличения, которое можно включить в интерфейсе и вывести на экран, щелкнув правой кнопкой мыши. Для CMAA и SAA отображается дополнительная информация для отладки, выделяются края, фактически обнаруженные алгоритмом. С помощью ползунка можно регулировать пороговое значение, используемое для обнаружения краев. В CMAA можно настроить и порог обнаружения краев, и порог удаления недоминирующих краев.

Влияние изменения порогового значения на производительность можно отследить, запустив приложение с отключенной синхронизацией вертикальной развертки. В верхнем левому углу приложения отображаются метрики производительности ГП, показаны общие затраты ресурсов на рендеринг сцены и время работы кода сглаживания на этапе посто­бработки. При просмотре статистики отображается дополнительная отладочная информация; окно увеличения и просмотр краев можно отключить, поскольку они снижают производительность за счет использования не вполне оптимального кода. При просмотре CMAA в окне увеличения с установленным флажком Show Edges (Показать края) в этом окне будет отображаться анимация применения CMAA к изображению, но остальные окна останутся неизменными.

Для точного профилирования каждой методики можно использовать кнопку Run benchmark for: … (Запустить измерение для...), чтобы включить автоматическую выборку и сравнение по множеству кадров, а результаты (разница во времени обработки по сравнению с версией без сглаживания) будут показаны в окне сообщения по завершении анализа.

 Debug information including zoombox and edge detection overlay.

Помимо отображения различных эффектов постобработки в сцене в реальном времени, приложение позволяет загрузить статическое изображение и использовать его в качестве исходного для применения эффектов. В настоящее время для этого поддерживается формат PNG. В папке образцов предоставляется синтетическое изображение (рис. 9). Попытки запуска примера с 2x MSAA и 4x MSAA не дадут результата, поскольку этот алгоритм влияет на источник изображения и не работает при постобработке, но зато к изображению можно применить CMAA, SMAA, FXAA и SAA. Эта возможность позволяет всем разработчикам, выбирающим методики постобработки, загружать изображения из своих приложений и экспериментировать с различными настройками пороговых значений.

Сравнение качества и производительности можно отследить по следующим показателям.

 Performance impact (frames per second) of an older implementation of CMAA and MSAA on a Consumer Ultra-Low Voltage (CULV) i7-4610Y CPU with HD Graphics 4200 GPU, in GRID2 by Codemasters®

 Cost and scaling of CMAA 1.3 and other post-process anti-aliasing effects measured using the sample from the article, applied 10 screenshots from various games, averaged, on Intel 4th generation CPUs (HD 5000 and GD5200 graphics) and AMD R9-290

 Quality comparison for text and image anti-aliasing. CMAA 1.3 manages high quality anti-aliasing of the image while preserving text and without over blurring the geometry.

 Quality comparison for synthetic shapes and game scenes with high frequency textures. CMAA preserves original high frequency texture data better than FXAA 3.11 and SMAA 1x, while still applying adequate anti-aliasing (although below the quality

 Quality comparison in a game 3D scene. CMAA preserves most of the original high frequency texture data and original geometry shapes, while still applying adequate anti-aliasing.

 Impact of various techniques on GUI elements. Any post-process AA should always be applied before GUI to avoid unwanted blurring, but there are cases when this is unavoidable (such as in a driver implementation or if the GUI is part of the 3D s

Справочные материалы
[1] MLAA, А. Решетов (2009). Морфологическое сглаживание. HPG’09: Proceedings of the
Conference on High Performance Graphics, 2009, pages 109–116, New York,NY, USA. ACM
[2] SMAA, Хорхе Хименес (Jorge Jimenez), Хосе Экеваррия (Jose Echevarria), Тьяго Суса
(Tiago Sousa) и Диео Гутиеррес (Diego Gutierrez), 2012,
JIMENEZ2012_SMAA,
SMAA: Enhanced Morphological Antialiasing, форум компьютерной графики (Proc.
EUROGRAPHICS 2012)
[3] NVidia «Быстрое приближенное сглаживание» (FXAA), Тимоти Лотт (Timothy Lottes) (2011),
http://developer.download.nvidia.com/assets/gamedev/files/sdk/11/FXAA_WhitePaper.pdf
[4] Венчеслас Бири (Venceslas Biri), Адриен Эрубель (Adrien Herubel), Стефан Деверли (Stephane Deverly), 2010. Практическое морфологическое
сглаживание на ГП. Обсуждение на ACM SIGGRAPH 2010 (SIGGRAPH '10). ACM, New York, NY,
USA, статья 45, 1 стр. DOI=10.1145/1837026.1837085
http://doi.acm.org/10.1145/1837026.1837085 http://igm.univ-mlv.fr/~biri/mlaa-gpu/MLAAGPU.pdf

[6] «Решение сопоставления оттенков для высококачественного сглаживания HDR в D3D10», ShaderX6

 
03-28-2014
03-28-2014
Graphics Tech Samples
 
 
 
http://software.intel.com/sites/default/files/managed/14/ec/CMAA_Fig1.png
This article was taken from a blog posting on IDZ by Leigh Davies at Intel Corp, highlighting work and results completed by Leigh and his colleague Filip Strugar in the new AA technique being referred to as Conservative Morphological Anti-Aliasing.
Для получения подробной информации о возможностях оптимизации компилятора обратитесь к нашему Уведомлению об оптимизации.
Теги: