gpt4 book ai didi

c# - 不要着色,但 "Colorize" Sprite

转载 作者:行者123 更新时间:2023-12-02 04:52:34 24 4
gpt4 key购买 nike

在我的基于 2D 方 block 的游戏中,玩家可以绘制方 block 来改变颜色。简单的方法(以及我已经做过的)是在 SpriteBatch.Draw 中使用 tint 参数。

这看起来不错,这是一个示例:

enter image description here

但是说,我想把木头漆成白色。如果您曾经弄乱过色调,您就会知道使用色调参数是不可能的。 Color.White 会将 Sprite 着色为默认颜色,而不是白色。这不是主要问题,但我想有些用户可能需要它。

我的问题是,有没有一种方法可以根据色相/饱和度而不是色调来为 Sprite 着色。类似于 GIMP 中的“colorify”功能。

http://gyazo.com/eaa8d54d82a15ce05b006b084e71803f.png

一种明显的方法是在 GIMP 中使用此功能,并为每种颜色导出 Sprite 。问题在于,对于我所有的 Sprite 来说,这将花费很长时间,而且每个 Sprite 都有多种变体,这意味着对于一种方 block 类型,你总共可以有 100 多个组合。

这可能吗?我想着色器可能会完成这项工作。

最佳答案

The GIMP 中的“colourify”函数只是简单地去饱和(转换为灰度),然后进行颜色乘法。很简单。这应该是等效的 HLSL(未经测试):

float4 original = tex2d(...);
float q = (original.r + original.g + original.b) / 3;
q /= original.a; // optional - undo alpha premultiplication
return float4(tint.rgb * q, tint.a * original.a);

但是您可以通过简单地存储所有去饱和的纹理开始并使用默认的 SpriteBatch 着色器进行乘法来实现相同的效果。如果您不想修改源图片,可以在自定义内容处理器中进行。


不过,如果您想使用自定义着色器,您可以做一些更复杂的事情。您可以实现完整的色调旋转(有点复杂)。但也许你可以考虑像 "Overlay" blend mode 这样的东西(非常简单)- 它可以让您为灰色着色,同时保留高光和低光(而不是乘法,这也会为高光着色)。

关于c# - 不要着色,但 "Colorize" Sprite ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18560814/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com