我使用以下代码来创建图像的动态反射:
{
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;
}
}
}
它工作得很好,但我真的想稍微模糊一下反射的输出,让它看起来更有光泽。我用谷歌搜索过,但所有的结果似乎都非常复杂。在Pixel Bender中创建模糊效果(类似于Flash内置滤镜)非常困难吗?
在这种情况下,我不能应用Flash滤镜,所以它必须在Pixel Bender中完成。
发布于 2009-12-15 23:26:25
实际上这很简单,你所需要做的就是创建一个相同大小的新图像,然后使它的每个像素都是你想要模糊的图像中该位置和周围像素的平均值。你取的像素越多,输出就越模糊。例如,你可以用上面、下面、左边和右边的像素模糊每个像素。或者你可以使用像素和所有其他8个接触...如果您愿意,您还可以赋予前一个像素值比周围的像素值更大的权重,以获得不同的效果。最好的方法就是不断尝试,直到你得到想要的效果。
顺便说一句,第一种模糊被称为“平均”。后一种方法可以通过使用高斯分布来加权像素,如果你使用很多像素-高斯模糊。
https://stackoverflow.com/questions/1908142
复制相似问题