我目前正在HLSL中开发一些简单的像素着色器。我发送到着色器纹理,并希望使其更加色彩鲜艳(如下图所示)。



图片1中有原始纹理。图2显示了我想要实现的效果。有一些数学公式可以做到吗?我的输入是每个像素的RGBA值。

编辑:
我将尝试写更具体的内容。

比方说,我想使花园的纹理更红。我想我需要做的是:

OutputR = InputR * X,

OuputG = InputG * Y,

OutputB = InpputB * Z


但是如何找到X,Y和Z?

评论

当您说“更加丰富多彩”时,您的意思是好像在看有色玻璃吗?

是的,这就是我的意思

您是否还想将色彩作为单独的输入,还是只希望实现便宜的任意色彩?

抱歉,我想我不明白你的问题。您能再解释一下吗?

如果您想要Kostas Anagnostou的回答,请忽略我的评论。我只是问你是想要那种颜色还是硬编码的颜色。

#1 楼

扩展了Kostas Anagnostou的答案,常用的去饱和度公式为/>
在此示例之后,您将定义一些色调颜色,将其与去饱和值相乘。另外,您也可以将着色的图像与原始图像混合,以减少剧烈的影响。在这种情况下,我们会将(1.0,0.2,0.2)着色的80%的去饱和图像与20%的原始图像混合:

float value = 0.3 * InputR + 0.59 * InputG + 0.11 * InputB;


评论


$ \ begingroup $
注意(0.3,0.59,0.11)是Rec。的亮度系数。 601(又名NTSC标准定义),而Rec。 709(又称为高清ATSC)将是(0.2126,0.7152,0.0722)。 sRGB图像(可能是您正在处理的图像)更接近Rec。 709比Rec。 601。
$ \ endgroup $
–user1118321
17年5月19日在2:45



#2 楼

(XYZ)可以是您要为场景着色的RGB颜色。对于上述场景,它可以是红色(1.0、0.0、0.0)或类似的带有强烈红色成分的东西。

请记住,由于您是以乘法方式应用颜色的,因此它将充当抑制原始颜色分量的滤镜。因此,如果您的场景主要是绿色的,但您应用(即乘以红色)滤镜(1,0,0),则结果场景将非常暗。情况是先使原始场景饱和,然后再乘以色彩。这样,您就可以保持整体图像强度并获得所需的色彩。例如,这是图像乘以(1、0、0),(1、0.2、0.2),和(1,0.5,0.5)从左到右:



评论


$ \ begingroup $
另外,您可能还想着色100%纯一种通道颜色以外的颜色。
$ \ endgroup $
– joojaa
2015年9月2日于19:14

$ \ begingroup $
我继续为帖子添加了一些示例图片-希望您不要介意!
$ \ endgroup $
–内森·里德(Nathan Reed)
2015年9月3日,下午5:29

$ \ begingroup $
这就是我的意思。感谢您的努力和例子:)
$ \ endgroup $
–bartosz.baczek
2015年9月3日下午16:17

#3 楼

选择彩色眼镜的RGB颜色,并通过选择Alpha值A选择透明程度。然后将Alpha眼镜合成到输入图像的顶部:

评论


$ \ begingroup $
“复合”是什么意思?是否有一些数学运算可以让我合成两种颜色?
$ \ endgroup $
–bartosz.baczek
2015年9月2日12:00



$ \ begingroup $
这就是他帖子中的示例方程式。
$ \ endgroup $
– yuriks
2015年9月2日,12:51

$ \ begingroup $
我认为这不是他想要的。如果您戴红色眼镜,则看到的红色波长基本上是全强度的,而其他波长则很少。这不是Alpha合成的理想选择。
$ \ endgroup $
– John Calsbeek
2015年9月2日14:58在