MVN XSensとは
XSensとは、MVN社が製造しているおよそ400万程度する高級モーションキャプチャスーツです。マーベルシネマティックユニバースでも採用されている実績のある製品です。ここでは、MVN XSensを使用してアバタをトラッキングする方法を記述します。
両手・両足・両手首・両足首・両肘・両膝・両肩・両太もも・腰・胸・頭、計19点に9軸モーションセンサを取り付けたセンサを積分することで位置を特定し、アバタに反映する手法をとっています。これにより、一般コンテンツに主に採用されているIK手法では再現できない細かな動きを反映することができます。ただし、積分をしているため、誤差が蓄積するので時間経過によって位置がずれてしまうという弱点があるスーツです。キャリブレーションのめんどくささや時間経過の弱点はあるものの、動きやすさやパフォーマーの動きの忠実性という点では、所感ですがかなりのパフォーマンスを発揮していると思います。
Unity上のアバタへの動きの反映方法
こちら詳しくは公式のチュートリアルを拝見していただきたいのですが、公式が公開しているUnity Asset内の"Xs Stream Reader(MVN XSensのクライアントアプリからの信号を受信)"をヒエラルキー内にドラッグアンドドロップし、動きを反映したいアバタに"Xs Live Animator(信号をアバタに反映)"をAdd Componentするだけです。
FPSフルトラッキング
ここからが本題ですが、上記の方法でアバタに反映したとしても、VRHMDの位置とXSenseの初期位置はずれているため、そのままHMDをかぶってもTPS視点になります。ここではこの問題を解決し、一人称視点でアバタを動かす方法を説明します。
とはいえ非常に簡単な話で、XSensとVRHMDが別々にポジトラをしているなら、全身トラッキングしているXSensに合わせればいいだけの話です。なので、VRHMDのポジションとラッキングを切り、VR空間内のカメラ位置をアバタの頭部に固定するだけです。
VRHMDのポジトラを解除する方法は以下の通りです(Unity)。
InputTracking.disablePositionalTracking=true;
あとはカメラをアバタの頭部の動きに合わせれば、FPSを実現できるので、カメラの位置を頭部に固定しましょう。位置の固定方法はUnity 2018以降であれば、PositionConstraintが非常に簡単です。このコンポーネントは、文字通りこのコンポーネントを張り付けたオブジェクトを特定の場所に固定するものです。アバタの頭部を固定先にすれば、FPSの位置を保った場所にカメラが位置することとなります。