Мне нужно смешать два изображения, одну фотографию и заполнитель. Идея заключается в том, что мы видим местозаполнитель, за исключением случаев, когда указатель цвета имеет определенный цвет, в этом случае пользователь видит фотографию. Что-то вроде хроматического ключа.
Для этой цели я написал шейдер Pixel Bender, который действует как BlendMode. Если фон имеет правильный цвет, выведите пиксельное изображение, в противном случае выведите пиксель из заполнителя.
<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 учитывать только слой или определенный цвет фона?
Есть ли более разумный способ получить тот же результат?
Спасибо за вашу помощь! я знаю, что это довольно длинный и сложный вопрос, особенно для моего английского: -)