Edited at

【Unity】Oculus RiftとFinalIKを使ってUnityちゃんになる。


はじめに

キズナアイさんになりきる方法や、Viveを使った方法などの記事はありましたが、

Oculus RiftとFinal IKを使ってUnityちゃんになる記事が見当たらなかったので、メモ程度に残しておきます。

Oculus LiftとFinalIKを使ってバーチャルYoutuberになる方法

Oculus Rift + VRIK で 初音ミクになりきってみる

こちらを参考にしました。

というか、むしろ「Oculus LiftとFinalIKを使ってバーチャルYoutuberになる方法」の記事とほぼ一緒です。


環境


  • Unity5.6.3p2(諸事情で)


  • Oculus Utilities for Unity


    • 自身のUnityのバージョンと合ったものをお使いください



  • FinalIK


  • Oculus Rift



おおまかな流れ

Oculus LiftとFinalIKを使ってバーチャルYoutuberになる方法」とほぼ同じです。

1. 空のGameObjectをHierarchyに配置

2. そこにUnityChanとOVRCameraRigを配置

3. OVRCameraRig -> TrackingSpace -> CenterEyeAnchorにHeadTargetという名前で空のGameObjectを配置

4. 3.と同様にLeftHandAnchorにLArmHandTarget, RightHandAnchorにRArmHandTargetという名前で空GameObjectを配置。

5. unitychanにVRIK(FinakIK)をAdd component

6. VRIKのHeadTargetにHeadTargetを、Left ArmのTargetにLArmHandTarget、Right ArmのTargetにRArmHandTargetをアタッチする。


OVRCameraRig,UnityChanを配置

UnityChanとOVRCameraRigを空オブジェクト内に配置します。



空オブジェクト位置は(0.0,0.0,0.0)になっています。

その時に、OVRCameraRigの位置は、unityChanの目線に合わせてください。



私は(0.0,1.3,0.0)にしています。


Anchorに空オブジェクトを配置する



このとおり、CenterEyeAnchor, LeftHandAnchor, RightHandAnchorに空オブジェクトを配置します。

この空オブジェクトの位置は、VRIKを使って

HeadTarget → モデルの頭の位置

LArmHandTarget → モデルの左手の位置

RArmHandTarget → モデルの右手の位置

と対応していきます。

このままでは、UnityChanの手足の向きがおかしくなるので、調整します。



Z方向が0のままだと、OVRCameraRigがUnityChanに若干めり込むことがあるので、モデルの頭の位置は少し後ろに設定しました。



左手、右手はこんな感じです。




UnityChanにVRIKをアタッチします。


VRIKにHeadTarget, LArmHandTarget, LArmHandTargetをアタッチする

初期のパラメータからおそらく何も変えてないと思います。



これで、UnityChanをOculusRiftの位置によって動かせるようになりました。


新しくカメラを配置し、UnityChanの様子を見れるようにする

Oculus LiftとFinalIKを使ってバーチャルYoutuberになる方法」のコードをもとに、

UnityChanの様子を客観的に見えるよう新しくカメラを配置します。



新しくカメラを配置したあと、Target EyeをNone、Audio Listenerのチェックを外します。

そして、VRmirrorSettings.csをアタッチします。


VRmirrorSettings.cs

public class VRmirrorSettings : MonoBehaviour {

// Use this for initialization
void Start () {
UnityEngine.XR.XRSettings.showDeviceView = false;
}

// Update is called once per frame
void Update () {

}
}


これで、動作の様子が客観的に見えると思います。


Oculusの位置トラッキングの影響でカメラからアウトしてしまう。



UnityChanが画面の中心にくるようカメラを配置していましたが、Oculusの位置トラッキングの影響でカメラからアウトしてしまいます。

そこで、位置トラッキングをリセットするコードをOVRCameraRigに貼り付けます。


RKeyToRecenterPose.cs

using System.Collections;

using System.Collections.Generic;
using UnityEngine;

public class RKeyToRecenterPose : MonoBehaviour {

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {
// Rキーで位置トラッキングをリセットする
if (Input.GetKeyDown(KeyCode.R))
{
OVRManager.display.RecenterPose();
}
}
}


こうすれば、Oculusを装着した後にRボタンを押すことで、画面の中心にUnityChanが写るようになります。


完成

Oculusからの視点



カメラからの視点

これで、一応UnityChanになりきれました!

でも、女の子にしては仁王立ちすぎるので、まっすぐ立たたせるようにします。


仁王立ちなので調整する



VRIKのLeft LegとRight Legを使っていきます。

Left LegとRight Legのターゲットとなるものを、わかりやすいようにCubeで作成し、UnityChanの足元の位置に調整します。



left -> Left LegのTarget

right -> right legのtarget

にアタッチします。

そして、それぞれのposition weightを0.7にしてください。

これで、姿勢がきれいになりました。

position weightは足のターゲットの位置への比重を表します。

この値を高めることで、ターゲットの位置にアバターの足が近づきます。

VRIKのSolverの値について、詳しくはこちらの記事に書いてあります。

Final IK の VRIK の Solver にある各値の説明


最後に

基本的にはこのやり方でOculusとアバターの連携はできると思います。

アバターの手や頭の向きが変になってしまうのは、HeadTarget, LArmHandTarget, LArmHandTargetの角度パラメーターをいじっていくしかないです。ほとんど気合です:relaxed:

次回は、立った状態ではなく、アバターを座った状態にさせてみたりしたので、気が向いたら記事にしたいと思います。

それとオリジナルのVtuberシステムも作ったので、それも気が向いたら記事にしていきます。