[Flash Player 10 #7] シェーダ (Pixel Bender) を使った頂点計算の最適化 2

前回のエントリーでは複雑なことをしてシェーダにデータを渡そうとしていましたが、Saqoosha さんからコメント欄で教えていただいた boostworthyisryantaylor というサイトの情報(ShaderJob クラスなど)を元に、シェーダでの頂点情報の計算に成功しました。

フレームレートが 20 を切る分割数を計測(Z ソートは今回無し)

従来の通りの頂点計算 => 分割数 75、頂点数 5625
シェーダを使った頂点計算 => 分割数 80、頂点数 6400

こんな感じで、望んでいたような劇的な変化はありませんでした。自分の環境は普通の MacBook ですので GPU は搭載されていませんが、GPU がある環境では wmode を gpu とかにすれば結果は変わってくるんでしょう。試してないですが。

従来の通りの頂点計算デモはこちら
シェーダを使った頂点計算デモはこちら

※ 要 Flash Player 10
※ 左右キーで分割数、上下キーで視野角を変更できます。

boostworthyisryantaylor さんでも書かれているように、現在はバグなのか、ShaderInput に Vector.<number> を渡すとエラーになるので ByteArray で渡しています(ドキュメントでは渡せると書いてあります)。この問題が直れば幾分は良くなるでしょうが、あまり期待はできないのかも。引き続き、調査は続けていくつもりです。とりあえずは Vector.<number> が渡せるようになるのを待つつもりですが。

http://www.libspark.org/svn/as3/Astro/VertexShader_01/
に今回のコードを上げましたので必要な方はチェックアウトしてください。

4 Comments

  1. Saqoosha より:

    なーるほど。劇的な違いはないんですねー。
    まーでも Activity Monitor で CPU の動きを見てると、ShaderJob つかったほうが 2 つのコアをうまく使えてるっぽい。(MacBook Pro ね)
    ShaderJob は別スレッドで走るらしいのでそれの効果かな。もしかすると ShaderJob を複数つくって同時に start させたりすると 8 コアのとかだとすんごい速くなったりするのかも。

    あー、ちなみに Flash で Shader うごかした場合は wmode=”gpu” しても GPU は使われないみたいですよ。
    http://www.kaourantin.net/2008/05/adobe-pixel-bender-in-flash-player-10.html
    (DisplayObject の 3D 表示系には使われてるっぽい)

  2. muta より:

    > Saqoosha さん

    前回に続けて参考になるコメントありがとうございます!

    ShaderJob は別スレッドで実行されるって知らなかった。それに Shader を使って wmode 利用すれば勝手に GPU が使用されると思ってましたが、そういうわけではないんですね。

    すべての環境で 3D の描画が早くなるような方法が見つかればいいんですけど・・・。FlashPlayer 10 はまだまだ調べてみないといけないことがたくさんありそうですね。

  3. John Grden より:

    I know this is not the right place to post this, but do you have docs for Multiloader that are in english by chance? again, I apologize for posting this here, but I can’t read your blog, and well, I thought I’d take a chance ;)
    Thanks very much,

    John

  4. muta より:

    Hi, John.

    Thank you for the comment.

    The document was written though it apologized because of poor English.
    http://www.libspark.org/browser/as3/MultiLoader/Sample.as

    Please use the SVN for download.
    http://www.libspark.org/svn/as3/MultiLoader/

Leave a Reply