はじめに
キズナアイさんになりきる方法や、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になる方法」とほぼ同じです。
- 空のGameObjectをHierarchyに配置
- そこにUnityChanとOVRCameraRigを配置
- OVRCameraRig -> TrackingSpace -> CenterEyeAnchorにHeadTargetという名前で空のGameObjectを配置
- 3.と同様にLeftHandAnchorにLArmHandTarget, RightHandAnchorにRArmHandTargetという名前で空GameObjectを配置。
- unitychanにVRIK(FinakIK)をAdd component
- 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をアタッチします。
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に貼り付けます。
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が写るようになります。
完成
これで、一応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の角度パラメーターをいじっていくしかないです。ほとんど気合です
次回は、立った状態ではなく、アバターを座った状態にさせてみたりしたので、気が向いたら記事にしたいと思います。
それとオリジナルのVtuberシステムも作ったので、それも気が向いたら記事にしていきます。