目前常用的染色实现方式有两种,一种是将rgb转换成hsv,修改色相的值,然后再转换回rgb。另一种则是使用色彩通道混合的做法,每个通道分别乘一个颜色并加起来,也可以调整参数混合出想要的颜色。
游戏里的染色,通常都会允许玩家在色盘里任选颜色。这种情况下hsv就比通道混合容易处理许多,只要改变h的值就可以了。但是hsv的两次转换计算量又比较大,而通道混合只需要一次mul(三点乘)就可以了。既然他们都可以得到类似的结果,那么有没有可能,让玩家操作的时候用hsv的方法进行调色,然后我们再用这个调好的结果和原图的差异反推出对应的通道混合参数呢?这样可操作性和性能就能兼顾了。
很显然是可以的。其实这就是一个十二元方程组,解有很多。
下面是的一个实现,具有相当程度的泛用性,而且使用非常简单。我先介绍下它的思路和原理。
Affine HSV color manipulationbeesbuzz.biz它用了另外一个特别的色彩空间YIQ(YIQ_百度百科),而没有使用传统的H