2009-11-14 1 views
3

Мне нужен Action Script3/Фильтр размытия Pixel Bender с возможностями отображения.Action Script3/Pixel Bender Compound Blur effect?

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

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

Его также известный как эффект Compound Blur.

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

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

ответ

2

Следующий .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; 
    } 
} 
+0

это не сработает, потому что если вы посмотрите на их источники, вы увидите - они используют 2 фильтра vert и hor, чтобы размыть, 2 раза, чтобы сравнить размытие карты с оригиналом - безумие), и, кстати, у них есть формула только от 0 до 6 только точных чисел 1 2 3 4 5 6, так что это не сработает для меня ( – Rella

+0

Мое сообщение было отредактировано, чтобы отразить одну возможную реализацию желаемого эффекта размытия с использованием пиксельного клинка. Хотя этот подход всегда смотрит на окружающие пиксели каждый пиксель, даже если он не размывает их, преимущества производительности пиксельного гида должны компенсировать дополнительную работу. – dennisjtaylor

3

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

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

+0

А как насчет того, чтобы делать это с использованием смеси AS3 и PB? Является ли это возможным? – Rella

+0

Как сделать это несколько раз (фильтр pb зацикливается с as3), скажем 5, а затем компостировать все это вместе с пиксельным блендером? – bgw

+0

Или вы можете разделить изображение на сетку и размыть каждую часть соответственно. – bgw

3

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

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

Эта вторая фаза смешивания, скорее всего, теперь скорее сделаю с пиксельным изгибом.