Molehill ファーストインプレッション

昨日紹介した「Molehill を搭載した Flash Player Incubator プレビュー版」ですが、Molehillを使うことでどのくらいFlash Playerが高速化されるのか検証してみました。

3D表示のデモ

まずはAway3D 4.0 alphaを利用した8*8*8=512個の立方体表示のデモを御覧ください。

以前、従来通り(Molehill未使用、Flash Player 10)の方法で作ったことがあり「Flashの3Dエンジン「Alternativa3D 7.5」」で試したところ7*7*7=343個の立方体表示が限界でした。エンジンの種類が違うので正確に比較できませんが、表示できるポリゴン数が限界を突破したかのような可能性を感じます。以下、気づいたことを挙げてみます。

  • デモによっては数万△の表示が可能
  • シェーディング系は爆速
  • Away3D 4.0 Alphaはバージョン3.x/2.x系とAPIの大きな変更はない
  • 高速化/最適化の手段が現在のところ未知(最適化の余地がある)

特にMolehillを使った場合、再生環境に結果が大きく依存している気がします。速度差が発生する要因として

  • グラフィックボードの差
  • エンジンの差(WinはDirectX 9、MacとLinuxはOpenGL 1.3)

が挙げられ、Twitterの報告を見る限りMacよりWindowsのほうが、ノートPCよりデスクトップPCのほうが高速なようです。

(余談ですが、私のMacBook Pro 17inch《Corei7 2.66GHz, NVIDIA GeForce GT 330M, SSD》は昨年4月時点での最高スペックで購入したのに、2年前のWindowsのデスクトップPCより結果が低かったりもしました。)

<追記>

narutohyper さんから Away3D 4.0 alpha では OBJ 形式で読み込むと速度が向上するということを教えてもらったので、OBJ 形式読み込むサンプルを作成してみました。

するとどうでしょうか? 信じられないことに圧倒的に軽快になりました。Primitiveオブジェクトで作成した場合は約6000ポリゴンで30FPS程度でしたが、OBJ形式で作成した場合は約20000ポリゴンで60fpsでています。またCPU使用率を確認すると、次の図のように違いが生じているようです。

結論としては、Away3D 4.0 Alphaでは最適化されている部分とそうでない部分があるようです。

2D表示のデモ

次に2Dの描画に対してどのくらいの効果が得られるか試してみました。どのくらいの数のパーティクルを表示できるのかが検証の目的です。

※従来どおり(Molehill未使用、Flash Player 10)の方法で作られたデモは、「BitmapDataを配列に格納することで2〜3倍の高速化」の記事を参考ください。

Molehillは3Dばかりに注目されがちですが2Dの描画支援に使うという方法もありだと思っています。既存Flashコンテンツでも描画高速化の恩恵が得られるはずで、既に2Dの描画支援について考察している記事がでてきています。

<追記>

zendenmushi さんがさらに高速化して wonderfl に投稿されていました。こちらの swf だと 16380 パーティクルが 60fps で動いています。

ちなみに従来通り(FP10)の作り方で試したArrows Flow Simulation 10000 (FP10)だと 10000 パーティクルで 30fps 程度なので、いかに Molehill が高速なのかがわかります。このデモによって 2D 描画においても Molehill が有効なことが示されたかのように思います。

それにしても narutohyper さんや zendenmushi さんがさらに高速化してくれたのには感謝です。Molehill の盛り上がりは従来比 10 倍と謳われた ActionScript 3.0 登場時に似たワクワク感があります。

結果募集中

デモを試した結果をはてなブックマークコメントで教えて頂けると幸いです。

投稿者 : 池田 泰延

BookMark

いかがでしたでしょうか、ブックマークはこちらからどうぞ。

このエントリーをはてなブックマークに追加

Comment/Trackback 2件

  • グレイト牧場 より:

    これは凄い。
    新Flash Player の凄さに脱帽です。

  • zzpzz より:

    objのほうが速いとのことで、私もやってみようと思い、ソースを真似させていただいたのですが、
    parseDataの段階でスタックオーバーフローを起こしてしまいました。
    ならば単純なモデルでやってみようと思い、
    http://www.hiramine.com/programming/3dmodelfileformat/objfileformat.html
    こちらの下のほうにある単純なobjファイルで試しましたが同じくオーバーフロー。

    http://asura.iaigiri.com/OpenGL/gl15.html
    こちらの一番下にあるobjは問題なく読み込めました
    何が悪いのでしょうか・・
    いずれもmtllib行は削っております

    形式が多少違うのでしょうか