【Aegisub】RGB分离及其相关介绍


以后介绍用mod的方法,本文介绍不用mod的做法
RGB当然就是红绿蓝了。关于这些我觉得没必要讲太多,在网上可以搜到一堆颜色相关的文章,所以这里我随便讲一点就是了。首先,ass颜色是bgr而html颜色是rgb,所以在用了HSV_to_RGB函数以后还需要用ass_color函数来得到ass的颜色字符串。在aeg里选择颜色的界面里可以看到ass颜色和html颜色的不同之处:

r、g、b的取值范围是0到255一共有256个值(2的8次方)。所以用rgb可以表示256x256x256=16777216种颜色。现在比如r为50、转为十六进制数就是32,g为230、转为十六进制数就是E6,b为222、转为十六进制数就是DE,直接拼起来就得到32E6DE了,而如果不是rgb的顺序而而是bgr的顺序的话,当然拼起来就是DEE632了,当然ass颜色值代码的格式是&H000000&这种,所以在DEE632前面加上&H后面加上&就可以得到&HDEE632&了。所以有的时候需要注意区分是ass颜色还是html颜色。
那么现在就按照bgr的顺序来继续讨论。假设发光强度为0到255,那么如果b的强度是0、g的强度是255、r的发光强度是0的话,就得到了00FF00,也就是绿色了:

可以看到,现在的ass颜色代码是&H00FF00&。而如果b的强度是255、g和r的发光强度都是0的话,当然就是FF0000蓝色了:

所以若设定g和r为0、控制b在0到255之前变化,那么当然就能有蓝色发光强度从0开始变大的感觉了,从黑到蓝的样子:

若是b、g、r的数值相同的话,就会得到一个灰色,比如bgr都是0那么肯定是全黑了,而如果bgr发光强度都是255那么当然就是白色了,而如果bgr都是127那么当然就是中灰色了,也就是

当然像是323232或者A7A7A7这种bgr数值都是一样的颜色当然就是灰色了
所以bgr分离其实就是把bgr都分开,比如把白色FFFFFF拆开就是FF0000和00FF00和0000FF。反过来叠加也是一个道理,当然说“叠加”的话是一个描述性语言,所以最好定义“叠加”是怎么叠加的,因为之前讲过噪声图叠加,而此处的叠加和噪声图叠加是不一样的,如果不定义清楚那岂不是在耍流氓吗???所以定义一下,这里的各个颜色“叠加”是各个颜色的bgr分别相加、如果相加后数值超过255(或者说FF)的话就直接取255,也就是,假设有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结果就是FF,然后g是00+7F=7F,r同理,所以最终叠加后得到了FF7F7F这个颜色
那现在就可以看bgr分离的效果了。比如现在把红色和蓝色放一起进行叠加:

先不管如何做到这个效果。可以看到,在有红色又有蓝色的地方(重合部分)两种颜色进行了叠加,叠加方式如刚刚所说,此处的颜色就是FF00FF了,这个颜色被称为“洋红色”。那同理,还有蓝+绿=青、红+绿=黄:


也就是说青色是FFFF00、黄色是00FFFF了,最后当然bgr三个都加一起是白色FFFFFF了:

在知道bgr分离是什么以后当然就可以来实现这个效果了,正如本文开头说的,现在不使用mod来做这个效果,以后会专门出文章讲使用mod如何做。咱们知道,两个颜色在一起才会叠加,也就是重合部分才会叠加,也就是交集部分才会叠加,所以很显然可以用绘图求交的方式来做bgr分离效果。比如现在有b、g、r三种颜色的绘图,可能的相交状况很容易分析出来:b和g相交(简称bg)、g和r相交(简称gr)、b和r相交(简称br)、b和g和r相交(简称bgr),总共就只有这几种可能,所以可以用之前讲过的绘图求交集的函数来直接求,对于b、g、r的三个绘图,先求绘图bg、gr、br,然后由于可能还有bgr,而bgr就是三个绘图同时重合的部分,所以直接求绘图bg和绘图gr的交集即可(这等同于求bg和br的交集、也等同于求gr和br的交集,所以这俩当然不用考虑),也就是通过绘图求交集函数求得bg、gr、br、bgr四个绘图,当然这其中可能有空集,如果是空集去掉即可。
那来实际试一试,用绘图求交集的函数来做。比如红、绿两个绘图,求它们的交集,得到绘图gr,然后为了实现需要的效果,当然还需要原本的绘图,所以原本的红、绿绘图都放在下层,而它们的交集gr放在上层即可:

可以看到,在黄色绘图边缘有缝隙(这里用的绘图不是圆的,所以不要说好像不圆之类的话,因为这就是随便准备的绘图,本来就不是圆,你愿意的话也可以用两个方块或是其它图形来做,也可以用之前讲过的贝塞尔曲线拟合圆弧、误差只有千分之一左右),黄色绘图的边缘有缝隙的原因我之前也讲过的,那是因为每个绘图边缘都会有抗锯齿,所以边缘会模糊,那么解决方法很简单,把这个交集部分重复一遍即可,也就是再叠一个黄色绘图即可:

显然,现在交集部分的边缘缝隙就不那么明显了。如果你还觉得不舒服,那就再重一层黄色绘图上去:

现在这几张图都是屏幕放大很多后得到的,所以如果屏幕大小是100%的话,看起来还是不错的,当然之前也讲过,你重越多层上去边缘模糊效果就越不明显、同时边缘锯齿也就会越明显,所以一般重复两三层即可。
最后,bgr分离效果还是很灵活的,比如可以从白色中只分离红色,那么蓝绿就是完全重合的,所以蓝绿部分就是青色:


再比如,你可以只分离出蓝色,这样,红色和绿色是完全重合的,就会是黄色的:

显然bgr分离效果还是很灵活,有不少变化,可以做出很多东西。除了白色以外,其它颜色一样也可以分离,比如随便一个颜色A9664D,你可以分离bgr,得到A90000、006600、00004D三种颜色 一样能做bgr分离效果。
最后说一下,不用绘图求交集的方式当然也可以做bgr分离效果,用clip一样能做。你可能会说clip又没办法求交集,怎么做?可是啊,你先想想交集是怎么得到的,不就是两个绘图求交得到的吗,那我对一个绘图使用另一个绘图的clip不就行了?什么意思,假设两个绘图是A和B,我现在只想显示它们的交集,还不简单吗,我对A绘图用clip、clip的形状是B不就行了吗??然后既然可以做到只显示交集,那不就已经证明能做出bgr分离效果了吗?毕竟绘图的颜色是你“主动”上色的,原则上对一个绘图你想上什么颜色都可以啊!然后当然,用clip也会有边缘羽化,老早以前就讲过的,所以还是一样的,你可以多重复几层即可。


当然,如果要做三个绘图一起的交集的话,还是直接用绘图求交的方式吧