[PV3D2.1] Papervision3D 2.1 animation classes
daeAnimation(要:FlashPlayer9)
[↑] … 前進(move forward)
[←] [→] … 方向変える(turn left/right)
Papervision2.1 Alpha 公開で、鬼門だったDAE周りが改善されたということで使ってみた。
http://techblog.floorplanner.com/2009/05/26/papervision3d-21-alpha/
BlenderでArmature使ったスキンメッシュをColladaでエクスポートしたものがようやく動くようになった。3dsMAXとかMaya使わない限り不可能かと思ってたけど、どうにか使えそう。Away3Dでもなんとか動いてたけど、ボーンのモーションにtranslateが含まれてると破綻したりして不完全な感じだったのが、PV3D2.1のほうが格段にマトモだ。
上のデモは、KYUCON*BLOGさんで紹介されているAnimationClip3Dを使う方法で静止状態と、歩行中のアニメーションを切り替えて再生してる。スタート・エンドポイントの指定がフレーム単位でもできればいいのになぁ…なんか歩行モーションのループ部分がぎこちない。Blender上だと綺麗につながるんだけどな。
Colladaの仕様的には、animationChannelを定義できるはずなので、Blenderでアニメーションセットを複数定義した上で正常に書き出しができればもっと楽ができそうな、ほのかで甘酸っぱい期待を持ったんだけど、Blenderで複数のアニメーションセットを定義する方法がわかんなくて一旦保留。
こうなってくると、アニメーション切り替え時にモーションブレンドしたい。それは自前で実装するしかねーだろうなー。
関連する投稿
Trackback URL : http://blog.r3c7.net/wp-trackback.php?p=390

こんにちはを修正、これはクールなデモです。普段使用してAway3dが1年以上前PV3d試みた。 Zsortかかわらず、多くの問題がまだあります。 Away3dとPV3dと比較してどのようにお考えZsortされています。ちょっと思ったされて以来、多くの最近のテストの両方で作成している
おかげで非常に役立つ、ブログです!
イアンストークス
こちらの環境では、Flash CS4からFlashPlayer9に書き出すとアニメーションが動作するのですが、Flash CS3から書き出したswfはアニメーションしません。
もちろんPapervision3D2.1を使っています。
CS3ではどうですか?
> ian stokes
Hi ian,
thanks for your japanese comment.
I am glad of your kindness.
It’s all right even with English comment
> たけしさん
申し訳ないのですが、Flash3D関連のデモは全てFlex3SDKで作成しているので
FlashCS3でどうなるかはわからないです。
こんにちは。
BlenderのDAEエクスポータは今のところ複数アニメーションの書き出しに対応していないので、
一つのアニメーションクリップにまとめて、切り出す(KYUCONさんのやり方)しか今のところないようです。
GSoC2009でCollada関連の改良が入る予定があるようなので、そこでなんとかなるかも知れません。
> nanmoさん
情報ありがとうございます!
あのあと、自分でも試してみてカレントのアクションしか
書き出されないのを確認しました。自分のやり方がまずかったのかと
思ってたんですが、これであきらめがつきますw
GSoC2009のBlender関連のプロジェクトは楽しみですねー。
貴重な情報提供ありがとうございます。
Blenderで作成したアニメーションが、ようやくPV3Dで動くようになりましたので、貴情報を元に切り替えアニメをトライしていますが、一向にうまく行きません。
下記は、動作しているプログラムの一部ですが、これのどこにAnimationClip3Dを使った切り分けをどう入れたら良いのか、行き詰っております。
公開いただいているデモサンプルで該当する部分を教えていただくのでも結構ですので、お助けください。
public class PV3DTest extends BasicView
{
private mesh:DAE;
[Embed(source = "filename.dae", mimeType = "application/octet-stream")]
private var meshAsset:Class;
public function PV3DTest
{
//materialsListの準備(省略)
mesh = new DAE(true, null, true);
mesh.load(new meshAsset(), materialsList);
scene.addChild( mesh );
startRendering();
}
}
自己解決しました。
下記のように、イベントリスナーの処理を加えることで切り替えが可能になりました。
お騒がせ致しました。
public class PV3DTest extends BasicView
{
private mesh:DAE;
[Embed(source = "filename.dae", mimeType = "application/octet-stream")]
private var meshAsset:Class;
public function PV3DTest
{
//materialsListの準備(省略)
mesh = new DAE(true, null, true);
mesh.addEventListener(FileLoadEvent.LOAD_COMPLETE, onDaeComplete);
mesh.addEventListener(FileLoadEvent.LOAD_PROGRESS, onDaeLoadProgress);
mesh.load(new meshAsset(), materialsList);
scene.addChild( mesh );
startRendering();
}
private function onDaeComplete(event : FileLoadEvent) : void
{
var dae : DAE = event.target as DAE;
var anim1:AnimationClip3D = new AnimationClip3D(“anim1″, 0, 1);
var anim2:AnimationClip3D = new AnimationClip3D(“anim2″, 1, 2);
dae.animation.addClip(anim1);
dae.animation.addClip(anim2);
scene.addChild( dae );
dae.play(“anim1″); //又はdae.play(“anim2″);
}
private function onDaeLoadProgress(event : FileLoadEvent) : void
{
}
}
[...] DAE http://blog.r3c7.net/?p=390 [...]
[...] http://blog.r3c7.net/?p=390 [...]