Work in progress

The content of this page was not yet updated for Godot 4.2 and may be outdated. If you know how to improve this page or you can confirm that it's up to date, feel free to open a pull request.

Освещение с высоким динамическим диапазоном

Введение

Normally, an artist does all the 3D modeling, then all the texturing, looks at their awesome looking model in the 3D modeling software and says "looks fantastic, ready for integration!" then goes into the game, lighting is setup and the game runs.

Так в какой момент все эти "HDR" вступают в игру? Чтобы понять ответ, нам нужно посмотреть, как ведут себя дисплеи.

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

Дисплей имеет ограниченный диапазон интенсивности, в зависимости от типа дисплея. Однако игровой движок выполняет рендеринг в неограниченном диапазоне значений интенсивности. Хотя "максимальная интенсивность" что-то значит для дисплея sRGB, в игровом движке это не имеет никакого значения; существует только потенциально бесконечно широкий диапазон значений интенсивности, генерируемых в каждом кадре рендеринга.

Это означает, что некоторые преобразования интенсивности света сцены, также известные как scene-referred light ratios, должны быть преобразованы и отображены, чтобы вписаться в определённый диапазон вывода выбранного дисплея. Это легче всего понять, если рассмотреть виртуальное фотографирование сцены игрового движка через виртуальную камеру. Здесь наша виртуальная камера применит определённое преобразование рендеринга камеры к данным сцены, и результат будет готов для отображения на определённом типе дисплея.

Примечание

Godot пока не поддерживает вывод изображения с высоким динамическим диапазоном. Он может только выполнять освещение в HDR и тонировать результат в изображение с низким динамическим диапазоном.

Для опытных пользователей всё ещё возможно получить нетонированное изображение видового экрана с полными данными HDR, которое затем можно сохранить в файл OpenEXR.

Компьютерные дисплеи

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

Для большинства компьютерных дисплеев характеристики дисплея определяются в соответствии со стандартом IEC 61966-2-1, также известным как спецификация sRGB 1996 года. Эта спецификация описывает, как должен вести себя дисплей sRGB, включая цвет свечения светодиодных пикселей, а также характеристики передачи входного (OETF) и выходного (EOTF) сигналов.

Не все дисплеи используют те же OETF и EOTF, что и компьютерные дисплеи. Например, дисплеи телевизионного вещания используют EOTF BT.1886. Однако в настоящее время Godot поддерживает только дисплеи sRGB.

Стандарт sRGB основан на нелинейной зависимости между током и световым потоком обычных ЭЛТ-дисплеев настольных компьютеров.

../../_images/hdr_gamma.png

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

Линейные сцены и конвейеры ассетов

Working in scene-linear sRGB is more complex than pressing a single switch. First, imported image assets must be converted to linear light ratios on import. Even when linearized, those assets may not be perfectly well-suited for use as textures, depending on how they were generated.

Есть два способа что бы сделать это:

Функция передачи sRGB для отображения линейных соотношений при импорте изображений

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

Аппаратная функция передачи sRGB в линейное преобразование дисплея

Графический процессор выполняет преобразование после чтения текселя с плавающей точкой. Это отлично работает на ПК и консолях, но большинство мобильных устройств не поддерживают эту функцию, или не поддерживают её для сжатых форматов текстур (например, iOS).

Сцена от линейной до нелинейной с привязкой к дисплею

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

Помните, что преобразования sRGB -> Display Linear и Display Linear -> sRGB всегда должны быть включены оба . Не включение одного из них приведёт к ужасным визуальным эффектам, пригодным только для авангардных экспериментальных инди-игр.

Параметры HDR

Настройки HDR можно найти в ресурсе Environment. Чаще всего они находятся внутри узла WorldEnvironment или задаются в узле Camera. Для получения дополнительной информации смотрите Окружающая среда и постобработка.