reckfellENGINE

Сглаживание 2D: выбрать метод и проверить поддержку

Различить геометрические края, текстуры и ограничения MSAA в Compatibility и Vulkan.

На этой странице

Сначала определить источник ступенек

Что видноЧто проверять
Ступеньки на наклонном крае треугольникаСглаживание геометрии 2D, включая MSAA при поддержке backend
Пиксельная или размытая картинка внутри формыTextureFilter, исходное разрешение и масштабирование
Муар и мерцание тонкого узора внутри shaderЧастоты узора и фильтрацию в самом shader
Неровные отдельные линии/контурыПараметр antialiased соответствующей команды или типа, если он доступен

MSAA не является универсальным улучшателем картинки. Он не восстанавливает недостающие детали текстуры и не исправляет любой узор внутри фрагмента. Для pixel art фильтр Nearest может быть намеренным выбором; принудительное размытие не равно правильному сглаживанию.

Проверить поддержку именно 2D MSAA

В проверенной сборке Reckfell 1.0.0 есть важное различие:

Путь отрисовкиПодтверждённый результат
Compatibility/OpenGLПредупреждение об отсутствии 2D MSAA; край меша не меняется при запросе Msaa4X
Forward+/VulkanMsaa4X добавляет промежуточное покрытие пикселей по краю того же меша

Значение свойства Msaa2D может читаться как Msaa4X даже без эффекта в Compatibility. Это сохранённая настройка, а не запрос возможностей GPU. Msaa3D — отдельный параметр: его включение в проверенном примере не сгладило 2D-треугольник.

Эти результаты получены в текущей локальной Windows-сборке на одном устройстве. Они не измеряют FPS и не подтверждают все драйверы, Mobile, Web, D3D или Metal. Не выбирайте backend только ради галочки: сопоставьте требуемые функции с целевыми платформами и измерьте стоимость на них.

Запустить изолированный пример

Нужен C#-проект Reckfell.NET.Sdk 1.0.0, net10.0. Сохраните два файла ниже, выполните dotnet build, прикрепите CanvasAaExample.cs к Entity2D уровня .rscene и запустите. Треугольник слегка повёрнут и смещён на дробные координаты, чтобы наклонный край был виден.

Для сравнения MSAA используйте Forward+ с Vulkan и задайте экспортированное Antialiasing=Msaa4X до запуска. Сравните с Disabled при одинаковых Viewport, координатах и масштабе. В Compatibility оставьте Disabled; запрос Msaa4X в этой сборке выдаёт предупреждение, а не положительный результат.

CanvasMeshes.cs
C#
using System;
using Reckfell;

public static class CanvasMeshes
{
    public static ArrayMesh Quad(Vector2 size)
    {
        if (!size.IsFinite() || size.X <= 0 || size.Y <= 0)
            throw new ArgumentOutOfRangeException(nameof(size));
        Vector2 half = size * 0.5f;
        return Build(
            new[] { new Vector2(-half.X, -half.Y), new Vector2(half.X, -half.Y), half, new Vector2(-half.X, half.Y) },
            new[] { Vector2.Zero, Vector2.Right, Vector2.One, Vector2.Down },
            new[] { 0, 1, 2, 0, 2, 3 });
    }

    public static ArrayMesh Triangle() => Build(
        new[] { new Vector2(-45, -40), new Vector2(50, -17), new Vector2(-20, 45) },
        new[] { Vector2.Zero, Vector2.Right, Vector2.Down },
        new[] { 0, 1, 2 });

    private static ArrayMesh Build(Vector2[] vertices, Vector2[] uv, int[] indices)
    {
        var arrays = new Reckfell.Collections.Array();
        arrays.Resize((int)Mesh.ArrayType.Max);
        arrays[(int)Mesh.ArrayType.Vertex] = vertices;
        arrays[(int)Mesh.ArrayType.TexUV] = uv;
        arrays[(int)Mesh.ArrayType.Index] = indices;
        var mesh = new ArrayMesh();
        mesh.AddSurfaceFromArrays(Mesh.PrimitiveType.Triangles, arrays);
        return mesh;
    }
}
CanvasAaExample.cs
C#
using Reckfell;

public partial class CanvasAaExample : Entity2D
{
    [Export] public Viewport.Msaa Antialiasing { get; set; } = Viewport.Msaa.Disabled;

    public override void _Ready()
    {
        GetViewport().Msaa2D = Antialiasing;
        AddChild(new MeshInstance2D
        {
            Mesh = CanvasMeshes.Triangle(),
            Position = GetViewportRect().Size * 0.5f + new Vector2(0.3f, 0.2f),
            Rotation = 0.17f,
            Material = new CanvasItemMaterial { LightMode = CanvasItemMaterial.LightModeEnum.Unshaded }
        });
    }
}

Forward+/Vulkan: MSAA выключен

Forward+/Vulkan: MSAA 4×

Настроить правильный Viewport

GetViewport().Msaa2D меняет Viewport, которому принадлежит Entity. SubViewport со своей картинкой требует собственной настройки; параметр главного окна не следует считать автоматически общим для всех поверхностей. В проекте есть и настройка rendering/anti_aliasing/quality/msaa_2d, но runtime-код может её переопределить для конкретного Viewport.

Сравнивайте изображения при одинаковом выходном размере. Увеличенный скриншот, масштаб браузера и последующее растяжение изображения могут скрывать или добавлять ступеньки. Проверка здесь читает исходные пиксели текстуры Viewport, а не судит по миниатюре.

Если MSAA не решает проблему

  • Край не меняется в Compatibility: это подтверждённое ограничение backend, а не повод бесконечно увеличивать число samples.
  • Размыта текстура: проверьте TextureFilter и масштаб отдельно от MSAA.
  • Ступеньки находятся внутри shader-узора: меняйте способ выборки/расчёта узора, а не только параметры края геометрии.
  • Отдельный тип имеет Antialiased или draw-команда принимает antialiased: используйте подходящий локальный механизм, проверяя ограничения этой команды. Он не является переключателем MSAA всего canvas.
  • Картинка стала дороже: сравните время GPU и память на целевом устройстве; автоматического обещания «4× бесплатно» нет.

Геометрия примера · Свет и тени

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.