Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

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