Использование Voxel Global Illumination

VoxelGI — это технология полностью динамического глобального освещения, предназначенная для небольших и средних 3D-сцен. Она требует значительных ресурсов GPU, поэтому лучше всего подходит для систем с дискретными видеокартами.

Важно

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

См. также

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

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

VoxelGI отключен.

VoxelGI отключен.

VoxelGI включен.

VoxelGI включен.

Настройка VoxelGI

  1. Убедитесь, что ваша статическая геометрия уровня импортирована с опцией Lightmap Baking, установленной в значение Static (Статический) или Static Lightmaps (Статические карты освещения) в доке Import. Для узлов MeshInstance3D, добавленных вручную, убедитесь, что свойство Global Illumination > Mode** установлено в Static в инспекторе.

  2. Создайте узел VoxelGI в доке Scene Tree (Дерево сцены).

  3. Переместите узел VoxelGI в центр области, которую он должен покрывать, перетаскивая его манипулятор в 3D-виде. Затем отрегулируйте его границы, перетаскивая красные точки в 3D-виде (или введите значения в инспекторе). Убедитесь, что границы VoxelGI не являются излишне большими, иначе пострадает качество.

  4. Выберите узел VoxelGI и нажмите кнопку Bake (Запечь) в верхней части 3D-редактора. Процесс займет как минимум несколько секунд (в зависимости от количества подразделений (subdivisions) VoxelGI и сложности сцены).

Если хотя бы один mesh в пределах границ VoxelGI имеет режим глобального освещения (Global Illumination > Mode) установленным в Static (Статический), в сцене должно появиться непрямое освещение.

Примечание

Во избежание раздутия текстовых файлов сцен большим объемом бинарных данных, убедитесь, что ресурс VoxelGIData всегда сохраняется во внешний бинарный файл. Этот файл должен иметь расширение .res (бинарный ресурс), а не .tres (текстовый ресурс). Использование внешнего бинарного ресурса для VoxelGIData позволит сохранить ваш текстовый файл сцены компактным, обеспечивая при этом быструю загрузку и сохранение.

Свойства узла VoxelGi

Следующие свойства можно настроить в инспекторе узла VoxelGI перед запеканием:

  • Subdiv (Подразделения): Более высокие значения обеспечивают более точное непрямое освещение (indirect lighting), но снижают производительность, увеличивают время запекания и требуют больше места для хранения.

  • Extents (Границы): Определяют размер области, в которой будет запекаться непрямое освещение (indirect lighting). Границы рассчитываются относительно центра узла VoxelGI.

Следующие свойства можно изменить в ресурсе VoxelGIData, который содержится внутри узла VoxelGI после его запекания:

  • Dynamic Range (Динамический диапазон): Определяет максимальную яркость непрямого освещения. Более высокие значения позволяют отображать более яркий свет, но снижают точность (что может привести к заметной полосатости). Если сомневаетесь, оставьте значение по умолчанию.

  • Energy (Энергия): Общая интенсивность непрямого освещения. Также влияет на яркость прямого света, излучаемого поверхностями с эмиссионными материалами.

  • Bias (Смещение): Дополнительное смещение при обращении к воксельному буферу во время выполнения. Помогает избежать артефактов самозатенения.

  • Normal Bias (Смещение по нормали): Аналогично параметру Bias, но смещает обращение к воксельному буферу в направлении нормали поверхности. Это также помогает устранить артефакты самозатенения. Более высокие значения уменьшают видимость самопреломлений на гладких материалах, но могут вызвать более заметное просачивание света и сделать непрямое освещение менее детализированным. Если приоритетом является устранение самопреломлений, а не качество освещения, установите Bias в 0.0, а Normal Bias — в значение между 1.0 и 2.0.

  • Propagation (Распространение): Множитель энергии для отражённого непрямого освещения. Более высокие значения дают более яркое и рассеянное освещение (что может сделать изображение излишне плоским). При включённой опции Use Two Bounces (Два отражения) может потребоваться уменьшить значение Propagation, чтобы компенсировать общее увеличение яркости непрямого освещения.

  • Use Two Bounces (Два отражения): Если включено, свет будет отражаться дважды вместо одного раза. Это создаёт более реалистичное непрямое освещение и делает его видимым в отражениях. Обычно включение этой опции не оказывает заметного влияния на производительность.

  • Interior (Интерьерный режим): При включении VoxelGI не учитывает освещение от неба (Environment Sky). Следует активировать для закрытых помещений, чтобы предотвратить проникновение внешнего света.

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

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

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

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

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

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

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

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

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

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

Примечание

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

См. также

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

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

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

В разделе Rendering > Global Illumination настроек проекта качество VoxelGI можно настроить двумя способами:

  • Voxel GI > Quality (Качество): При установке значения Low (Низкое) вместо High (Высокое) трассировка воксельных конусов будет использовать только 4 замера вместо 6. Это ускоряет рендеринг, но снижает выраженность эффекта окружающего затенения.

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

Примечание: Для отображения указанных выше настроек необходимо включить переключатель Advanced в диалоговом окне настроек проекта.

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

Устранение утечек света и артефактов в VoxelGI

После запекания VoxelGI вы можете заметить утечки непрямого света в некоторых местах геометрии уровня. Это можно исправить несколькими способами:

  • Для устранения утечек света и артефактов попробуйте переместить или повернуть узел VoxelGI, затем выполните повторное запекание.

  • Для предотвращения утечек света убедитесь, что геометрия уровня полностью герметична. Это лучше всего делать в 3D-редакторе, используемом для проектирования уровня, но также можно использовать примитивные узлы MeshInstance3D с режимом глобального освещения Static (Статический).

  • Для устранения утечек света на тонкой геометрии рекомендуется увеличить её толщину. Если это невозможно, добавьте примитивный узел MeshInstance3D с режимом глобального освещения, установленным на Static. После этого выполните повторное запекание VoxelGI - добавленный узел можно скрыть (он продолжит учитываться в расчётах освещения). Для оптимального результата используйте для MeshInstance3D материал, цвет которого соответствует исходной тонкой геометрии.

  • Для устранения артефактов на отражающих поверхностях попробуйте увеличить значения Bias и/или Normal Bias в ресурсе VoxelGIData, как описано выше. Не устанавливайте эти значения слишком высокими, чтобы не усилить утечки света.

Если вы заметили, что узлы VoxelGI мерцают при движении камеры, скорее всего, это происходит из-за одновременного отображения слишком большого количества экземпляров. Godot поддерживает одновременный рендеринг не более 8 узлов VoxelGI — при превышении этого лимита некоторые узлы могут начать мерцать.

Кроме того, из-за ограничений производительности Godot может выполнять смешивание только между 2 узлами VoxelGI для каждого пикселя на экране. Если области влияния более 2 узлов VoxelGI перекрываются, при движении или повороте камеры могут наблюдаться мерцания глобального освещения.