3

游戏中角色变色如何实现?

 2 years ago
source link: https://www.skywind.me/blog/archives/1391
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

游戏中角色变色如何实现?

来自知乎问题:http://www.zhihu.com/question/31133351 

游戏中的惯用做法叫:调色盘色彩旋转

1. 调色盘里能变色的颜色总是固定几个位置
2. 让需要变色的位置的 RGB转换成 HSV,然后旋转 H分量旋转一定角度
3. 重新将 HSV转换为 RGB保存回调色盘

在 HSV 色彩空间中,旋转 H 分量

主要是旋转 H分量,S/V分量也可以微调,但是变色是以旋转 H为主。题主两张图片的八神,除了调色盘前面几个皮肤颜色不参与变色外,后面的衣服整体都参与了色彩旋转:

看看是不是和我上面模拟的 DEMO 差不多 — 所有衣服颜色的 H 分量 都差不多旋转了 300 多度 (除了裤子外,观察衣服颜色的变化)。可以看出,拳皇的衣服变色就是这么生成的,当然游戏自动生成好了以后,也可以让你自己微调一下。

所以这样不但有紫色八神,还能轻松有蓝色,黄色,绿色的八神。好多游戏的头发衣服的即时变色基本都是这个套路。包括 Windows下 好多界面变色也是用色彩旋转实现,只是不用调色盘了:

现代绘图,没有调色盘,依然要变色,一般是将变色的部件和不变色的部件分为两层来绘制,不变色的是一层,变色的是另外一层:

比如上面这个按钮,中间两个状态是参与变色的底图,但是还有一些不改变的,比如X和汉字,如果一起参与变色就搞笑了,所以还需要一层不变色的覆盖在上面,就是最左边那个层。所以界面变色,文字和图标不会改变。
或者根据变色不同拆分成不同的部件,让其中某一个部件变色

坦克身子:参与变色 (不同的国家会旋转成不同的颜色) 

坦克炮管:不参与变色(都是一样的) 

PS:有些地方也会用 HSL空间色彩旋转代替 HSV色彩空间旋转,差不多,看你喜好。

更多参考:OpenGL GLSL 实现色彩旋转

http://stackoverflow.com/questions/9234724/how-to-change-hue-of-a-texture-with-glsl

336 total views, 2 views today

I like thisUnlike Like1I dislike thisUndislike 

Categories: 图形编程 Tags: 图形, 知乎

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK