モーションキャプチャデバイスのmocopiを入手したので、いろいろ調べながらUE5で動かす方法がわかってきたので覚え書きとして残しておこうと思います。
今回は、VRM形式のモデルを使いつつ、VMCプロトコルは使用しないパターンの方法です。
※環境はWindows11で、Unreal Engine のバージョンは5.1.1使用しております。
プラグインの導入
まずは、UE5のプロジェクトを用意して、以下のプラグインを導入します。
Plugins フォルダの作成
用意したUE5プロジェクトのフォルダを開き、直下に「Plugins」フォルダを作成します。
mocopi Receiver Plugin の導入
以下のリンクから、「mocopi Receiver Plugin for Unreal Engine」をダウンロードします。
ダウンロードしたフォルダの中にある、「MocopiLiveLink_1.x.x_UE5.X」(Xは使用してるバージョンに適したもの)を開き、「MocopiLiveLink」をコピーして、上記で作成した「Plugins」フォルダの中にペーストします。
VRM4U の導入
VRMファイルを使うために、以下のリンクを参考にVRM4Uを導入します。
mocopiの送受信
mocopiからUnreal Engineへデータを送受信するまでの準備をします。
PCのIPアドレスの確認
Windowsの場合は「コマンドプロンプト」を開き「ipconfig」を実行して「IPv4 アドレス」を確認します。(例、192.168.0.21)
※わかる人は、固定のIPアドレスを設定しておくと毎回確認する手間が省けます。
mocopiにIPアドレスを設定
スマホで「mocopi」アプリを開き、mocopiを準備した後、画面右上の「・」が縦に3つ並んでるボタン→「設定」→「外部機器との接続設定」を開き、以下を設定して「OK」を押します。
- 送信フォーマット:mocopi (UDP)
- IPアドレス:上記で確認した「IPv4 アドレス」
- 送信ポート設定:12351
mocopiから送信
モデルの表示画面に戻ったら、画面上部の「モーション」ボタンを押して、その下の「送信/保存」を「送信」に切り替えて、画面下部の緑の「送信ボタン」を押して、送信状態にします。
UE5のLiveLinkで受信
UE5のプロジェクトを開き、メニューの「ウィンドウ→バーチャル プロダクション→Live Link」を開きます。
「Live Link」ウィンドウが開くので「+ソース」を押し「MocopiLiveLink」から以下を設定して「Mocopi LiveLinkソースを作成」を押します。
- ポート番号:12351
- サブジェクト名:MocopiSkeleton
モデルの設定
Unreal Engine 上で、受信したデータからアクターを動かせるようになるまで設定します。
VRMモデルをインポートして、「IKリターゲッタ」「アニメーションブループリント」「ブループリント」を作成して設定していきます。
VRMモデルのインポート
任意のフォルダに「VRM」形式のモデルをインポート(ファイルをコンテンツドロワー上にドラッグ&ドロップ)します。
「VRM Import Options」が出るので、基本はそのまま「Import」を押します。(必要に応じて、「Material Type」などを変更してください。)
モデルに関する沢山のアセットが追加されます。
※詳しいモデルの設定は、VRM4Uのサイトを確認して設定します。ここでは省きます。
IKリターゲッタの作成
モデルのフォルダを開き、コンテンツドロワー上で右クリックし、「アニメーション→IK リグ→IKリターゲッタ」を選択します。
「元のIKリグ」を選択するウィンドウが出るので、「IK_Mocopi」を選びます。
任意の名前を付けます。ここでは「RTG_Mocopi_(モデル名)」とします。
IKリターゲッタの設定
作成したIKリターゲッタを開きます。
詳細の「Target IKRig Asset」に「IK_(モデル名)_Mannequin」(モデルをインポートした際に作成されたIKリグ)を設定します。(「Source IKRig Asset」には「IK_Mocopi」が入ります。)
チェーンマッピングで指に関係するソースチェーンを「None」にします。(mocopiには指の設定がないため。)
モデルが被ってて見にくい場合は、必要に応じて「Target Mesh Offset」を設定します。(僕は、Xを180くらいに設定してます。)
アニメーションブループリントの作成
コンテンツドロワー上で右クリックし、「アニメーション→アニメーションブループリント」を選択します。
出てきたウィンドウで、「SKEL_(モデル名)」(インポートしたモデルのスケルトン)を選択して「作成」を押します。
任意の名前を付けます。ここでは「ABP_(モデル名)」とします。
アニメーションブループリントの設定
作成したアニメーションブループリントを開きます。
「AnimGraph」タブのグラフ上で「メッシュからポーズをリターゲット(Retarget Pose From Mesh)」ノードを設置します。
ノードを選択して詳細から「IKRetargeter Asset」に、先ほど作成したIKリターゲッタ「RTG_Mocopi_(モデル名)」を設定します。
VRMモデルに揺れるボーンがある場合は、「VRMSpringBone」も追加して、ノードの詳細の「Vrm Meta Object」に「VM_(モデル名)_VrmMeta」を追加します。
ノードをつないで、左上の「コンパイル」ボタンを押します。
ブループリントの作成
コンテンツドロワー上で右クリックし、「ブループリント クラス」を選択します。
今回は親クラスに「Actor」を選択します。
任意の名前を付けます。ここでは「BP_(モデル名)」とします。
ブループリントの設定
作成したブループリントを開きます。
コンポーネントの「+追加」ボタンを押して、以下の3つのコンポーネントを追加します。
- SkeletalMesh:名前を「SourceMesh」にする。
- SkeletalMesh:名前を「TargetMesh」にする。
- Live Link Skeletal Animation:名前を「LiveLink」にする。
そして、「TargetMesh」を「SourceMesh」にドラッグ&ドロップして、親子関係になるようにします。
「SourceMesh」を選択して、詳細から以下を設定します。
- Anim Class:ABP_Mocopi
- Skeletal Mesh Asset:MocopiMannequin
- Visible:オフ(非表示)
「TargetMesh」を選択して、詳細から以下を設定します。
- Anim Class:先に作成したアニメーションブループリント「ABP_(モデル名)」
- Skeletal Mesh Asset:インポートしたモデル「SK_(モデル名)」
最後に左上の「コンパイル」ボタンを押します。
モデルを動かす
作成したブループリントを、レベル上に配置(ドラッグ&ドロップ)して、mocopiとデータを送受信すると、モデルが動きます。
動きを録画したい場合
メニューの「ウィンドウ→シネマティクス→Take Recorder」を開きます。(ない場合はプラグインから「Take Recorer」を有効化します。)
「+ソース」を押し「フレームアクター」から配置したブループリントを選択して、録画ボタン(赤い丸ボタン)を押すと撮影できます。
詳しくは「Take Recorder」や「シーケンサー」で調べてみてください。
余談
いろいろ調べながら思った事を書きます。
VMCを使わなかった理由
UE5とmocopiでVRMモデルを動かす方法に、VMCを使う方法もあります。(こちらの方がメジャーだと思います。)
VMCを使う方法だと、さまざまな便利機能が使えるのですが、VMCを受信するためのプラグインがしばらく更新されていなかったので、今回別な方法を試してみました。
フェイストラッキング
顔のトラッキングは「Live Link Face」(iPhoneアプリ)が使えるみたいです。
パーフェクトシンク(Apple ARKit対応の52種のシェイプキーが付いたリアルな顔の動きができるもの)対応のモデルが必要なので、ちょっとモデルを自作するには敷居は高め。
でも、「VRoid Studio」で制作したモデルを「HANA_APP」でパーフェクトシンク化したら手軽に動かせるのは確認してます。
リップシンクで顔を動かす方法は調べ中。
ハンドトラッキング
こちらも今調べ中です。
「ContactGlove」がmocopiとコラボしてたのでちょっと気になりつつ、まだお金たまるまで時間がかかりそうです。ほしい!!
コメント
自分も似たようなところを調べていたところ、知りたいポイントが明確に書いてあってとても参考になりました!
ありがとうございます!
お役に立てたみたいで、とても嬉しいです!