Для математики шейдеров, почему линейный RGB должен сохранять гамму sRGB?

13

sRGB часто противопоставляется «линейному RGB».

  • Изображения хранятся на диске и передаются на дисплеи в формате sRGB, который по интенсивности воспринимается примерно одинаково.
  • Математика шейдеров выполняется в линейном RGB, который физически однороден по интенсивности.
  • Гамма-коррекция может применяться для преобразования между ними.

Теперь у sRGB есть стандарт, который колориметрически определяет его гамму, точно говоря, где лежат чистый красный, зеленый, синий и белый. Но не существует соответствующего стандарта только для «линейного RGB». Можно сказать, что любой треугольник на диаграмме цветности является линейным, и на самом деле есть несколько хорошо известных гамм на выбор:

RGB гаммы

На практике, когда мы говорим «линейный RGB», мы имеем в виду «sRGB без гамма-коррекции». (Это неявно то, что мы делаем, когда применяем гамма-коррекцию sRGB в качестве последнего шага постобработки, но игнорируем цветовые пространства для остальной части конвейера рендеринга.)

Но почему эта гамма RGB является правильной для использования при интерполяции и расчетах освещения? Это кажется произвольным. Во всяком случае, не хотим ли мы использовать максимально возможную гамму для внутренних вычислений, а затем обрезать или масштабировать цвета в гамме устройства вывода в самом конце?

Является ли освещение RGB приближенным, несмотря ни на что, и не имеет значения, какую гамму мы выбираем, и мы можем также выбрать ту, которая ближе всего к тому, что изначально поддерживает дисплей? Это просто халатность? Или вычисления в этих разных гаммах фактически дают одинаковые результаты?

Maxpm
источник

Ответы:

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 слева и отображаются в виде образцов на право.

Испытания и исследования, проведенные Ward и Eydelberg-Vileshin (2002) , Langlands and Mansencal (2014) и Mansencal (2014), показали, что гаммы с основными цветами, ближайшими к спектральному локусу, то есть спектрально острыми основными, имеют тенденцию минимизировать ошибки по сравнению со спектральной основой. правда оказывает.

Вот изображение, которое я недавно сделал с Mitsuba, чтобы подтвердить наши результаты с Андерсом:

Рендеринг цветных пространств

Это рендеринг одной и той же сцены с использованием основных цветов BT.709 (первый ряд), 47 спектральных бинов (второй ряд), основных цветов BT.2020 (третий ряд), спектральных минус основные цвета BT.709 отображает остатки (четвертый ряд), спектральный минус BT .2020 праймериз рендерит остатки (пятый ряд). В последнем ряду показаны составные изображения, собранные с тремя вертикальными полосами соответственно основных цветов BT.709, спектральных изображений и основных цветов BT.2020. Прямое освещение имеет тенденцию совпадать между рендерами. Области, демонстрирующие влияние нескольких световых отскоков, то есть потолок, при визуализации основных цветов BT.709 и BT.2020, как правило, демонстрируют повышенную насыщенность, особенно при визуализации основных цветов BT.709 или незначительную потерю энергии, особенно в BT .2020 рендер. Исключая выбросы, например источник видимого света, среднеквадратическое отклонение со спектральной визуализацией составляет 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 бит на канал), но ваша математика шейдеров не должна оставаться в этой гамме после ввода изображение распаковано. Но, в конце концов, вы должны рассмотреть дисплей.

Если у вас есть изображение и пришло время его отобразить, вы закодируете его в виде, которое требуется устройству отображения. ЭЛТ выбирали sRGB, а затем ЖК-мониторы эмулировали это, поэтому сжатие sRGB для отображения на мониторе было распространенным выбором в течение последних десятилетий, и это ограничивало выходной сигнал в пределах гаммы sRGB, иначе произойдет отсечение. Дисплеи с более широким диапазоном не должны придерживаться этой точной гаммы.

(Я думаю, что основанием для утверждения, что созданные человеком изображения имеют кодировку sRGB, является то, что предполагается, что эти изображения были созданы на дисплеях sRGB)

Так что теперь вы, вероятно, можете лучше понять, почему именно sRGB был поддержан в аппаратном обеспечении для математического ввода шейдеров и отображения изображений. Это общий случай. Кроме того, у него есть хорошие преимущества для уменьшения воспринимаемых артефактов цветового объединения, поэтому это хороший способ сжать цвета в 8 бит и сохранить их правдоподобными для человека.

wbahnassi
источник
0

Если вы разрешите значения за пределами диапазона 0..1, то даже с довольно ограниченными основными цветами sRGB вы все равно сможете обратиться ко всей визуальной гамме человека. Поэтому для хранения значений цвета света с плавающей запятой не должно иметь большого значения, какие основные цвета вы используете. Тем не менее, выполнение любого вида мультипликативной математики становится немного забавным, так как произвольные координаты основных цветов действуют как масштабирующая «опора». Первичные цвета sRGB обычно используются, потому что традиционно ваши входные данные закодированы в sRGB, а выводной вывод - sRGB или rec709 ... С rec2020 половина изменилась, но на данный момент большая часть ваших входных данных, вероятно, все еще, вероятно, закодирована в sRGB, поэтому использование те же самые праймериз, что и ваше хранилище, это просто самый простой вариант.

Hodgman
источник