【Aegisub】RGB分離及其相關(guān)介紹


? ? ? ? 以后介紹用mod的方法,本文介紹不用mod的做法
? ? ? ? RGB當(dāng)然就是紅綠藍(lán)了。關(guān)于這些我覺得沒必要講太多,在網(wǎng)上可以搜到一堆顏色相關(guān)的文章,所以這里我隨便講一點就是了。首先,ass顏色是bgr而html顏色是rgb,所以在用了HSV_to_RGB函數(shù)以后還需要用ass_color函數(shù)來得到ass的顏色字符串。在aeg里選擇顏色的界面里可以看到ass顏色和html顏色的不同之處:

r、g、b的取值范圍是0到255一共有256個值(2的8次方)。所以用rgb可以表示256x256x256=16777216種顏色?,F(xiàn)在比如r為50、轉(zhuǎn)為十六進(jìn)制數(shù)就是32,g為230、轉(zhuǎn)為十六進(jìn)制數(shù)就是E6,b為222、轉(zhuǎn)為十六進(jìn)制數(shù)就是DE,直接拼起來就得到32E6DE了,而如果不是rgb的順序而而是bgr的順序的話,當(dāng)然拼起來就是DEE632了,當(dāng)然ass顏色值代碼的格式是&H000000&這種,所以在DEE632前面加上&H后面加上&就可以得到&HDEE632&了。所以有的時候需要注意區(qū)分是ass顏色還是html顏色。
? ? ? ? 那么現(xiàn)在就按照bgr的順序來繼續(xù)討論。假設(shè)發(fā)光強(qiáng)度為0到255,那么如果b的強(qiáng)度是0、g的強(qiáng)度是255、r的發(fā)光強(qiáng)度是0的話,就得到了00FF00,也就是綠色了:

可以看到,現(xiàn)在的ass顏色代碼是&H00FF00&。而如果b的強(qiáng)度是255、g和r的發(fā)光強(qiáng)度都是0的話,當(dāng)然就是FF0000藍(lán)色了:

所以若設(shè)定g和r為0、控制b在0到255之前變化,那么當(dāng)然就能有藍(lán)色發(fā)光強(qiáng)度從0開始變大的感覺了,從黑到藍(lán)的樣子:

? ? ????若是b、g、r的數(shù)值相同的話,就會得到一個灰色,比如bgr都是0那么肯定是全黑了,而如果bgr發(fā)光強(qiáng)度都是255那么當(dāng)然就是白色了,而如果bgr都是127那么當(dāng)然就是中灰色了,也就是

當(dāng)然像是323232或者A7A7A7這種bgr數(shù)值都是一樣的顏色當(dāng)然就是灰色了
? ? ? ??所以bgr分離其實就是把bgr都分開,比如把白色FFFFFF拆開就是FF0000和00FF00和0000FF。反過來疊加也是一個道理,當(dāng)然說“疊加”的話是一個描述性語言,所以最好定義“疊加”是怎么疊加的,因為之前講過噪聲圖疊加,而此處的疊加和噪聲圖疊加是不一樣的,如果不定義清楚那豈不是在耍流氓嗎???所以定義一下,這里的各個顏色“疊加”是各個顏色的bgr分別相加、如果相加后數(shù)值超過255(或者說FF)的話就直接取255,也就是,假設(shè)有n個顏色要疊加混合,每個顏色分別是b1?g1?r1、b2?g2?r2、……?、bn?gn?rn,若疊加后的顏色為bgr,則b=min(??(b1+b2+…+bn)?,?255?),然后gr也同理。所以比如拿FF0000和7F7F7F這兩個顏色疊加,b就是FF+7F、因為超過了255所以b結(jié)果就是FF,然后g是00+7F=7F,r同理,所以最終疊加后得到了FF7F7F這個顏色
? ? ? ? 那現(xiàn)在就可以看bgr分離的效果了。比如現(xiàn)在把紅色和藍(lán)色放一起進(jìn)行疊加:

先不管如何做到這個效果。可以看到,在有紅色又有藍(lán)色的地方(重合部分)兩種顏色進(jìn)行了疊加,疊加方式如剛剛所說,此處的顏色就是FF00FF了,這個顏色被稱為“洋紅色”。那同理,還有藍(lán)+綠=青、紅+綠=黃:


也就是說青色是FFFF00、黃色是00FFFF了,最后當(dāng)然bgr三個都加一起是白色FFFFFF了:

在知道bgr分離是什么以后當(dāng)然就可以來實現(xiàn)這個效果了,正如本文開頭說的,現(xiàn)在不使用mod來做這個效果,以后會專門出文章講使用mod如何做。咱們知道,兩個顏色在一起才會疊加,也就是重合部分才會疊加,也就是交集部分才會疊加,所以很顯然可以用繪圖求交的方式來做bgr分離效果。比如現(xiàn)在有b、g、r三種顏色的繪圖,可能的相交狀況很容易分析出來:b和g相交(簡稱bg)、g和r相交(簡稱gr)、b和r相交(簡稱br)、b和g和r相交(簡稱bgr),總共就只有這幾種可能,所以可以用之前講過的繪圖求交集的函數(shù)來直接求,對于b、g、r的三個繪圖,先求繪圖bg、gr、br,然后由于可能還有bgr,而bgr就是三個繪圖同時重合的部分,所以直接求繪圖bg和繪圖gr的交集即可(這等同于求bg和br的交集、也等同于求gr和br的交集,所以這倆當(dāng)然不用考慮),也就是通過繪圖求交集函數(shù)求得bg、gr、br、bgr四個繪圖,當(dāng)然這其中可能有空集,如果是空集去掉即可。
? ? ? ? 那來實際試一試,用繪圖求交集的函數(shù)來做。比如紅、綠兩個繪圖,求它們的交集,得到繪圖gr,然后為了實現(xiàn)需要的效果,當(dāng)然還需要原本的繪圖,所以原本的紅、綠繪圖都放在下層,而它們的交集gr放在上層即可:

可以看到,在黃色繪圖邊緣有縫隙(這里用的繪圖不是圓的,所以不要說好像不圓之類的話,因為這就是隨便準(zhǔn)備的繪圖,本來就不是圓,你愿意的話也可以用兩個方塊或是其它圖形來做,也可以用之前講過的貝塞爾曲線擬合圓弧、誤差只有千分之一左右),黃色繪圖的邊緣有縫隙的原因我之前也講過的,那是因為每個繪圖邊緣都會有抗鋸齒,所以邊緣會模糊,那么解決方法很簡單,把這個交集部分重復(fù)一遍即可,也就是再疊一個黃色繪圖即可:

顯然,現(xiàn)在交集部分的邊緣縫隙就不那么明顯了。如果你還覺得不舒服,那就再重一層黃色繪圖上去:

現(xiàn)在這幾張圖都是屏幕放大很多后得到的,所以如果屏幕大小是100%的話,看起來還是不錯的,當(dāng)然之前也講過,你重越多層上去邊緣模糊效果就越不明顯、同時邊緣鋸齒也就會越明顯,所以一般重復(fù)兩三層即可。
? ? ? ? 最后,bgr分離效果還是很靈活的,比如可以從白色中只分離紅色,那么藍(lán)綠就是完全重合的,所以藍(lán)綠部分就是青色:


再比如,你可以只分離出藍(lán)色,這樣,紅色和綠色是完全重合的,就會是黃色的:

? ? ? ??顯然bgr分離效果還是很靈活,有不少變化,可以做出很多東西。除了白色以外,其它顏色一樣也可以分離,比如隨便一個顏色A9664D,你可以分離bgr,得到A90000、006600、00004D三種顏色?一樣能做bgr分離效果。
??? ????最后說一下,不用繪圖求交集的方式當(dāng)然也可以做bgr分離效果,用clip一樣能做。你可能會說clip又沒辦法求交集,怎么做?可是啊,你先想想交集是怎么得到的,不就是兩個繪圖求交得到的嗎,那我對一個繪圖使用另一個繪圖的clip不就行了?什么意思,假設(shè)兩個繪圖是A和B,我現(xiàn)在只想顯示它們的交集,還不簡單嗎,我對A繪圖用clip、clip的形狀是B不就行了嗎??然后既然可以做到只顯示交集,那不就已經(jīng)證明能做出bgr分離效果了嗎?畢竟繪圖的顏色是你“主動”上色的,原則上對一個繪圖你想上什么顏色都可以啊!然后當(dāng)然,用clip也會有邊緣羽化,老早以前就講過的,所以還是一樣的,你可以多重復(fù)幾層即可。


當(dāng)然,如果要做三個繪圖一起的交集的話,還是直接用繪圖求交的方式吧