Unity - керівництво візуалізація hdr (розширений динамічний діапазон) в unity

HDR Color Picker

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

При стандартній візуалізації, червона, зелена і синя компоненти пікселя представлені дробовим числом в діапазоні 0..1, де 0 вказує на нульову інтенсивність, а одиниця представляє максимальну інтенсивність на дисплеї. Хоча це просто у використанні, воно не відображає того, як освітлення працює в сцені з реального життя. Людське око, як правило, пристосовується до умов освітлення, так що об'єкт, який виглядає білим в тьмяно освітленій кімнаті, в дійсності може бути менш яскравим, ніж сірий об'єкт при денному освітленні. Крім того, очей більш чутливий до відмінностей яскравості на нижньому краю діапазону, ніж на верхньому.

Можна отримати більш переконливі візуальні ефекти, якщо рендеринг адаптований так, щоб діапазони значень пікселів більш точно відображали рівні освітлення, які могли б бути присутніми в реальному сцені. Хоч ці значення і будуть дуже потребувати зворотного прив'язці до діапазону, доступному на пристрої відображення, будь-які проміжні розрахунки (такі, як ефекти пост-обробки Unity) дадуть більш реалістичні результати. Можливість внутрішнього представлення графіки використовувати значення в межах дії 0..1 є сутністю High Dynamic Range (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 типів можна знайти в документації по ефектах пост-обробки.

Unity - керівництво візуалізація hdr (розширений динамічний діапазон) в unity
Виключно яскрава сцена, намальовані в HDR. Без tonemapping, більшість пікселів здаються поза діапазону.
Unity - керівництво візуалізація hdr (розширений динамічний діапазон) в unity
Та ж сцена, що і вище. Але на цей раз, ефект 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' можна знайти в документації по ефектах пост-обробки.

Unity - керівництво візуалізація hdr (розширений динамічний діапазон) в unity
У цій сцені відображення сонця від вікна автомобіля мають значення інтенсивності більше 1.0. Блум може взяти і підсвітити ці ділянки тільки якщо у камери включений HDR, тим самим дозволяючи захопити ці інтенсивні ділянки.
Unity - керівництво візуалізація hdr (розширений динамічний діапазон) в unity
Вікно автомобіля залишатиметься без світіння, якщо у камери не включений HDR. Єдиний спосіб додати світіння - знизити поріг інтенсивності, але тоді почнуть світитися і інші небажані ділянки зображення.

  • Кольори в зонах високої інтенсивності НЕ будуть втрачені
  • Краща підтримка блума і світіння (glow).
  • Зниження banding-артефактів в областях з низькочастотних освітленням

Нотатки з використання

Forward Rendering (попереджуючий рендеринг)

У режимі попереднього рендеринга, HDR підтримується тільки якщо у вас є ефект пост-обробки. Це пов'язано з питаннями продуктивності. Якщо у вас не присутній ефект пост-обробки, тоді не існуватиме tone mapping і буде відбуватися відсікання інтенсивності. У такій ситуації сцена буде отрисовать прямо в бекбуфер, в якому не підтримується HDR.

Deferred Rendering (відкладений рендеринг)

У режимі HDR пам'ять під буфер light prepass buffer буде також виділятися як під буфер з плаваючою комою. Це знижує зв'язаність в буфері освітлення. HDR підтримується при відкладеному рендеринге, навіть якщо не використовуються ефекти пост-обробки.

До скрипту з ефектом пост-обробки можна додати атрибут ImageEffectTransformsToLDR для вказівки того, що цільової буфер повинен бути в LDR, а не в HDR. По суті, це означає, що скрипт може автоматично конвертувати в LDR після застосування свого HDR ефекту пост-обробки.

Схожі статті