2D сглаживание

См. также

Godot также поддерживает сглаживание в 3D-рендеринге. Это описано на странице 3D сглаживание.

Введение

Из-за ограниченного разрешения сцены, визуализированные в 2D, могут демонстрировать артефакты алиасинга. Эти артефакты обычно проявляются в виде эффекта «лестницы» на краях геометрии и наиболее заметны при использовании таких узлов, как Line2D, Polygon2D или TextureProgressBar. Пользовательская отрисовка в 2D также может иметь артефакты алиасинга для методов, которые не поддерживают сглаживание.

В примере ниже вы можете заметить, что края имеют блочный вид:

Изображение масштабируется в 2× раза с использованием фильтрации по ближайшему соседу, чтобы сделать алиасинг более заметным.

Изображение масштабируется в 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):

../../_images/antialiasing_msaa_2x.webp ../../_images/antialiasing_msaa_4x.webp ../../_images/antialiasing_msaa_8x.webp