Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

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

Вступ

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

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

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

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

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

Примітка

Godot supports high dynamic range output. You can read more about this on the HDR output page.

For advanced users, it possible to get a non-tonemapped image of the viewport with full HDR data, which can then be saved to an OpenEXR file.

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

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

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

Not all displays use the same OETF and EOTF as a computer display. For example, television broadcast displays use the BT.1886 EOTF. However, Godot only supports sRGB and HDR displays.

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

../../_images/hdr_gamma.png

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

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

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

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

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

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

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

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

Від лінійної сцени до нелінійної, спрямованої на дисплей

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

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

Параметри HDR

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