Flash 10でPS2の花火デモ

wonderfl初投稿。パーティクル&モーションブラーな花火です。
元ネタはPS2が出たときのこれ。
この花火デモ、洗面台のアヒルと並んで人気でしたけど、難度は一番低いですよね。MSが対抗意識丸出しでXboxでも似たようなデモを出してきたり、DirectX SDKのサンプルにも入れてきたりして、当時ちょっと面白かったです。
Flashについてですが、直径0?16ピクセルでプリレンダリングしたパーティクルをBitmapDataにcopyPixelsで描画してフレームを作成し、drawで加算半透明で10枚合成してモーションブラーをかけています。最初はパーティクルをShapeやBitmapDataのdrawで描画していたんですが、案の定ものすごく遅かったのでcopyPixelsに置きかえました。アンチエイリアスがかからないので描画品質は落ちますが、7倍くらい速くなってます。copyPixelsだとパーティクルの重なりで加算合成ができませんが、そこはモーションブラーで明るくなってくれるだろうと。
ちなみにマウスをぐりぐり回すとブラーで楽しいです。こんな感じ。
火花の照り返しは、テクスチャにdrawで適当なサイズとアルファで描画して、床ポリゴン2枚に貼りつけています。Flash 10ではパースペクティブ補正つきでポリゴンが描画できるので、普通に火花と描画位置がぴったり合うのが嬉しいところです。
また、座標変換にFlash 10で新しく追加された3Dベクトル・行列クラスを使用しています。wonderflのおかげでこのAPIの存在を知りました。ただ、このAPIについてはかなり独特の癖やバグがあったり、Flash Playerがクラッシュしたりして(まさにCrash Playerってやかましい)、あれこれ調べまわるはめに。せっかくなので、これまで分かったことについて後でまとめてみるつもりです。
あと、ActionScriptの最適化で気づいたポイントですが、アクセサ(set、get)はあくまで関数だということ。APIのプロパティにアクセスするときなど、つい普通の変数を読み書きしているつもりで、遅い関数呼び出しをしてしまっていることに気づきにくいので要注意だと思いました。そのあたりをチェックしたら描画込みであっさり倍以上速くなったりしています。他にもいろいろチューニングして、それでもCore 2 Duo E8500-3.16GHz機で1フレームに20ミリ秒ほどかかってますが……wonderflを見るような人なら大丈夫でしょう、たぶん。
それと、wonderflのコードがうまく埋め込めない感じなんですが、他のブログでも同じ表示になってるみたい? 一時的なものなんでしょうか。

