LoginSignup
18
12

More than 3 years have passed since last update.

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

Last updated at Posted at 2018-08-24

はじめに

キズナアイさんになりきる方法や、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を空オブジェクト内に配置します。
image.png
空オブジェクト位置は(0.0,0.0,0.0)になっています。
その時に、OVRCameraRigの位置は、unityChanの目線に合わせてください。
image.png
私は(0.0,1.3,0.0)にしています。
image.png

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

image.png
このとおり、CenterEyeAnchor, LeftHandAnchor, RightHandAnchorに空オブジェクトを配置します。
この空オブジェクトの位置は、VRIKを使って
HeadTarget → モデルの頭の位置
LArmHandTarget → モデルの左手の位置
RArmHandTarget → モデルの右手の位置
と対応していきます。

このままでは、UnityChanの手足の向きがおかしくなるので、調整します。
image.png
Z方向が0のままだと、OVRCameraRigがUnityChanに若干めり込むことがあるので、モデルの頭の位置は少し後ろに設定しました。
image.png
左手、右手はこんな感じです。
image.png
image.png

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

image.png

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

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

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

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

Oculus LiftとFinalIKを使ってバーチャルYoutuberになる方法」のコードをもとに、
UnityChanの様子を客観的に見えるよう新しくカメラを配置します。
image.png
新しくカメラを配置したあと、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の位置トラッキングの影響でカメラからアウトしてしまう。

image.png
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();
        }
    }
}

image.png

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

完成

Oculusからの視点
image.png
カメラからの視点
image.png

これで、一応UnityChanになりきれました!
でも、女の子にしては仁王立ちすぎるので、まっすぐ立たたせるようにします。

仁王立ちなので調整する

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

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

left -> Left LegのTarget
right -> right legのtarget
にアタッチします。
そして、それぞれのposition weightを0.7にしてください。
image.png

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

position weightは足のターゲットの位置への比重を表します。
この値を高めることで、ターゲットの位置にアバターの足が近づきます。

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

最後に

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

次回は、立った状態ではなく、アバターを座った状態にさせてみたりしたので、気が向いたら記事にしたいと思います。
それとオリジナルのVtuberシステムも作ったので、それも気が向いたら記事にしていきます。

18
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
12