RGBA模式人物换色的实现

早期的即时战略游戏,如星际争霸,采用调色板模式,因而可以很方便的通过修改人物图片的调色板索引,达到换色的效果。在RGBA模式下,修改顶点色或设置材质自发光皆不能达到满意的效果,因为我们需要的是像素级别的颜色调整,和多边形无关,即便可以通过细分材质,那也很勉强,况且会增加材质数量影响性能。所以我经过研究,觉得唯一的方法还是改变纹理。(欢迎有人提供更好的方法,这也是我发表这个文章的目的)那么怎么改变纹理呢?法宝是HSV。纹理的像素值是在RGBA颜色空间的,而换色的效果其实是改变色相,也就是HSV颜色空间的H。所以先把像素从RGB变换到HSV,修改H达到换色效果,再变换回RGB,然后用改变后的像素位图生成新的纹理并替换。RGB,HSV转换的算法网上就有。有个问题是,修改H后传入HSV2RGB之前要先确保H的范围正确,或者算法中必须处理。另一个重要的问题是怎么确定哪些部分需要换成哪些颜色,一个很原始但有效的方法就是使用mask图。

你可能感兴趣的:(游戏,算法)