我想了解这个色度键滤镜的工作原理。如果您不知道什么是色度键,它是一种绿屏效果。有没有人能够解释一下这些功能是如何工作的,以及它们到底在做什么?
float maskY = 0.2989 * colorToReplace.r + 0.5866 * colorToReplace.g + 0.1145 * colorToReplace.b;
float maskCr = 0.7132 * (colorToReplace.r - maskY);
float maskCb = 0.5647 * (colorToReplace.b - maskY);
float Y = 0.2989 * textureColor.r + 0.5866 * textureColor.g + 0.1145 * textureColor.b;
float Cr = 0.7132 * (textureColor.r - Y);
float Cb = 0.5647 * (textureColor.b - Y);
float blendValue = smoothstep(thresholdSensitivity, thresholdSensitivity + smoothing, distance(vec2(Cr, Cb), vec2(maskCr, maskCb)));
gl_FragColor = vec4(textureColor.rgb * blendValue, 1.0 * blendValue);
我理解前6行是将颜色转换为替换颜色(可能为绿色),并将纹理颜色转换为YCrCb颜色系统。
这个片段着色器有两个输入浮点值:thresholdSensitivity和Smoothing。
- Threshold Sensitivity 控制需要多相似的像素才能被取代。
- Smoothing 控制图像中相似颜色逐渐被替换的程度。