【问题标题】:GLSL shader to boost the colorGLSL着色器提升颜色
【发布时间】:2018-11-30 14:46:32
【问题描述】:

他们是否有任何 GLSL 着色器可以帮助我“增强”纹理的颜色?如何编写这样的着色器?我想做如下图所示的事情:

【问题讨论】:

  • 执行这种更改的一些算法非常复杂。就像查看周围区域的平均颜色并尝试躲避或混合它们......但是可以通过增加 HSL 幽灵中的一些值来完成一些简单的增强。也许你可以从调整亮度和/或饱和度开始。
  • @MaticOblak:是的,但可以获得我想要获得的质量 :( 在 Photoshop 下我有自动执行此操作的脚本,但它在 Photoshop 下 :(

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


【解决方案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')

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

Δ = Cmax - Cmin

L = (Cmax + Cmin) / 2

这样您就可以从 RVB 获得 HSL。完成饱和度提升后,您需要将色彩带回 RVB 色彩空间

好消息是同一个网站似乎提供了相同的功能! https://www.rapidtables.com/convert/color/hsl-to-rgb.html

当 0 ≤ H

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,因为通常您在 GLSL 中处理 [0,1]。

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

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

【讨论】:

  • 听起来很棒!谢谢分享!但是我在 GLSL 方面的知识很差 :( 我希望找到一个已经制作好的算法,因为我认为我不是唯一一个在寻找那个的人......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-20
  • 2014-07-26
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 1970-01-01
  • 2011-10-04
相关资源
最近更新 更多