vvvv MixPoseでアニメーション自由自在


これはvvvv Advent Calendar 2015 14日目の記事です。


MixPoseでアニメーション自由自在…かな?

少々盛ったタイトルを付けました(;’∀’)

以前BlenderからエクスポートしたColladaファイルをvvvvで使うというブログを書きました。
Skeleton付きのモデルを読み込めるようになったのでBlenderでアニメーションを付けて、vvvvでリアルタイムに動かすという事が出来そうです。

ポーズブレンド

例えばアクションゲームをしてみると、プレイヤーが操作するキャラクターは実に様々なアクションをします。
パンチやキック、または銃や剣を取り出す、しまう…etc
これらのアニメーションの一つひとつはアニメーターがモデリングソフトなどで動きを付けます。
しかし、いくつものアニメーションの間の動きはどうするのでしょうか?
アクションゲームなどではプレイヤーの操作手順は無数にあります。
パンチを繰り出した後、銃を取り出すかもしれない、ジャンプするかもしれない。
それらのアニメーションの間の動きは予め設定しておくことは現実的に不可能です。

そこで用いられるのがポーズブレンドという技術です。
これは例えばポーズ1とポーズ2のボーンの位置や回転などを計算し、その中間となるポーズを生成します。

vvvvではMixPoseというノードがあります。
このノードを使ってポーズブレンドが出来ないかどうか試してみました。

MixPoseを使ってみる

さて、では実際にMixPoseノードを使ってBlenderで作成した2種類のポーズをブレンドしてみます。

※1 なぜかこの記事を書いている時点での最新バージョン45beta34.2では動きませんでした。
動作確認は45beta34.1(32bit)で行っています。
※2 今回使った.daeファイルはメッシュの設定が上手くいっておらずSkeletonしか正常にロードできていません。
このサンプルではSkeletonしか使わないので上手くメッシュがロードできるする作業は割愛します。。。

サンプルはこちらに上げました。

最終的なパッチはこんな感じになりました。

mix_pose_with_collada_2015.12.14-22.34.42

作業の流れは次の様になります。

  1. Blenderでキャラクターにとらせたいポーズをいくつか作成する(今回のポーズは適当です…)
  2. ポーズごとにdaeファイルを分けてエクスポートする
  3. vvvvに各daeファイルを読み込ませる
  4. MixPoseノードを使ってポーズブレンドする

こんな感じでうまくいきそうかな、と思いきやMixPoseの部分で工夫が必要でした。
それぞれのdaeを読み込ませたSkeletonノードをそのままMixPoseノードに繋げてもポーズブレンド出来ないのです。
さて困ったぞ。。。

しかし、これはよくよく考えてみると納得できます。
ポーズブレンドするにはポーズ1とポーズ2のスケルトンは全く同じ構造をしていなければなりません。
構造が異なっているとどのボーン同士を対応させればいいのかがわからずに計算が出来ないからです。
たとえJointNameが全く同じでも異なるSkeletonノードから出力されるスケルトンは別物と判定されてしまうようです。
どうやらBase Transformで判定しているような気がします。

ということはMixPoseノードに2つのスケルトンの構成が同じだと思わせればいいので、
2つのスケルトンの基となるスケルトンを作成して、それにそれぞれのスケルトンをかけ合わせたものを入力することにしました。
下の図の部分です。
create_base_skeleton
パッチ上部にある2つのスケルトンと、CreateJointノードで作成した基となるスケルトンにそれぞれのスケルトンをかけ合わせたものが同じポーズになっていることが確認できます。

ちなみに、基となるスケルトンを作成するにあたって、CreateJointノードにはJointNameとそれらのParentNameを入力しなければなりませんが、
Jointの数が多いとかなりめんどくさいのでJointNameとそれらのParentNameを取得するプラグインを書いて使っています。
GetJointListがそれです。

そうやってちょっとトリッキーに読み込ませたスケルトンをMixPoseノードに入力してやります。
最後に、MixPoseノードから出力されるスケルトンが読み込み直後に傾けた分だけ傾いてしまっていたのでSetJointノードで調整しています。
(この部分はなんだか解せない。。。)

MixPoseノードのAmount1、Amount2を変更すればポーズ1とポーズ2の間を行ったり来たり出来るのがわかります。

録画_2015_12_14_22_37_10_551

かなり面倒な感じですがこれでvvvvでポーズブレンドに成功しました。
ちょ~頑張れば格闘ゲームとかつくれるかな?笑

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*