OculusRiftで自分の体を表示する方法(OculusSDK0.5対応版)

はじめに

OculusRift体験会で「自分の体がないのが不思議!」と感想をもらうほど素晴らしいコンテンツを作った、展示した一方で、『せやな』と歯がゆい思いをしたことある方におすすめ。

今回は、Oculus SDK 0.5に対応した「OculusRiftで自分の体を表示する方法」をまとめます。

使うアセットはUnityで動的にモーションを生成するFinalIKに、同提供のOVRアドオンを使用します。

Oculus Rift DK2のヘッドトラッキング、ポジショントラッキングで自分の体に見立てたキャラクターの姿勢をアニメーション。自分の体っぽく再現してみます。

環境

手順

アセットの準備

1. Unity 4 Integration 0.5.0.1-betaのインポート

Screenshot of developer.oculus.com

Oculus Rift PC SDK, Samsung Gear VR Mobile SDK, Docs, Integrations | Oculus Developer Center

ovr_unity_0.5.0.1_lib.zip内のOculusUnityIntegration.unitypackageをインポート

 

2. Final IK beta0.5のインポート

Final IKをAssetStoreでポチってインポート

 

3. Final IK OVR add-on (Unity4 / Unity5)のインポート

使用しているUnityのバージョンに合わせて入手

FinalIK_OVR_Unity4.unitypackage
FinalIK_OVR_Unity5.unitypackage

http://forum.unity3d.com/threads/final-ik-full-body-ik-aim-look-at-fabrik-ccd-ik-beta-released.222685/page-21#post-2027594

Screenshot of forum.unity3d.com

FINAL IK – Full Body IK, Aim, Look At, FABRIK, CCD IK… [BETA RELEASED]

 

FinalIK_OVR_Unity5.unitypackageに旧バージョンのUnity 4 integrationが含まれるため、インポート時にOVRフォルダとPluginフォルダを除外する。

 

インポート完了。FinalIk OVRフォルダが追加される。

但し、旧バージョンのOculusSDK向けのaddonのため、次のようなエラーが発生する。

Assets/FinalIK OVR/Scripts/OculusSetup.cs(35,42): error CS1061: Type `OVRPlayerController' does not contain a definition for `useProfileHeight' and no extension method `useProfileHeight' of type `OVRPlayerController' could be found (are you missing a using directive or an assembly reference?)

 

4. Final IK OVR add-on (Unity4 / Unity5)のOculusSDK 0.5対応

OculusSDKのバージョンアップで何かしらの変更が加えられて、「useProfileHeightがOVRPlayerControllerにない」ので、とりあえずFinal IK OVR add-onに含まれているOVRフォルダと0.5のOVRフォルダをDiff。

どうやらuseProfileHeightから、よりOculusRuntimeで設定したProfileのいろんなデータにアクセスするイメージの強いuseProfileDataに名前がリファクトされた模様。

対応としてはAssets\FinalIK OVR\Scripts\OculusSetup.csのuseProfileHeightをuseProfileDataへ書き換えでOK。

ソースを読んでいると名前の変更などなど、OculusSDK 0.4.4→0.5でOculusRuntime側にOculus周りのものを持たせる仕組みにシフトしている様子がうかがえる。
更に今後はUnrealEngine4のようにエンジン側に統合されていく流れでもあり、おそらくこの記事の賞味期限は恐ろしく短い。 

 

FinalIKでOculusRiftDK2のヘッドトラッキング、ポジショントラッキングを行う方法

【実装】最小実装(Full Body Biped IK+Head Effector)

キャラ、unitychanを配置

  1. OVRPlayerControllerの子にキャラのモデルデータを配置
  2. キャラのモデルデータにFullBodyBipedIK.csをアタッチ
  3. 数値部分のみを次のように変更

 

Oculusのカメラの起点となるHead Effectorを配置

  1. CenterEyeAnchorの子に空のHead Effectorオブジェクトを作成
  2. FBBIKHeadEffector.csをアタッチ
  3. 次のように設定する。
    Bend Bones(Oculusヘッドトラッキングやポジショントラッキングによって体のひねりの影響を与える背骨、首のボーン)やStretch Bones(Oculusのポジショントラッキングで伸びるボーン)の指定をunitychanにFullBodyBipedIK.csをアタッチしたときに自動設定される内容を参考に設定。

  4. Head EffectorのTransformの値がキャラ顔の位置、回転になるため、上の画像のTransformの設定を参考に設定。
    PositionのY軸はキャラの身長で変更。Play時に首長族になる場合は調整する。

 

FinalIK OVRアドオン

機能概要

FinalIK OVRアドオンが提供する機能は5つ

  • ゲームスタート時の汎用的な初期化の仕組み
    OculusSetup.cs
  • キャラクターのモーションを再生するMecanim連携OVRAnimatorController.cs
  • 同構成の複数キャラのモーション同期
    Basicシーン。Mirror.cs
  • 視点でVR空間内のものを操作
    Interactionsシーン。OVRInteractionController.cs、OVRInteractionUI.cs、Phone.cs
  • FPSゲーム向けの武器
    Amingシーン。OVRAimingController.cs、WeaponBase.cs、WeaponRifle.cs

 

ファイル構成

アドオンと謳いつつnamespaceが全部Demoな、まぁそんな感じのフォルダ構成になっています。

各スクリプトが持つそれぞれの設定値の説明は、アタッチ後のInspectorで項目にマウスカーソルを持っていくとツールチップに説明が表示されます。

FinalIK OVR/
├─Animations/
├─Materials/
├─Models/
├─Prefabs/
├─Scenes/
│ Aiming.unity
│ Basic.unity
│ Interactions.unity
│
├─Scripts/
│ FixFeet.cs
│ Mirror.cs (オプション)Targetに設定した同じ構造のものと動きを同期させる(参考 Basicシーン)
│ OculusSetup.cs Rキーでゲーム開始。キャラの初期化など
│ OVRAimingController.cs (オプション)武器持ちの場合に使う(参考 Amingシーン) 
│ OVRAnimatorController.cs キャラクターの移動アニメーション用。※AnimatorへHumanoid ThirdPerson.controllerを設定するか、同じParametersを設定必須
│ OVRInteractionController.cs (オプション)視点でイベントを発火する仕組みを提供。指定した時間で実行(参考 Interactionsシーン)
│ OVRInteractionUI.cs (オプション)視点のカーソル表示とイベントを発火するまでの時間をプログレスバーのUIで表示(参考 Interactionsシーン)
│ Phone.cs (オプション)VR空間内で操作できる端末の実装サンプルスクリプト(参考 Interactionsシーン)
│ WeaponBase.cs 
│ WeaponRifle.cs
│
└─Textures/

 

FinalIK OVRアドオンの使い方

サンプルシーンで動作を確認する

 FinalIK OVRアドオンに含まれるサンプルシーンは3種類。
Rキーでスタート。(OculusSetup.cs)

 

Basic

複数の同じキャラのモーションを同期するMirror.csを使用したデモ。

増やす場合はMirror ~を複製。OculusSetup.csのEnable On Rに追加。

 

Aiming

FPS実装デモ。

 

マウスカーソルの移動で照準のAmingと頭の向きの変更を行うこともやっています。

スクリーンショット_032815_110016_PM

任意の武器を追加する方法

Weapons Anchor以下にWeapon MP40と同じように配置。配置するPositionは、Weapons AnchorにアタッチされているDisable状態のCameraコンポーネントをEnableにして、ちょうど中心になるように配置する。(配置終わったらDisableに戻す)

 

Interactions

視点で操作する、インタラクティブなコンテンツを作るデモシーン。

 

【実装】キャラクターの移動モーションを連動させる

シーン開始時の初期化機能Oculus Setupを配置

  1. 開始時に場面に表示されるスタートメッセージのCanvasを、他のデモシーンからPrefab化して持ってくる
  2. 空のゲームオブジェクト Oculus Setupを作成。OculusSetup.csをアタッチ。設定を上の画像を参考に行う

移動モーション連動用のOVRAnimationControllerを設定

  1. unitychanのAnimatorコンポーネントにHumanoid ThirdPersonを設定
  2. unitychanにOVRAnimatorController.csをアタッチ。設定を上の画像を参考に行う

     

使用キャラクターについて