Следует избегать разговоров о линейном RGB , поскольку он ничего не говорит вам о внутренних характеристиках цветового пространства RGB, т. Е. Основных функциях, функциях передачи белой точки и цветовых компонентов. Несколько лет назад, предполагая, что sRGB был средним, но в настоящее время DCI-P3 и BT.2020 очень распространены, это должно быть исключено.
Идеальная гамма для рендеринга - это та, которая минимизирует ошибки в отношении эталонной реальности или, что более удобно, спектрального рендеринга наземной истинности. Первый вывод из этого предложения состоит в том, что различные пространства RGB не эквивалентны и не приведут к аналогичным результатам.
Можно подумать, что выполнение двух визуализаций с одинаковыми базовыми цветами, но один, где они кодируются с помощью sRGB / BT.709, и другое, где они кодируются с помощью DCI-P3, а затем преобразование двух результирующих изображений, например, в ACES2065-1, будет выдают те же изображения, но это не так. Некоторые математические операции из-за природы линейной алгебры и матриц зависят от заданных основных цветов RGB, т. Е. На основе пространств цветов. Те же самые операции, выполняемые в другом цветовом пространстве RGB, приведут к разным значениям трехцветия после преобразования обратно в цветовое пространство CIE XYZ. Например, операции умножения, деления и вычисления мощности зависят от основных цветов 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 являются отличными кандидатами на это.
Есть две стороны, почему sRGB особенно. Утверждается, что для входных изображений, отличных от HDR, они должны быть сжаты в sRGB (точна ли эта заявка, это другая история). Следовательно, прежде чем вы сможете выполнить с ними линейную математическую операцию, вам необходимо распаковать их из sRGB. Также возможно, что изображение было захвачено и сжато в другое представление, отличное от sRGB, и в этом случае вам необходимо распаковать это конкретное представление. В любом случае кодирование подразумевает определенную гамму, что входное изображение никогда не исчезнет (поскольку изображения, сохраненные в sRGB, обычно усекаются до 8 бит на канал), но ваша математика шейдеров не должна оставаться в этой гамме после ввода изображение распаковано. Но, в конце концов, вы должны рассмотреть дисплей.
Если у вас есть изображение и пришло время его отобразить, вы закодируете его в виде, которое требуется устройству отображения. ЭЛТ выбирали sRGB, а затем ЖК-мониторы эмулировали это, поэтому сжатие sRGB для отображения на мониторе было распространенным выбором в течение последних десятилетий, и это ограничивало выходной сигнал в пределах гаммы sRGB, иначе произойдет отсечение. Дисплеи с более широким диапазоном не должны придерживаться этой точной гаммы.
(Я думаю, что основанием для утверждения, что созданные человеком изображения имеют кодировку sRGB, является то, что предполагается, что эти изображения были созданы на дисплеях sRGB)
Так что теперь вы, вероятно, можете лучше понять, почему именно sRGB был поддержан в аппаратном обеспечении для математического ввода шейдеров и отображения изображений. Это общий случай. Кроме того, у него есть хорошие преимущества для уменьшения воспринимаемых артефактов цветового объединения, поэтому это хороший способ сжать цвета в 8 бит и сохранить их правдоподобными для человека.
источник
Если вы разрешите значения за пределами диапазона 0..1, то даже с довольно ограниченными основными цветами sRGB вы все равно сможете обратиться ко всей визуальной гамме человека. Поэтому для хранения значений цвета света с плавающей запятой не должно иметь большого значения, какие основные цвета вы используете. Тем не менее, выполнение любого вида мультипликативной математики становится немного забавным, так как произвольные координаты основных цветов действуют как масштабирующая «опора». Первичные цвета sRGB обычно используются, потому что традиционно ваши входные данные закодированы в sRGB, а выводной вывод - sRGB или rec709 ... С rec2020 половина изменилась, но на данный момент большая часть ваших входных данных, вероятно, все еще, вероятно, закодирована в sRGB, поэтому использование те же самые праймериз, что и ваше хранилище, это просто самый простой вариант.
источник