reckfellENGINE

SDFGI: настройка каскадов и освещения

Ограничения геометрии, размер ячейки, обратная связь и диагностика.

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

SDFGI

SDFGI строит представление статической геометрии вокруг камеры и обновляет непрямое освещение во время работы. Не нужен отдельный VoxelGI-объём или файл запекания, но результат накапливается по кадрам. Метод работает в Forward+; Mobile и Compatibility не дают этот путь SDFGI.

Большой мир не означает бесконечное расстояние GI: вокруг камеры существует конечный набор каскадов. Движущаяся дверь может получать непрямой свет, но не становится корректным динамическим препятствием для SDFGI. Для динамической геометрии оцените VoxelGI.

Включить на уровне

  1. Проверьте, что фактически запущен Forward+, а не резервный рендерер.
  2. Установите для неподвижной участвующей геометрии MeshInstance3D.GIMode = Static. Dynamic и Disabled не добавляют её в статическое представление SDFGI.
  3. Создайте WorldEnvironment с Environment. Проверьте, не переопределяет ли активная Camera3D этот Environment собственным ресурсом.
  4. В используемом Environment включите SdfgiEnabled. Для закрытого помещения начните без вклада неба и обратной связи; добавляйте их после проверки базового результата.
  5. Дайте освещению накопиться после загрузки или перемещения камеры. Сравнивайте установившийся кадр, сохраняя экспозицию и остальные эффекты.

Пример настройки существующего Environment для помещения; подключение WorldEnvironment и геометрия уже должны быть подготовлены:

C#
using Reckfell;

public static class GiSettingsExample
{
    // Apply to the Environment actually used by the active camera.
    public static void ConfigureIndoorSdfgi(Environment environment)
    {
        environment.SdfgiEnabled = true;
        environment.SdfgiCascades = 4;
        environment.SdfgiMinCellSize = 0.2f;
        environment.SdfgiReadSkyLight = false;
        environment.SdfgiUseOcclusion = true;
        environment.SdfgiBounceFeedback = 0f;
        environment.SdfgiEnergy = 1f;
    }
}

Это исходная конфигурация для диагностики, не максимальный пресет для любой игры. SdfgiUseOcclusion повышает стоимость и может уменьшать утечки; результат проверьте на собственной геометрии. SdfgiReadSkyLight = false не отключает прямое освещение и другие источники окружающего света.

Настроить охват и детализацию

В текущем API связаны три свойства:

СвойствоЗначение
SdfgiMinCellSizeРазмер ячейки ближайшего каскада; меньше — выше пространственная детализация.
SdfgiCascade0DistanceВычисляется как 64 * SdfgiMinCellSize. Запись меняет размер ячейки.
SdfgiMaxDistanceВычисляется как 64 * SdfgiMinCellSize * 2^SdfgiCascades. Запись также меняет размер ячейки.

Например, при 4 каскадах и ячейке 0,2 получаются 12,8 и 204,8 единицы. Не присваивайте все три свойства подряд, считая их независимыми: последнее присваивание расстояния изменит ранее выбранный размер ячейки. Каскадов допустимо 1…8; больше каскадов означает дополнительные данные и работу, а не гарантированно лучший кадр.

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

Изменяющиеся объекты и источники

Статическая геометрия попадает в представление каскада при его обновлении. После перемещения такой геометрии рядом с камерой старое представление может сохраняться. Для изменения планировки проверьте пересоздание SDFGI либо обновление каскадов; это не подход к постоянной анимации дверей и стен.

Динамические источники света и динамические препятствия — разные возможности. У движущегося источника используйте соответствующий динамический BakeMode; не считайте, что это включает динамическую геометрию. Непрямой вклад источника зависит также от его IndirectEnergy. Статическая эмиссия участвует; движущуюся эмиссивную поверхность не рассчитывайте использовать как корректный динамический источник SDFGI.

Убрать засвет и нестабильность

  • Комната всё ярче через несколько секунд: начните с SdfgiBounceFeedback = 0, проверьте энергию и эмиссию. Затем добавляйте обратную связь небольшими шагами. Не компенсируйте разгон только уменьшением экспозиции.
  • Свет проходит через тонкую стену: проверьте толщину и замкнутость геометрии относительно размера ячейки. Сравните UseOcclusion, затем небольшие изменения NormalBias/ProbeBias. Избыточный bias способен усилить утечки.
  • Неверный свет после перемещения объекта: убедитесь, что не требуете от SDFGI динамического препятствия. Изменение GIMode на Dynamic не исправляет это ограничение.
  • Пятна после загрузки: дождитесь накопления и проверьте число лучей/кадры сходимости. Больше кадров означает более медленную реакцию, не мгновенное улучшение.
  • Скачок при быстром движении камеры: проверьте границы каскадов, охват и бюджет GPU. Туман или затемнение перехода могут скрыть эффект, но не исправляют неверное освещение.
  • Настройки меняются, кадр нет: проверьте реально используемый Environment, рендерер, статические меши и отсутствие другого эффекта, перекрывающего результат.

Настройки проекта: rendering/global_illumination/sdfgi/probe_ray_count, frames_to_converge, frames_to_update_lights; общий буфер GI управляется rendering/global_illumination/gi/use_half_resolution. У параметров число лучей и число кадров представлены вариантами настройки: не подставляйте произвольное количество как индекс enum. Измеряйте качество и время кадра на целевом GPU, особенно при движении камеры.

Что проверено

В установленном Forward+/Vulkan проверены настройки примера, связь размеров каскадов и реальный непрямой свет от статической эмиссии с сравнением SDFGI вкл./выкл. Функциональный GPU-прогон использовал один каскад и выключенную окклюзию для изоляции эффекта; он не является проверкой качества всей четырёхкаскадной конфигурации, большого мира или динамических источников.

Сравнение методов — в обзоре GI.

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

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

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

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