Я использую следующий код для создания динамического отражения изображения:Простой пиксельный размытие Bender?
{
input image4 src;
output pixel4 dst;
parameter float imageheight
<
minValue: 0.0;
maxValue : 1000.0;
defaultValue :300.0;
>;
parameter float fadeheight
<
minValue : 0.0;
maxValue: 1000.0;
defaultValue: 50.0;
>;
parameter float fadealpha
<
minValue : 0.0;
maxValue : 1.0;
defaultValue : 0.5;
>;
void
evaluatePixel()
{
float2 coord = outCoord();
if (coord[ 1 ] < imageheight) {
dst = sampleNearest(src, coord);
} else {
float alpha = 1.0 - (coord[ 1 ] - imageheight)/fadeheight;
coord[ 1 ] = imageheight - (coord[ 1 ] - imageheight);
dst = sampleNearest(src, coord);
alpha *= fadealpha;
dst.a *= alpha;
dst.r *= alpha;
dst.g *= alpha;
dst.b *= alpha;
float2 pos = outCoord();
pixel4 color = sampleNearest(src,pos);
color+=0.75*sampleNearest(src, pos+float2(0.5*2, 0))+0.25*sampleNearest(src, pos+float2(2, 0));
color+=0.75*sampleNearest(src, pos-float2(0.5*2, 0))+0.25*sampleNearest(src, pos-float2(2, 0));
color+=0.75*sampleNearest(src, pos+float2(0, 0.5*2))+0.25*sampleNearest(src, pos+float2(0, 2));
color+=0.75*sampleNearest(src, pos-float2(0, 0.5*2))+0.25*sampleNearest(src, pos-float2(0, 2));
dst = color/5.0;
}
}
}
Это хорошо работает, но я бы очень хотел, чтобы размыть выход отражения слегка дать ему глянцевый вид. У меня был Google, но все результаты кажутся невероятно сложными. Создает ли эффект размытия (подобно встроенному фильтру Flash) очень сложно сделать в Pixel Bender?
В этом случае я не могу применить фильтр Flash, поэтому это должно быть сделано в Pixel Bender.
Только размытия с очень маленькими радиусами имеют смысл реализовать в пиксельном изгибе. Для больших радиусов, как работает пиксельный изгиб (тот же код выполняется на каждом пикселе изображения) делает его очень неэффективным, а другие алгоритмы будут обрабатывать его намного лучше. Например, собственный фильтр Blur во Flash. Почему бы вам не применить естественное размытие потом (используя фильтр, который охватывает только область отражения)? – Quasimondo