CLOSE OPEN

ENT TECH LAB.

TAGSTAGS

Flashの3D表現


Flash Player 11 、Away3Dによる3D表現について

Away3D

Away3D 4.0が近々リリースされるようです。パッケージ内もそろそろ固まったかな、ということで試してみることにしました。
prefab3D 2も最近リリースされたので、それも合わせて確認してみます。

※当記事を試すにはFlash Player 11 以降が必要です

prefab3D 2

prefab3D は3Dアプリケーション等で作成したメッシュやテクスチャを読み込んで、マテリアルを整えてくれたりするAIR アプリです。Away3D 4.0 、Flash Player 11 に対応しています。
fig01.jpg
Ver1に比べ機能はまだまだのようですが、マテリアル設定、クラス書き出し等prefabとしての機能は整っています。
ここでは詳しい解説は省きますが、基本的な流れはメッシュを読み込んでマテリアルを設定、ActionScript(以下AS)のクラスとして書き出します。尚、これを使いこなすにはAway3D 4.0に精通してないとなにがなにやらでしょうね。

メッシュを読み込んで
fig02.jpg
テクスチャを読み込んでメッシュに適用
fig03.jpg
ライトを追加してスぺキュラ等マテリアルを調整
fig04.jpg
ASのクラスに書き出します。
fig05.jpg

「Export AS3 class」にてデフォルトで書き出すと、

上記のように必要なものをまとめてくれます。

ドキュメントクラスを若干作り込んで、マテリアル等微調整したものが下記です
↓クリックでFlashを再生
fig06.jpg

昔作った空想戦車です。ノーマルマップを使用しています。
シャドウマップの生成時にガクついてますが(それにチラチラしてる)、60FPS近いフレームレートが出ています。Flash Player 10 (ソフトウェアレンダ)の時に同じものを試した時はひと桁のFPSでした。
ローレベルのAPIを叩かない派としてはありがたい限り。

Away Physics

Away3Dについてもうひとつ試してみます。
Away Physics は Away3D から簡単に利用できる物理演算ライブラリで、エンジンは有名なBullet。BulletはC++で書かれてますが、Alchemyポートですね。

下はサンプルコードを元に作ったデモです。
↓クリックでFlashを再生(表示まで少し時間がかかります) fig07.jpg

多少重たいですが、動的なリジットボディをこれだけ置ければ使えるのではないでしょうか。
尚、Box2Dのようにリジットボディをドラッグするものが見つけられなかったので、適当に実装してみました(どこかにあるのかな)。
具体的には、2Dであるスクリーン座標を3D座標へ逆投影して、コンストレインAWPPoint2PointConstraintでコントローラと繋げたり切ったりしています。

下はコードの一部で、スクリーン座標から3D座標を得る部分です。

メッシュのMouseEvent3DをListenすれば、クリックした地点のスクリーン座標とグローバル3D座標が得られるので、グローバル3D座標のZ座標を元に計算しています。

尚、Away Physics のデモの中には車のデモや、レイとコリジョンの衝突検出なんかもあります。レースゲームやFPSがすぐ作れそうですね。

また、デバッグプレイヤーを使用されてる方は気付いたかもしれませんが、例の「Flash Player プレミアム」が発動していますね。
fig08.jpg
Alchemyでドメインメモリを使用している為のようです。Flash Player プレミアムなんて遠い存在のように感じてましたが、以外と近くにいたようです。まあ、儲けなければいいわけですが、ライセンス契約をしていない場合は今年の8月以降、強制ソフトウェアレンダになるようですので注意です。

2013.2.1追記:Flashランタイムロードマップによりますと、現在、ドメインメモリ&Stage3Dの組み合わせではプレミアムは発動しないようです。

ソース、バイナリを置いておきます。
prefab3DTest.zip
ConstraintTest.zip

関連記事
BACK TO TOP