暮井 慧(プロ生ちゃん)モデルを例に、拙作 KiruroboMocapPlugin をリアルタイムモーションキャプチャに使う手順を解説します。
目次
- 1. はじめに
- 2. プロ生ちゃんをインポート
- 3. プラグインの導入
- 4. プラグインの利用
- 5. ボーンの対応付け
- 6. モーションキャプチャソフトの送信設定
- 7. 動作確認
- 8. 基本姿勢(基本動作)の設定
1. はじめに
この記事は、Perception Neuron または MVN によるモーションキャプチャを受信するKiruroboMocapPlugin のチュートリアルとして書いたものです。
元々内輪で使うために作ったプラグインであり、仕様がころっと変わる可能性も高いですが、もし使ってみる方がいればご意見いただけるとありがたいです。
Perception Neuron に関しては Cyx さんの TP_ThirdPersonNeuron がいずれ公式になりそうで将来性がある気がします。
こちらはMVNを使いたかったのと、学生がすぐに使えるように導入が簡単になることを狙っています。
この記事における検証環境
- Unreal Engine 4.9.2
- KiruroboMocapPlugin 1.0.1
- 暮井 慧(プロ生ちゃん) MMD/Unity/FBX 公式データ バージョン 11
- Axis Neuron 3.5.19.1225
- MVN Studio 2.6
2. プロ生ちゃんをインポート
既にUE4のプロジェクトは作成済みとします。
3. プラグインの導入
KiruroboMocapPlugin の Releases ページ にファイル一式があります
(KiruroboMocapPlugin-UE4.9.2-Win64.zip などがプラグインです。Source code (zip) というものはサンプルプロジェクト全体です。)
お使いの UE4 バージョンにあったファイルがあれば、ビルド済です。
そうでなければどれを選んでも同じです。手元の環境でビルドする必要があります。
圧縮ファイルを展開した中に Plugins というフォルダがあります。
その後、プロジェクトを開きます。
バージョンが異なるなどでビルドが求められた場合は、ビルドをしてください。
ビルドのためにはプロジェクトにC++のファイルを含める必要がありそうです。
参考 UnrealEngine4で2Dゲームを作ろう! その12 プラグインをソースからビルドする
起動したら、「編集」→「Plugins」で表示されるプラグイン一覧の最下部にて確認できるはずです。
4. プラグインの利用
以上でプラグインが有効になったものとします。
そこから利用する手順は、モデルに合わせた設定を除けば、最短2ステップです。
4.1. GameInstance の置き換え
プロジェクトのゲームインスタンスを MocapGameInstance にします。
手順は下記のようになります。
「編集」→「プロジェクト設定」を選択。
出てきたプロジェクトの設定画面の左側で「マップ&モード」を選ぶ。
ここのゲームインスタンスを「MocapGameInstance」を選択します。
選択したらプロジェクトの設定は閉じて結構です。
この MocapGameInstance では、起動時に自動的にモーキャプソフトへの接続が開始されます。
4.2. アニメーションブループリントの作成
MocapPluginAnimInstance を親とするアニメーションブループリントを作成します。
プロ生ちゃんモデルから生成する手順を説明します。
プロ生ちゃんのスケルタルメッシュを右クリックし、「作成する」→「Anim ブループリント」を選択します。
プロ生ちゃんのスケルトンに基づくアニメーションブループリントが作られます。
名前は Pronama-chan_BP などとつけておきます。
そのアニメーションブループリントをダブルクリックして開きます。
ここで MocapPluginAnimInstance を選択して下さい。
以上で、MocapPluginAnimInstance を親としたアニメーションブループリントにすることで、接続されたモーキャプの姿勢を反映するようになります。
すでにプロ生ちゃんのスケルタルメッシュなどがレベルに追加されている場合(ビューポートに表示されている場合)はいったんレベルから削除して、ここで作ったアニメーションブループリントを改めてビューポートにドラッグしてください。
5. ボーンの対応付け
ブルーマンやグレーマンと同じボーン名ならもう動かせるのですが、プロ生ちゃんなど元々UE4専用でないモデルは、申し訳ないですがこの後が面倒です。
先ほど開いたアニメーションブループリントで上の方の「スケルトン」と書いてある部分をクリックします。
するとスケルトン編集モードに切り替わります。
5.1. プロ生ちゃんの場合
ここで左にモデルのボーン名がありますので、それを参照しつつ右にある Bone Map を編集します。
ですが、ボーンが70個分あり、全部書くのも大変なのでこちらに用意しました。
プロ生ちゃん BoneMap (テキストファイル)
テキストファイルの中をすべてコピーしたあと、「Bone Map」という文字の上で右クリックして貼り付けます。
5.2. 自分で編集する場合
まず Bone Map と書かれたところを右クリックして「すべて展開」すると見やすいです。
- Bone … モデルのボーン名(大文字小文字はどちらでもOK)
- Mocap Bone … 本プラグインでのボーン名
という2つの項目がありますので、ルートから順に記述をお願いします。
特に背骨部分などでモデルのボーンがプラグインのボーンより少ない場合、省略せず同じボーン名で割り当てる必要があります。用意した例では、プロ生ちゃんの upper_body に対し Spine01、Spine01L3 の2つが割り当てられています。
なぜかというと、それぞれのボーンは親に対する相対姿勢を持たせているためです。省略するとそのボーンの姿勢が抜けるため、それ以降の子ボーンの姿勢が変わってしまいます。
モデルのボーンの方が多い場合なら、省略をしてかまいません。そのボーンは動かないことになります。
あるいは手首より先は動かさない場合など、先(子)の姿勢はもう使わない、ということならばばっさり省略して問題ありません。
6. モーションキャプチャソフトの送信設定
さて、一応UE4で受信する準備はできたので送信側の設定をします。
6.1. Perception Neuron のソフト「Axis Neuron」
Perception Neuron のソフトである Axis Neuron はこちらから無料版がダウンロードできます。
サンプルデータもあるので、実機がなくても試せます。
※注意 今のところ Axis Neuron バージョン 3.5.24 では UDP で送信する際に同じPCでは受信できない不具合があるようです。
UE4を動かすPCと、Axis Neuron を動かすPCを別々に用意すれば動作します。
設定画面を出します。
Broadcasting の設定で、UDPを選択する。
その下で送信先(UE4を動かすPCの)IPアドレスを入れておく。
BVHにチェックを入れ、ポートは7001としておく。
Output Format の設定では、Block type は Binary として Rotation はYXZ にしておく。
Displacement と Reference はチェックがあっても現バージョンのプラグインでは無視されます。
6.2. MVN のソフト「MVN Studio」
この説明では MVN Studio 2.6 ですが、その後のバージョンでもおそらく基本は同様です。
Network Streamer を Enable にします。
Protocol and data set は Quaternion-based orientation とします。
Destination addresses で、送信先PCのIPアドレスに続けて:7001 とします。
7. 動作確認
ではUE4でプレイして、モーションを再生してみます。
ここまでで動くはずですが、プロ生ちゃんの基本姿勢が両手を斜めに降ろしたAスタンスなのに対して、NeuronやMVNは腕を横に伸ばしたTスタンスが基準であるため、腕の姿勢がおかしいです。
8. 基本姿勢(基本動作)の設定
もうちょっとスマートな方法がありそうですが、私のとった手順を説明します。
あるいはアニメーションブループリントを開いていた場合は上の「Preview」を解除した状態にしてください。
(アニメーションブループリントを開いた際はプレビュー状態になっています。それだと編集できません。)
開いたウィンドウで、両肩や両上腕を回転させ、Tスタンスにします。
「Record」ボタンを押し、アニメーションとして記録させます。
保存先を聞かれるので Pronama-chan_TPose といった名前にしました。
名前を入れると録画が開始されます。
短時間で良いのですぐ停止します。
その後にアニメーションブループリントのアニムグラフを表示させます。
アセットブラウザを見ると先ほど保存したアニメーションがあるので、アニムグラフにドロップして、最終アニメーションポーズに繋げます。
これでプレイすると、Tスタンスを基準とした動きとなり、おおよそモーションが正常に表示されるはずです。
(厳密にはやっぱりモーションとモデルが合わないと差は生じてしまいます。)
なお単にTスタンスをとっているだけのアニメーションでなく、まばたきを含むようなアニメーションであればなお良いかと思います。