Простой пиксель Бендера Blur? - PullRequest
1 голос
/ 15 декабря 2009

Я использую следующий код для создания динамического отражения изображения:

{
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.

1 Ответ

2 голосов
/ 15 декабря 2009

На самом деле это довольно просто, все, что вам нужно сделать, это создать новое изображение того же размера, а затем сделать каждый его пиксель средним из пикселей в этой позиции и вокруг изображения, которое вы хотите размыть. На выходе получается более размытое изображение, чем больше пикселей вы берете. Например, вы можете размывать каждый пиксель пикселями выше, ниже, слева и справа. Или вы можете использовать пиксель и все остальные 8 касаясь ... Если вы хотите, вы также можете придать предыдущему значению пикселя больший вес, чем окружающие, для другого эффекта. Лучший способ - просто попробовать что-нибудь, пока не получите желаемый эффект.

Кстати, первый тип размытия называется «Среднее». Последний способ можно сделать, используя гауссово распределение для взвешивания пикселей, если вы используете много из них - размытие по Гауссу.

...