Освітлення з високим динамічним діапазоном

Вступ

Зазвичай художник виконує все 3D-моделювання, потім усе текстурування, дивиться на свою чудову модель у 3D DCC і каже: «Виглядає приголомшливо, можна інтегрувати!» Потім він вставляє модель у гру, налаштовує освітлення і запускає гру.

Тож у який момент у грі починається робота "HDR"? Щоб зрозуміти відповідь, нам потрібно подивитися, як ведуть себе дисплеї.

Ваш дисплей виводить співвідношення лінійного світла від деякої максимальної до деякої мінімальної інтенсивності. Сучасні ігрові рушії виконують складну математику зі значеннями лінійного світла у відповідних сценах. Отже, в чому проблема?

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

Це означає, що деяка трансформація інтенсивності світла сцени повинна бути перетворена і відображена, щоб вписатися в певний діапазон виводу вибраного дисплея. Найлегше це зрозуміти, якщо ми розглянемо можливість віртуального фотографування нашої сцени ігрового рушія через віртуальну камеру. Тут наша віртуальна камера застосує певне перетворення візуалізації камери до даних сцени, і вихід буде готовий до відображення на певному типі дисплея.

Примітка

Godot ще не підтримує вихід з високим динамічним діапазоном. Він може тільки виконувати освітлення в HDR і тонувати результат до зображення низького динамічного діапазону.

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

Дисплеї комп'ютера

Майже всі дисплеї вимагають нелінійного кодування для надісланих їм значень коду. Дисплей, у свою чергу, використовуючи свою унікальну характеристику передачі, «декодує» кодове значення виведених співвідношень лінійного світла і проектує співвідношення унікального кольорового світла для кожного червонуватого, зеленуватого і блакитнуватого місця світіння.

Для більшості комп'ютерних дисплеїв технічні характеристики дисплея викладені відповідно до IEC 61966-2-1, також відомої як специфікація sRGB 1996 року. Ця специфікація описує, як повинен поводитися дисплей sRGB, включаючи колір світла в світлодіодних пікселях, а також характеристики передачі вводу (OETF) і виводу (EOTF).

Не всі дисплеї використовують ті ж OETF і EOTF, що й комп'ютерний дисплей. Наприклад, дисплеї телевізорів використовують BT.1886 EOTF. Однак, Godot, наразі, підтримує тільки sRGB дисплеї.

Стандарт sRGB базується на нелінійному зв'язку між струмом і світловим виходом звичайних настільних комп'ютерних ЕПТ-дисплеїв.

../../_images/hdr_gamma.png

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

Лінійні сцени та канали активів

Працювати в сценічно-лінійному sRGB не так просто, як клацати перемикачем. Спершу, імпортовані активи зображень повинні бути перетворені в співвідношення лінійного світла при імпорті. Але навіть після цього ці активи можуть не ідеально підходити для використання в якості текстур, залежно від того, як вони були створені.

Зробити це можна двома способами:

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

Це найпростіший спосіб використання активів sRGB, але він не найідеальніший. Однією з проблем є втрата якості. Використання 8 біт на канал для представлення лінійних співвідношень світла недостатньо для правильної кількісної оцінки значень. Ці текстури також можуть бути стиснуті пізніше, що може посилити проблему.

Апаратна функція передачі sRGB для відображення лінійного перетворення

Графічний процесор зробить перетворення після прочитання текселю використовуючи десяткову кому. Спосіб чудово працює на ПК та консолях, але більшість мобільних пристроїв не підтримують його, або вони не підтримують його у форматах стиснутих текстур (наприклад, iOS).

Scene linear to display-referred nonlinear

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

Майте на увазі, що обидва перетворення sRGB -> Display Linear і Display Linear -> sRGB завжди повинні бути включені. Виключення одного з них призведе до жахливих візуальних ефектів, придатних лише для авангардних експериментальних інді-ігор.

Параметри HDR

Параметри HDR можна знайти в Середовищі. У більшості випадків вони знаходяться всередині вузла WorldEnvironment, або камери. Для отримання додаткових відомостей дивіться Середовище та пост-обробка.