Mocopiで競泳モーションをつくって頑張ってUE5で使いたかった

この記事は約7分で読めます。

※ この記事は Unreal Engine (UE) Advent Calendar 2025 シリーズ2の12日目の記事になります.
(納期を落としてしまい14日投稿になっています.誠に申し訳ございません.)

この記事の内容はプールを舞台に競泳シーンを作りたいというのを,1日で何とかなるかチャレンジしてみたものです.実用度的にはネタ記事ですが,つまづいた点やこのプロセスを改善した方が良いのでは?と振り返るための備忘録になるかもしれません.

イメージ動画

用意したもの

  • Mocopi (デスクトップ版想定,またはBVH出力できる任意のモーキャプ)
  • ベッド・布団(クッション性が高く振動や防音等に強いと考えたいもの
  • インクライン・デクラインベンチ(使ってるかは置いといて在宅筋トレ用に一家に一台あるはず)
  • Unreal Engine 5.7.1(執筆時最新ランチャー版)
  • VRM4U (BVHを扱うのにも使えます.)

Mocopiとは

Mocopiは2023年の冬ごろ発売された,いわゆる慣性式モーションキャプチャです.

これまではモバイル端末の対応がメインで,PCで使うには少し調整が必要でしたが,デスクトップ対応や2セット同時利用可能化,新型ソフトウェアの発表などがあり,現在ではデスクトップでの12点トラッキングができるようになっています.

今回は新しいソフトであるXYN をつかった12点(手を重点)で撮影しました.

撮影したいモーション

水泳のゲームを作る想定で,バリエーション違いを除いたとき,泳法上で考えられる必要そうなモーションは次の通りです.

  • バタフライ(Fly)
  • 背泳ぎ(Ba)
  • 平泳ぎ(Br)
  • クロール(Fr)
  • ターン
    (Fly→Fly,Ba→Ba,Br→Br,Fr→Frの4種と個人メドレーのFly→Ba,Ba→Br,Br→Frの3種)
  • スタート(飛び込み,Baの背面スタートの2種)
  • 潜水(Fly,Ba,Br,Frのスタート・ターン後の水中動作4種)

このうち,クイックターン系の動作が入るターンに関しては自宅でのモーキャプでは難しい点が多いですが,ターンを伴わない50m種目や200mのリレーなどは自宅モーキャプだけでもなんとかなる可能性があります.

今回はバタフライと背泳ぎの種目に着目し,スタートとメインの動作をとりあえずモーションキャプチャすることを目指しました.

Mocopiでの撮影

バタフライ

ベンチを使って泳ぐ姿勢をキャプチャします.
背筋力に自信があればベンチを下り坂にして足を浮かせるとキックが撮りやすい可能性があります.

慣性式の仕組みなのか,その場で泳いでいるはずなのにかなり進んでいますが,おおむねうまく取れているようです.

背泳ぎ

こちらもベンチにあおむけになって,同じように背泳ぎのモーションを取ってあげればよいです.

ベンチを傾けて頑張ればキックも同時にとれるかもしれません.

やはり進んでしまいますが,問題ない範囲だと思います.

飛び込み

ベンチをスタート台に見立ててジャンプします.この時着地地点の衝撃に細心の注意を払います.自分の身体の負傷対策と騒音対策はしっかり行いましょう.

こんなモーションがとれました.台に乗る部分は地面に戻されてしまいますが,まあ良しとしましょう.

背泳ぎ飛び込み

ベンチを立てることで壁を作ることができます.この時座面側は引き込んだときにロックが外れてしまう方向になるので,裏面を使うと,力を入れてもベンチの座面がたたまれません.

ただ飛距離が足りないとベンチのトゲトゲに落下するのと,着地点が全く見えず背中から落下することになるので超危険かつ超怖いです.やめた方がいいです.

こんなモーションがとれました.

ところで,特に背泳ぎの方は飛距離が足りないので泳ぎのモーションとのつながりが良くなさそうです.

今回使ったXYNには,Tweenという機能があり,モーションとモーションの間が90フレーム未満であれば,補完モーションを用意してくれるという機能があります.これを使って,スタートと背泳ぎのモーションをつなげてみました.

2つのモーションの間を90フレーム未満にして,前後の位置関係をうまく調整(平面と回転,高さは非対応)すると・・・

元のモーションのスタートからぶつかるまでが早すぎたので,そもそもつなげるのがきつい条件ではありましたが,それっぽいモーションが補完されて,先ほどよりも使えそうなモーションになりました.

BVHをUEにインポートする

さて,ここからはいよいよUnrealEngineへ読み込んでいきます.

今回の想定では一応SK_MannequinベースとVRMベースのキャラクターへのリターゲットを想定していました.XYNは現時点でBVH,FBX,メッシュつきFBXの3種類の方法でエクスポートできます.

今回はなんとなくBVHを利用し,UE5にはVRM4Uでインポートすることにしました .
(UE5想定ならおそらくメッシュ付きFBXとの択)

VRM4U環境下ではBVHをインポートするとインポートダイアログが表示され,実質VRMとしてインポートすることになります.そのため,付随のアセットが同時に生成されます.

なので,2つ目のモーション以降はスケルトンを指定して,アニメーション以外のアセットはすべて削除するという運用になるかと思います.(調査不足でしたらすみません.)

↑一つ目のアセットのスケルトンを指定し,NoMeshやNoMaterialを選択すると余分なアセットが減ります.がAnim(緑のアセット)以外はインポート後消して問題なさそうです.

FBXの場合はスケルトンを指定した場合はアニメーションアセットだけのインポートも可能なので,この面だけで見るとFBXに分がありそうですが,VRM4U経由のBVHの場合はリターゲッタなどのアセットが自動生成されるので,この辺りを手動で作る手間と余剰アセットを取り除く手間のトレードオフになりそうです.

モーションがAnimインスタンスとしてインポート出来たら,あとはリターゲッタで転写すればOKです.自動で生成されたリターゲッタを使ってリターゲットしていきます.
(以前のバージョンではここでも調整が必要だったのですが,現在の環境だと特に調整不要の様です.MocopiからのBVHが破綻してしまう場合は,とりあえず環境を最新に上げれば問題ないかもしれません.)

自作のVRMキャラクターにも同様にリターゲットするのですが,この時に,足がねじれたりする場合は,左側に表示されているRetargetオプションのRun IK Rigを切るとうまくいくことが多いです.この項目はUE5.6以降で追加された内容ですが,UE5.5よりも細かくリターゲットの方法を制御できるようになっているようです.

Onの時は膝が逆方向に曲がってしまっていますが,Offにすると改善されています.また,ソースボーンをBVH由来のではなく,SK_Mannequinに転写したものを使った方がキレイになることもあるようです.

これで,SK_Mannequinベースのスケルトンにも,VRoidベースのスケルトンにも撮影したモーションを反映させることができました.


最後に,これらをプールに並べてあげれば,
なんとかそれっぽくは見えるようになっているので,目標達成です.

冒頭の動画です.

飛距離などは一応ざっくりシーケンスキーで調整しましたが,Z軸の調整が難しい・・・

余談

こちらのモーションは第24回ぷちコン「スピード」で使用するために撮影されましたが,当時は更新されたリターゲッタの設定がわからなかったのと,プラグインが未対応な部分があったため,応募作品には一切使われませんでした.

コメント

タイトルとURLをコピーしました