Почему экран смешивает цвета иначе, чем краски
Экран складывает свет, а краска меняет отражённый спектр. Поэтому одинаковые исходные цвета дают разные смеси в RGB, печати и тюбиках.

Экран складывает свет, а краска меняет отражённый спектр. Поэтому одинаковые исходные цвета дают разные смеси в RGB, печати и тюбиках.

Дальше вы сможете предсказать результат для света и для пигментов, не путать сложение лучей с усреднением RGB-кодов и понять, почему один HEX-код не превращается в точный рецепт краски.
В статье вы узнаете:
Выключенный экран почти не посылает свет в глаза. Когда загораются красные, зелёные и синие субпиксели, их вклад складывается. У OLED субпиксели излучают свет, у LCD цветные фильтры пропускают части света подсветки, но для наблюдателя итог один: от экрана приходят три управляемых световых компонента.
Белая бумага или загрунтованный холст устроены наоборот. Без краски они уже возвращают значительную часть падающего света. Цветной слой часть длин волн поглощает, часть рассеивает и отражает. Новый пигмент не добавляет отдельный луч. Он меняет спектр света, который смог выйти из слоя обратно.
Отсюда полезная короткая модель:
Слова «добавить цвет» в этих двух случаях означают противоположные физические действия. На сцене включили второй прожектор и света стало больше. На бумагу нанесли второй прозрачный красочный слой и для части спектра путь наружу стал труднее.
Это не значит, что любой светящийся экран идеально чёрный в выключенном состоянии, а любая бумага отражает весь видимый спектр. На экран падает свет комнаты, LCD пропускает немного подсветки даже в чёрном, бумага бывает кремовой, а белая краска тоже поглощает свет. Модель нужна, чтобы не перепутать направление процесса, а не чтобы отменить свойства реальных материалов.
В sRGB полный красный канал записывается как rgb(255, 0, 0) или #FF0000, полный зелёный как rgb(0, 255, 0) или #00FF00. Если в одном участке изображения оба канала включены полностью, получается rgb(255, 255, 0), то есть #FFFF00. Эти записи можно по очереди проверить в конвертере HEX, RGB и HSL.
Глаз не видит внутри жёлтого пикселя маленькую красную и маленькую зелёную лампу. На обычном расстоянии их свет попадает в одну небольшую область сетчатки, и зрительная система воспринимает общий сигнал как жёлтый. Под лупой или камерой с макрообъективом отдельные субпиксели снова становятся заметны.
Важная ловушка начинается со слова «пополам». Если просто усреднить байты двух кодов, получится rgb(128, 128, 0), тёмный оливковый #808000. Это половина числовой шкалы sRGB, но не половина физической мощности света. Значения sRGB гамма-кодированы: шкала распределена так, чтобы разумно хранить видимые тональные различия, а не линейно измерять фотоны.
Для физически осмысленного сложения сначала переводят каналы в линейный свет, выполняют операцию и кодируют результат обратно. Половина линейной мощности красного и половина зелёного после обратного кодирования дают примерно rgb(188, 188, 0), то есть #BCBC00. Он заметно светлее арифметического #808000. Спецификация W3C прямо разделяет гамма-кодированный sRGB и линейный sRGB и называет RGB аддитивным после линейзации [W3C, CSS Color 4]. Та же граница между кодами и линейным светом важна при переводе изображения в серый: отдельно разобрано, почему зелёный канал получает больший вес, чем синий.
Есть три разных действия, которые в интерфейсах часто называют смешением:
Поэтому вопрос «что получится из красного и зелёного на экране» неполон без глагола. Включить оба канала на максимум, найти середину градиента и положить красный слой с прозрачностью 50% поверх зелёного фона являются тремя разными задачами.
Краска выглядит синей не потому, что внутри хранится число B = 255. Под заданным освещением её слой отражает одни длины волн сильнее других. Получившийся спектр попадает в глаз, а зрительная система сворачивает его в ощущение цвета.
Два образца могут выглядеть одинаково под лампой и получить близкие RGB-значения на фотографии, но состоять из разных пигментов и иметь разные спектры отражения. Такое совпадение называется метамерией. Стоит сменить освещение или смешать образцы с третьей краской, и сходство может исчезнуть.
Поэтому названия «красная» и «зелёная» не задают один обязательный результат. Если оба пигмента вместе оставляют заметное отражение в жёлто-зелёной части спектра, смесь получится коричневатой или оливковой. Если их полосы поглощения почти закрывают друг другу остатки отражения, цвет станет ближе к тёмному нейтральному. Белый пигмент может повысить светлоту, но одновременно снизить насыщенность. Пропорция, размер и концентрация частиц, связующее, толщина слоя, цвет основы и высыхание тоже меняют вид.
Упрощённая фраза «краски вычитают свет» полезна, но прозрачные фильтры объясняет лучше, чем непрозрачную гуашь. В красочном слое свет не только поглощается. Он многократно рассеивается частицами, может пройти глубже, отразиться от основы и снова пройти через пигмент. Промышленные и исследовательские модели поэтому работают со спектральными коэффициентами поглощения и рассеяния. В модели Кубелки-Мунка базовые краски предварительно характеризуют по концентрациям и спектрам отражения, а уже затем предсказывают смеси [Dichter, 2023].
Вот почему сайт, который принимает два HEX-кода и обещает без дополнительных данных назвать точный результат смешивания тюбиков, обязательно что-то предполагает за вас. Три RGB-канала достаточно хорошо описывают цветовое ощущение в заданном пространстве. Они не хранят полный спектр отражения, марку пигмента, укрывистость и толщину будущего слоя.
Школьный опыт с синей и жёлтой краской часто даёт зелёный. Жёлтый пигмент хорошо возвращает жёлто-зелёную часть спектра и сильнее поглощает синюю. Синий возвращает синюю и иногда часть зелёной, сильнее ослабляя длинноволновую красную область. В смеси общим заметным остатком может стать зелёная область.
Ключевое слово здесь «может». Смеси с ультрамарином часто получаются приглушённее; фталоцианиновый с подходящим жёлтым способен дать более яркий зелёный. Некоторые пары быстро уходят в серо-коричневый. Бытовые названия цвета слишком широки: два синих тюбика способны иметь разные кривые отражения и разную красящую силу.
То же относится к красному с синим. На экране максимальные каналы R и B дают яркую мадженту #FF00FF. Смесь красок может стать фиолетовой, грязно-фиолетовой или почти коричневой. Результат зависит не от букв R и B, а от того, какие участки спектра каждый реальный пигмент оставляет смеси.
Самая честная бытовая формула пигментного смешения выглядит скучно: возьмите конкретные краски, отмерьте пропорции, сделайте выкрас на нужной основе и дождитесь высыхания. Зато она работает лучше круга с безымянными «синим» и «красным».
Для прозрачных красителей удобно выбрать голубой, пурпурный и жёлтый. В идеальной модели голубой слой поглощает красную составляющую белого света, пурпурный зелёную, жёлтый синюю. Голубой с жёлтым оставляют прежде всего зелёную область, пурпурный с жёлтым красную, голубой с пурпурным синюю.
Это модель CMY. Она объясняет, почему голубой и жёлтый прозрачные слои могут оставить зелёный, но не превращает три названия в универсальную палитру. Реальный краситель поглощает не одну аккуратную треть спектра. У него широкие полосы пропускания, примеси и собственная сила, а непрозрачная краска ещё и рассеивает свет.
Печать добавляет пространственное смешение. Одни точки краски перекрываются и меняют спектр субтрактивно, другие лежат рядом и объединяются уже при просмотре с расстояния. Отдельный чёрный канал решает задачи нейтральных теней, текста и красочного построения, но это инженерия конкретного процесса, а не четвёртый «основной цвет природы».
Если нужно перевести печатные числа в экранные, простой круг CMY уже закончился. Почему для CMYK нужен профиль и нельзя обещать один точный HEX, разобрано в статье о переводе CMYK в HEX. Здесь важна более ранняя развилка: лучи складываются, а материал меняет отражение.
Рассмотрите жёлтый пиксель под увеличением. Откройте на экране плашку #FFFF00 и снимите её макрообъективом либо посмотрите через сильную лупу. Издалека поле жёлтое, вблизи у многих панелей заметны отдельные красные и зелёные субпиксели. Жёлтая краска при таком увеличении не обязана распадаться на красные и зелёные светящиеся полоски.
Сравните два цифровых «пополам». Постройте середину между #FF0000 и #00FF00 обычным средним байтов, получите #808000. Затем возьмите половину мощности в линейном sRGB и закодируйте обратно, получите около #BCBC00. Оба результата цифровые, но даже внутри экрана слово «смешать» без правила не даёт единственного ответа.
Сделайте карту конкретных пигментов. Отмерьте две выбранные краски в пропорциях 1:3, 1:1 и 3:1, нанесите на одинаковую белую основу и дождитесь высыхания. Подпишите не только бытовые названия, но и обозначения пигментов на тюбиках. Посмотрите на выкрасы при дневном свете и под вечерней лампой. Такая карта предскажет работу вашей пары лучше, чем абстрактное обещание «синий плюс жёлтый».
Эти опыты проверяют три разных уровня: устройство пикселя, правило вычисления и свойства материала. Свалить их в один круг цветов можно, но тогда круг начинает отвечать не на тот вопрос.
Для интерфейса или изображения на экране работайте в указанном цветовом пространстве. HEX, rgb() и hsl() на обычной веб-странице описывают sRGB. Для градиента или программного смешения заранее решите, нужна ли середина в гамма-кодированном sRGB, линейном RGB или перцептивном пространстве вроде Oklab. Одинаковые крайние цвета при этом способны дать разные середины.
Для печати используйте параметры и профиль конкретного процесса, а важные цвета проверяйте пробой. Это уже задача воспроизведения, а не смешивания двух световых каналов.
Для живописи и колеровки записывайте не только названия цветов, но и конкретные пигменты и пропорции. Делайте тест на той же основе, тем же способом нанесения и смотрите после высыхания при том освещении, где работа будет находиться.
Для онлайн-симуляции краски считайте результат прогнозом. Хорошая модель просит спектральные данные или хотя бы знает характеристики конкретной палитры. Смешиватель только из двух HEX-кодов может дать правдоподобную картинку, но не обещание для ваших тюбиков.
Главный вопрос перед любым смешением простой: мы складываем излучение, интерполируем числа или меняем отражение материала? После этого красный с зелёным перестаёт вести себя загадочно. Загадочным остаётся только содержимое тюбика без маркировки, и тут физика вполне имеет право пожать плечами.
Напишите своё мнение, комментарий или предложение.