NOLOとUnityで簡易的なVtuber制御システムを作る
■NOLOとは?
NOLOはキックスターター発の、6DoFに対応していないヘッドマウントを6DoF対応にしてくれるハードウェアです。Oculus GOやGearVRのような移動ができないVRヘッドマウントを、Oculus Rift CV1やHTC VIVEのように6DoF対応にしてくれるものです。PCにもモバイル機器(Android、iOS)も対応しています。
PCを使用した、頭と上半身をトラッキングして簡易的なVtuber制御システムを作ります。リップシンクは今回の記事では入れていません。
僕はキックスターターでバックして購入しましたが、現在は国内の正規代理店よりAmazonで購入することができます。
■NOLOの基本構造
ベースステーション1つ、左右のコントローラ、ヘッドマーカーのセット。
ベースステーションを親機として、左右のコントローラとヘッドマーカーをBluetoothでペアリング、ヘッドマーカーとPC(あるいはモバイル機器)をUSBコードで接続します。
ヘッドマーカーとPC(あるいはモバイル機器)との接続は付属のUSBコードを使いますが、市販のものでも構いません。(付属のものはあらゆる機器に対応するため何本も束ねてあり鬱陶しいので個別に交換したほうがおすすめ)
ちなみに付属の3股に別れたコードは充電用です。
ベースステーションは充電しながら使用できます。VIVEと違って1つだけなので、適用範囲は狭い。(FOV100°、5mx5m)
VRヘッドマウントの仕様を前提にはしているが、VRヘッドマウントは別に必須ではない。今回のVtuber制御もヘッドマウントは不使用。
■NOLOを開封してペアリングする
公式のペアリングガイド、動画を参照のこと。
https://www.nolovr.com/pairing-en
https://www.youtube.com/watch?v=wrEywuWb8zQ&feature=youtu.be
A.ベースステーションの電源を入れてから、背後のペアリングボタンを振動が止まるまで押す。ベースステーションの振動が止まり、正面から見て1つだけ赤いLEDが点灯している状態がペアリングモード。
B.コントローラーの○ボタンを長押しして電源を入れ、サイドに有る細くて小さなボタン(爪でしか押せない)を長押し。コントローラーの赤いLEDが消えたら成功。
2つのコンロトーラーを同時でなく順番に同じ作業を行う。
C.ヘッドマーカーをUSBでPCと接続し、ペアリングボタンを長押し。LEDが一度点滅したらペアリング成功。(赤→消灯→赤)
D.ベースステーションの背後のペアリングボタンを1度押すと(長押しではない)、数秒後に起動。振動し始める。その状態でコンロトーラーの電源を入れる。
それぞれLEDが緑になっていればペアリング成功。
■NOLO Asistantをインストール
下記よりダウンロードしてインストール
http://download.nolovr.com/download/noloassistant.html
NOLOASSISTANT_Setup.exe
起動して、画面上部の歯車アイコンを押して、設定画面に移動。
「Visualizer」というサンプルアプリがあるので起動して、NOLOが正常動作しているかどうか確認。
■Unityでの開発
A.SDKのインポート
下記にアクセスして、Unity SDKをインポート(UnitypackageをUnityエディタ画面にドラッグ・アンド・ドロップしてインポート)
https://www.nolovr.com/developers
https://github.com/NOLOVR/NOLO-Unity-SDK
NoloVR→Example→General→Test.unityシーンを開く
プロジェクトを実行して、無事に動作するか確認
B.Unityちゃんのインポート
下記よりダウンロード(ライセンスに同意→「ユニティちゃん 3Dモデルデータ」をダウンロード)
http://unity-chan.com/contents/guideline/
※記事執筆時点ではVersion:1.2.1
UnityChan_1_2_1.unitypackageをインポートする。
C.Final IKをアセットストアで購入してインポート
https://assetstore.unity.com/packages/tools/animation/final-ik-14290
※インポート後は「plugins→RootMotion→FinalIK」配下にあるので注意。
※Final IKは有料のアセットです!(90ドルくらい)
D.NoloManager設定
Test.unityシーンを開く。
ヒエラルキーのNoloManager→Hmd(camera)→Main Cameraをオフにする。(客観視点にする)
LeftController、RightController、Hmd(camera)の子として空のオブジェクトを作成する。(それぞれを右クリックしてCreate Empty)
名前は何でもいいが、自分はそれぞれLefthandTarget、RighthandTarget、HeadTargetとした。
LefthandTargetのRotation:Yを90に。
RighthandTargetのRotation:Yを90に。
HeadTargetのRotaion:Yを-90、Zを-90に変える。
※VR IKの設定回転にずれがあるため
E.UnityちゃんのインポートとVR IK組み込み
プロジェクトメニューから
UnityChan→Prefabs→unitychanをシーンに配置。
Positionをすべて0.0.0にする。
カメラをUnityちゃんの正面を写す位置に配置
※ヒエラルキーからCreate→Camera
ヒエラルキーのunitychan(プレハブ)の直下に
Plugins→RootMotion→FinalIK→IK Components→VRIK.csをアタッチ。
unitychanのインスペクタの「VRIK」の以下を設定
Solver→Spine→Head TargetにNoloManagerの先程作ったHeadTargetをアタッチ。
Solver→Left Arm→TargetにNoloManagerの先程作ったLefthandTargetをアタッチ。
Solver→Right Arm→TargetにNoloManagerの先程作ったRighthandTargetをアタッチ。
VRIKの各設定項目は以下を参照
https://qiita.com/_karukaru_/items/b74bb5bdf08f5de32d0e
これでとりあえず上半身と頭の動きが完了!
※コントローラーの動きがカクカクする場合:
→上記のペアリングをやり直すと治ることがある
→赤外線を使用しているので、
強いハロゲンランプ
VIVEのベースステーション
直射日光
のない環境で行うこと
ヘッドマーカーのUSB接続は、ロック機構のないMicro USBなので外れやすい&端子が劣化しやすいので注意。使用時はテープなどでガチガチに固めるべき。
■その他
もともとVRヘッドマウントを6DoF対応させるためのものですが、僕はVtuber制御のために使うのでヘッドマウントを使用していません。下記のように通常の安いヘッドフォンの上部にヘッドマーカーを固定して使用しています。
<画像は後ほど>