Для шейдерної математики, чому лінійний RGB повинен підтримувати гамму sRGB?


13

sRGB часто протиставляється "лінійному RGB".

  • Зображення зберігаються на диску і передаються на дисплеї в sRGB, який приблизно сприймається рівномірно за інтенсивністю.
  • Шейдерна математика проводиться в лінійному RGB, який фізично рівномірний за інтенсивністю.
  • Для перетворення між ними можна застосувати корекцію гамми.

Тепер sRGB має стандарт, який колориметрично визначає його гаму, вказуючи, де саме лежать чисті червоні, зелені, сині та білі. Але немає відповідного стандарту лише для "лінійного RGB". Будь-який трикутник на діаграмі хроматичності можна сказати як лінійний, і, дійсно, можна вибрати кілька добре відомих гам:

RGB-гами

На практиці, коли ми говоримо "лінійний RGB", ми маємо на увазі "sRGB без гамма-корекції". (Це неявно те, що ми робимо, застосовуючи корекцію гамма-корекції sRGB як заключний етап після обробки, але ігноруємо кольорові простори для решти конвеєра візуалізації.)

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

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

Відповіді:


13

Необхідно уникати розмов про лінійний RGB, оскільки він нічого не розповідає про функції кольорового простору RGB, тобто про функції праймериз, білих точок та кольорових компонентів. Кілька років тому, якщо припустити, що sRGB є середнім, але сьогодні DCI-P3 і BT.2020 є дуже поширеними, це повинно бути виключено.

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

Можна подумати, що виконання двох візуалізацій з однаковими базовими кольорами, але одне, де вони закодовані sRGB / BT.709, а інше, де вони закодовані DCI-P3, а потім перетворення двох отриманих зображень у, наприклад, ACES2065-1 дайте ті самі зображення, але це не так. Деякі математичні операції через природу лінійної алгебри та матриць залежать від заданих праймерів кольорового простору RGB, тобто від основи кольорових просторів. Ті ж операції, що виконуються в різних кольорах простору RGB, дають різні значення тристимулу, перетворені назад у кольоровий простір CIE XYZ. Наприклад, операції множення, ділення та потужності залежать від праймерів кольорового простору RGB, тоді як додавання та віднімання не є.

Кольорові простори та експоненція RGB

Це зображення ілюструє ефект множення самих різних кольорів на різні кольори простору RGB: отримані кольори різні. Різні зразки генеруються наступним чином: 3 випадкових значення кольорового простору sRGB вибираються та перетворюються на три досліджувані простори кольорів RGB, вони експонуються, перетворюються назад у кольоровий простір sRGB, побудовані на діаграмі хроматичності CIE 1931 зліва та відображаються у вигляді зразків на правильно.

Випробування та дослідження, проведені Уордом та Ейдельбергом-Вілешином (2002) , Лангландами та Мансенкалем (2014) та Мансенкалем (2014), показали, що гами з первинками, найближчими до спектрального локусу, тобто спектрально гострими праймерізами, мають тенденцію до мінімізації помилок порівняно зі спектральним ґрунтом правда робить.

Ось зображення, яке я нещодавно надав Мітсубі, щоб повторно підтвердити наші висновки з Андерсом:

Надання кольорових просторів

Це візуалізація однієї сцени з використанням прайметрій BT.709 (перший ряд), 47 спектральних бункерів (другий ряд), праймери BT.2020 (третій ряд), спектральні мінус BT.709 праймери виводить залишки (четвертий ряд), спектральний мінус BT .2020 праймери виводить залишки (п’ятий ряд). Останній рядок демонструє складені зображення, зібрані з трьома вертикальними смужками відповідно первісних праймерів BT.709, спектральних та праймериз BT.2020. Пряме освітлення має тенденцію до відповідності між візуалізацією. Області, які демонструють ефект багаторазових відскоків світла, тобто, стеля, у первинних вібраторах BT.709 та BT.2020, як правило, демонструють підвищену насиченість, особливо це стосується випромінювання праймерів BT.709 або незначної втрати енергії, особливо в BT .2020 візуалізація. За винятком залишків, наприклад, видимого джерела світла, RMSE зі спектральним відтворенням становить 0,0083і 0,0116 відповідно для праймери BT.2020 і BT.709 праймерів.

Тепер це не означає, що вони завжди матимуть кращих результатів, і, можливо, вдасться навести приклади, які демонструватимуть упередження BT.709 / sRGB. Основним результатом є те, що рендери RGB не можуть відповідати спектральним рендерам, а різкі широкі гами мають більшу ефективність. Що стосується вибору кольорового простору візуалізації, я б вибрав його з широкою гамою, яка охоплює гаму Pointer, а DCI-P3, BT.2020 або ACEScg є відмінними кандидатами для цього.


5

На практиці, коли ми говоримо "лінійний RGB", ми маємо на увазі "sRGB без гамма-корекції".

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

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

Це важливо, оскільки рівняння освітлення не працюють, якщо значення кольорів не лінійно відображають інтенсивність світла. Але рівняння не хвилює, який лінійний колірний простір ви використовуєте; ви просто повинні вибрати один.

Отже, лінеаризований кольоровий простір sRGB не є більш правильним, ніж лінеаризований кольоровий простір Adobe RGB або лінеаризований кольоровий простір SWOP CMYK. Важливо саме дві речі:

  1. Кольоровий простір являє собою лінійне відображення значень інтенсивності світла.
  2. Обраний кольоровий простір послідовно використовується в рівнянні освітлення. Тобто всі кольори, що використовуються в рівнянні освітлення, походять з одного і того ж (лінійного) простору кольорів.

Чи не так, що RGB-освітлення буде приблизним незалежно від того, тому не має значення, яку гаму ми виберемо, і ми можемо також вибрати ту, яка найближча до того, що відображається на дисплеї?

Це, і той факт, що перетворення sRGB вбудовано в апаратне забезпечення в цей час, тоді як інші перетворення простору кольорів часто це не так. Отже, якщо ви хочете використовувати лінеаризований кольоровий простір Adobe RGB, вам доведеться зробити багато роботи в ваших шейдерах, щоб лінеаризувати значення текселі та правильно виконати білінеарну / трилінійну інтерполяцію на них (що потрібно зробити після лінеаризації), перш ніж ви навіть зможете застосувати їх до рівняння освітлення. І тоді вам доведеться здійснити перетворення з лінеаризованого Adobe RGB в лінеаризований sRGB, щоб ви могли записати на sRGB зображення кадрів буфера для відображення.

Або ви можете просто використовувати лінеаризований sRGB скрізь і мати продуктивність. Останній прагне виграти.


Що ви думаєте про цей запис ? Якщо я читаю це правильно, це свідчить про те , що розрахунки в різних лінійних колірних просторах зробити призводять до різних результатів.
Maxpm

@Maxpm: Це цікаво. Як я прочитав цей документ, проблема полягає в тому, що світло насправді не вписується в нашу модель кольорового простору RGB. Це спричиняє розбіжні візуальні результати в тому, що математично повинно бути одне і те ж. Там єдиним рішенням, здається, є припинити використання RGB і почати використовувати спектральне відображення.
Нікол Болас

@Maxpm, але поза те, що вони роблять, після того, як всі інші місця відрізняються. Але тоді RGB не є кольором, так що є. Але тоді виникає питання, яким правильним ви хочете бути. Прибутки стають все меншими і меншими,
joojaa

0

Існує дві сторони, чому саме sRGB. Для вхідних зображень, що не є HDR, стверджується, що їх слід вважати стиснутими до sRGB (чи точне твердження - це інша історія). Отже, перш ніж виконувати будь-яку лінійну математичну операцію на них, вам потрібно видалити їх з sRGB. Можливо також, що зображення було захоплено і стиснене до іншого зображення, яке не є sRGB, і в цьому випадку вам потрібно декомпресувати це конкретне представлення. У будь-якому випадку кодування передбачає певну гаму, що вхідне зображення ніколи не вийде (тому що зображення, що зберігаються sRGB, як правило, усічені до 8 біт на канал), але ваша математика шейдера не повинна залишатися в цій гамі після введення зображення декомпресується. Але врешті-решт, ви повинні розглянути дисплей.

Якщо у вас є зображення, і настав час його відобразити, ви кодуєте його у поданні, якого вимагає пристрій відображення. CRT обрали sRGB, потім РК-дисплеї емулювали це, тому компресія sRGB для відображення монітора була поширеним вибором протягом останніх десятиліть, і це обмежувало висновок, щоб він тримався в межах sRGB-гами, інакше відбудеться відсікання. Дисплеї ширшого діапазону не повинні дотримуватися такої гами.

(Я думаю, що підстава для твердження про те, що створені людиною зображення є кодованими sRGB, полягає в тому, що ці зображення вважалися написаними на екранах sRGB)

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


0

Якщо ви допускаєте значення за межами діапазону 0..1, то навіть із досить обмеженими праймерами sRGB ви все одно можете вирішити всю зорову гаму людини. Таким чином, для зберігання значень кольорів світла з плаваючою точкою не повинно мати великого значення, які праймери ви використовуєте. Однак, будь-яка мультипликативна математика стає дещо химерною, оскільки довільні координати праймеріз виконують роль «стрижня» масштабування. srGB праймери зазвичай використовуються, оскільки традиційно ваші вхідні дані кодуються sRGB, а вихідний дисплей - sRGB або rec709 ... З rec2020, половина цього змінилася, але наразі більшість ваших вхідних даних все ще, ймовірно, кодується sRGB, тому використовуючи ті самі праймери, як і ваше сховище, - це найпростіший варіант.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.