顏色是一個很神奇的主題符匾,它并不那么“理性”化蕴潦,對于程序猿來說顏色可能就是用RGB三個數(shù)字來代表的一個數(shù)集而已净薛,但事實卻不是這樣汪榔。
顏色是“感性”的東西
顏色不等于RGB!因為顏色不僅僅只是由三個色值組成肃拜,影響顏色的還有物體的材質(zhì)痴腌,物體的光照,人眼和人腦的感覺燃领,甚至是心情士聪!而且顏色還跟環(huán)境有很大關系,相同的圖片在環(huán)境不同的時候看起來也不一樣猛蔽,比如下面的圖片:
所以顏色是“感性的”剥悟,如何使顏色看起來“柔和”是一門很大的學問,本文就不做深究曼库,感興趣的同學請查看文章最后的相關連接区岗。
如何選擇“協(xié)調(diào)”的顏色板
顏色并沒有絕對的好看和不好看,如何搭配才是重點毁枯,如何選擇配在一起看起來舒服的顏色板就很重要了慈缔。如果沒有顏色板,單純的隨機生成顏色种玛,你得到的很可能是下面這樣很丑的一些顏色:
color = new Color(Random(), Random(), Random())
如果用這樣一些顏色在你的游戲里就可以毀了你的游戲藐鹤,顏色太土了!
黃金分割法
首先需要解決隨機顏色導致的色彩亮度不統(tǒng)一的問題赂韵,從上面的顏色可以看出娱节,有的顏色太暗,有的顏色又太亮右锨。為了解決這個問題括堤,我們需要使用HSV色彩空間來代替RGB。
- 色相(H)是色彩的基本屬性绍移,就是平常所說的顏色名稱悄窃,如紅色、黃色等蹂窖。
- 飽和度(S)是指色彩的純度轧抗,越高色彩越純,低則逐漸變灰瞬测,取0-100%的數(shù)值横媚。
- 明度(V),亮度(L)月趟,取0-100%灯蝴。
在確定S和V的前提下,只改變H孝宗,得到的顏色在亮度和飽和度上就都是一樣的穷躁,看起來就更加協(xié)調(diào)。
根據(jù)Wiki上RGB到HSV的變換公式因妇,下面是一個lua版的代碼段问潭。
但如果只是這樣,我們得到的顏色可能相差的參差不齊婚被,有的很相近而有的差別又很大狡忙,如何解決這個問題呢?答案就是黃金分割法址芯。 很難解釋為什么黃金分割的法則在很多地方都有用灾茁,但它就是有用,試試看吧谷炸。
這樣得到的顏色就好看多了删顶。
相關鏈接
本文只列出了一種取色方案,黃金分割法只適用于對比度要求比較高的情況淑廊,還有很多其他配色方案請查看下面的相關連接逗余。
- HSL和HSV色彩空間
- How to Choose Colours Procedurally (Algorithms)
- How to Generate Random Colors Programmatically
- Color Series: Color Theory and The Color Wheel
最后給出一個顏色搭配的經(jīng)典案例:Tiny Wing