reckfellENGINE

Физический свет и экспозиция камеры

Люксы, люмены, ISO и выдержка: единицы, настройка и диагностика яркости.

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

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

Используйте этот режим, когда нужна воспроизводимая шкала освещения. Для художественно настроенной игры обычная энергия света и фиксированная экспозиция тоже подходят. Переключение готового проекта в физический режим не сохраняет автоматически прежний баланс яркости.

Настройте весь процесс

  1. Откройте Project Settings, включите Advanced, затем Rendering → Lights And Shadows → Use Physical Light Units (rendering/lights_and_shadows/use_physical_light_units). Перезапустите редактор и игру. Это настройка запуска, а не надёжный покадровый переключатель.
  2. Назначьте CameraAttributesPhysical свойству Camera3D.Attributes активной камеры. Атрибуты камеры управляют экспозицией отдельно от ресурса Environment, который отвечает за тональное преобразование.
  3. Для согласованной экспозиции мира и предпросмотра редактора также задайте подходящие атрибуты в WorldEnvironment.CameraAttributes. Собственные атрибуты игровой камеры имеют для неё приоритет. Фокусное расстояние и границы отсечения применяются к Camera3D при назначении физического ресурса самой камере; настройка мира не задаёт объективы всех камер.
  4. На время настройки баланса отключите Auto Exposure. Осознанно задайте ExposureMultiplier и Environment.TonemapExposure: это отдельные множители.
  5. Настройте интенсивность света, температуру и яркость фона. Начните с LightEnergy = 1, чтобы дополнительный художественный множитель не скрывал выбранную шкалу. При работе над интерьером уберите или перенастройте солнце и фон предпросмотра.
  6. Сравнивайте одну камеру и один материал перед следующими изменениями. Проверяйте целевой рендерер и устройство: одинаковые эффекты на всех бэкендах эти настройки не гарантируют.

Когда режим выключен, физическая камера продолжает управлять объективом/FOV и границами отсечения. Однако ISO, выдержка и диафрагма не влияют на нормализацию её экспозиции. Явный ExposureMultiplier продолжает работать. Диафрагма также может участвовать в расчёте глубины резкости на поддерживаемом рендерере.

Значения камеры: не перепутайте единицы

При включённых физических единицах, отключённой автоэкспозиции и неизменной освещённой поверхности:

Свойство C#Единица / смыслИзменение линейного освещения
ExposureSensitivityISO100 → 200: вдвое ярче.
ExposureShutterSpeedОбратные секунды, в C# тоже50 → 100: время меняется с 1/50 с на 1/100 с; вдвое темнее.
ExposureApertureДиафрагменное число2 → 4: вчетверо темнее. Большее число означает меньшее отверстие.
ExposureMultiplierБезразмерный множитель1 → 2: вдвое ярче; работает и без физических единиц.
FrustumFocalLengthМиллиметрыВертикальный FOV и участие в расчёте глубины резкости. Не множитель экспозиции.
FrustumFocusDistanceМетрыДистанция фокусировки, не фокусное расстояние и не отсечение.
FrustumNear, FrustumFarМетрыБлижнее/дальнее отсечение. Задавайте положительные расстояния, near меньше far.

Для 1/50 секунды задайте ExposureShutterSpeed = 50f, а не 0.02f. Второе значение в этом API означает 50 секунд и может вызвать сильный пересвет.

Для фиксированной физической экспозиции версия 1.0.0 рассчитывает нормализацию как ISO / (120 × диафрагменное число² × значение выдержки), затем умножает на ExposureMultiplier. Это объясняет соотношения выше, но не калибрует произвольный ассет по реальным измерениям. Из-за тонального преобразования, обрезания и кодирования дисплея удвоение линейного освещения не обязано удваивать числа пикселей снимка.

Изменение ISO само по себе не добавляет фотографический шум сенсора. Параметр выдержки меняет экспозицию, а не включает размытие движения. Глубина резкости — отдельный эффект с затратами GPU там, где он активен. По исходникам DOF поддерживается в Forward+ и Mobile, но не Compatibility; проверки изображения для этой статьи выполнены только в Forward+.

Создайте атрибуты камеры в C#

Класс ниже возвращает ресурс с объективом 35 мм, фокусировкой на 3 м и фиксированной экспозицией. Это исходный пример, а не универсальный пресет яркости. Сначала включите настройку проекта и перезапустите его, затем назначьте ресурс свойству Attributes нужной камеры.

C#
using Reckfell;

public static class PhysicalCameraSetup
{
    // Example starting point, not a universal lighting preset.
    // Enable use_physical_light_units in Project Settings and restart first.
    public static CameraAttributesPhysical Create()
    {
        return new CameraAttributesPhysical
        {
            ExposureSensitivity = 100f,
            ExposureAperture = 2.8f,
            ExposureShutterSpeed = 50f, // 1/50 second, not 0.02 here.
            ExposureMultiplier = 1f,
            AutoExposureEnabled = false,
            FrustumFocalLength = 35f, // Millimeters.
            FrustumFocusDistance = 3f, // Meters.
            FrustumNear = 0.1f,
            FrustumFar = 100f,
        };
    }
}

Camera3D удерживает назначенный ресурс; не вызывайте для него Dispose сразу после назначения. Если несколько камер используют одни атрибуты, изменение ресурса затронет всех пользователей. Создайте отдельные экземпляры, если настройки должны различаться.

Назначение CameraAttributesPhysical камере заменяет её FOV, near/far и поведение соотношения сторон настройками физического ресурса. Увеличение фокусного расстояния сужает вертикальный FOV; реализация использует сенсор 36 × 24 мм и сохраняет вертикальное кадрирование. Поэтому широкий viewport показывает больше по горизонтали. Для изменения перспективы перемещайте камеру: одно лишь фокусное расстояние меняет объектив и кадрирование.

Значения света и фона

НастройкаСмысл в физическом режимеЧастая ошибка
DirectionalLight3D.LightIntensityLuxОсвещённость направленного света, люксы.Подставлять сюда поток лампы в люменах.
OmniLight3D / SpotLight3D.LightIntensityLumensСветовой поток локального источника, люмены.Считать его освещённостью поверхности на произвольном расстоянии.
Light3D.LightEnergyДополнительный множитель энергии.Менять одновременно интенсивность и энергию, не отслеживая причину изменения.
Light3D.LightTemperatureТемпература в кельвинах, сочетается с LightColor.Ожидать нейтральный свет при 6500 K, сохранив окрашенный LightColor.
Environment.BackgroundIntensityЯркость фона в нитах с учётом его множителя энергии.Настраивать лампы интерьера на фоне случайно слишком яркого неба.

Температура около 6500 K приблизительно нейтральна; меньшие значения дают более тёплый оттенок, большие — более холодный. Движок сочетает цвет температуры с LightColor в линейном пространстве. При отключённых физических единицах температура и физическая интенсивность не влияют на рендер света.

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

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

ПроблемаДействие
После включения физических единиц сильный пересветПерезапустите проект, проверьте атрибуты активной камеры, интенсивность солнца/неба и оба множителя экспозиции.
ISO или выдержка не влияют на кадрПроверьте настройку запуска, атрибуты активной камеры и использование unshaded материалом.
Собственная unshaded-поверхность игнорирует экспозицию камерыВ проверенном Forward+ её неосвещённый ALBEDO обходит нормализацию света камеры. Множитель экспозиции Environment продолжает действовать. Сравнивайте физический свет на освещаемом материале.
Предпросмотр редактора отличается от игрыПроверьте атрибуты мира и переопределения камеры, свет предпросмотра и Environment каждого вида.
Экспозиция будто сама отменяет измененияОтключите автоэкспозицию для сравнения фиксированных настроек. Она поддерживается в Forward+, а не на всех рендерерах.
Яркость лампы неверна после изменения масштаба комнатыПроверьте расстояния и единицы: люмены или люксы. Экспозиция не исправляет неверный масштаб.
После назначения атрибутов объекты исчезлиПроверьте near/far ресурса и новое кадрирование объектива.
Стена освещается сквозь потолокПроверьте геометрию и тени. Физические единицы не создают недостающее перекрытие света.

Проверено: 30 нативных проверок в двух отдельных запусках игры на Windows Forward+/Vulkan. Они измеряют соотношения экспозиции/люксов/энергии по отрисованным пикселям, оттенок температуры, поведение unshaded и обновление проекции камеры. Они не подтверждают абсолютную фотометрическую калибровку, качество DOF, адаптацию автоэкспозиции, размытие движения, совпадение предпросмотра редактора, другие рендереры и экспортированные сборки. Ошибки обрезания яркости и сохранения файлов разобраны в статье HDR и экспозиция.

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

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

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

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