1

我正在使用以下代码来创建图像的动态反射:

{
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 中完成。

4

1 回答 1

2

这实际上很简单,您需要做的就是创建一个相同大小的新图像,然后将它的每个像素设为您要模糊的图像中该位置和周围像素的平均值。拍摄的像素越多,输出就越模糊。例如,您可以使用上方、下方、左侧和右侧的像素来模糊每个像素。或者您可以使用像素和所有其他 8 个触摸...如果您愿意,您还可以为前一个像素值赋予比周围像素更大的权重,以获得不同的效果。最好的方法是尝试一些东西,直到你得到想要的效果。

顺便说一下,第一种模糊被称为“平均”。后一种方法可以通过使用高斯分布来加权像素(如果您使用其中的许多像素)来完成 - 高斯模糊。

于 2009-12-15T15:26:25.243 回答