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 に答える