https://connpass.com/event/214152/ トラッキング技術勉強会の登壇資料です
トラッキングできたらアバターを動かしたい!バーチャルモーションキャプチャー、VMCProtocol、VMT、DVRSDKあきら@VMC2021/06/11
View Slide
あきらDMM VR lab所属チーフエンジニア/コミュニティマネージャーバーチャルモーションキャプチャーの作者ですTwitter: @sh_akiraGitHub: sh-akirahttps://akira.works/
バーチャルモーションキャプチャーVirtualMotionCapture3
バーチャルモーションキャプチャーとはとは4
バーチャルモーションキャプチャーとは5➢ トラッキングしてVRMアバターを動かせるアプリ ➢ 改良を続けているキャリブレーション ➢ VRゲームと同時起動可能 ➢ コントローラーやトラッカーを好きな部位に自由に割り当て可能 ➢ コントローラー/キーボード/MIDIのボタンに自由にキー設定可能 ➢ OSCでモーションデータの送受信が可能(VMCProtocol) ➢ MR合成に対応 ➢ 通称 ばもきゃ ➢ https://vmc.info/ オープンソースで全てのソースコードを公開中
動きはSteamVR+Final IKがベース6➢ SteamVR Pluginの機能には依存せずに直接OpenVRを叩いている ➢ OpenVRの初期化を自分で書くことで同時起動をしている ➢ キャリブレーション処理をこだわってFinal IKに渡す
キャリブレーションは手の位置を最優先7詳細は歌舞伎座.tech#15で話した「バーチャルモーションキャプチャーとは」の資料を参照してください https://akira.fanbox.cc/posts/168685
同時起動はOpenVRをOverlayモードで初期化8選べる種別: ● Scene : 通常のVRゲーム (SteamVRの初期化あり/複数起動不可) ● Overlay : オーバーレイアプリ (SteamVRの初期化あり/複数起動可) ● Background : (SteamVRの初期化なし/複数起動可/SteamVRがいないとエラー) ● Utility : セットアップ用 (ハードウェアが無くても起動する/複数起動?) →ばもきゃは同時起動したいしSteamVRが必須なのでOverlayを選択 Scene以外だと通常の方法では3DモデルをHMDに表示できない。 SteamVRダッシュボードと同じように2Dのパネルをオーバーレイ表示できる。
つまり・・・9➢ ばもきゃはどんな(Steam)VRのゲームとも同時起動できる ➢ 良い感じのキャリブレーションで良い感じにアバターが動く ➢ とりあえずアバター動かすならこれ せっかく良い感じのモーションが取れてるなら他でも使いたい→
VMCProtocolVirtual Motion Capture Protocol10
Virtual Motion Capture Protocol (VMCProtocol)とは11➢ バーチャルモーションキャプチャーのあらゆる情報を 送受信するためのプロトコルとして生まれました。 ➢ UDP(OSC)とVRMを前提に、シンプルな数値・文字列の送受信のみで構成されています。 ➢ 高度な知識が必要なアバター制御やVR機器の取り扱いを ばもきゃ等に任せ、利用者は受信ライブラリを使うだけで とてもシンプルにアバター撮影環境を構築できます。 ➢ https://protocol.vmc.info/ メインメンテナ:gpsnmeajp(@Seg_Faul)
VMCProtocol 受信ライブラリ12Unity Unreal Engine EVMC4U VMC4UE @Seg_Faul @HAL9_HARUKU
EVMC4Uとはとは13
14広がるVMCProtocolの輪Performer(モーション送信)バーチャルモーションキャプチャーwaidayo360KinectGumThreeDPoseTracker/TDPTVSeeFaceMarionette(モーション受信)EVMC4UVMC4UEVirtual Streamer 360だれでもVsingerCollabollOredayo4V/4MVSeeFaceVMC-Websocket-OBSゆかりねっとコネクターVMCProtocolModelViewerVMCProtocolRotationCameraAssistant(拡張情報送信)waidayoQuestOSCTransformSenderSimple Motion TrackerVMCOculusSknuckleVMCSaberTrainingvmc2bvhパイロットクロスVMCAvatar-BSVMCProtocolMonitorVMCbroadcasterVMCProtocolRefrectorRemote Marionette
15構成例1waidayo(iPhoneでフェイストラッキング)Sknuckle(Noitom Hi5でハンドトラッキング)バーチャルモーションキャプチャー(トラッカーでフルボディトラッキング)EVMC4U(Unityでオリジナルの配信環境を作る)デバイス VMCProtocol
16構成例2ThreeDPoseTracker(Win) / TDPT(iOS)(カメラの映像で全身トラッキング)バーチャルモーションキャプチャー(仮想トラッカーで受け取る)VSeeFace(ボーン情報で受け取る)デバイス VMCProtocolOredayo4V(Win) / 4M(Win, Mac, Linux)(ボーン情報で受け取る)
構成例3ばもきゃ(フルトラ)デバイス VMCProtocolEVMC4U(遠隔地とコラボする) #解釈不一致 / memexインターネット経由
つまり・・・18➢ VMCProtocolはアバターを動かしたいときのあらゆる情報を 送受信できるプロトコル ➢ 多種多様な対応アプリを組み合わせてあらゆるスタイルに適応 ➢ VMCProtocolに対応すれば既存の資産を活かせる せっかくトラッキングが出来てるならSteamVRで動かしたい→
VMTVirtual Motion Tracker19
VMT (Virtual Motion Tracker)とは20➢ シンプルなOpenVR 仮想トラッカードライバ ➢ UDP(OSC)で姿勢を受け取り、トラッカーとしてSteamVR上で利用できます。 ➢ 難易度の高いVRトラッキングデバイスの自作をとても簡単に行えるようになります。 ➢ https://github.com/gpsnmeajp/VirtualMotionTracker 作者:gpsnmeajp(@Seg_Faul)
どのくらい簡単か21OSCで、 /VMT/Room/Unityに トラッカー番号と PosとRot送るだけです。
使われているアプリ22KawaiiSitter 通常の3点トラッキングで可愛く座ることができるアプリ。腰と足の位置を自動計算してVMTで仮想的に動かす MocapForAll 普通のWebカメラを複数使い簡易なモーションキャプチャをするアプリ。 Unity/UEで受信するサンプルもある
つまり・・・23➢ VMTは簡単に使えるSteamVRの仮想トラッカー ➢ 難しいトラッカードライバの事を考える必要がなくなる ➢ 誰でもSteamVR対応のトラッカーデバイスが作れちゃう トラッカーが動いたらトラッカーを使うアプリも作りたい→
DVRSDKDMM VR Connect SDK24
DVRSDK(DMM VR Connect SDK)とはとは25
DVRSDK (DMM VR Connect SDK)とは26➢ DMM VR ConnectをUnityで使えるSDK ➢ 誰でもつかえて無料配布中 ➢ サンプル開けばすぐに使える簡単設計 ➢ VRのアプリ作りたいときに困るあれこれが 詰まったSDKです。 ➢ https://devs.connect.vrlab.dmm.com/
27DVRSDKのコンポーネントたちDVRAuthConnectの認証ユーザーデータの取得アバターデータの取得他者のアバターの取得も可能DVRStreamingUnityから直接RTMP配信YouTube/Twitch等に配信可能Oculus Quest/Quest2対応Windowsも対応DVRCamera第三者視点カメラカメラワークオートシーケンス複数カメラの制御DVRAvatarSteamVRのトラッカー処理VRMの様々な制御キャリブレーション表情や指の制御、自動まばたき
トラッカーでアバター動かすには難しいこといっぱい28➢ まずSteamVRでトラッカーちゃんと扱うのが難しい ➢ ボタンの取得とかSkeletal Inputも大変 ➢ アバターは人によって全然大きさも身体の比率も違う ➢ キャリブレーションが大変 ➢ Final IKを理解するのも難しい ➢ 表情の実装も必要だしリップシンクが欲しいし合成が必要 ➢ そもそもアバターのファイルの管理も要るし・・・
29SteamVRむずかしいんですけどSteamVR 1.x →トラッカーはIndex番号で管理するSteamVR 2.x →トラッカーは役割(ロール)で管理する(ボタンはBindingして・・・指はSkeletalで・・・)例えば2.xで腰(Waist)にトラッカーを割り当てて使いたいときはPoseのActionをSteamVR_Inputに定義して、SteamVRでそのActionをバインディングして、それをデフォルトバインディングとしてアプリに入れて、Actionのフルパスを取得して、Actionのハンドルを取得して、InputSourceハンドルを取得して、ActionとInputSourceからPoseを取得して、生のMatrixからUnity座標を取得します。
30もちろん大丈夫です3点(頭と両手)~11点(頭、両手、両ひじ、胸、腰、両ひざ、両足)をトラッカー3つまではVRChat方式でロール関係なく自動で、それ以上はロールを参考に自動で割り当てます
31キャリブレーションもむずかしいんですけど!Final IKで出来ると聞いてやってみると超いろんなことが起きる
32なんとDVRSDKにはソースコードごと全て入ってますすべてを詰め込んだキャリブレーション処理もDVRSDKを入れれば誰でもご利用可能です!(さらに指のSkeletal Inputとスティックでの表情変更も入ってます)
33身長だけで自動計算をするキャリブレーション詳細はDMM meetup #27で話した「意のままに身体を動かすキャリブレーション」の資料を参照してください https://dmm.connpass.com/event/208446/
つまり・・・34➢ DVRSDKは様々なアバターの処理を詰め込んだSDK ➢ 難しいアバターの動かし方を考える必要がなくなる ➢ 何かアプリを作るとき最初に入れておくととても楽!
35まとめバーチャルモーションキャプチャーとりあえずアバター動かしたくなったらこれ!沢山の連携ツールでやりたいことがきっと見つかります。vmc.infoVMCProtocolモーションを送受信したくなったらこれ!多彩なビューアーも揃っているので色々な拡張と組み合わせられます。protocol.vmc.infoVMTSteamVRの仮想トラッカーが作りたくなったらこれ!超簡単に仮想トラッカーデバイスが使えてしまいます。github.com/gpsnmeajp/VirtualMotionTrackerDVRSDKアプリにアバター入れたくなったらこれ!難しい事無しで入れるだけで動きます。VRアプリ開発するときは最初に入れよう。devs.connect.vrlab.dmm.com