Есть ли у них какой-нибудь шейдер GLSL, который может помочь мне «усилить» цвет текстуры? Как написать такой шейдер? Я хотел бы сделать что-то вроде изображения ниже:
Шейдер GLSL для усиления цвета
Ответы (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 по-прежнему будет полезна, если вы работаете с цветами для редактирования фотографий.