2D сглаживание
См. также
Godot также поддерживает сглаживание в 3D-рендеринге. Это описано на странице 3D сглаживание.
Введение
Из-за ограниченного разрешения сцены, визуализированные в 2D, могут демонстрировать артефакты алиасинга. Эти артефакты обычно проявляются в виде эффекта «лестницы» на краях геометрии и наиболее заметны при использовании таких узлов, как Line2D, Polygon2D или TextureProgressBar. Пользовательская отрисовка в 2D также может иметь артефакты алиасинга для методов, которые не поддерживают сглаживание.
В примере ниже вы можете заметить, что края имеют блочный вид:
Изображение масштабируется в 2× раза с использованием фильтрации по ближайшему соседу, чтобы сделать алиасинг более заметным.
Для борьбы с этим Godot поддерживает несколько методов включения сглаживания при 2D-рендеринге.
Свойство сглаживания в Line2D и пользовательское рисование
Это рекомендуемый метод, поскольку в большинстве случаев он оказывает меньшее влияние на производительность.
Line2D имеет свойство Antialiased, которое можно включить в инспекторе. Кроме того, несколько методов для Пользовательская отрисовка в 2D поддерживают необязательный параметр antialiased, который можно установить в true при вызове функции.
Эти методы не требуют включения MSAA, что делает их базовые затраты производительности низкими. Другими словами, нет постоянной добавленной стоимости, если вы не рисуете никакую сглаженную геометрию в какой-то момент.
Недостатком этих методов сглаживания является то, что они работают, генерируя дополнительную геометрию. Если вы генерируете сложную 2D-геометрию, которая обновляется в каждом кадре, это может быть узким местом. Кроме того, Polygon2D, TextureProgressBar и несколько пользовательских методов рисования не имеют свойства сглаживания. Для этих узлов вы можете использовать вместо этого 2D-мультисэмпловое сглаживание.
Multisample сглаживание (MSAA)
Это доступно только в Forward+ и Mobile renderers, а не в Compatibility renderer.
Перед включением MSAA в 2D важно понимать, на чем будет работать MSAA. MSAA в 2D следует тем же ограничениям, что и в 3D. Хотя он не вносит никакой размытости, область его применения ограничена. Основные области применения 2D MSAA:
Геометрические грани, такие как рисование линий и многоугольников.
Края спрайтов только для пикселей, касающихся одного из краев текстуры. Это работает как для линейной фильтрации, так и для фильтрации по ближайшим соседям. Края спрайтов, созданные с использованием прозрачности на изображении, не затрагиваются MSAA.
Недостатком MSAA является то, что он работает только на краях. Это связано с тем, что MSAA увеличивает количество выборок покрытия, но не количество выборок цвета. Однако, поскольку количество выборок цвета не увеличилось, фрагментные шейдеры по-прежнему запускаются для каждого пикселя только один раз. В результате MSAA никаким образом не повлияет на следующие виды алиасинга:
Алиасинг внутри текстур, отфильтрованных по ближайшему соседу (пиксельная графика).
Aliasing , вызванный пользовательскими 2D-шейдерами.
Зеркальное искажение при использовании Light2D.
Алиасинг при рендеринге шрифтов.
MSAA можно включить в настройках проекта, изменив значение параметра Rendering > Anti Aliasing > Quality > MSAA 2D. Важно изменить значение параметра MSAA 2D, а не MSAA 3D, так как это совершенно разные настройки.
Сравнение без сглаживания (слева) и с различными уровнями MSAA (справа). В верхнем левом углу находится узел Line2D, в верхнем правом углу — 2 узла TextureProgressBar. Внизу — 8 пиксельных спрайтов, 4 из которых касаются краев (зеленый фон), а 4 — не касаются краев (логотип Godot):