Хабрахабр

[Перевод] SMAA: улучшенное субпиксельное морфологическое сглаживание

Данная статья основана на журнале Хорхе Хименеса, Хосе Эчеварриа, Тиаго Соуса и Диего Гутьерреса.

На моём GTX 960 2GB оно работает вполне нормально. Их демо реализации SMAA можно посмотреть здесь (файл .exe).

Старые способы сглаживания (антиалиасинга)

Долгие годы стандартами для реализации сглаживания были методы MSAA (Multisampling Antialiasing) и SSAA (Supersampling Antialiasing). На самом деле, они и по-прежнему обеспечивают наивысшее качество среди всех современных методов сглаживания. Как мы знаем, алиасинг возникает из-за нехватки сэмплов, как на пространственном (ломаные линии), так и на временном уровне (мерцание), обычно рядом с гранями и областями изображения с высоким/низким контрастом. Для борьбы с ним у нас имеются два способа, которые когда-то были единственными решениями: Supersampling и Multisampling. При суперсэмплинге мы увеличиваем изображение, а затем снижаем его дискретизацию до нужного разрешения. Этот принцип отлично работает, потому что распространяется на все аспекты проблемы. При мультисемплинге используется похожее решение. В этом методе каждый сэмпл дублируется на основание определённого коэффициента. При современных больших разрешениях для этого требуются достаточно мощные графические карты. Поэтому нам нужны новые методы сглаживания, как на пространственном, так и на временном уровнях. Все эти методы используют в своей работе один алгоритм — распознавание краёв. Но они выполняют и другие операции.

Современные способы сглаживания

Существует множество современных основанных на фильтрации методов, которые хорошо справляются со своей работой, несмотря на то, что уступают двум перечисленным выше. FXAA, DEAA, GPAA, GBAA, CSAA, EQAA, DLAA… В этой статье мы поговорим о SMAA, и о его предшественнике — MLAA. Эти современные основанные на фильтрации методы имеют собственные проблемы:

  • Большинство алгоритмов распознавания краёв, которые лежат в основе этих методов, учитывают только численные различия между пикселями и игнорируют то, как они отображаются зрителю.
  • Исходная форма объекта не всегда сохраняется, общее скругление углов почти всегда чётко заметно на текстах, резких углах и субпиксельных элементах.
  • Большинство решений рассчитано на обработку только горизонтальных или вертикальных паттернов, и игнорирует диагонали.
  • Реальные субпиксельные элементы и субпиксельное движение обрабатывается неверно. Алиасинг отражений (specular) и затенения (shading) устраняются не полностью.

Как можно догадаться, мы подняли эти проблемы потому, что хотим их устранить.

Морфологическое сглаживание (Morphological Antialiasing, MLAA)

MLAA пытается оценить покрытие исходной геометрии. Для точной растеризации сглаженного треугольника необходимо вычислить площадь покрытия каждого пикселя внутри треугольника, чтобы правильным образом смешать его с фоном. MLAA начинает с изображения без сглаживания, а затем обращает процесс вспять, векторизируя силуэты, чтобы вычислить покрываемые ими площади. Поскольку фон после растеризации узнать нельзя, MLAA затем смешивает его с соседом, предполагая, что его значение близко к значению исходного фона. Другими словами, алгоритм распознаёт границы (с помощью информации о цвете или глубине), а затем обнаруживает в них конкретные паттерны. Сглаживание обеспечивается интеллектуальным смешиванием пикселей в границах. MLAA имеет реализации на DirectX 10 и Mono Game (XNA). Он честно реализован в таких играх, как Fable II. Создатели MLAA позже создали SMAA, или Enhanced Subpixel Morphological Antialiasing (усовершенствованное субпиксельное морфологическое сглаживание), которое является основной темой данной статьи.

MLAA в действии

Enhanced Subpixel Morphological Antialiasing (SMAA)

Сравнение SMAA и других методов в Crysis 2

Кроме того, SMAA не изменяет форму геометрии, как это делают многие другие методы. SMAA обеспечивает надёжное распознавание краёв, а также простой и эффективный способ обработки острых геометрических элементов и диагональных линий.

Вверху — AA нет; в середине — MLAA; внизу — SMAA

В частности, распознавание краёв улучшено благодаря использованию информации о цвете вместе с адаптацией локального контраста для создания более чётких краёв. SMAA построен на конвейере MLAA, и улучшает или переосмысливает каждый его этап. Наконец, он показывает, как морфологическое сглаживание можно точно скомбинировать с мультисемплингом или суперсемплингом и временной репроекцией. Метод расширяет количество паттернов, используемых для сохранения резких геометрических элементов и диагоналей.

Распознавание краёв

Распознавание краёв — важнейший этап, потому что нераспознанные края остаются искажёнными. С другой стороны, слишком большое количество краёв с фильтрацией снижает качество сглаженного изображения. Для распознавания края может использоваться различная информация: цветность, яркость, глубина, нормаль поверхности и их сочетание. SMAA по четырём причинам использует яркость (luma):

  1. Меньше артефактов.
  2. Яркость всегда видима.
  3. Она может справляться с искажениями затенения.
  4. И, наконец, она быстрее, чем цветность (chroma).

Слева и в центре: другие методы распознавания краёв, приводящие к появлению красных пересечений и артефактов; справа: совершенно чёткие края SMAA

Вот как работает распознавание краёв: окончательное вычисленное значение — это булево значение, называемое граница левого края. Запомните это изображение. Формула: Аналогичным образом вычисляются булевы значения для верхнего края.

$c_= max\left(c_l, c_r, c_b, c_i, c_{2l}\right)$

5.c_{max}$" data-tex="display"/> <img src="https://habrastorage.org/getpro/habr/formulas/973/d2c/cea/973d2ccea8e7fb5b2fc1b6bf5c90b235.svg" alt="$e_l^\prime = e_l \wedge c_l > 0.

Все значения c называются дельтами контраста.

Обработка паттернов

Распознавание паттернов SMAA позволяет сохранять резкие геометрические элементы, например, углы, обрабатывает диагонали и обеспечивает точный поиск расстояний.

Чтобы избежать этого, SMAA использует наблюдение о том, что пересечение краёв в линиях контуров имеет максимальный размер один пиксель, а для острых углов эта длина скорее всего будет больше. Острые геометрические элементы: ревекторизация силуэтов в MLAA склонна к скруглению углов. Поэтому SMAA берёт пересекающиеся края длиной в два пикселя, что позволяет выполнять менее агрессивную обработку углов.

Он состоит из двух следующих этапов: Диагональные паттерны: мы добавили совершенно новый способ распознавания диагональных паттернов.

  1. Поиск диагонального расстояния $d_l$ и $d_r$ слева и справа от диагональных линий.
  2. Получение пересекающихся краёв $e_1$ и $e_2$.
  3. Пользуясь этой входной информацией, мы определяем конкретный диагональный паттерн для доступа к заранее вычисленной текстуре области, получая области $a_t$ и $a_b$.

Если распознавание диагональных паттернов завершилось неудачей, то запускается распознавание ортогональных паттернов.

Для ускорения этого процесса MLAA активно применяет аппаратную интерполяцию. Точный поиск расстояний: ключом к распознаванию и классификации паттернов является получение точного расстояния края (длины до обоих концов линии). Эта линейная интерполяция двух двоичных значений (то есть билинейная), создающая одно значение с плавающей запятой, описываемое следующей формулой: Аппаратную билинейную фильтрацию можно использовать для получения и кодирования до четырёх различных значений за одну операцию доступа к памяти.

$f_x(b_1,b_2,x) = x.b_1(1-x).b$

Где $b_1$ и $b_2$ — это два двоичных значения (0 или 1), а $x$ — значение интерполяции.

Результаты

MLAA работает с одним сэмплом на пиксель. Что приводится к субсемплированию, из-за которого реальные субпиксельные элементы воссоздать невозможно.

Сравнение MLAA с SMAA и отсутствием AA

Это приводит к следующему: Однако SMAA работает на субпиксельном уровне.

  • Локальный контраст
  • Распознавание диагональных паттернов
  • Резкие геометрические элементы
  • Точный поиск

Всё это можно увидеть на изображении ниже, где эти аспекты сравниваются с результатами других методов. На самом деле, SMAA может создавать результаты, близкие к SSAA 16x.

Излишние затраты, создаваемые каждым из этих решений, незначительны. В частности, адаптация локального контраста занимает всего 0,08 мс, распознавание резких геометрических элементов и точные расстояния занимают 0,01 мс, а обработка диагоналей добавляет лишних 0,12 мс. Проще говоря, SMAA довольно быстр, медленнее, чем SSAA и MSAA, но более плодотворен и менее ресурсоёмок.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть