Шейдер GLSL для усиления цвета

Есть ли у них какой-нибудь шейдер GLSL, который может помочь мне «усилить» цвет текстуры? Как написать такой шейдер? Я хотел бы сделать что-то вроде изображения ниже:

введите здесь описание изображения

введите здесь описание изображения


person zeus    schedule 21.06.2018    source источник
comment
Некоторые алгоритмы для выполнения такого изменения очень сложны. Например, глядя на средние цвета окружающих областей и пытаясь уклониться от них или смешаться с ними... Но некоторые простые улучшения можно сделать, увеличив некоторые значения в спектре HSL. Возможно, вы могли бы начать с масштабирования яркости и/или насыщенности.   -  person Matic Oblak    schedule 21.06.2018
comment
@MaticOblak: да, но я могу получить качество, которое я хотел бы получить :( в фотошопе у меня есть скрипт, который делает это автоматически, но это в фотошопе :(   -  person zeus    schedule 21.06.2018


Ответы (1)


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

Чтобы повысить насыщенность, вам нужно перенести данные из цветового пространства RVB в пространство HSL (яркость оттенка насыщенности). затем вам нужно сделать:

hslColor = vec3(hslCOlor.x, hslColor.y * **boost**, hslCOlor.z);

Конечно, для этого вам действительно нужно попасть в правильное цветовое пространство. На самом деле это не проблема openGL, я нашел этот веб-сайт, который выполняет преобразование:

https://www.rapidtables.com/convert/color/rgb-to-hsl.html

Они также дают формулы для преобразования:

R' = R

G' = G

B' = B

Cmax = max(R', G', B')

Cмин = мин(R', G', B')

Δ = Смакс - Смин

введите здесь описание изображения

введите здесь описание изображения

L = (Смакс + Смин) / 2

Таким образом, вы можете получить HSL от RVB. После того, как вы увеличили насыщенность, вам нужно вернуть цвета обратно в цветовое пространство RVB.

это хорошая новость, что один и тот же веб-сайт предлагает одинаковые возможности! https://www.rapidtables.com/convert/color/hsl-to-rgb.html

Когда 0 ≤ H ‹ 360, 0 ≤ S ≤ 1 и 0 ≤ L ≤ 1:

C = (1 - |2L - 1|) × S

X = C × (1 - |(H / 60°) mod 2 - 1|)

m = L - C/2

введите здесь описание изображения

(R,G,B) = ((R'+m), (G'+m),(B'+m))

Я удалил 255 из их формул, потому что обычно вы работаете с [0,1] в GLSL.

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

EDIT следует отметить, что я в основном говорил о повышении насыщенности, но в вашем примере они могут делать вещи значительно более сложные. Но работа в HSL по-прежнему будет полезна, если вы работаете с цветами для редактирования фотографий.

person florent teppe    schedule 21.06.2018
comment
Звучит очень здорово! спасибо за акцию! однако мои знания в GLSL очень плохи :( я надеялся найти уже готовый алгоритм, потому что я думаю, что я не единственный, кто его ищет... - person zeus; 21.06.2018