2009-11-14 58 views

回答

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次比較blur map到原始 - 瘋狂),並且btw他們的公式只是從0到6只有確切的數字1 2 3 4 5 6所以它不會爲我工作( – Rella 2009-11-24 03:41:17

+0

我的文章已被編輯,以反映使用像素彎曲機所需的模糊效果的一種可能的實現。即使這種方法總是看周圍的像素每個像素即使不模糊它們,像素彎曲機的性能優勢也應該補償額外的工作。 – dennisjtaylor 2009-12-01 17:20:18

3

您可以在其原始上繪製模糊圖像(Alpha通道更改爲模糊值圖)以模擬效果。

由於Flash中的像素彎曲器不支持循環,因此很難創建出色的模糊濾鏡。

+0

那麼混合使用AS3和PB怎麼樣?可能嗎? – Rella 2009-11-15 14:48:11

+0

怎麼做多次(pb過濾器與as3成環),比方說5,然後用像素混合器將它們堆疊在一起? – bgw 2009-11-16 00:50:49

+0

或者你可以將圖像分隔成一個網格,並相應地模糊每一塊。 – bgw 2009-11-16 00:52:21

3

我在這裏這樣的效果的非常古老的像素預折彎機版本(包括AS2源)http://www.quasimondo.com/archives/000564.php

它的工作原理與模糊半徑從0提高創建幾個模糊的位圖(或鉛丹你選擇的半徑)到最大半徑。您做得越模糊,質量就越好。使用paletteMap過濾器可以爲每個模糊圖層創建遮罩,使得每個連續圖層之間存在漸變重疊。然後使用其蒙版在下一個圖層上繪製每個模糊圖層。

這第二個混合階段我可能現在寧願與像素彎曲。