1. XenForo 1.5.14 中文版——支持中文搜索!现已发布!查看详情
  2. Xenforo 爱好者讨论群:215909318 XenForo专区

拳皇中的人物变色是如何实现的?

本帖由 漂亮的石头2015-06-13 发布。版面名称:知乎日报

  1. 漂亮的石头

    漂亮的石头 版主 管理成员

    注册:
    2012-02-10
    帖子:
    486,020
    赞:
    46
    [​IMG] 韦易笑,二十年老程序员

    [​IMG]

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

    1. 调色盘里能变色的颜色总是固定几个位置

    2. 让需要变色的位置的 RGB 转换成 HSV,然后旋转 H 分量旋转一定角度

    3. 重新将 HSV 转换为 RGB 保存回调色盘

    [​IMG]

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

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

    [​IMG]

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

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

    [​IMG]

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

    [​IMG]

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

    或者根据变色不同拆分成不同的部件,让其中某一个部件变色

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

    [​IMG]

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

    [​IMG]

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

    查看知乎原文
     
正在加载...