ChromaKeyEffect 是色度抠像 它把接近指定颜色的像素抠成透明,并压掉前景边缘上的溢色。默认键色是纯绿(0, 1, 0)。摄像头抠像和剪辑里的kChromaKey都走这个类。
抠像只比较颜色的色度,不看亮度。键色和每个像素都乘同一套 YUV 矩阵,取其中两个色度分量算距离。周围 4 个像素的距离按 2 倍权重和中心一起平均,用来减少噪点。
距离减去相似度后得到baseMask:
相似度(默认 150,着色器里除以 1000 得到 0.15):距离小于它的像素 alpha 变成 0,也就是被抠掉。越大,抠掉的颜色范围越宽。
平滑度(默认 70,即 0.07):从完全透明过渡到不透明的宽度。saturate(baseMask / smoothness)再做 1.5 次方后乘到原 alpha 上。
溢色抑制(默认 300,即 0.30):靠近键色的像素按亮度去饱和,把绿边、蓝边收掉;离键色越远,越保留原来的颜色。
三个数值范围都是 1–1000,传入着色器前除以 1000。
边缘还有两步,默认都是 0,不启用:
边缘收缩(0–10 像素):沿 16 个方向取周围 alpha 的最小值,把前景边缘往里啃一圈,去掉残留的键色边。
边缘羽化(0–10 像素):只对 alpha 做可分离高斯模糊,颜色仍用抠像前的结果。两者都开时,先收缩再羽化。