2009-11-14 9 views
3

J'ai besoin d'un filtre de flou Action Script3/Pixel Bender avec capacité de mappage.Action Script3/Pixel Bender Compound Flou effet?

Nous avons une telle image, nous voulons appliquer ce plan flou pour obtenir ce résultat

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

Il est également connu sous le nom d'effet de flou composé.

Est-ce que quelqu'un l'a déjà vu avec AS3/Pixel Bender?

Est-ce que quelqu'un sait où télécharger un tel effet avec la source?

Répondre

2

Le .pbk suivant devrait à peu près le faire. Vous pouvez jeter un coup d'oeil aux commentaires pour voir comment vous pourriez approfondir l'effet de flou.

<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

cela ne fonctionnera pas parce que si vous regardez leurs sources vous verriez - ils utilisent 2 filtres vert et hor à faire flouter, 2 fois pour comparer la carte de flou à l'original - folie), et btw ils ont une formule à partir de 0 à 6 seulement les nombres exacts 1 2 3 4 5 6 donc ça ne marchera pas pour moi ( – Rella

+0

Mon article a été édité pour refléter une implémentation possible de l'effet de flou désiré en utilisant le pixel bender. chaque pixel, même s'il ne les brouille pas, les avantages de performance de pixel bender devraient compenser le travail supplémentaire. – dennisjtaylor

3

Vous pouvez simplement dessiner une image floue (avec le canal alpha modifié sur la carte de valeur du flou) sur son original pour simuler l'effet.

Parce que le cintrage de pixels dans Flash ne prend pas en charge les boucles, il est difficile de créer un bon filtre de flou.

+0

Et qu'en est-il de le faire avec un mélange de AS3 et PB? C'est possible? – Rella

+0

Qu'en est-il de faire cela plusieurs fois (filtre pb en boucle avec as3), disons 5, et ensuite le tout compiler ensemble avec Pixel Blender? – bgw

+0

Ou vous pouvez séparer l'image en une grille, et flouter chaque pièce en conséquence. – bgw

3

J'ai une version bender pré-pixel très ancienne de cet effet ici: http://www.quasimondo.com/archives/000564.php (source AS2 inclus)

Il fonctionne en créant plusieurs bitmaps floues avec le rayon de flou croissant de 0 (ou le minium rayon que vous choisissez) au rayon maximum. Plus vous faites de flou, meilleure sera la qualité. En utilisant le filtre paletteMap, vous créez des masques pour chaque couche de flou de sorte qu'il y ait un chevauchement de gradient entre chaque couche consécutive. Ensuite, vous dessinez chaque couche de flou sur la suivante en utilisant son masque.

Cette deuxième phase de mélange que je préférerais maintenant faire avec le cintrage de pixels.