Да кто такой этот ваш цветовое пространство
У многих тема цветовых пространств вызывает дрожь в коленях, головные боли и обмороки, особенно когда ты рендеришь видос и видишь, что цвета совсем не такие как были на превью. Я постараюсь избавить читателя от мучений и объяснить, кто такой этот ваш цветовое пространство. Обязательно расскажу про ACES и почему его надо использовать уже вчера.
Что такое цветовые пространства
Начнем с того, что зададим множество цветов реального мира — это будут все цвета, которые может воспринять глаз человека. Цвета в реальном мире — это волны, но поскольку мы работает с цифровыми устройствами нам нужно как-то превращать это волны в цифры. Так вот, цветовое простраство (color space) — это ничто иное как набор правил (математическая модель), с помощью которых цвета кодируются/декодируются цифрами, такой своего рода АЦП. Далее начинается самое интересное — после кодирования данных (например мы сделали запись на камеру) нам нужно эти данные декодировать и как-то отобразить в реальном мире. Это делается это с помощью дисплеев, проекторов, на печати и т.д. Такое отображение — это лишь симуляции такого, как вылядели бы это цвета в реальном мире. Думаю, это очевидно, что цвета яблока, на которое мы смотрим не будут равны цветам этого же яблока, отображенного на экране. Разные носители производят это отображение с разной степенью точности. Они не могут передать на 100% цвета реального мира, а лишь некоторую их часть. Такое множество цветов, которое может отобразить/записать тот или иной носитель, называется цветовой палитрой (color gamut). Такое множество является подмножеством множества цветов реального мира.
Цветовые пространства математически описывают каждый такой gamut. В вебе используется sRGB, для печати — CMYK, профессиональные камеры пишут в Log и так далее. Для каждого носителя/устройства существует свое цветовое пространство. Думаю будет проще представлять у себя в голове цветовое пространство как палитру с красками, для каждой палитры набор красок будет отличаться.
Посмотрим, как цветовые пространства выглядят на графиках. Это диаграмма цветов, которые видит человеческий глаз.
А здесь на диаграмме треугольником выделен охват пространства sRGB.
Как видите, в этот треугольник входит далеко не весь видимый спектр. Каждое цветовое пространство описывает какую-то его часть.
Более подробно про различия цветовых пространств можно прочитать здесь.
С практической точки зрения
На данном этапе логично задать вопрос: и чо дальше-то?
Дальше — надо разобраться, как использовать цветовые пространства для своей выгоды. И тут у многих возникают сложности, зарендерил картинку, на первью одни цвета, откроешь её — другие, а в Ae вообще непонятно что. Я не будут углубляться управление цветом (color management) в отдельно взятых программах, лишь расскажу, как использование разных цветовых пространств помогает на практике.
Обычно мы рендерим png картинку и не задумываемся о цветовых пространствах. И по-умолчанию этот рендер происходит в sRGB, но, как мы уже поняли, это цветовое пространство весьма ограничено по сравнению с видимым спектром и передает очень небольшое количество цветов. Плюс к этому при рендере в png/jpg происходит сжатие и бо́льшая часть цветовой информации теряется. Чтобы сохранить информацию полностью мы можем зарендерить картинку в цветовом пространстве с бо́льшим охватом, до недавнего времени в cg стандартным пространством было Linear. Таким образом мы сможем предать большее количество цветов. Для чего это нужно? Для композитинга. Сохраняя в Linear и в формте EXR 32bit мы оставляем для себя больше возможностей для редактирования изображения на композитинге. Например, у нас останеться информации в тенях и в пересвеченных частях изображения, можно будет легко редактировать яркость изображения без риска получить клиппинг.
Но Linear теперь уходит на задний план, потому что в индустрии появился новый стандарт — ACES.
ACES (читается "эйсэс")
Разберемся в причинах появления ACES (или полное название — ACES2065-1). Многообразие цветовых пространств породило сложности построения универсального пайплайна для крупного продакшена. Видосы с одной камеры приходят в одном цветовом пространстве, с другой — в другом, cg ребята рендерят в третьем, а потом это всё надо как-то композить. При это при конвертациях теряется часть данных о цвете.
Для решения этих проблем было создано цветовое пространство ACES, которые по охвату больше всех остальных и которые, следовательно, может вместить в себя все данные без потерь. Если мы посмотрим на диаграмму охвата ACES, то увидим, что это цветовое пространство (красная линия) включает в себя все остальные пространства и ещё сдача на мороженое остается.
Такой охват позволяет сохранять максимальное количество данных в наилучшем качестве на протяжении всего производства, а также дает огромные возможности для редактирования изображения на композе. В идеальном пайплайне все работают в ACES и только перед отправкой клиенту финальное видео (hero) конвертируется в sRGB, Rec.709 или другое указанное клиентом.
Ещё одной фичей ACES, которая вероятно будет более интересной, — это характер изображения при рендере графики. Дело в том, что в этом цветовом пространстве свет работает более физически корректно и цвета на выходе получаются более реалистичными, а широкий цветовой охват позволяет сохранить детали в тенях и на свету [1]. Выглядит это примерно так.
Таким образом, ACES — это, во-первых, офигевшие реалистичные цвета на рендере, а во-вторых, огромные возможности для композа, которые позволяют выжать из картинки абсолютный максимум.
Как композить в ACES в After Effects вы можете узнать в моем гайде по ссылке.
Более подробно почитать про ACES вы можете здесь. Рекомендую ознакомиться, если хотите узнать для чего создано это цветовое пространство и как оно используется в индустрии, а также там есть интересная информация о том, почему цвета в ACES выглядят более реалистичными.
Нюансы использования ACES
Здесь перечислю основные моменты, которые нужно принять во внимание, если вы ещё ни разу не работали в ACES.
Настройка цветовых пространств для текстур
Все расчеты в движках рендера происходят в ACEScg (подпространство ACES2065-1 созданное именно для CGI). Для того, чтобы у вас корректно работали текстуры их нужно конвертировать в ACES. В RS и Octane это происходит автоматически, нужно лишь в ноде с текстурой выбрать то пространство, в котором сохранена эта текстура. Да, принцип “закинул текстуру и забыл”, больше не работает 😊. По стандарту для color data текстур [2] — это Texture–sRGB или Auto, для non-color data [3] — Utility–Raw.
Настройка цветового пространства для рендера
Если вы хотите композить в ACES, то важно убедиться, что вы рендерите без конвертации в sRGB. В редшифте для этого перед рендером надо поставить цветовое пространство Raw вместо sRGB в настройках Color management в параметре View.
Конфиги
Для предотвращения проблем с интерпретацией цветов во всем софте лучше использовать один и тот же конфиг OpenColorIO. Скачать последнюю версию можно тут. Для удобства можно в системе создать переменную $OCIO, в которой будет путь до конфига, тогда он будет подключаться автоматически.
Примечания
1. Тут важно заметить, что сохранять нужно несжатые данные в формате EXR 32bit, который позволяет хранить значения меньше 0 и больше 1. Мы как бы сохраним сырые данные с матрицы виртуальной камеры.
2. Color data — текстуры с информацией о цвете объекта, такие как Diffuse, Reflections Color, Transmission color, Refraction color и так далее.
3. Non-color data — текстуры с информацией о характере поверхности объекта, такие как Roughness, Metalness, Normal и так далее.