reckfellENGINE

Environment: фон, ambient, SSAO и glow

Выбрать окружение камеры и мира, запустить контролируемое сравнение эффектов в текущем Compatibility.

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

Готовая сцена

Готовый интерьер Pawn Shop в Reckfell

Скачать проект галереи. Нужны Reckfell 1.0.0 с C# SDK и Forward+/Vulkan. Откройте project.reckfell, соберите C# и запустите Main.rscene. Готовый интерьер Pawn Shop создан James Ray Cock и Rico Cilliers для Poly Haven и распространяется по CC0. Архитектура, мебель, растения и предметы взяты из этой сцены; материалы и свет адаптированы для Reckfell. Все ресурсы и сведения об авторах включены в Assets. Окружение за окнами — Kloofendal 48d Partly Cloudy Pure Sky, Poly Haven, CC0.

Кадр снят в 2560×1440, внутренний рендер — 3840×2160: Scaling3DScale=1.5, MSAA 8×, TAA, атлас теней 4096. В сцене настроены ACES, SDFGI, SSAO, glow, SSR и объёмный туман. Это тяжёлый профиль для иллюстраций; для игры подбирайте разрешение и эффекты под целевое устройство. Само включение свойства не подтверждает качество эффекта или скорость на другом GPU.

В сравнениях ниже сохраняются камера, геометрия, материалы, экспозиция и сглаживание. Меняется только указанный параметр. Простой C#-стенд далее нужен для изолированной проверки поведения; он не является сценой на иллюстрациях.

Назначить окружение

Environment — ресурс настроек, а не Entity и не источник света сам по себе. Он действует после назначения WorldEnvironment.Environment или Camera3D.Environment.

Приоритет: окружение активной камеры, затем окружение её World3D, затем доступное fallback-окружение. Camera3D.Environment=null снимает override. Если правка WorldEnvironment ничего не меняет, сначала проверьте активную камеру.

Правило «один WorldEnvironment» относится к одному миру. В одном EntityTree могут быть независимые SubViewport с собственными World3D и разными окружениями — это проверено в runtime. Несколько WorldEnvironment в одном мире не смешиваются автоматически: используется первый зарегистрированный.

Запустить три режима

Сохраните LightingMaterials.cs из материалов, LightingLab3D.cs из освещения и EnvironmentLab3D.cs ниже. Нужны C# SDK 1.0.0 и net10.0. Выполните dotnet build и назначьте EnvironmentLab3D.cs Entity3D-корню .rscene вместо LightingLab3D.cs.

До запуска выберите экспортированное Preview: Lighting, AmbientOcclusion или Glow. EffectEnabled выбирает состояние эффекта. Экспортированные значения читаются в _Ready; изменение их во время игры само по себе не вызывает повторную настройку. Из работающего кода после _Ready доступны ShowAmbientOcclusion(bool) и ShowGlow(bool).

EnvironmentLab3D.cs
C#
using Reckfell;

public partial class EnvironmentLab3D : LightingLab3D
{
    public enum PreviewMode { Lighting, AmbientOcclusion, Glow }
    [Export] public PreviewMode Preview { get; set; } = PreviewMode.Lighting;
    [Export] public bool EffectEnabled { get; set; } = true;
    private MeshInstance3D? emitter;

    public override void _Ready()
    {
        base._Ready();
        if (Preview == PreviewMode.AmbientOcclusion) ShowAmbientOcclusion(EffectEnabled);
        if (Preview == PreviewMode.Glow) ShowGlow(EffectEnabled);
    }

    public void ShowAmbientOcclusion(bool enabled)
    {
        Key.Visible = false; Point.Visible = false; Spot.Visible = false;
        Floor.Visible = true; Cube.Visible = true; MetalSphere.Visible = true;
        if (emitter != null) emitter.Visible = false;
        var env = World.Environment;
        env.BackgroundColor = new Color(0.025f, 0.03f, 0.045f);
        env.AmbientLightEnergy = 1;
        env.FogEnabled = false; env.GlowEnabled = false;
        env.SsaoEnabled = true;
        env.SsaoRadius = 2;
        env.SsaoIntensity = enabled ? 3 : 0;
    }

    public void ShowGlow(bool enabled)
    {
        Key.Visible = false; Point.Visible = false; Spot.Visible = false;
        Floor.Visible = false; Cube.Visible = false; MetalSphere.Visible = false;
        var env = World.Environment;
        env.BackgroundColor = Colors.Black;
        env.AmbientLightEnergy = 0;
        env.SsaoEnabled = false; env.FogEnabled = false;
        env.GlowIntensity = 1.5f;
        env.GlowBloom = 0.1f;
        env.GlowHdrThreshold = 0.8f;
        env.GlowEnabled = enabled;
        if (emitter == null)
        {
            var material = LightingMaterials.Surface(Colors.Black);
            material.EmissionEnabled = true;
            material.Emission = Colors.White;
            material.EmissionEnergyMultiplier = 8;
            emitter = new MeshInstance3D
            {
                Mesh = new BoxMesh { Size = Vector3.One },
                Position = new Vector3(0, 0.7f, 0),
                MaterialOverride = material
            };
            AddChild(emitter);
        }
        emitter.Visible = true;
    }
}

Разделить фон, ambient и отражения

НастройкаЗа что отвечает
BackgroundMode и BackgroundColorЧто видно за геометрией
AmbientLightSource, AmbientLightColor, AmbientLightEnergyОбщее освещение поверхностей
ReflectedLightSourceИсточник отражений окружения
TonemapMode и экспозицияПреобразование яркости при выводе

Цветной фон не гарантирует освещённый куб. Пример явно выбирает ambient из Color, а отражение окружения отключает. Установка Camera.Environment с другим фоном перекрыла WorldEnvironment; сброс в null вернул фон мира.

Начинайте с предсказуемых материалов и одного света. Затем подбирайте tone mapping/экспозицию и эффекты. В этом сравнении TonemapMode=Linear не меняется; одинаковые численные настройки разных renderer не обещают одинаковый кадр.

SSAO: контактное затемнение

В режиме AmbientOcclusion прямые источники выключены, ambient energy=1, SsaoRadius=2. При EffectEnabled=false SSAO остаётся включённым, но SsaoIntensity=0; при true интенсивность равна 3. Это контролируемое сравнение одного post-processing пути, а не двух разных способов вывода.

На иллюстрациях — галерея Forward+: SsaoEnabled=true в обоих кадрах, SsaoIntensity=0/1.6. В C#-стенде выше используются отдельные значения 0/3.

Галерея Forward+: SSAO включён, интенсивность 0

Та же галерея: интенсивность SSAO 1.6

Сравнение подтвердило локальное затемнение около геометрии при неизменном фоне. Значения 2/3 усилены для демонстрации, а не рекомендуются для любой игры.

Текущий Compatibility имеет базовую реализацию SSAO с Radius/Intensity. В исходниках радиус и интенсивность масштабируются иначе, чем в другом пути рендеринга; расширенные параметры Forward+ здесь не следует считать эквивалентными. SSAO использует видимую глубину, не создаёт физическую тень и не видит весь мир за пределами кадра.

Glow: ореол яркого объекта

Режим Glow скрывает пол, куб и шар, выключает источники и показывает отдельный emissive-меш на чёрном фоне. EmissionEnergyMultiplier=8; glow использует Intensity=1.5, Bloom=0.1, HdrThreshold=0.8.

Иллюстрации показывают галерею Forward+: GlowEnabled=false/true, GlowIntensity=0.55, GlowBloom=0.03. Геометрия и экспозиция не меняются.

Галерея с выключенным glow

Та же галерея с glow

Проверка подтверждает реальный ореол в текущем OpenGL runtime. Отдельные glow levels, blend/map и настройки качества зависят от renderer; пример их не проверяет. Glow не освещает соседнюю геометрию. Слишком сильный bloom снижает контраст, поэтому эффект настраивайте после экспозиции и яркости источника.

Туман и другие эффекты

FogEnabled включает обычный туман; изменение FogDensity с 0 до 0.15 проверено отдельно при уже включённом режиме. VolumetricFogEnabled — другой механизм, не подтверждённый этим примером. Установка bool-свойства сама по себе не доказывает, что конкретный renderer реализует эффект.

SSIL, SSR, GI, отражения, объёмный туман и compositor требуют отдельных настроек и проверки целевой конфигурации. Не включайте всё одновременно для исправления одной проблемы света. Если нужен более чёткий контакт — проверьте геометрию и источник, затем SSAO; если нужен перенос света между поверхностями — это отдельная задача непрямого освещения.

Диагностика

ПроблемаПроверка
Правки мира не видныCamera3D.Environment и фактический World3D viewport
Есть фон, всё остальное чёрноеAmbientLightSource/energy и реальные Light3D
SSAO будто меняет всю картинкуСравнивать одинаковый активный путь при интенсивности 0/нужном значении
Glow отсутствуетEmissionEnabled, яркость/экспозиция, порог и назначенное окружение
Glow не освещает соседейНужен Light3D или отдельное непрямое освещение
Переключение Preview в игре не сработалоОно читается при _Ready; вызвать публичный метод настройки

Иллюстрации — реальные кадры текущей локальной сборки 1.0.0 в Forward+/Vulkan, 2560×1440. Поведение простого C#-стенда отдельно проверено в Compatibility/OpenGL. Это разные сцены, не сравнение renderer, производительности или интерфейса редактора.

Environment API · WorldEnvironment API

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

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

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

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