Pixel Benderの勉強を始めています

| コメント(2) | トラックバック(0)

仕事の忙しいのは続いているのですが、合間を見てPixelBenderの勉強を今更ながらじわじわと始めています。
何故かと言うと、実は画像の処理がよくわかっておらず、PixelBenderのソースコードを見てこれならいけるんじゃなかろうかと。
また、先日行ったAdobeMaxでもFITCの人がPixelBender速いぜ!みたいな事を言っておられましたので、少しやってみようかなと。

まず、導入の仕方やチュートリアルは以下の記事を参考にしました。
Adobe Pixel Benderでのブレンド、フィルタおよび塗りの作成

この記事だけでも十分にわかりやすいのですが、
AdobeのウェブサイトにPixel Bender ExchangeというPixcelBenderファイルの公開サイトがあります。
(実は私の欲しかったものはここでまかなえてしまったのですが。。)

このファイルを見て、PixelBenderToolkitのヘルプを見て、という感じで進めていきました。ただ、実際にFlashで適用させるにはFlash10で書き出さなければならない。。。でもCS4持ってない。。ということでWonderflを利用させてもらっているのですが、思いっきりはまってしまいました。

まずShaderをフィルタとして使用する場合は何の問題も無くFlash側で使用出来ました。

思うような動作を実現できなかったのが、blendShaderにShaderを設定する場合です。
2つの画像を使用する場合はblendShaderでブレンドするという形になります。
やりたかったのは2つの画像のクロスフェードだったのですが、一番最初のフレームで最後に設定した後、フレームを進めてblendShaderにShaderを設定しても反映されませんでした。
(サンプルはコマンドになってますが、EnterFrameで散々いろいろやったあげくの悪あがきです)

ようするに以下のように書いた場合は

_fadeShader = new Shader(_pbloader.data);
_fadeShader.data.intencity.value = [0.3];
_container2.blendShader = _fadeShader;
//以下が適用される
_fadeShader.data.intencity.value = [0.5];
_container2.blendShader = _fadeShader;

後ろのintencityが0.5が適用されて、

~
_fadeShader.data.intencity.value = [0.5];
_container2.blendShader = _fadeShader;
addEventListener(Event.ENTER_FRAME,enterFrameHandler);
}
private function enterFrameHandler(e:Event):void{
    //こちらは反映されない
    _fadeShader.data.intencity.value = [0.3];
    _container2.blendShader = _fadeShader;
}
とした場合は最初に設定したintencityが0.5が適用されます。


ちなみに後者のPixcelBenderソースコード貼っておきます。


kernel CrossFade
<   namespace : "northprint";
    vendor : "";
    version : 1;
    description : "CrossFade";
>
{
    input image4 src;
    input image4 src2;
    output pixel4 dst;
    parameter float intencity
    <
        minValue:0.0;
        maxValue:1.0;
        defaultValue:0.5;
    >;  
    void
    evaluatePixel()
    {
        float4 frontPixcel = sampleNearest(src,outCoord());
        float4 backPixcel = sampleNearest(src2,outCoord());        
        dst = mix(frontPixcel,backPixcel,intencity);
    }
}

これだけで画像のミックスが出来ちゃう。
これが動的に変えられないのは悲しいです。(そもそもこういう事を意図されていないのかもしれませんが。。描画が更新されていないだけ???)
まだよく分かっていないながら使っているので、もう少しがんばってみようと思います。間違ってるよ!という場合は指摘いただけると泣いて喜びます。

トラックバック(0)

トラックバックURL: http://www.northprint.net/mt5/mt-tb.cgi/134

コメント(2)

始めてコメントします。
僕も最近触り始めたのですが、同じような問題が昨日解決しました。
一旦blendModeを別の設定に切り替えてやると、シェーダーオブジェクトを再度解釈してくれるようです。

<イメージ>
ldr.blendMode = BlendMode.NORMAL; // ←これ
ldr.blendShader = shd;

ちょっとやな動きですね。blendShaderにセットしただけで再度解釈してほしいものですが。

>たまち様
ありがとうございます!!!感謝感謝です!
本当に泣けてきました。
しかし本当に嫌な動きですね。。。

コメントする

このブログ記事について

このページは、northprintが2009年2月16日 04:38に書いたブログ記事です。

ひとつ前のブログ記事は「Adobe MAX Japan 2009 「Progressionプロダクトコンテンツ制作の決め手~」レポート」です。

次のブログ記事は「Progression3.1.42で注意すべき事」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。