MixPoseでアニメーション自由自在...かな?少々盛ったタイトルを付けました(;’∀’)以前BlenderからエクスポートしたColladaファイルをvvvvで使うというブログを書きました。Skeleton付きのモデルを読み込めるようになったのでBlenderでアニメーションを付けて、vvvvでリアルタイムに動かすという事が出来そうです。ポーズブレンド例えばアクションゲームをしてみると、プレイヤーが操作するキャラクターは実に様々なアクションをします。パンチやキック、または銃や剣を取り出す、しまう...etcこれらのアニメーションの一つひとつはアニメーターがモデリングソフトなどで動きを付けます。いくつものアニメーションの間の動きはどうするのでしょうか?アクションゲームなどではプレイヤーの操作手順は無数にあります。パンチを繰り出した後、銃を取り出すかもしれない、ジャンプするかもしれない。それらのアニメーションの間の動きは予め設定しておくことは現実的に不可能です。そこで用いられるのがポーズブレンドという技術です。これは例えばポーズ1とポーズ2のボーンの位置や回転などを計算し、その中間となるポーズを生成します。vvvvではMixPoseというノードがあります。このノードを使ってポーズブレンドが出来ないかどうか試してみました。MixPoseを使ってみるさて、では実際にMixPoseノードを使ってBlenderで作成した2種類のポーズをブレンドしてみます。この記事を書いている時点での最新バージョン45beta34.2では動きませんでした。動作確認は45beta34.1(32bit)で行っています。今回使った.daeファイルはメッシュの設定が上手くいっておらずSkeletonしか正常にロードできていません。このサンプルではSkeletonしか使わないので上手くメッシュがロードできるする作業は割愛します。サンプルはこちらに上げました。最終的なパッチはこんな感じになりました。作業の流れは次の様になります。Blenderでキャラクターにとらせたいポーズをいくつか作成する(今回のポーズは適当です...)ポーズごとにdaeファイルを分けてエクスポートするvvvvに各daeファイルを読み込ませるMixPoseノードを使ってポーズブレンドするこんな感じでうまくいきそうかな、と思いきやMixPoseの部分で工夫が必要でした。それぞれのdaeを読み込ませたSkeletonノードをそのままMixPoseノードに繋げてもポーズブレンド出来ないのです。これはよくよく考えてみると納得できます。ポーズブレンドするにはポーズ1とポーズ2のスケルトンは全く同じ構造をしていなければなりません。構造が異なっているとどのボーン同士を対応させればいいのかがわからずに計算が出来ないからです。JointNameが全く同じでも異なるSkeletonノードから出力されるスケルトンは別物と判定されてしまうようです。Transformで判定しているような気がします。いうことはMixPoseノードに2つのスケルトンの構成が同じだと思わせればいいので、2つのスケルトンの基となるスケルトンを作成して、それにそれぞれのスケルトンをかけ合わせたものを入力することにしました。パッチ上部にある2つのスケルトンと、CreateJointノードで作成した基となるスケルトンにそれぞれのスケルトンをかけ合わせたものが同じポーズになっていることが確認できます。ちなみに、基となるスケルトンを作成するにあたって、CreateJointノードにはJointNameとそれらのParentNameを入力しなければなりませんが、Jointの数が多いとかなりめんどくさいのでJointNameとそれらのParentNameを取得するプラグインを書いて使っています。GetJointListがそれです。やってちょっとトリッキーに読み込ませたスケルトンをMixPoseノードに入力してやります。最後に、MixPoseノードから出力されるスケルトンが読み込み直後に傾けた分だけ傾いてしまっていたのでSetJointノードで調整しています。(この部分はなんだか解せない。)MixPoseノードのAmount1、Amount2を変更すればポーズ1とポーズ2の間を行ったり来たり出来るのがわかります。面倒な感じですがこれでvvvvでポーズブレンドに成功しました。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。Blogは、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。SiteOrigin。