こんにちは!!
ケーキです♪♪
皆さま、バーチャルモーションキャプチャー(VMC)というアプリをご存じでしょうか?
このアプリケーションはVR機器を使ってVRM形式の3Dモデルを制御することができます。
このVMCアプリを別VRゲームと同時起動することで、VRゲームの実況プレイ動画を自身の動きを見せながら行うことができます。(所謂Vtuberみたいな)
で、今回やりたいことは上のようなVtuber関係とかではないのですが、
自分の身体でポーズを取り、VMCを介してVRChatで使えるモーションエモートを作ってみよう!!という記事になります!!
目次
準備するもの
ではまずは必要なものを準備していきましょう。
Virtual Motion Capture
先ほども紹介しましたが、”sh_akira”さんが開発・公開しているVR機器の動きでVRMモデルを動かすアプリケーションです。
※使用時に注意点があり、アプリケーションのverがv0.36以降でないと外部送信ができないためこの後に紹介するEVMC4Uとの連動ができないです。
ver0.36以降のダウンロードは支援者限定先行配信版という形でPIXIV FANBOXから支援することでダウンロードができるようになっております。
“sh_akira” – PIXIV FANBOX
Easy Virtual Motion Capture For Unity
こちらは”gpsnmeajp”さんにより開発・公開されているUnityのスクリプト群になります。
上記で紹介したVirtualMotionCaptureから送信されたモーション情報などを受信し、Unity上にモーションの反映などを行うことができます。
ダウンロードは以下からしましょう。(他に必要なUniVRMやuOSCが一緒に同梱されたもの)
ExternalReceiverPack_v3_0
Easy Motion Recorder
こちらはUnityエディタ上でVRIKなどのモーションキャプチャをしたHumanoidキャラクターのモーションを記録, 再生をするスクリプトになります。
“株式会社ZIZAI”様により公開されております。
VRMアバターモデル
VMCとEVMC4Uを入れたUnity上で必要となります。
同じボーン位置のVRMモデルを読み込むようにしてください。
VRChatで使用しているアバターモデルのVRMを用意しておくとよいです。
VRMの作り方↓↓↓
【Unity】FBXアバターをVRMへ変換する方法のご紹介!
作業編
ここからは上記で紹介してきたものを使ってモーションエモートを作っていきます。
どんな風にやっていくかを簡単に図にまとめるとこんな感じになります↓↓↓
Unity環境の準備
ではまずUnityの環境を構築していきます。(本記事でのUnity verは2017.4.28f1です。)
Unityにて新規でプロジェクトを作成しましょう。
プロジェクトを作成した後は、準備編でダウンロードした”ExternalReceiverPack”と”EasyMotionRecorder”をインポート。
インポート後にできたVRMフォルダに用意したVRMモデルをドラッグ&ドロップしてUnityに入れておきましょう。
次にインポート時にできたAssetsフォルダ内にある”ExternalReceiver.unity”をダブルクリックしてSceneを開きます。
Sceneを開いたら先ほどVRMを入れた際にできる”VRMモデル名.prefab”と”EasyMotionRecorder.prefab”をHierarchyにドラッグ&ドロップする。
(EasyMotionRecorder.prefab → EasyMotionRecorder/Prefabsのフォルダに入ってます。)
Hierarchyに必要なものを揃えたら、各オブジェクトのInspectorにモデルを設定していきます。
Hierarchyの”ExternalReceiver”を選択しInspectorからModelの項目にHierarcyにあるVRMモデルをセット(ドラッグ&ドロップ)します。
次にHirarchyの”EasyMotionRecorder”を選択しInspectorからAnimatorの項目2つにVRMモデルをセットします。
ここまででUnityの準備はOKです。
次にVMC(バーチャルモーションキャプチャー)の設定をしていきましょう。
VMCの準備
Unityの準備が終わったら次にバーチャルモーションキャプチャーの準備・設定をしていきます。
まずはダウンロードしたver0.36以降のVMCを起動しましょう。
起動すると水色のウィンドウとコントロールパネルが開きます。
開きましたらコントロールパネルから”VRM読込”を押し、新しく開いたウィンドウで”VRM読み込み”を押し作成したVRMモデルを開きます。(VRoid Hubで用意している方はもう一つのボタンから)
VRMが読み込まれたら情報に問題ないことを確認し”同意して読み込み”を押す。
開かれると水色のウィンドウにVRMモデルが表示されます。
ここまで来たらVMC側でキャリブレーションをしていきます。
VMCを起動した時に同時にSteamVRも起動されていると思います。(していなかったら起動しておいてください)
SteamVRでキャリブレーションに必要なHMDやコントローラーがトラッキングされていることを確認します。
VMCのコントロールパネルから”キャリブレーション”を押します。
キャブレーション用のウィンドウが開きVRMモデルが映っているウィンドウにVR機器に対応した白い球体が出てきます。
この状態でVRMモデルと同じポーズを取り”コントローラのトリガー”もしくはウィンドウの”キャリブレーション”ボタンを押すことで5秒後にキャリブレーションを実行します。
キャリブレーションが完了すると自分の身体の動きに合わせてVRMモデルも動くようになります。
(画像は右手をあげてるもの)
VMCとUnityの連動
キャリブレーションまで済ませましたら次にUnityへのモーション反映を行います
Unity側でHierarchyにある”ExternalReceiver”のInspector内にある”U Osc Server(Script)”でPort番号を確認します。
今回は初期から入っていた”39539″を使用します。
次にVMCコントロールパネルから”詳細設定”を押し、外部モーション送信の項目でPortを”39539″にし”OSCでモーション送信を有効にする”のチェックを入れ適応を押します。
この状態でUnityに戻り再生ボタンを押すとVRMのモーションが反映されUnity内でも同じモーションを行うようになります。
モーションの記録
設定お疲れ様でした!
ここからは実際に身体を動かしたりしてモーションを記録していく作業になります。
では、Unityを再生状態(Gameタブ)にしてVMCとの連動を行っている状態にします。
記録の手順はとても簡単で、
①”Rキー”で録画開始
②動く(モーションをつける)
③”Xキー”で録画終了
上記手順を行うとProject内にResouresフォルダが作成され、中にモーションが保存されたassetファイルが作成されます。
そのassetファイルをEasyMotionRecorderのInspector内にあるMotion Drata Player(Script)のRecorded Motion Dataに入れることにより再生状態(Gameタブ)のUnityで再生・確認することができます。
再生するには”Sキー”、停止するには”Tキー”
モーションファイルの変換
上記でできたモーションファイル(asset)ですが、このままだとVRChatではまだ使えません。
VRChat用にアニメーションクリップファイル(anim)に変換する必要があります。
assetファイルを選択し、Inspector内のファイル名の場所で右クリックをします。
出てきたツリーから”Export as Humanoid animation clip”を選択。
すると同じResouresフォルダに同名のanimファイルが作成されます。
VRChatに持ってく前にこのanimファイルをそのまま入れると地面に埋もれる場合があるので、
animファイルを選択し、Inspector内にあるRoot Transform Position(Y)のBased Uponを”Original”に変更しておきましょう。
以上でVRChat用のモーションエモートファイルが完成になります。
このファイルをアニメーションオーバライドエンプティのエモート1~8の好きな箇所に入れてアップロードすればVRChat内でも使えるようになります。
私が作って実際にアップロードしたモーション動画になります↓↓↓
以上!!!
最後に
いかがだったでしょうか?
VR機器でいつもアバターを動かしていますが、その動きを記録・再生するというのは今まですくなかったので作っていてとても面白いなぁ♪と思いました!
逆にモーションを作っておけばフルトラッキングじゃない時でもフルトラッキングみたいな動きを見せることも・・・
もっと考えればいろいろなことができそうな気がしますね♪♪
VR技術の今後に期待です!!
ではでは、今回はここまで
最後まで読んでいただきありがとうございました!