知乎日報:拳皇中的人物變色是如何實現的?
遊戲中的慣用做法叫:調色盤色彩旋轉
1. 調色盤裏能變色的顏色總是固定幾個位置
2. 讓需要變色的位置的 RGB 轉換成 HSV,然後旋轉 H 分量旋轉一定角度
3. 重新將 HSV 轉換為 RGB 保存回調色盤
在 HSV 色彩空間中,旋轉 H 分量
主要是旋轉 H 分量,S/V 分量也可以微調,但是變色是以旋轉 H 為主。題主兩張圖片的八神,除了調色盤前面幾個皮膚顏色不參與變色外,後面的衣服整體都參與了色彩旋轉。
看看是不是和我上面模擬的 DEMO 差不多 --- 所有衣服顏色的 H 分量 都差不多旋轉了 300 多度 (除了褲子外,觀察衣服顏色的變化)。可以看出,拳皇的衣服變色就是這麼生成的,當然遊戲自動生成好了以後,也可以讓你自己微調一下。
所以這樣不但有紫色八神,還能輕鬆有藍色,黃色,綠色的八神。好多遊戲的頭髮衣服的即時變色基本都是這個套路。包括 Windows 下 好多界面變色也是用色彩旋轉實現,只是不用調色盤了:
現代繪圖,沒有調色盤,依然要變色,一般是將變色的部件和不變色的部件分為兩層來繪製,不變色的是一層,變色的是另外一層:
比如上面這個按鈕,中間兩個狀態是參與變色的底圖,但是還有一些不改變的,比如 X 和漢字,如果一起參與變色就搞笑了,所以還需要一層不變色的覆蓋在上面,就是最左邊那個層。所以界面變色,文字和圖標不會改變。
或者根據變色不同拆分成不同的部件,讓其中某一個部件變色
坦克身子:參與變色 (不同的國家會旋轉成不同的顏色)
坦克炮管:不參與變色(都是一樣的)
PS:有些地方也會用 HSL 空間色彩旋轉代替 HSV 色彩空間旋轉,差不多,看你喜好。