Сглаживание в играх что это такое
Сглаживание в играх
Всем привет! Я решил немного разбавить свои блоги, небольшими статьями про графические и технические особенности игр. Эти статьи не будут частым гостем, я думаю раз в пару месяцев.
Первой технологией, которую мы с вами разберём станет – сглаживание. Почему именно она? Да потому, что данная тема тесно связанна с тем, как найти идеальный компромисс между вашими аппаратными ограничениями и отображаемой картинкой на экране.
Как всегда две версии: видео и текстовая.
Зачем оно нужно?
В Blender я создал простой куб, и пока камера направленна параллельно к одной из его плоскостей то, кажется, словно всё отлично. Но стоит немного повернуть, как мы тут же увидим, как на его гранях появились лесенки. Которые будут постоянно перестраиваться при движении. А теперь представьте, что происходит в играх, которые наполнены огромным количеством постоянно двигающихся объектов, правильно всё будет создавать эффект эдакого «мельтешения».
Похожий принцип будет и со шрифтами. Ведь изначально в Windows используется алгоритм сглаживания – ClearType. И вот если его отключить, то мы можем наглядно наблюдать за тем, как наши гладкие шрифты покрываются рубцами.
Причина этого проста – наши мониторы выводят изображение дискретно, то есть пиксель либо залит закрашен, либо нет. Ну а как мы все знаем, пиксели квадратные, и из этого следует то, что идеальными линиями могут быть только вертикальные и горизонтальные. А все другие объекты, которые находятся под углом будут отображаться с помощью пикселей, которые находятся по диагонали. На отдаление это может и вправду показаться что линия ровная, но стоит приблизить, как эта иллюзия тут же рушится.
Поэтому при сглаживании мы и используем соседние пиксели, которые могли бы сгладить всё это подходящим оттенком. Но мало просто иметь возможность задать полутона, нужно каким-то образом машине объяснить, какие для этого цвета вообще нужно объединить и где их применять.
Сглаживание в играх
Перед тем как я начну рассказывать про каждый из часто встречаемых алгоритмов сглаживания, стоит кратко упомянуть как вообще происходит подготовка кадра:
Это важно понимать ведь в зависимости от алгоритма, сглаживание может применяться как к готовому 2D кадру, так и на этапе создания 3D сцены что по итогу влияет на качество изображение, а также на нагрузку системы.
SSAA (SuperSample Anti-Aliasing)
Самое простое, самое качественное и самое прожорливое, всё это про сглаживание SSAA, или как его ещё называют метод избыточной выборки.
Данный алгоритм отрисовывает нашу сцену в более высоком разрешение для того, чтобы собрать данные о границах объектов. После этого уменьшает сцену в родное разрешение и применяет полученные данные для создания полутонов. Для того что бы подбор цветов был наиболее правильным, вместе с объектами сразу отрисовываются все тени, источники освещения, текстуры и т.д. Что как не трудно догадаться увеличивает ресурсозатратность. Однако это даёт лучший результат из всех.
Если упростить все вышесказанное, то: при SSAA x4, наше изображение увеличивается в 4 раза. То есть наш один физический пиксель делится на 4 виртуальных. И уже с помощью слияния цветов виртуальных пикселей получается нужный полутон для нашего объекта.
Но главная проблема данного алгоритма заключена в том, что он применяется ко всему кадру! То есть, те объекты, которые находятся за гипотетической стеной и скрыты от глаз игрока, всё ровно будут подвергаться сглаживанию. И именно по этой причине данный алгоритм является самым требовательным.
MSAA (MultiSample Anti-Aliasing)
Метод множественной выборки, пришёл на смену прошлому. Данный алгоритм работает по похожему принципу что и метод избыточной выборки, вот только с некоторыми отличиями.
Больше не отрисовываются объекты, которые не видит игрок. Так же было решено изменить то, к чему применять сглаживание. Ведь SSAA применял сглаживание ко всему в кадре, в то время как MSAA применяет его только к границам объектов. Что по итогу сделало сглаживание чуть хуже, но за то довольно ощутимо снизило нагрузку на видеокарту.
Из основных недостатков данного метода, это то, что он не работает на прозрачных и зеркальных поверхностях: стекла, вода, отражения и прочие. И то, что он крайне сильно нагружает систему в тех местах, где есть много мелких объектов, шерсть, трава и т.д.
Следующие алгоритмы, про которые пойдёт речь, применяются к готовому 2D кадру, что в разы снижает требование к системе, но также и качество сглаживание. Данные методы убирают лесенки, но дают «любимое» многими мыло.
FXAA (Fast approXimate Anti-Aliasing)
Быстрое приблизительное сглаживание разработанное Nvidia, как я уже говорил ранее работает с готовым 2D кадром, так что определить границы с помощью моделей уже не получится. Поэтому в данном алгоритме используется метод нахождения границ по контрасту. И уже с помощью этого пиксели будут окрашиваться в градиенты что бы сделать эффект сглаживания.
Если по-простому, то наш условный персонаж в тёмной одежде, находится на ярком фоне. Наш алгоритм благодаря резкой смене яркости определяет границы объекта. И красит пограничные пиксели в градиент от яркого цвета фона, в тёмный цвет персонажа за счёт чего и получается сглаживание.
Ну а почему с данным методом картинка становится такой мыльной что её спокойно можно взять с собой в душ? Ну причина этого заключена в том, что данный метод применяет сглаживание абсолютно ко всему контрастному.
SMAA (Subpixel Morphological Anti-Aliasing)
Субпиксельное морфологическое сглаживание, использует способ поиска участков, которые нужно сгладить похожий на тот, что используется в FXAA, то есть по контрасту цветов, яркости. Но в добавок к этому в нём заложен принцип MLAA обычного морфологического сглаживания, а то есть поиск границ осуществляется не только контрастностью, но и с помощью паттернов.
В наследство от MLAA достались паттерны – Z, U, L. Но этого было недостаточно, и были добавлены разные диагональные паттерны, с помощью которых делается более точное определение границы объекта и плюс к этом производится отсечение тех участков изображения, где сглаживание необходимо от тех, где оно ненужно ведь там должен быть острый угол.
Нагрузка на систему при использовании данного алгоритма чуть выше, чем у FXAA, но и качество лучше. Мыло хоть и не исчезло окончательно, но его явно стало меньше.
TXAA\TAA (Temporal Anti-Aliasing)
Временное приблизительное сглаживание, так же, как и FXAA разработано компанией Nvidia. Информации по тому, как работает этот алгоритм немного. Из того, что есть можно понять, что данный метод имеет в себе MSAA, но он применяется не каждому кадру, а условно через каждые 3. А те кадры, которые не подверглись алгоритму MSAA, используют данные из предыдущих.
По заверениям людей из Nvidia, качество TXAA x2 будет сопоставимо MSAA x8, но при этом потреблять ресурсов он будет как MSAA x2. И в целом — это так, но с двумя оговорками. Первая иногда можно заметить шлейфы у объектов, это как раз те самые участки предыдущих кадров, которые ещё не успели выгрузиться из памяти видеокарты. И вторая, изображение с данным алгоритмом мылится, особенно те объекты, которые находятся близко к игроку.
Данные проблемы должен решить новый алгоритм сглаживания, которым сейчас занимается Nvidia. ATAA адаптивное временное сглаживание. Это будет похоже по принципу на TXAA, но при создании маски, по которой будет применяться сглаживание будет так же использоваться технология трассировки лучей. Вот только что-то мне подсказывает что уже вряд ли мы получим ATAA, ведь всё это перекачивало в DLSS.
И кстати раз я про него заикнулся то скажу сразу, я не буду в сегодняшнем блоге разбирать данную технологию, ведь я просто на просто не владею видеокартой с RT ядрами.
Под конец хотелось бы сказать про ещё один способ убирать лесенки и мерцание в играх, для этого не требуются никакие алгоритмы. Ведь это более высокое разрешение экрана.
Объясню вкратце – у нас есть два 27` монитора, один из них обладает разрешением экрана 1920х1080 а второй 3840×2160, и думаю тут и так понятно, что плотность пикселей у 4К монитора в разы выше, чем у FullHD. За счёт чего и произойдёт сглаживание сцены. Вот только для это потребуется и надлежащая мощность вашего железа и конечно же 4К монитор.
Заключение
Сегодня мы с вами поговорили далеко не про все виды сглаживаний, но просто все другие либо мало чем отличаются от этих, или и вовсе, просто включают в себя сразу несколько разных методов. А те, про которые сегодня шла речь, были самые популярные которые вы чаще других встретите в играх.
Так же в заключение я хотел бы сказать какой из вышесказанных методов выбрать. Но всё это индивидуально, и зависит от игры и начинки вашего ПК. Но всё же попытаюсь кратко помочь вам с выбором:
А на этом у меня всё, если я где-то допустил ошибк_(и, у), то буду рад тому, что бы меня исправили. Всем большое за прочтение и до встречи в следующих блогах!
Типы сглаживания в играх
Начнем с определения:
Сгла́живание (англ. anti-aliasing) — технология, используемая для устранения эффекта «зубчатости», возникающего на краях одновременно выводимого на экран множества отдельных друг от друга плоских или объёмных изображений.
Почему возникает «зубчатость»? Проблема в том, что мониторы современных ПК состоят из квадратных пикселей, а значит на них действительно прямыми будут только горизонтальные и вертикальные линии. Все линии, находящиеся под углом, будут строиться из пикселей, находящихся по диагонали друг к другу, что и вызывает «зубчатость». К примеру, справа на картинке — вроде бы ровная линия. Однако стоит ее увеличить, как сразу становится видно, что никакая она не прямая:
Чем это грозит в играх? Тем, что, во-первых, при движении будет возникать эффект «мельтешения» — такие неровные линии будут постоянно перестраиваться, что будет и отвлекать от игры, и делать картинку неестественной. Во-вторых — далекие объекты будут выглядеть нечетко.
Сразу же возникает вопрос — а как убрать эти неприятные эффекты? Самый простой способ — сделать пиксели меньше при том же размере экрана (иными словами — сделать разрешение больше и поднять плотность пикселей). Тогда «зубчатость» будет проявляться слабее, и картинка будет выглядеть естественнее. Но увы — способ хоть и простой, но дорогой, да и для видеокарты это достаточно сильная дополнительная нагрузка. И тогда, дабы улучшить картинку не меняя монитора, было придумано сглаживание.
SSAA (Supersample anti-aliasing) — самое тяжелое сглаживание, потому что оно, по сути, описывает способ убирания лесенок, который я привел выше: при четырехкратном (4х) сглаживании видеокарта готовит картинку в разрешении вчетверо выше, чем выводит на экран, потом происходит усреднение цвета соседних пикселей и вывод на экран в исходном разрешении. Получается, что виртуальная плотность пикселей вдвое выше, чем у экрана, и лесенки практически перестают быть заметными. Очень сильно сказывается на производительности: к примеру, если разрешение в игре 1920х1080, то видеокарта вынуждена готовить картинку в 4К — 3840х2160. Однако результат получается великолепным — картинка выглядит как живая, никакого мельтешения нет:
MSAA (Multisample anti-aliasing) — улучшенная версия SSAA, которая потребляет гораздо меньше ресурсов. К примеру — зачем сглаживать то, что находится внутри текстуры, если лесенки есть только на краях? Если текстура представляет собой прямую линию под углом к игроку, то можно сгладить лишь один участок и продолжить эффект на весь край текстуры. В результате нагрузка на видеокарту становится ощутимо меньше, и по тяжести даже 8х MSAA оказывается ощутимо легче 4х SSAA при сравнимом качестве картинки.
CSAA и CFAA (Coverage Sampling anti-aliasing и Custom-filter anti-aliasing) — по сути несколько улучшенный MSAA от Nvidia и AMD (позволяют выбирать дополнительные отсчёты «перекрытия» пикселя, по которым можно уточнять итоговое значение цвета попадающего на край треугольника экранного пикселя). 8x CSAA/CFAA дает сравнимое с 8x MSAA качество картинки, однако потребляет примерно столько же ресурсов, столько и 4х MSAA. На сегодняшний момент оба сглаживания не используются — разработчики игр решили использовать унифицированные для всех видеокарт сглаживания.
FXAA (Fast approXimate anti-aliasing) — нетребовательное быстрое сглаживание. Алгоритм прост — совершается один проход по всем пикселям изображения и усредняются цвета соседних пикселей. Это слабо нагружает видеокарту, однако сильно мылит картинку (обратите внимание на четкость текстуры камня), делая далекие объекты вообще неузнаваемыми:
Такое сглаживание имеет смысл включать только если лесенки терпеть не можете, а видеокарта не тянет лучшее сглаживание. По сути тут идет выбор между замыливанием изображения и лесенками.
Из особенностей — это единственное сглаживание, работающее полностью на процессоре, поэтому практически не влияет на fps в играх при мощном процессоре. Из-за более сложного алгоритма изображение получается более качественным, чем с FXAA, однако до 2x MSAA все еще далеко.
SMAA (Subpixel Morphological anti-aliasing) — смесь FXAA и MLAA. По сути несколько улучшенный MLAA, но работающий на видеокарте (так как процессор для сглаживания подходит гораздо хуже). Дает картинку, сравнимую с MLAA, лучше, чем FXAA (обратите внимание на бочки), однако потребляет больше ресурсов:
Такое сглаживание является хорошей заменой FXAA, и по уровню нагрузки на видеокарту находится между отсутствием сглаживания и 2x MSAA, так что есть надежда, что в будущем игр с ним будет все больше.
TXAA(Temporal antialiasing) — новая технология сглаживания от Nvidia. В отличии от других типов сглаживания, которые работают только с одним кадром (то есть с неподвижной картинкой), это умеет работать с движущимися объектами и хорошо убирает «мельтешение» картинки. По сути является смесью MSAA и SMAA, дает очень качественную картинку, однако немного ее мылит и очень требовательно к ресурсам.
В итоге — какое сглаживание выбрать? Если видеокарта совсем плохо тянет игру, то или оставаться без сглаживания и смотреть на лесенки, или же выбрать FXAA и любоваться на мыло. Если же система по-мощнее, но MSAA все еще не тянет — стоит выбрать MLAA или SMAA. Если видеокарта играючи справилась с 8х MSAA — стоит смотреть на SSAA или TXAA.
Какое сглаживание в играх лучше: DLSS, MSAA, TAA, FXAA или DMAA
В любой современной игре в настройках графики легко найти пункт «Сглаживание». Как работает эта функция, насколько она полезна и какой вариант сглаживания выбрать, если доступно несколько — разберём подробнее.
Содержание
Что такое сглаживание и для чего нужно
Для начала стоит немного рассказать о том, что такое алиасинг, чтобы понять, для чего нужно сглаживание. Дело в том, что графика дискретна — очевидно, пиксель либо закрашен полностью, либо нет. При построении сцены цвет каждого пикселя определяется тем, лежит ли в его центре часть какого-нибудь объекта или нет. Именно поэтому некоторые детали могут не отрисовываться, если они покрывают лишь четверть пикселя. А другие примитивы, наоборот, имеют слишком резкие переходы между парой пикселей, даже если сам предмет должен обладать плавными формами.
Иначе говоря, алиасинг — резкий переход между двумя или несколькими пикселями. Самые очевидные примеры алиасинга в играх — мерцание тонких объектов или текстур с мелкими деталями в движении и эффект ступенчатости на краях объектов.
Так вот, сглаживание, или же AA (Anti-Aliasing) — это способ устранения артефактов алиасинга, в том числе и тех самых «лесенок» на изображении. Оно позволяет сделать сцену в игре более реалистичной и приятной глазу, как в реальной жизни. Добиваются плавности как раз «смягчением» переходов между пикселями, заполняя соседние пиксели корректными оттенками.
Какие виды сглаживания в играх бывают
Количество методов сглаживания не так мало, как кажется на первый взгляд. Так как их очень много, обо всех рассказать сложно, поэтому я затрону наиболее распространённые и интересные из них.
Сами методы можно разделить на 2 категории: те, которые применяются во время рендеринга и те, которые применяются к уже построенному изображению (постпроцессинговые).
SSAA (Super Sampling Anti-Aliasing)
Также его называют методом избыточной выборки. Основан на принципах получения образцов цвета (сэмплов) сразу в 4 участках пикселя с последующим усреднением. Важное уточнение: для этого вместо одного пикселя рендерятся четыре, и уже после расчётов цвета они сжимаются обратно до одного. Кстати, необязательно должно использоваться именно четырёхкратное увеличение, это лишь один из самых распространённых типов алгоритма. Существует множество вариаций паттернов выборки: среди них ordered grid, rotated grid, jitter. Все они отличаются только расположением точек получения сэмплов и точностью результата. Иногда в настройках игры можно увидеть несколько видов SSAA, которые как раз будут отличаться паттернами. Самый простой — ordered grid (OGSSAA), остальные методы, как правило, эффективнее.
Существенным недостатком SSAA является его высокое требование к ресурсам — неудивительно, ведь по сути это рендеринг всей сцены в разрешении, превышающем нативное в несколько раз. Зато этот метод сглаживания один из самых эффективных и точных, правда, в современных AAA-проектах встречается не так часто.
DSR (Dynamic Super Resolution)
Владельцы видеокарт NVIDIA имеют возможность включить в «Панели управления NVIDIA» функцию под названием DSR. С этой технологией изображение в игре рендерится в большем разрешении, а затем масштабируется до нативного разрешения монитора. Результат оказывается близок к SSAA, за исключением того, что в DSR ещё накладывается фильтр размытия.
Как и метод избыточной выборки, DSR потребляет много ресурсов. Главный плюс использования этой функции — она поддерживается в большем количестве игр (хотя в некоторых могут возникать проблемы) и не требует внедрения разработчиком.
MSAA (MultiSample Anti-Aliasing)
Как и SSAA, MSAA делает выборку нескольких участков пикселя и усредняет цвет, но только на крайних пикселях объектов, а не на всей сцене, а значит, и ресурсов потребляет значительно меньше. Весьма распространён и даёт хороший результат. Из-за такой выборки проявляются и недочёты технологии — на стыках между двумя объектами изображение по-прежнему «острое», то же самое видно и на высокодетализированных, а также прозрачных текстурах. Ну и хоть оно менее ресурсозатратное, нежели SSAA, это всё ещё «тяжёлый» метод, сильно нагружающий видеокарту.
MSAA в играх встречается в нескольких типах: 2x, 4x, 8x, 16x. Число отражает количество выборок на пиксель. Чем оно выше, тем лучше результат, но сильнее нагрузка.
CSAA (Coverage Sampling Anti-Aliasing)
CSAA — это доработанный MSAA от компании NVIDIA. Он выдаёт результат, близкий к MSAA 8x или 16x, потребляя ресурсы на уровне MSAA 4x. Не углубляясь в детали, улучшение сглаживания достигается за счёт использования информации ещё и о соседних пикселях. Похожая технология от AMD называется EQAA (Enhanced Quality Anti-Aliasing). Обе технологии почти не встречаются в современных играх из-за того, что сейчас разработчики предпочитают использовать универсальные методы.
TAA (Temporal Anti-Aliasing)
TAA — популярный метод сглаживания, который часто используется во многих современных играх. Он берёт информацию о пикселях не только с текущего кадра, но и с предыдущего. За счёт этого TAA позволяет избавиться от эффекта мерцания, например, на тонких объектах. В целом, это довольно качественный метод, не уступающий MSAA, при этом потребляющий в разы меньше ресурсов. Недостатки тоже есть: изображение может быть слишком мыльным — разработчики пытаются исправлять это повышением резкости, но не всегда помогает. Кроме того, из-за того, что информация берётся с предыдущего кадра, возникает эффект гостинга (остаточного изображения) — вокруг движущихся объектов возникают «шлейфы».
FXAA (Fast approXimate Anti-Aliasing)
FXAA относится к постпроцессинговому типу сглаживания. Весьма дешёвый способ убрать алиасинг с небольшими потерями производительности. FXAA смешивает соседние пиксели на готовом изображении, заранее определяя контрастные переходы. Недостатком можно назвать излишнее сглаживание, из-за чего некоторые текстуры и далёкие предметы будут мыльными, но FXAA станет отличным выбором на слабых компьютерах, так как оказывает очень маленькое влияние на FPS.
MLAA (MorphoLogical Anti-Aliasing)
Постпроцессинговый метод, работает не на видеокарте, а на процессоре, в отличие от всех остальных методов. MLAA ищет резкие отличия в цветах, затем идентифицирует L-, Z- и U-образные паттерны в построенном изображении, после чего смешивает цвета пикселей в таких фигурах.
На движущихся объектах могут возникать артефакты, связанные с появлением и исчезновением отдельных пикселей. Это характерно почти для всех типов геометрического сглаживания, в том числе и для MLAA. На тонких объектах данный артефакт проявляется в виде мерцания.
MLAA даёт более точный результат, чем у FXAA, но и сам процесс более требователен к ресурсам. Впрочем, если имеется мощный процессор, то влияние на FPS в играх будет минимальное.
SMAA (Subpixel Morphological Anti-Aliasing)
SMAA — это смесь FXAA и MLAA, работающая на видеокарте. В отличие от MLAA, ищёт различия не в цветах, а в яркости пикселей. Кроме того, использует не только L-, Z- и U-образные паттерны, но ещё и диагональные.
Существуют разные типы SMAA:
Самый эффективный, как можно понять из описания, SMAA T4x, он же и самый прожорливый из этих вариантов. На скриншотах из Shadow of Tomb Raider заметно, как сильно меняется изображение при включении SMAA 1x, а вот разница между SMAA T2x и T4x есть, но она не такая существенная.
CMAA (Conservative Morphological Anti-Aliasing)
Как и предыдущие три, CMAA — это постпроцессинговый метод. Нагружает систему чуть больше, чем FXAA, но меньше, чем SMAA. В теории, CMAA обеспечивает куда более лучшую по качеству картинку, нежели примитивный FXAA, но это зависит от реализации: на примерах из DiRT Rally 2.0 отлично видно, что алгоритм не очень сильно влияет на сцену.
На двух изображениях выше сложно увидеть разницу, но она есть: отдалённые предметы более чёткие и с меньшим количеством лесенок. Особенно видно это на мелкой траве вдалеке, а также на дальних конусах.
CMAA исследует изображение на разрывы цветов, уточняет края фигур в конкретных участках, затем обрабатывает простые фигуры, причём только симметричные. Метод имеет повышенную временную стабильность в сравнении с SMAA и MLAA — за счёт этого в сцене меньше мерцаний.
DLSS (Deep Learning Super Sampling)
Сравнительно новая технология, на данный момент доступная только на видеокартах NVIDIA RTX. Очень эффективный метод, который при небольших требованиях к ресурсам выдаёт качественную картинку. Конечно, если речь идёт о DLSS 2.0 и 2.1 — первая итерация технологии была очень сырой и сильно «мылила» картинку.
Используя тензорные ядра, DLSS апскейлит отрендеренное в низком разрешении изображение за счёт использования глубокого машинного обучения. Такой подход позволяет добиться качества, сравнимого с рендером сцены в полноценном разрешении.
Конечно, технология всё ещё сыровата даже во второй версии, и иногда встречаются небольшие артефакты, но даже сейчас результат получается лучше, чем при использовании TAA. На картинке выше сравнивается DLSS и TAA. Издалека разницы нет, но при детальном рассмотрении видно, что с DLSS дальние объекты чётче, а рюкзак выглядит чуть мыльнее, но на нём нет лесенок.
Итог: какое сглаживание лучше выбрать
Технологий сглаживания действительно много, но каждая из них имеет право на существование. Какая же из них самая лучшая?