Version: 5.3 (switch to 5.4b)
API
HDR Color Picker

Визуализация HDR (расширенный динамический диапазон) в Unity

При стандартной визуализации, красная, зеленая и синяя компоненты пикселя представлены дробным числом в диапазоне 0..1, где 0 указывает на нулевую интенсивность, а единица представляет максимальную интенсивность на дисплее. Хотя это просто в использовании, оно не отражает того, как освещение работает в сцене из реальной жизни. Человеческий глаз, как правило, приспосабливается к условиям освещения, так что объект, который выглядит белым в тускло освещенной комнате, в действительности может быть менее ярким, чем серый объект при дневном освещении. Кроме того, глаз более чувствителен к различиям яркости на нижнем краю диапазона, чем на верхнем.

Можно получить более убедительные визуальные эффекты, если рендеринг адаптирован так, чтобы диапазоны значений пикселей более точно отражали уровни освещения, которые могли бы присутствовать в реальной сцене. Хоть эти значения и будут очень нуждаться в обратной привязке к диапазону, доступному на устройстве отображения, любые промежуточные расчёты (такие, как эффекты пост-обработки Unity) дадут более реалистичные результаты. Возможность внутреннего представления графики использовать значения вне диапазона 0..1 является сущностью High Dynamic Range (HDR) рендеринга.

Работа с HDR

HDR включается для каждой камеры отдельно при при помощи свойств компонента Camera:-

Когда HDR активен, сцена отрисовывается в буфер изображения HDR, который может размещать значения пикселей вне диапазона 0..1. Затем этот буфер подвергается пост-обработке с помощью эффектов пост-обработки, таких как HDR bloom. Эффект пост-обработки tonemapping конвертирует HDR изображение в стандартное low dynamic range (LDR) изображение для отправки на экран. Преобразование в LDR должно происходить в какой-то момент процесса работы эффекта пост-обработки, но оно не должно происходить на последнем этапе, если после этого должны быть применены использующие только LDR эффекты пост обработки. Для удобства, некоторые эффекты пост-обработки могут автоматически конвертироваться в LDR после применения HDR эффекта (см. раздел Скриптинг, представленный ниже).

Tonemapping (тональная компрессия)

Tonemapping - это процесс упаковывания HDR значений обратно в LDR диапазон. Существует множество различных методов, и то, что хорошо для одного проекта, может не быть лучшим выбором для другого. В Unity включён набор разных tonemapping эффектов пост-обработки. Для того, чтобы их использовать, выберите Assets -> Import Package -> Image Effects (Pro Only), затем выберите камеру в сцене и выберите Component -> Image Effects ->ToneMapping. Подробное описание tonemapping типов можно найти в документации по эффектам пост-обработки.

Исключительно яркая сцена, отрисованная в HDR. Без tonemapping, большинство пикселей кажутся вне диапазона.
Исключительно яркая сцена, отрисованная в HDR. Без tonemapping, большинство пикселей кажутся вне диапазона.
Та же сцена, что и выше. Но на этот раз, эффект tonemapping переносит большинство интенсивных участков в более правдоподобный диапазон. Учтите, что адаптивный tonemapping может даже плавно переходить из верхней картинки к этой, тем самым имитируя адаптивный характер средств захвата медиа (напр., глаза, камеры).
Та же сцена, что и выше. Но на этот раз, эффект tonemapping переносит большинство интенсивных участков в более правдоподобный диапазон. Учтите, что адаптивный tonemapping может даже плавно переходить из верхней картинки к этой, тем самым имитируя адаптивный характер средств захвата медиа (напр., глаза, камеры).

HDR Bloom и Glow

Использование HDR позволяет получить намного больше контроля в пост-обработке. У LDR блума (bloom) есть неудачный побочный эффект размытия многих областей экрана, даже если интенсивность их пикселей менее 1.0. С помощью HDR можно применять блум только к тем областям, где интенсивность выше единицы. Это приводит к более желанному результату, когда по соседним пикселям “растекаются” только очень яркие элементы сцены. Встроенный эффект пост-обработки ‘Bloom and Lens Flares’ теперь тоже поддерживает HDR. Чтобы добавить его к камере, выберите Assets -> Import Package -> Image Effects (Pro Only), затем выберите камеру в сцене, и выберите Component -> Image Effects ->Bloom. Более подробное описание эффекта ‘Bloom’ можно найти в документации по эффектам пост-обработки.

В этой сцене отражения солнца от окна автомобиля имеют значения интенсивности больше 1.0. Блум может взять и подсветить эти участки только если у камеры включен HDR, тем самым позволяя захватить эти интенсивные участки.
В этой сцене отражения солнца от окна автомобиля имеют значения интенсивности больше 1.0. Блум может взять и подсветить эти участки только если у камеры включен HDR, тем самым позволяя захватить эти интенсивные участки.
Окно автомобиля будет оставаться без свечения, если у камеры не включен HDR. Единственный способ добавить свечение - понизить порог интенсивности, но тогда начнут светиться и другие нежелательные участки изображения.
Окно автомобиля будет оставаться без свечения, если у камеры не включен HDR. Единственный способ добавить свечение - понизить порог интенсивности, но тогда начнут светиться и другие нежелательные участки изображения.

Преимущества HDR

  • Цвета в зонах высокой интенсивности не будут потеряны
  • Лучшая поддержка блума и свечения (glow).
  • Снижение banding-артефактов в областях с низкочастотным освещением

Недостатки HDR

  • Используется буферы с плавающей запятой (отрисовка медленней и требуется больше видеопамяти)
  • Не поддерживается аппаратный анти-алиасинг (но вы можете использовать эффект пост-обработки Anti-Aliasing для сглаживания граней)
  • Поддерживается не на всём оборудовании

Заметки по использованию

Forward Rendering (упреждающий рендеринг)

В режиме упреждающего рендеринга, HDR поддерживается только если у вас присутствует эффект пост-обработки. Это связано с вопросами производительности. Если у вас не присутствует эффект пост-обработки, тогда не будет существовать tone mapping и будет происходить отсечение интенсивности. В такой ситуации сцена будет отрисована прямо в бэкбуфер, в котором не поддерживается HDR.

Deferred Rendering (отложенный рендеринг)

В режиме HDR память под буфер light prepass buffer будет также выделяться как под буфер с плавающей запятой. Это снижает связанность в буфере освещения. HDR поддерживается при отложенном рендеринге, даже если не используются эффекты пост-обработки.

Скриптинг

К скрипту с эффектом пост-обработки можно добавить атрибут ImageEffectTransformsToLDR для указания того, что целевой буфер должен быть в LDR, а не в HDR. По сути, это значит, что скрипт может автоматически конвертировать в LDR после применения своего HDR эффекта пост-обработки.

See also

HDR Color Picker.

API
HDR Color Picker