Action Script3 / Pixel Bender Compound Blur effect?
I need Action Script3 / Pixel Bender blur filter with mapping capability’s.
We have such image, we want to apply such blur map to get such result
alt text http://livedocs.adobe.com/en_US/AfterEffec开发者_StackOverflow社区ts/8.0/images/ef_182.png
Its also known as Compound Blur effect.
Has anyone seen it done with AS3/ Pixel Bender?
Does Anyone know where to download such effect with source?
You may just draw a blurred image(with alpha channel changed to the blur value map) on its original to simulate the effect.
Because pixel bender in Flash does not support loops, it is difficult to create a good blur filter.
I have an very old pre-pixel bender version of this effect here: http://www.quasimondo.com/archives/000564.php (as2 source included)
It works by creating several blurred bitmaps with the blur radius increasing from 0 (or the minium radius you choose) to the maximum radius. The more blur steps you do the better the quality will be. Using the paletteMap filter you create masks for each blur layer in such a way that there is a gradient overlap between each consecutive layer. Then you draw each blur layer over the next using its mask.
This second blending phase I would probably now rather do with pixel bender.
The following .pbk should pretty much do it. You can take a look at the comments to see how you would deepen the blur effect.
<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;
}
}
精彩评论