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, це не має жодного відношення до ігрового рушія; існує лише потенційно нескінченно широкий діапазон значень інтенсивності, що генеруються на кадр рендеринга.

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

Примітка

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

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

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

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 можна знайти в Середовищі. У більшості випадків вони знаходяться всередині вузла WorldEnvironment, або камери. Для отримання додаткових відомостей дивіться Середовище та пост-обробка.