Opengl GLSL着色器以增强颜色

Opengl GLSL着色器以增强颜色,opengl,glsl,shader,fragment-shader,pixel-shader,Opengl,Glsl,Shader,Fragment Shader,Pixel Shader,他们的GLSL着色器是否可以帮助我“提升”纹理的颜色?如何编写这样的着色器?我想做一些类似下图的事情: 看起来它们主要是在提高饱和度,所以这就是你在片段着色器中需要做的 要提高饱和度,需要将数据从RVB颜色空间移到HSL(色调-饱和度-亮度)空间。 然后,您需要执行以下操作: hslColor = vec3(hslCOlor.x, hslColor.y * **boost**, hslCOlor.z); 当然,要做到这一点,你实际上需要进入正确的颜色空间。这不是openGL的问题,我发现了一

他们的GLSL着色器是否可以帮助我“提升”纹理的颜色?如何编写这样的着色器?我想做一些类似下图的事情:


看起来它们主要是在提高饱和度,所以这就是你在片段着色器中需要做的

要提高饱和度,需要将数据从RVB颜色空间移到HSL(色调-饱和度-亮度)空间。 然后,您需要执行以下操作:

hslColor = vec3(hslCOlor.x, hslColor.y * **boost**, hslCOlor.z);
当然,要做到这一点,你实际上需要进入正确的颜色空间。这不是openGL的问题,我发现了一个进行转换的网站:

它们还给出了换算公式:

R'=R

G'=G

B'=B

Cmax=最大值(R',G',B')

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

Δ=Cmax-Cmin

L=(Cmax+Cmin)/2

这样你可以从RVB获得HSL。完成饱和度提升后,您需要将colros恢复到RVB颜色空间

这是一个好消息,同一个网站似乎提供相同的功能!

当0≤ H<360,0≤ s≤ 1和0≤ L≤ 1:

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

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

m=L-C/2

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

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

有了这个,你应该能够对颜色进行各种变换,以一种类似于photoshop的简单工具的方式来操作它们


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

执行这种更改的一些算法非常复杂。比如看周围区域的平均颜色,试图回避或与它们混合。。。但是一些简单的增强可以通过增加HSL specter中的一些值来实现。也许你可以从缩放亮度和/或饱和度开始。@MaticOblak:是的,但可以获得我想要的质量:(在photoshop下,我有自动执行的脚本,但在photoshop下:(听起来非常棒!感谢分享!但是我在GLSL方面的知识非常贫乏:(我希望找到一个已经制作好的算法,因为我想我不是唯一一个在寻找这个算法的人。。。