GLSL着色器可增强色彩

时间:2018-06-21 09:57:05

标签: opengl glsl shader fragment-shader pixel-shader

他们的任何GLSL着色器是否可以帮助我“增强”纹理的颜色?如何编写这样的着色器?我想做类似下面的图片:

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:2)

似乎它们在这里主要是提高饱和度,所以这就是您在片段着色器中需要执行的操作。

要提高饱和度,您需要将数据从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')

Cmin = min(R',G',B')

Δ= Cmax-Cmin

enter image description here

enter image description here

L =(Cmax + Cmin)/ 2

通过这种方式可以从RVB获得HSL。完成饱和度提升后,您需要将颜色恢复到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

enter image description here

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

我从他们的公式中删除了255,因为通常您在GLSL中使用[0,1]。

借助此功能,您应该能够对颜色进行各种转换,以类似于photoshop简易工具的方式来操纵它们。

编辑,应该注意的是,我主要谈论的是提高饱和度,但是在您的例子中,他们可能所做的事情要复杂得多。但是,如果您要使用颜色来编辑照片,那么在HSL中工作仍然是一件好事。