我需要混合两张图片一张照片和一个占位符。这个想法是我们看到占位符,除非占位符具有特定颜色,在这种情况下,用户会看到照片。像色度键之类的东西。
为此,我编写了一个充当 BlendMode 的 Pixel Bender 着色器。如果背景颜色正确,则输出像素图像,否则从占位符输出像素。
<languageVersion : 1.0;>
kernel Crossfade
< namespace : "mynamesp";
vendor : "Artbits snc";
version : 1;
description : "description ... "; >
{
input image4 placeHolder;
input image4 myImage;
output pixel4 dst;
const float3 SPECIAL_COLOR = float3(159.0, 160.0, 161.0);
void evaluatePixel()
{
float4 imgPixel = sample(myImagee, outCoord());
float4 placeHolderPixel = sample(placeHolder, outCoord());
dst = placeHolderPixel;
if(placeHolderPixel.r == (SPECIAL_COLOR.r / 255.0) && placeHolderPixel.g == (SPECIAL_COLOR.g / 255.0) && placeHolderPixel.b == (SPECIAL_COLOR.b / 255.0)){
dst = imgPixel;
}
}
}
一切正常,除了我有多个占位符,一个在另一个上,我的着色器不检查它自己的占位符的颜色,而是检查照片下所有东西的颜色。
有没有办法强制 BlendMode 只考虑一个图层或一个特定的背景颜色?
有没有更聪明的方法来获得相同的结果?
谢谢你的帮助!我知道这是一个相当长而复杂的问题,尤其是对我的英语来说:-)