大多數情況下,我們會給材質提供一個Color值,來整體控制對象的顏色。一般都是使用 Color * ( TextureColor + LightColor) 來做。
顏色值動畫是常規的動畫特效之一,最近需要實現一個U3D版本的,查閱了一下和顏色相關的知識後,設計了多種顏色變化的方式.
一般的插值方式: 直接使用RGB插值
這個是程式實現最簡單的插值方式,但是不夠好,因為美術製作的時候其實不是想這樣控制物體的顏色,而是希望“物體變綠”這樣類似被綠色光照過的結果。
RGB顏色模型
三原色光模式(RGB color model,又譯RGB顏色模型或紅綠藍顏色模型)是一種加色模型,是用三種原色──紅色、綠色和藍色的色光以不同的比例相加,以產生多種多樣的色光。
RGB模型的命名來自於三種相加原色的首字母(Red(紅),Green(綠),Blue(藍))。
相加原色
三種色光的加,紅光加綠光成為黃光,黃光加藍光成為白光
三原色光和繪畫中的“三原色”不同,繪畫時用三種顏色洋紅色、黃色和青色以不同的比例配合,會產生許多種顏色,如果三種色料相加,理論上會成為黑色,但實際上是深灰色。三原色光則是紅色、綠色和藍色,三種光相加會成為白色光。
三原色的原理不是出於物理原因,而是由於生理原因造成的。人的眼睛內有幾種辨別顏色的錐形感光細胞,分別對黃綠色、綠色和藍紫色(或稱紫羅蘭色)的光最敏感(波長分別為564、534和420納米),如果辨別黃綠色的細胞受到的刺激略大於辨別綠色的細胞,人的感覺是黃色;如果辨別黃綠色的細胞受到的刺激大大高於辨別綠色的細胞,人的感覺是紅色。雖然三種細胞並不是分別對紅色、綠色和藍色最敏感,但這三種光可以分別對三種錐形細胞產生刺激。
不同的生物眼中辨別顏色的細胞並不相同,例如鳥類眼中有四種分別對不同波長光線敏感的細胞,而一般哺乳動物只有兩種,所以對它們來說只有兩種原色光。
既然“三原色的原理不是出於物理原因,而是由於生理原因造成的”,那麼前段所說的“用三種原色的光以不同的比例加和到一起,形成各種顏色的光”顯然就不大合適。使用三原色並不足以重現所有的色彩,準確地說法應該是“將三原色光以不同的比例複合後,對人的眼睛可以形成與各種頻率的可見光等效的色覺。”只有那些在三原色的色度所定義的顏色三角內的顏色,才可以利用三原色的光以非負量相加混合得到。
例如,紅光與綠光按某種比例複合,對三種錐狀細胞刺激後產生的色覺可與眼睛對單純的黃光的色覺等效。但決不能認為紅光與綠光按某種比例複合後產生黃光,或黃光是由紅光和綠光複合而成的。
介紹RGB
http://zh.wikipedia.org/wiki/RGB
更好的插值方式:HSV or HSL
這個是表達美術意願最貼切的方式,大家可以自己試試。
HSL 和 HSV(也叫HSB)是對RGB 色彩空間中點的兩種有關係的表示,它們嘗試描述比 RGB 更準確的感知顏色聯絡,並仍保持在計算上簡單。
H指hue(色相)、S指saturation(飽和度)、L指lightness(亮度)、V指value(色調)、B指brightness(明度)。
- 色相(H)是色彩的基本屬性,就是平常所說的顏色名稱,如紅色、黃色等。
- 飽和度(S)是指色彩的純度,越高色彩越純,低則逐漸層灰,取0-100%的數值。
- 明度(V),亮度(B),取0-100%。
HSV 的圖形描述HSL 安排為雙圓錐
HSL 和 HSV(也叫HSB)是對RGB 色彩空間中點的兩種有關係的表示,它們嘗試描述比 RGB
更準確的感知顏
HSL 和 HSV 二者都把顏色描述在圓柱座標系內的點,這個圓柱的中心軸取值為自底部的黑色到頂部的白色而在它們中間是的灰色,繞這個軸的角度對應於“色相”,到這個軸的距離對應於“飽和度”,而沿著這個軸的高度對應於“亮度”,“色調”或“明度”。
這兩種表示在用目的上類似,但在方法上有區別。二者在數學上都是圓柱,但 HSV(色相,飽和度,色調)在概念上可以被認為是顏色的倒圓錐體(黑點在下頂點,白色在上底面圓心),HSL 在概念上表示了一個雙圓錐體和圓球體(白色在上頂點,黑色在下頂點,最大橫切面的圓心是半程灰色)。注意儘管在 HSL 和 HSV
中“色相”指稱相同的性質,它們的“飽和度”的定義是明顯不同的。
因為 HSL 和 HSV 是裝置依賴的 RGB 的簡單變換,(h, s, l) 或 (h,s,v) 三元組定義的顏色依賴於所使用的特定紅色、綠色和藍色“加法原色”。每個獨特的
RGB 裝置都伴隨著一個獨特的 HSL 和 HSV 空間。但是 (h, s, l) 或 (h,s,v) 三元組在被約束於特定 RGB 空間比如sRGB 的時候就變成明確的了。
HSV 模型在 1978 年由埃爾維·雷·史密斯創立,它是三原色光模式的一種非線性變換。
介紹HSV/HSL
http://zh.wikipedia.org/zh-hans/HSL%E5%92%8CHSV%E8%89%B2%E5%BD%A9%E7%A9%BA%E9%97%B4
上述兩種插值方式都是在數學上線性變化的,但是不是人類視覺感知上的線性變化,因為人眼對綠色的辨識敏感度要高於藍色和紅色。
現在介紹下高富帥的顏色插值方法:視覺感知線性變化的色彩空間中進行顏色插值
CIE 1931 XYZ 色彩空間
在顏色感知的研究中,CIE 1931 XYZ 色彩空間(也叫做CIE 1931 色彩空間)是其中一個最先採用數學方式來定義的色彩空間,它由國際照明委員會(CIE)於1931年創立。
CIE XYZ 色彩空間是從 1920 年代後期
W. David Wright (Wright 1928) 和
John Guild (Guild 1931) 做的一系列實驗中得出的。他們的實驗結果合并到了 CIE RGB 色彩空間的規定中,CIE XYZ 色彩空間再從它得出。
人類眼睛有對於短(S)、中(M)和長(L)波長光的感受器(叫做視錐細胞),所以原則上只要三個參數便能描述顏色感覺了。在三色加色法模型中,如果某一種顏色和另一種混合了不同份量的三種原色的顏色,均使人類看上去是相同的話,我們把這三種原色的份量稱作該顏色的三色刺激值。
CIE 1931 色彩空間通常會給出顏色的三色刺激值,並以X、Y和Z來表示。
色彩空間是指任何一種替每個顏色關聯到三個數(或三色刺激值)的方法,CIE
1931 色彩空間就是這種色彩空間之一。但是 CIE XYZ 色彩空間是特殊的,因為它是基於人類顏色視覺的直接測定,並充當很多其他色彩空間的定義基礎。
在 CIE XYZ 色彩空間中,三色刺激值並不是指人類眼睛對短、中和長波(S、M 和 L)的反應,而是一組稱為 X、Y 和 Z 的值,約略對應於紅色、綠色和藍色(但要留意
X、Y 和 Z 值並不是真的看起來是紅、綠和藍色,而是從紅色、綠色和藍色匯出來的參數),並使用 CIE 1931 XYZ 顏色匹配函數來計算。兩個由多種不同波長的光混合而成的光源可以表現出同樣的顏色,這叫做“異譜同色”(metamerism)。當兩個光源對標準觀察者(CIE
1931 標準色度觀察者)有相同的視現顏色的時候,它們即有同樣的三色刺激值,而不管產生它們的光的光譜分布如何。
介紹CIE1931
http://zh.wikipedia.org/wiki/CIE_1931_%E8%89%B2%E5%BD%A9%E7%A9%BA%E9%97%B4
CIE 1976 (L*, a*, b*) 色彩空間
Lab 色彩空間是顏色-對立空間,帶有維度 L 表示亮度,a 和b 表示顏色對立維度,基於了非線性壓縮的CIE XYZ 色彩空間座標。
Hunter 1948 L, a, b 色彩空間的座標是 L, a 和 b。[1][2]
但是,Lab 經常用做 CIE 1976 (L*, a*, b*) 色彩空間的非正式縮寫(也叫做 CIELAB,它的座標實際上是 L*, a*和 b*)。所以首字母 Lab 自身是有歧義的。這兩個色彩空間在用途上有關聯,但在實現上不同。
Lab 色彩空間是顏色-對立空間,帶有維度 L 表示亮度,a 和b 表示顏色對立維度,基於了非線性壓縮的CIE XYZ 色彩空
L*a*b* 色彩空間,只展示可充入
sRGB 色域的顏色(因此可以顯示在典型的電腦顯示器上)。每個正方形的每個軸取值於 -128 到 128。
不像 RGB 和CMYK
色彩空間,Lab 顏色被設計來接近人類視覺。它致力於感知均勻性,它的 L 分量密切匹配人類亮度感知。因此可以被用來通過修改 a 和 b 分量的輸出色階來做精確的色彩平衡,或使用
L 分量來調整亮度對比。這些變換在 RGB 或 CMYK 中是困難或不可能的,它們建模物理裝置的輸出,而不是人類視覺感知。
因為 Lab 空間比電腦顯示器、印表機甚至比人類視覺的色域都要大,表示為 Lab 的位元影像比 RGB 或 CMYK 位元影像獲得同樣的精度要求更多的每像素資料。在 1990 年代,這時的電腦硬體和軟體通常受限於儲存和操縱 8 位/通道的位元影像,從 RGB 圖象到 Lab 之間的來迴轉換是有損耗的操作。對於現在常見的 16 位/通道支援,這就不是問題了。
在軟體和文獻中對這個縮寫的明確使用。
- 在
Adobe Photoshop 中,圖象編輯使用的“Lab 模式”是 CIELAB D50。[6]
- 在
ICC Profile 中,“Lab 色彩空間”用做 profile 串連空間的是 CIELAB D50。[4]
- 在 TIFF 檔案中,可以使用 CIELAB 色彩空間。[7]
- 在 PDF 文檔中,“Lab 色彩空間”是 CIELAB。
介紹L*a*b*
http://zh.wikipedia.org/wiki/Lab_%E8%89%B2%E5%BD%A9%E7%A9%BA%E9%97%B4
在瞭解上述知識之後,轉換方法也就出來了:
1、美術指定2個顏色 StartColor 和 EndColor
2、RGB 轉 XYZ
3、XYZ 轉 Lab
4、在Lab做線性插值
5、轉回XYZ
6、轉回RGB,修改material的Color屬性.
RGB 與 XYZ
的轉換
CIE 特殊委員會確定了標準變換如下:
XYZ 與 CIE L*a*b* (CIELAB) 的轉換
CSDN的複製又抽了,大家看原文的公式吧
http://zh.wikipedia.org/wiki/Lab_%E8%89%B2%E5%BD%A9%E7%A9%BA%E9%97%B4
實驗已經成功了,公式沒有任何問題,大家安心使用吧。