Colors 如何更改Godot中精灵的饱和度和覆盖

Colors 如何更改Godot中精灵的饱和度和覆盖,colors,sprite,godot,gdscript,Colors,Sprite,Godot,Gdscript,我一直在计划通过改变饱和度和色调值来改变我的精灵颜色。但是,这样做似乎非常棘手,因为Godot模块只讨论通过如下modulate选项更改精灵的颜色: node.modulate= Color(0, 50, 2,0.5) 这样做就是将整个精灵更改为一种新颜色,而我只想将现有颜色设置为稍微暗一点的颜色就像我们在Photoshop中使用“曲线”或“级别”时所做的那样,但没有那么精细。任何基本的方法也会有所帮助 目前,我只能在不改变不透明度的情况下进行“颜色叠加”只要不改变整个精灵的不透明度,只改变覆

我一直在计划通过改变饱和度和色调值来改变我的精灵颜色。但是,这样做似乎非常棘手,因为Godot模块只讨论通过如下
modulate
选项更改精灵的颜色:

node.modulate= Color(0, 50, 2,0.5)
这样做就是将整个精灵更改为一种新颜色,而我只想将现有颜色设置为稍微暗一点的颜色就像我们在Photoshop中使用“曲线”或“级别”时所做的那样,但没有那么精细。任何基本的方法也会有所帮助

目前,我只能在不改变不透明度的情况下进行“颜色叠加”只要不改变整个精灵的不透明度,只改变覆盖颜色,任何添加不透明度更改的颜色覆盖的方法都会很有帮助

我正在用导入的PNG精灵制作2D游戏。如果需要更多的信息,我很乐意提供

其他资料-

我的雪碧是什么样子的

我想通过两次这样的代码使它变暗-

通过执行node.modulate=Color(0.0,0.0,0.0,1),它会变成这样-

我之所以避免手动执行此操作,是因为我有太多的精灵,而为所有精灵执行此操作将非常乏味

下面是两个示例,说明如何通过代码使精灵变暗

第一种方法是使用
自调制
。通过将调制值乘以纹理颜色值来计算调制。这表明
(1,1,1,1)
的调制与原始纹理相同。
(0.5,0.5,0.5,1)
的调制将纹理颜色减半,使其更暗,就像它有半不透明的黑色覆盖一样

# On a node that extends CanvasItem
self_modulate = Color(0.5, 0.5, 0.5, 1.0)
第二种方法是用常量减去纹理值。这将创建一个更饱和但更暗的纹理

着色器代码:

shader_type canvas_item;

uniform float difference: hint_range(0.0, 1.0) = 0.0;

void fragment() {
    vec4 tex = texture(TEXTURE, UV);
    COLOR.rgb = tex.rgb - vec3(difference);
    COLOR.a = tex.a;
}
其他代码:

# On a node that extends CanvasItem
material.set_shader_param('difference', 0.3)

这些效果可以结合起来产生预期的结果。使用着色器来产生更好的结果


希望这有帮助。

你能发布一个你想要的效果的示例图像吗?“调制”是一种乘法运算,如果希望精灵颜色稍微暗一点,则将调制颜色设置为更接近黑色,但将alpha保留为1:(0.0,0.0,0.0,1.0)。当我调制为(0.0,0.0,0.0,1.0)时,整个精灵变为黑色。我用更多的细节和视觉参考来扩展这个问题。好的,太棒了。感谢您添加的视觉效果。我将发布一个带有示例的答案。谢谢你的回答!着色器似乎是解决方案!很抱歉没有选择它作为正确的答案。