Action Script3 / Pixel Bender Составной эффект размытия?

Мне нужен фильтр размытия Action Script3 / Pixel Bender с возможностью отображения.

У нас есть такое изображение, мы хотим применить такую ​​карту размытия, чтобы получить такой результат

http://livedocs.adobe.com/en_US/AfterEffects/8.0/images/ef_182.png

Он также известен как эффект сложного размытия.

Кто-нибудь видел это с помощью AS3 / Pixel Bender?

Кто-нибудь знает, где скачать такой эффект с исходником?


person Rella    schedule 14.11.2009    source источник


Ответы (3)


Следующий .pbk в значительной степени должен это сделать. Вы можете взглянуть на комментарии, чтобы увидеть, как бы вы усилили эффект размытия.

<languageVersion : 1.0;>
kernel NewFilter
<   namespace : "Your Namespace";
    vendor : "Your Vendor";
    version : 1;
    description : "your description";
>
{
    input image4 src1;
    input image4 src2;
    output pixel4 dst;

    void
    evaluatePixel()
    {
        float2 pos = outCoord();

        // based on the current whiteness of pixel in src2 blur by a percentage.
        float4 val = sampleNearest(src2,pos);
        float percent = val[0];

        // this takes into account only the closest level of pixels to make the blur more in depth 
        // you can add the next 16 or even the 24 after that. 
        float4 pix = sampleNearest(src1,pos);
        float4 pixNE = sampleNearest(src1,float2(pos.x+1.0, pos.y+1.0));
        float4 pixE = sampleNearest(src1,float2(pos.x+1.0, pos.y));
        float4 pixSE = sampleNearest(src1,float2(pos.x+1.0, pos.y-1.0));
        float4 pixS = sampleNearest(src1,float2(pos.x, pos.y-1.0));
        float4 pixSW = sampleNearest(src1,float2(pos.x-1.0, pos.y-1.0));
        float4 pixW = sampleNearest(src1,float2(pos.x-1.0, pos.y));
        float4 pixNW = sampleNearest(src1,float2(pos.x-1.0, pos.y+1.0));
        float4 pixN = sampleNearest(src1,float2(pos.x, pos.y+1.0));

        float4 result;
        // the result is the whiteness percentage of the original pixel averaged with the surrounding pixels.
        // if you added more of the surrounding pixels you can consider them in the weighted average also and get a deeper blur.
        result[0] = percent*pix[0]+(1.0-percent)*(pixNE[0]+pixE[0]+pixSE[0]+pixS[0]+pixSW[0]+pixW[0]+pixNW[0]+pixN[0])/8.0;
        result[1] = percent*pix[1]+(1.0-percent)*(pixNE[1]+pixE[1]+pixSE[1]+pixS[1]+pixSW[1]+pixW[1]+pixNW[1]+pixN[1])/8.0;
        result[2] = percent*pix[2]+(1.0-percent)*(pixNE[2]+pixE[2]+pixSE[2]+pixS[2]+pixSW[2]+pixW[2]+pixNW[2]+pixN[2])/8.0;
        result[3] = pix[3];

        dst = result;
    }
}
person dennisjtaylor    schedule 23.11.2009
comment
это не сработает, потому что если вы посмотрите на их источники, вы увидите - они используют 2 фильтра vert и hor для размытия, 2 раза для сравнения карты размытия с исходной - безумие), и, кстати, у них есть формула только от 0 до 6 только точные числа 1 2 3 4 5 6 так что у меня это не сработает ( - person Rella; 24.11.2009
comment
Мой пост был отредактирован, чтобы отразить одну из возможных реализаций желаемого эффекта размытия с помощью пиксельного бендера. Несмотря на то, что этот подход всегда смотрит на окружающие пиксели каждого пикселя, даже если он не размывает их, преимущества в производительности сглаживания пикселей должны компенсировать дополнительную работу. - person dennisjtaylor; 01.12.2009

Вы можете просто нарисовать размытое изображение (с альфа-каналом, измененным на карту значений размытия) на его оригинале, чтобы имитировать эффект.

Поскольку средство преобразования пикселей во Flash не поддерживает циклы, сложно создать хороший фильтр размытия.

person Andy Li    schedule 15.11.2009
comment
А как насчет того, чтобы сделать это со смесью AS3 и PB? Является ли это возможным? - person Rella; 15.11.2009
comment
Как насчет того, чтобы сделать это несколько раз (фильтр pb зациклен с помощью as3), скажем, 5, а затем снова компостировать все это вместе с помощью пиксельного блендера? - person bgw; 16.11.2009
comment
Или вы можете разделить изображение на сетку и соответственно размыть каждую часть. - person bgw; 16.11.2009
comment
На самом деле чистый AS выполнит эту работу, как предложение в моем ответе ... Кстати, будет ли эффект использоваться при обработке видео в реальном времени или только для одного изображения? - person Andy Li; 16.11.2009
comment
Сделай это так. Выборка нескольких пикселей в Pixel Bender медленная. Гораздо лучше имитировать составное размытие с помощью встроенной функции размытия Flash и маски. - person Daniel Cassidy; 25.09.2010

У меня есть очень старая версия этого эффекта до пиксельного бендера: http://www.quasimondo.com/archives/000564.php (включая исходный код as2)

Он работает путем создания нескольких размытых растровых изображений с увеличением радиуса размытия от 0 (или минимального радиуса, который вы выбираете) до максимального радиуса. Чем больше шагов размытия вы сделаете, тем лучше будет качество. Используя фильтр paletteMap, вы создаете маски для каждого слоя размытия таким образом, чтобы между каждым последующим слоем было перекрытие градиента. Затем вы рисуете каждый слой размытия поверх следующего, используя его маску.

Эту вторую фазу смешивания я, вероятно, предпочел бы использовать с помощью Pixel Bender.

person Quasimondo    schedule 23.06.2010