2021-10-05

Oklab

2021-10-05 08:57 pm
waqur: (Default)
Как известно, высшие приматы воспринимают цвет своими палочками и колбочками немного не так, как он объективно существует в природе (в виде электромагнитных волн разной длины): синий при той же мощности излучения кажется менее ярким, чем зелёный; восприятие длин волн на краях видимого спектра имеет корреляции; помимо трихроматов, изредка встречаются дихроматы и тетрахроматы и т.д.

Это создаёт спрос на субъективные (перцептивные) модели цвета, в дополнение к объективной RGB.

Björn Ottosson в своём блоге рассматривает новую перцептивную цветовую модель — Oklab (как альтернативу HSV):

https://bottosson.github.io/posts/oklab/

Зачем?

Ну, во-первых, чтобы убрать эти ужасно выглядящие "яркостные занавески" в color picker'ах:

Было:


Стало:



Во-вторых, чтобы в градиентах между белым и синим не было розового цвета, а в градиентах между красным и зелёным не было провала в яркости:



Перцептивная цветовая модель Oklab, помимо color picker'ов, полезна там, где нужен цветовой ряд с меняющимися оттенками, но с постоянной яркостью и насыщенностью (например, для раскраски нескольких кривых на одном графике, чтобы их яркость или сероватость не шли вразнобой).

Преобразование между RGB и Oklab имеет простую алгебраическую структуру: оно делается путём умножения на постоянную матрицу, покомпонентного возведения в куб (или покомпонентного извлечения кубического корня) и затем ещё одного умножения на постоянную матрицу.

Обзор и критика Oklab (в целом, позитивные):
https://raphlinus.github.io/color/2021/01/18/oklab-critique.html

Немного поработав с Oklab в своём софте, я заметил, что полярные координаты (lightness, chroma, hue) удобнее линейных (lightness, a, b).

Также полезна функция вычисления предельной насыщенности для заданной яркости и оттенка (цвета, слишком далеко ушедшие от серого, не представимы в RGB, а предельная насыщенность может быть найдена бинарным поиском по критерию этой самой представимости в RGB).

Этот график построен для постоянной яркости 0.75, по оси X — оттенок, по оси Y — насыщенность:


В целом Oklab очень хорошо соответствует своей цели — позволяет без смещения оттенка легко подбирать цвета с другой яркостью и насыщенностью; или при фиксированной яркости и насыщенности варьировать оттенком; а ещё обеспечивает перцептивно-корректное смешивание цветов (например, в градиентах, а также как альтернатива гамма-коррекции при alpha blending'е и т.д.)

March 2024

S M T W T F S
     12
3456789
10111213141516
17181920212223
24252627282930
31      

На этой странице

Автор стиля

Развернуть

No cut tags
Page generated 2025-07-30 12:10 pm
Powered by Dreamwidth Studios