Глобальное освещение на основе полей знаковых расстояний (SDFGI)

Signed distance field global illumination (SDFGI) — это новая технология, доступная в Godot 4.0. Она обеспечивает полуреалтаймовое глобальное освещение, которое работает со сценами любого масштаба и поддерживает процедурно генерируемые уровни.

SDFGI поддерживает динамические источники света, но не поддерживает динамические окклюдеры или динамические эмиссивные поверхности. Таким образом, SDFGI обеспечивает лучшую производительность в реальном времени по сравнению с baked lightmaps, но уступает в этом отношении VoxelGI.

С точки зрения производительности, SDFGI — одна из самых ресурсоёмких технологий глобального освещения в Godot. Как и в случае с VoxelGI, доступно множество настроек для оптимизации производительности за счёт качества.

Важно

SDFGI поддерживается только при использовании рендерера Forward+ и не работает с рендерерами Mobile или Compatibility.

См. также

Не уверены, подходит ли вам SDFGI? Сравните все технологии глобального освещения Godot 4 в разделе Какую технику глобального освещения лучше использовать?.

Визуальное сравнение

SDFGI отключен.

SDFGI отключен.

SDFGI включен.

SDFGI включен.

Настройка SDFGI

В Godot SDFGI — технология глобального освещения с минимальными шагами для включения:

  1. Убедитесь, что для узлов MeshInstance в инспекторе Global Illumination > Mode установлено в Static.

  • Для импортированных 3D-сцен режим запекания можно настроить в доке Import после выбора файла сцены в доке FileSystem.

  1. Добавьте узел WorldEnvironment и создайте для него ресурс Environment.

  2. Отредактируйте ресурс Environment, прокрутите вниз до раздела SDFGI и раскройте его.

  3. Активируйте параметр SDFGI > Enabled. SDFGI автоматически следует за камерой при её перемещении, поэтому в отличие от VoxelGI не требует настройки границ.

Параметры окружения SDFGI

В ресурсе Environment доступно несколько свойств для настройки внешнего вида и качества SDFGI:

  • Use Occlusion (Использовать окклюзию): Если включено, SDFGI будет использовать дополнительные лучи для выявления и устранения утечек света. Это снижает производительность, поэтому включайте параметр только при необходимости.

  • Read Sky Light (Учитывать свет от неба): Если включено, освещение окружения учитывается в глобальном освещении. Этот параметр следует включать для открытых сцен и отключать для полностью закрытых помещений.

  • Bounce Feedback (Обратная связь отражений): По умолчанию непрямое освещение отражается только один раз при использовании SDFGI. Установка значения выше 0.0 заставит SDFGI выполнять несколько отражений, что обеспечит более реалистичное непрямое освещение ценой небольшого снижения производительности. Рекомендуемые значения обычно находятся между 0.3 и 1.0 в зависимости от сцены. Обратите внимание, что в некоторых сценах значения выше 0.5 могут вызывать бесконечные циклы обратной связи, приводящие к чрезмерному яркому освещению за несколько секунд. Если непрямое освещение выглядит "пятнистым", попробуйте увеличить это значение выше 0.0 для более равномерного освещения. Если освещение становится слишком ярким, уменьшите Energy для компенсации.

  • Cascades (Каскады): Более высокие значения увеличивают детализацию глобального освещения (и/или максимальную дистанцию), но значительно нагружают CPU и GPU. Затраты производительности особенно возрастают при быстром движении камеры, поэтому для динамичных камер рекомендуется уменьшить значение до 4 или ниже.

  • Min Cell Size (Минимальный размер ячейки): Определяет размер ячейки SDFGI для ближайшего (наиболее детального) каскада. Меньшие значения повышают точность непрямого освещения и отражений ценой снижения производительности. Изменение этого параметра автоматически влияет на Cascade 0 Distance и Max Distance.

  • Cascade 0 Distance (Дистанция каскада 0): Определяет расстояние, на котором заканчивается ближайший (наиболее детализированный) каскад. Бóльшие значения делают переход ближайшего каскада менее заметным, но снижают детализацию в ближней зоне. Изменение этого параметра автоматически влияет на Min Cell Size и Max Distance.

  • Max Distance (Максимальная дистанция): Определяет дистанцию, на которой вычисляется поле знаковых расстояний (для наименее детального каскада). SDFGI не действует за пределами этого расстояния. Значение всегда должно быть ниже параметра Far камеры, так как расчёт SDFGI за пределами видимости не имеет смысла. Изменение этого параметра автоматически влияет на Min Cell Size и Cascade 0 Distance.

  • Y Scale (Масштаб по Y): Управляет вертикальным расстоянием между пробами SDFGI. По умолчанию вертикальное расстояние равно горизонтальному. Однако, поскольку большинство игровых сцен не имеют высокой вертикальной протяжённости, установка значения 75% или даже 50% может улучшить качество и уменьшить утечки света без потери производительности.

  • Energy (Энергия): Множитель яркости для непрямого освещения SDFGI.

  • Normal Bias (Смещение по нормали): Определяет смещение для отражений лучей проб SDFGI. В отличие от Probe Bias, это значение увеличивается только относительно нормалей меша. Это обеспечивает более тонкую настройку смещения и предотвращает его беспричинное увеличение. Повышайте значение при появлении полосатых артефактов (striping) в непрямом освещении или отражениях.

  • Probe Bias (Смещение проб): Смещение, применяемое при отражениях лучей проб SDFGI. Увеличивайте это значение при появлении полосатых артефактов (striping) в непрямом освещении или отражениях.

Взаимодействие SDFGI со светом и объектами

Интенсивность непрямого света от источника света управляется его цветом, энергией и параметром Indirect Energy. Чтобы изменить только непрямое освещение (не влияя на прямой свет), отрегулируйте свойство Indirect Energy в инспекторе Light3D.

Для корректного отображения SDFGI настройте свойства глобального освещения (Global Illumination) мешей и источников света в соответствии с их назначением в сцене (статическим или динамическим).

В Godot Engine доступны три режима глобального освещения для мешей:

  • Disabled (Отключено): Меш не учитывается при генерации SDFGI. Он будет получать непрямое освещение от сцены, но не будет влиять на непрямое освещение сцены.

  • Static (Статический, по умолчанию): Меш учитывается при генерации SDFGI. Он и получает непрямое освещение от сцены, и влияет на него. Если меш изменяется после генерации SDFGI, камера должна отдалиться от объекта, а затем снова приблизиться к нему, чтобы SDFGI пересгенерировался. Альтернативно, SDFGI можно выключить и снова включить. Если ни одно из этих действий не выполнено, непрямое освещение будет отображаться некорректно.

  • Dynamic (не поддерживается в SDFGI): Меш не учитывается при генерации SDFGI. Он будет получать непрямое освещение от сцены, но не будет влиять на непрямое освещение сцены. При использовании SDFGI этот режим работает идентично режиму **Disabled*.*

Для источников света (DirectionalLight3D, OmniLight3D и SpotLight3D) доступны три режима запекания:

  • Disabled (Отключено): Источник света не учитывается при генерации SDFGI и не влияет на непрямое освещение сцены.

  • Static (Статический): Источник света учитывается при генерации SDFGI и влияет на непрямое освещение сцены. Если параметры света изменяются после генерации, непрямое освещение будет отображаться некорректно, пока камера не отдалится от источника и не вернётся обратно (что вызывает повторную генерацию SDFGI). Если сомневаетесь, используйте этот режим для основного освещения уровня.

  • Dynamic (Динамический, по умолчанию): Источник света не учитывается при генерации SDFGI, но продолжает влиять на непрямое освещение сцены в реальном времени. Этот режим работает медленнее, чем Static. Используйте Dynamic только для источников света, параметры которых будут существенно изменяться в процессе игры.

Примечание

Количество непрямой энергии, излучаемой источником света, зависит от его цвета, энергии и свойства indirect energy. Чтобы конкретный источник света излучал больше или меньше непрямой энергии, не влияя на количество прямого света, отрегулируйте свойство Indirect Energy в инспекторе Light3D.

См. также

Загляните в Какой режим глобального освещения использовать для мешей и источников света? за советами по использованию.

Настройка производительности и качества SDFGI

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

В разделе Rendering > Global Illumination (Рендеринг > Глобальное освещение) настроек проекта качество SDFGI можно настроить несколькими способами:

  • Sdfgi > Probe Ray Count (Количество лучей проб): Более высокие значения улучшают качество, но увеличивают нагрузку на GPU. При слишком низком значении на поверхностях могут появляться заметные "пятна" непрямого освещения из-за недостаточного количества лучей.

  • Sdfgi > Frames To Converge (Кадры до схождения): Более высокие значения улучшают качество, но глобальное освещение будет дольше полностью сходиться. Эффект особенно заметен при загрузке сцены или быстром движении источников света с режимом запекания, отличным от Disabled. Слишком низкое значение может вызвать появление "пятен" непрямого освещения из-за недостатка лучей. Если в сцене нет быстродвижущихся источников, влияющих на GI, установите значение 30 для улучшения качества без потери производительности.

  • Sdfgi > Frames To Update Light (Кадры для обновления света): Низкие значения обеспечивают более быстрое отражение изменений движущихся источников света, но увеличивают нагрузку на GPU. Если в сцене нет быстродвижущихся источников, влияющих на GI, установите значение 16 для повышения производительности.

  • Gi > Use Half Resolution (Использовать половинное разрешение): Если включено, буфер глобального освещения (GI) для SDFGI и VoxelGI будет рендериться в половинном разрешении. Например, при рендеринге в 3840×2160 буфер GI будет вычисляться в разрешении 1920×1080. Включение этой опции значительно экономит ресурсы GPU, но может вызывать заметные артефакты сглаживания на тонких деталях.

Производительность рендеринга SDFGI также зависит от количества каскадов и размера ячейки, заданных в ресурсе Environment (см. выше).

Вот с чем стоит быть осторожным

SDFGI имеет некоторые недостатки из-за каскадной природы. При движении камеры сдвиги каскадов могут быть заметны в непрямом освещении. Это можно смягчить настройкой размера каскадов или добавлением тумана (который сделает сдвиги вдали менее заметными).

Кроме того, производительность снизится при слишком быстром движении камеры. Это можно исправить двумя способами:

  • Обеспечение плавного движения камеры во всех ситуациях.

  • Временное отключение SDFGI в ресурсе Environment при быстром перемещении камеры с последующим включением после снижения скорости.

При включении SDFGI глобальному освещению требуется время для полного схождения (по умолчанию 25 кадров). Это может создавать заметный переходный эффект во время схождения GI. Для маскировки используйте узел ColorRect, охватывающий весь вьюпорт, с плавным исчезновением (fade out) при переключении сцен через AnimationPlayer.

Поле знаковых расстояний обновляется только при перемещении камеры между каскадами. Это означает, что при изменении геометрии вдали глобальное освещение будет корректным после приближения камеры. Однако если перемещается близкий объект с режимом запекания Static или Dynamic (например, дверь), глобальное освещение будет отображаться некорректно до тех пор, пока камера не отдалится от объекта.

Чёткие отражения в SDFGI видны только на непрозрачных материалах. Прозрачные материалы используют только размытые отражения, даже если шероховатость (roughness) материала меньше 0.2.