ShaderFilterを試してみた感想
- 2008 年 12月 28 日
CS4の新機能にAdobe Pixcel Benderのサポートがあります。
これを使うと、たとえばビルトインフィルタでは実現できないリッチな視覚効果をFlashで利用できる上に、対応ビデオカードを持つ環境であればハードウェアの力で高速に処理されるというのがウリ。
前回試したImageProcessingでは、アニメーションに利用できるようなパフォーマンスが得られなかったのだけれど、これだと自分のところではスムーズに再生されています。対応GPUを持つ環境ならなのだろうけど。GPUの威力は絶大だと思った。
注)要FlashPlayer10
このてんとちゃんではPixcel Benderにビルトインされていたtwirlの効果をフィルタにして使っています。こういうの使えるのは面白いけれど、ゲームじゃないんだし、ただかだWeb見るのに高スペックなPCが必要ですって、そりゃないだろーと…。
Pixcel Blenderは効果的にも無限にパターンが考えられるし他のAdobeアプリでも使える。
Flashの場合Playerで実行時に効果を適用できるので、表現的にもWebらしい使い方が考えられると思う。面白いけれど今はもう少しネタをためる時期かも?ですね。
package{ import flash.display.MovieClip; import flash.display.Shader; import flash.display.ShaderData; import flash.events.Event; import flash.filters.ShaderFilter; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; public class TwirlSample extends MovieClip{ public function TwirlSample(){ this.loader = new URLLoader(); this.loader.dataFormat = URLLoaderDataFormat.BINARY; this.loader.addEventListener( Event.COMPLETE, completeHandler, false, 0, true ); this.loader.load( new URLRequest( "twirl.pbj" ) ); } public var tento:MovieClip; public var loader:URLLoader; public var shader:Shader; public var shaderData:ShaderData; public var twirlFilter:ShaderFilter; public var xPt:Number = 0; public var yPt:Number = 0; public function completeHandler(e:Event):void{ shader = new Shader(); shader.byteCode = loader.data; shaderData = shader.data; shaderData.center.value = [xPt,yPt] shaderData.gaussOrSinc.value = [1]; shaderData.radius.value = [50]; shaderData.twirlAngle.value = [15]; twirlFilter = new ShaderFilter(shader); twirlFilter.leftExtension= 100; twirlFilter.rightExtension= 100; twirlFilter.topExtension= 100; twirlFilter.bottomExtension = 100; addEventListener( Event.ENTER_FRAME, enterFrameHandler, false, 0, true ); } public function enterFrameHandler(e:Event):void{ xPt += 10; yPt += 10; shaderData.center.value = [xPt,yPt]; tento.filters = [twirlFilter]; } } } |