Skip to content

Instantly share code, notes, and snippets.

@khades
Last active December 15, 2017 07:35
Show Gist options
  • Select an option

  • Save khades/60ed79750543384ddfc4367a55f3c6fc to your computer and use it in GitHub Desktop.

Select an option

Save khades/60ed79750543384ddfc4367a55f3c6fc to your computer and use it in GitHub Desktop.

В данном документике я опишу используемые сейчас типы сглаживания в компьютерных играх, так же называемые Антиалиаcингом.

Что же такое алиасинг?

Алиасинг — Искажения контура масштабируемых изображений, в том числе шрифтов, при воспроизведении их на экране низкого разрешения. В этих случаях изображения растрируются, то есть разбиваются на мелкие элементы (пикселы, или растровые точки), причем теоретический контур на выводе не совпадает с растровым из-за относительно больших размеров растровых точек. В результате погрешности в воспроизведении контура усиливаются, образуя зубчатый край, слипания деталей и другие нежелательные эффекты. (https://www.paratype.ru/help/term/terms.asp?code=7)

По факту этот дефект компьютерной графики геймеры называют "лесенкой".

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

Типы сглаживания, работающие на принципе множественной выборки.

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

SSAA\FSAA - Fullscreen\Supersampling antialiasing AKA Полноэкранное сглаживание

Логика - Сгенерировать 2\4\8 пикселей картинки на пиксель выводимого устройства, а потом различными методами сложить (очень много).

Плюсы

  • Самый красивый и точный способ сглаживание.

Минусы

  • Самый медленный способ, ssaa 4x генерирует для 1080p экрана 4k Картинку со всеми вытекающими, поэтому непрактичен.

MSAA - Multisample Antialiasing AKA Многосэмпловое сглаживание

Логика - Найти контуры всех 3D-моделей и сгенерировать для них 2\4\8 пикселей со смещением на пиксель устройства.

Имеет множество вариантов типа MFAA\CSAA\EQAA, распространения не получившие.

Плюсы

  • Быстрее SSAA.
  • Идеально выглядящие края 3D-объектов.

Минусы

  • Дополнительная нагрузка на этап дополнительной генерации может значительно просаживать производительность, особенно при большом количестве 3D-объектов.
  • Сама логика не очень хорошо ложится на современные многопоточные движки игр, изза этого от этой технологии повсеместно отказываются.
  • Покрывает только 3D-объекты, ни спрайты, ни текстуры, ни полупрозрачные текстуры не сглаживаются (Иногда полупрозрачные текстуры сглаживаются, технология называется Alpha to coverage, ATOC, почему проблемно - пункт выше).

Типы сглаживания, работающие после формирования изображения, так же известные как постпроцессные сглаживания

В 2011 году Тимоти Лоттес (Timothy Lottes) из компании nvidia выпустил способ сглаживания FXAA, который был очень быстрым и сглаживал всю картинку в отличии от MSAA, который работал как обычный графический эффект.

Выход FXAA дал толчку разработку подобных типов сглаживания, поэтому у них есть общие черты

  1. Сглаживают вообще всю картинку, поэтому надо использовать их до отрисовки 2D-объектов, чтобы их не сгладило (в паре игр включение такого типа сглаживания портит буквы в пользовательском интерфейсе).
  2. Очень быстры.
  3. Имеют артефакты изображения, известные как pixel crawling, заключающиеся в том, что неровные края медленно двигающихся фигур на экране имеют эффект "мерцания", лучше всего заметный в играх на траве и деревьях. Это связанно что итоговые формы объектов на экране после размытия не совпадают с их геометричкими формами.

FXAA - Fast aproximate antialiasing AKA быстрое приблизительное сглаживание

Логика - Найти все части изображения, который человек воспримет как "углы" и размыть

Плюсы

  • Очень быстрое и простое, поэтому может запуститься везде
  • Покрывает всё

Минусы

  • Мыльное из-за примитивных способов размывания углов

MLAA\SMAA\CMAA - Morphological Antialiasing AKA Морфологическое сглаживание и его потомки

MLAA - технология сглаживания, изначально работавшая на процессорах, поэтому не получила распространения, поэтому была переписанная компанией Intel в виде CMAA (Conservative Morphological AA, консервативное морфологическое сглаживание) и компанией Crytek в виде SMAA (Subpixel Morphological - субпиксельное морфологическое сглаживание)

Логика - Найти все части изображения, который человек воспримет как "углы", попытаться построить примитивную фигуру по этим углам и исходя из этой информации сгладить изображение

Плюсы

  • Так же очень быстрое как FXAA, Особенно CMAA
  • Не мыльное, из-за того что имеет информацию о позиции и направлении угла\лесенки на изображении, так что на скриншотах выглядит ОЧЕНЬ хорошо

Минусы

  • Из-за повышенной чёткости изображения становится заметен артефакт "разрыва" углов, например висящих в воздухе проводах, который связан что на исходной картинке этот провод так же нарисован разорванным

Temporal antialiasing - Временное сглаживание

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

Плюсы

  • Очень стабильное изображение, с неплохой детализацией объектов, которые бы в других случаях выглядели как объекты меньше пикселя, например те же самые свисающие провода. трава или ветки деревьев.
  • Довольно быстро, так как принцип сглаживания даёт повышение детализации изображения (теоретически) без увеличения разрешения и частоты кадров.
  • Разработчикам движков нравится как этот способ сглаживания справляется со всякими эффектами типа SSAO\HBAO и т д.

Минусы

  • Проблема "Ghosting" или гостинга - если картинка ВНЕЗАПНО меняется, отпечаток предыдущего изображения при примитивной логике сравнения останется на текущем кадре, поэтому этот тип сглаживания старательно обрастаем ОГРОМНЫМ количеством костылей для решения таких проблем
  • До сих пор не могут сделать нормально выглядящий вариант этого сглаживания, каждый разработчик решает сделать этот вариант сглаживания по своему, от нормальных реализаций в играх от EA (Battlefield 1 или Battlefront) или ID (Doom), мыльноватых от Bethesda (Skyrim SE или Fallout 4 в котором можно убрать слегка мыло ценою некоторых визуальных артефактов), до ужасно выцвевших с ужасными артефактами и шлейфами от Unreal (Unreal tournament, PUBG)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment