Алгоритм сглаживания
Быстрое приблизительное сглаживание ( FXAA ) — это алгоритм сглаживания в экранном пространстве, созданный Тимоти Лоттесом из Nvidia . [1]
FXAA 3 выпущен под лицензией общественного достояния . Более поздняя версия, FXAA 3.11, выпущена под лицензией BSD из 3 пунктов. [2]
Описание алгоритма
- Входными данными являются визуализированное изображение и, опционально, данные яркости. [3]
- Получите данные о яркости. [3] Эти данные могут быть переданы в алгоритм FXAA с этапа рендеринга в качестве альфа-канала, встроенного в изображение для сглаживания, рассчитанного на основе рендеринга изображения или аппроксимированного с использованием зеленого канала в качестве данных о яркости. [3]
- Найдите высококонтрастные пиксели, используя фильтр верхних частот, который использует данные яркости. [3] Найденные низкоконтрастные пиксели исключаются из дальнейшего изменения FXAA. [3] Фильтр верхних частот, который исключает низкоконтрастные пиксели, можно настроить для баланса скорости и чувствительности. [3]
- Используйте контраст между соседними пикселями, чтобы эвристически находить края и определять, находятся ли края в горизонтальном или вертикальном направлении. [3] Направление смешивания пикселя будет перпендикулярно обнаруженному направлению края на этом пикселе. [3]
- Рассчитайте один коэффициент смешивания для пикселя с высокой контрастностью, проанализировав данные яркости в сетке пикселей 3x3, при этом рассматриваемый пиксель является центральным пикселем. [3]
- Поиск вдоль обнаруженного края, чтобы определить, как долго идет этот край и в каком направлении идет фактический край, когда обнаруженный горизонтальный или вертикальный край заканчивается, чтобы учесть фактическое направление края для расчета второго коэффициента смешивания. [3] Этот шаг можно настроить для повышения качества, увеличив разрешение поиска и то, насколько далеко идет поиск, прежде чем поиск конца края прекратится, или для повышения скорости, уменьшив оба параметра. [3]
- Смешайте пиксель, используя выбранное направление смешивания и максимальное значение обоих рассчитанных коэффициентов смешивания. [3]
Сравнение
Главное преимущество этого метода перед обычным пространственным сглаживанием заключается в том, что он не требует больших вычислительных мощностей . Он достигает этого путем сглаживания нежелательных зубчатых краев (« зубцов ») [4] как пикселей , в соответствии с тем, как они выглядят на экране, а не путем анализа самой 3D-модели , как при обычном пространственном сглаживании. [1] Поскольку он не основан на фактической геометрии , он сглаживает не только края между треугольниками, но и края внутри текстур с альфа-смешением или те, которые возникают в результате эффектов пиксельного шейдера , которые невосприимчивы к эффектам многовыборочного сглаживания (MSAA). [5]
Недостатки заключаются в том, что высококонтрастные текстурные карты размываются, что FXAA необходимо применять до рендеринга элементов HUD игры, чтобы не повлиять на них, и что полигональные детали размером менее одного пикселя, которые были бы захвачены и отрисованы с помощью MSAA и SSAA, не могут быть захвачены и отрисованы с помощью одного FXAA.
Смотрите также
Ссылки
- ^ аб Лоттес, Тимоти (февраль 2009 г.). «FXAA» (PDF) . NVIDIA . Проверено 29 сентября 2012 г.
- ^ "opengl - Использование NVidia FxAA в моем коде: Какова модель лицензирования?". Stack Overflow .
- ^ abcdefghijkl Флик, Джаспер. "FXAA: Smoothing Pixels" . Получено 21 июля 2020 г. .
- ↑ Wang, James (19 марта 2012 г.). «FXAA: сглаживание на сверхсветовой скорости». NVIDIA. Архивировано из оригинала 21 февраля 2019 г. Получено 3 января 2013 г.
- ↑ Atwood, Jeff (7 декабря 2011 г.). "Быстрое аппроксимированное сглаживание (FXAA)". Coding Horror. Архивировано из оригинала 31 января 2014 г. Получено 30 сентября 2012 г.