本ページにはプロモーションが含まれます
UnityVRMVRoid

【Unity】VRMのポーズをキャプチャしてAnimationClipを作る

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

はじめに

キャプチャデバイスからリアルタイムにUnity上のVRMにトラッキングモーションを反映させてAnimationClipに出力することができるらしい。
WEB検索すればかなり以前よりやり方を見つけることができる。作りたいゲームで使えそうなので動作確認したときのメモ。

実践

1・VROIDなどでモデルをVRM1.0で書き出す。
2・キャプチャデバイスの代わりにVMCプロトコル送受信できるVrmPosingDesktop(有料)でモデルを読み込ませておく。
3・UnityでEasyVirtualMotionCaptureForUnityEasyMotionRecorderのパッケージを読み込ませておく。
4・Unityで先程のVRMモデルを展開しておく。

5・ExternalReceiverにアサインして、VrmPosingDesktopからのキャプチャが受信できていることを確認(↑)。
6・EasyMotionRecorderの使い方は割愛するが、キャプチャを録画するときにGame側画面のモデルを選択してからショートカットで録画開始などしないと動かないので、しばらく迷った(メモ)。
7・記録されたモーションは、右クリップでAnimationClipに出力できるのでAnimationControllerやUnityTimelineで扱うことができる(メモ)。
8・キャラクターが沈んでしまう場合はAnimationClipにあるRoot Transform Position(Y)をBased Upon:Originalに変更(メモ)。

AnimationClipをTimelineにドラッグしてアニメーションを再現できた。便利。
なんか目の追従がおかしい・・・再生時にExternalReceiverを非アクティブにしたら直った。正確にはExternalReceiver目のボーンを同期しないにチェック入れれば解決(メモ)

おわりに

これでUnityでVrmを使ったちょっとしたアニメーション制作やゲームモーション付けが楽になりそう。
TDPTを使えばカメラでキャプチャとリアルタイムや動画からキャプチャ反映ができるようなので、次回はこれも試していきたい。

EasyVirtualMotionCaptureForUnity導入時はUniVRM入れると、アセンブリなど重複やUniGLTFが参照できなかったりするので、EasyVirtualMotionCaptureForUnityのみのキャプチャ専用のプロジェクトとしてAnimationClipを量産や編集に使うとよいと思います(メモ)。

まえもどこかで書いたかもだけど、VRMがカメラの特定の範囲から外れるとBlendShapeなどのモデルが非表示になる場合がある。その場合対象のオブジェクト(Faceなど)のUpdate When Offscreenのチェックをオンにすれば消えることはない。逆にずっと描画しているのでカメラ外でも描画コストにつながるので、スクリプトでカメラ外(完全に見えない状態)に出たらオフにするなど管理をすればよいのかな?

  • 【Unity】C#で始める「ドメイン駆動設計(DDD)」入門

    【Unity】C#で始める「ドメイン駆動設計(DDD)」入門

    カテゴリー

  • 【Unity】Projectビューのフォルダに個別に色を付ける

    【Unity】Projectビューのフォルダに個別に色を付ける

    カテゴリー

  • 【Docker】はじめてのDocker

    【Docker】はじめてのDocker

    カテゴリー

  • 【WordPress】拡張機能をEULA(商用)で提供する考察

    【WordPress】拡張機能をEULA(商用)で提供する考察

    カテゴリー

  • 【Unity】UniTaskとは

    【Unity】UniTaskとは

    カテゴリー

  • 【VMware】Ubuntu 仮想マシンでディスク容量を拡張する方法

    【VMware】Ubuntu 仮想マシンでディスク容量を拡張する方法

    カテゴリー