Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Xbox360版KinectによるVMCProtocolを使用した姿勢情報の送信、VRMモデル操作について

押し入れに眠っているXbox360版Kinectを使って、VRMモデルを動かして遊んでみましょう。

はじめに

本記事では、Xbox360版Kinectを使用し、EVMC4Uへの姿勢情報の送信を目指します。
Unityのシーン上で3Dオブジェクトの配置などを作り込み、その上でモデルを動かすことも可能ですが、本記事ではEVMC4Uを使用します。
EVMC4Uとは、OSCで姿勢情報を受信してUnityシーンに反映するスクリプト群です。
詳細はこちらからどうぞ

なお、Xbox360版Kinectは2010年発売のハードウェアのため、現行機種と比較すると測定距離や解像度、精度の点で劣ります。
また、製造終了しているため、購入する際は中古品から選ぶこととなり故障のリスクもありますので、これから購入するのはおすすめしません。
更に、後述のKinect for Windows SDKを使用して開発を行う場合は、Kinect for Windows(Windows版Kinect)を使用する必要がある、といった解説記事も見かけました。原文は見つけられませんでしたが、開発時はWindows版Kinectを使用するほうが良いかと思います。
以上のことにご留意の上、自己責任でお楽しみください。ご安全に!

使用ソフト等

Unity
Unity上で動かします。私はバージョン2018.4.10f1を使用しています。

Kinect for Windows SDK v1.8
SDK v1.8がXbox360版Kinectに対応しています。

Kinect with MS-SDK
Xbox360版KinectをUnity上で使用するための便利なアセットです。

VMCProtocol
OSCで姿勢情報を送受信出来る便利なプロトコルです。こちらを使用してEVMC4Uに動きを反映させます。
UniVRMuOSCの導入も必要となります。
説明は後述します。

VMCProtocolとは

VMCProtocol(Virtual Motion Capture Protocol)とは、対応するソフトウェア間で姿勢情報をやり取りできる、便利なプロトコルです。
以下、公式からの引用です。

Virtual Motion Capture Protocolは、VTuberの人々がVR機器の高度な知識を要すること無くVR撮影環境を自作することを可能とするために作成されました。
高度な技術が要求されるアバターの制御、VR機器の取り扱いをバーチャルモーションキャプチャーに任せ、
利用者は以下の受信ライブラリを使うだけでとてもシンプルにアバター撮影環境を構築することができます。
・EVMC4U - Unity向け
・VMC4UE - Unreal Engine向け

導入

Unity、Kinect for Windows SDK v1.8を予めインストールします。
また、VRMモデルも準備しておきます。

VRMモデルをお持ちでない場合、私の以下記事が便利です。
【無料3Dモデル作成】HitogataモデルをVRM形式に変換する方法(フルトラ対応版)

プログラムの作成

Unityで新規プロジェクトを作成し、UnityAssetStoreよりKinect with MS-SDKをインポートします。
image.png

VMCProtocolのSampleより、UniVRM、uOSCをそれぞれインポートします。
また、サンプルスクリプトのSampleBonesSend.csを使用するので、こちらもダウンロードし、インポートしておきます。

UniVRMのインポートに成功すると以下の通りVRMタブが表示されるのでご確認ください。uOSCは私は0.0.2をインポートしました。
image.png

VRMモデルもインポートし、シーン上に配置します。
image.png

空のGameObjectを作成し、Asset/KinectScript/KinectManager.csをアタッチします。
image.png
image.png

配置したVRMモデルにAsset/KinectScript/AvatarController.csをアタッチします。
image.png
image.png

まずはこの状態で実行し動くことを確認してください。Kinectの前でTポーズをすれば動くはずです。ポーズが要るのはOpenNiでした。昔触ったときのと勘違いしてました。Kinect for Windows SDKはポーズ不要でカメラの前に行くだけで動きます。
その後、VMCProtocolでの姿勢情報送信を実装します。先ほどの空のGameObjectにAsset/uOSC/Script/uOscClient.csをアタッチします。
image.png
image.png

uOscClientのPortはEVMC4U側で設定した番号と合わせます。
image.png

続いてSampleBonesSend.csを先ほど同様、空のGameObjectにアタッチします。
image.png
image.png

SampleBonesSendのModelには、シーン上に配置したVRMモデルを設定します。
image.png

以上で、EVMC4U上でもKinectで操作した姿勢情報が反映されるはずです。
image.png

Kinectの設定値などは各自調べて試してみてください。
参考までですが、AvatarControllerのSmooth Factorが補正(小さいほど緩やかに動く)です。

なお、VMCProtocolのサンプルスクリプトのSampleBonesReceive.csを実装すると、同じくVMCProtocolに対応したwaidayoからフェイシャルモーションキャプチャーのデータを受信することが出来ます。

楽しんで!

daifuk-lana
Vライバー #大福らな🧷 実写動画やゲーム配信で活動中‼️イラストは #らなあーと✨ FANBOX http://bit.ly/2DJ2mx4 公式 http://bit.ly/2FlPDmi マシュマロ http://bit.ly/2TBkcIK ほしい物 http://bit.ly/2VBAu6o
https://pachelam.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away