はじめに


こんにちは、海行です。
UnityによるGearVR開発でVuforiaを利用してみる手順について、公式でステップバイステップで導入方法が書かれてます

Integrating Oculus for GearVR with the AR/VR sample

しかし日本語の情報が見つからなかったのでここにメモとして書いてみます。
ちなみにGearVRを使わない普通のUnity開発へのVuforia導入についてはすでに日本語情報が色々上がっていますのでそちらを参考に。

無料ライブラリ「Vuforia」でARアプリを作る!④【Unityで開発篇】

VuforiaとはARのライブラリです。
自分のプログラムに手軽にAR機能を実装出来て便利です。
最近ではQualcomm Connected ExperiencesからPTCに売却されて話題となりました。

クアルコム、ARの「Vuforia」事業をPTCに売却へ–6500万ドル

Vuforiaは長らくベータ版でしたが正式版になった時に有料になってしまった!と騒がれましたが、現状のライセンスを見ると、無料プランでも通常の機能は使う事ができ、自分のアプリに使う事も出来るようです。(ただし1日1回ウォーターマーク表示が入ります)
有料プランだとクラウド機能が充実したりウォーターマークが消えたりするようです。

Vuforia Pricing

GearVRは他のHMDには無い特徴として、GalaxyS6のリアカメラが標準搭載されており、これを利用する事が出来ます。
私はGearVRでパススルーカメラ(HMDからカメラを通じて外の風景が見えるもの)のような物を作っていて、これでARでキャラクターなどを表示させれば現実と見分けつかなくて面白いかなと思いました。

別にARはスマホ単体でも楽しめるもので、わざわざVRHMDでやる物ではないのでしょうか?
ところがどっこい、GearVRやCardBoardではARとVRを組み合わせたMixedReality(複合現実)を提供する事が可能となります。
今回実行するAR/VRサンプルも、ARとVRの間を行き来するMRを体験できます。

サンプル実行結果


先にAR/VRサンプルを実行した結果をお見せします。
ビルドしてGearVRで起動すると、しばらくしてからなにやらパススルーカメラのような物が表示されます。

で、なんなの?って感じですがググッても特にこのサンプルの遊び方の説明は見つかりませんでした。
色々試行錯誤した結果、Unityプロジェクトの中にある砂利のような画像がマーカーになってるようです。
この画像をGearVRで見つめると、砂利の上に3Dオブジェクトが表示されました!おお凄い!!

CSl9cozVAAAO0wc

凄いのですが、これだと単なるARって感じですね。
と思いながら何やら3Dオブジェクト上にあるVRと書かれたボタンのような物を見つめてみると…

CSmBNk_UwAEOSXT

おお!
暗転してVR世界にワープしました!!

ARとVRの世界を行き来できる…これは面白いです。
色々なアイデアが湧いてきます!

GearVRにAR/VRサンプルを導入する


それでは本題のサンプル導入方法です。
基本的に原文記事をそのまま訳すだけです。
私はUnity5.2.2f1、OVRMobileSDK0.6.2.0、vuforia-samples-eyewear-unity-5-0-6を使用しました。

1.まず、空のUnityプロジェクトにVuforia AR/VR Sampleの中にあるarvr-5-0-6.unitypackageをインポートしてください。

リンク先のDigital Eyewear→Download for Unityからダウンロードできます。
Vuforiaのアカウントを持ってない人はここでログインを求められるのでサインアップしてください。

2.OVRMobileSDKの中にあるSDKExamples.unityPackageをインポートしてください。

インポートの順番が大事です。何故ならこのMobileSDK側のAndroidManifestを使いたいからです。

3.AndroidManifestとプラグインのパスを修正します。

・/Assets/Plugins/AndroidにあるAndroidManifest.xmlはMobileSDKのもので上書きされたのでVuforia側で必要な権限について追記してください。

<uses-featureandroid:name="android.hardware.camera"/>
<uses-permissionandroid:name="android.permission.CAMERA"/>
<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
・/Assets/PluginsにあるQCARWrapperなんとかを全部/Assets/Plugins/x86に移動してください。

QCARWrapper.dll
QCARWrapper.dll.signature
QCARWrapper.exp
QCARWrapper.lib

4.OVR Camera Rigを調整します。

・/Assets/ScenesのVuforia-3-AR-VRシーンを開いてください。

・/Assets/OVR/PrefabsにあるOVRCameraRigプレハブをシーンにドロップします。

・このサンプルではOVRCameraRigの座標はとりあえずX=0, Y=2, Z= -1.にしてください。

・OVRCameraRigの子のLeftEyeAnchorとRightEyeAnchorのパラメータを弄ります。
CameraコンポーネントのNearを0.05に、Farを500にします。
Clear FlagsをSolid ColorにしてBackgroundの色を黒にします。

・ヒエラルキービューからARCameraを選択します。
Bind Alternate Cameraにチェックを入れます。
下に出てきたSynchronize Pose Updatesにチェックを入れます。
Central Anchor PointにOVRCameraRigの子のCenterEyeAnchorをアタッチします。
同様にLeft CameraにLeftEyeAnchorを、Right CameraにRightEyeAnchorをアタッチします。
ViewerをGearVRにセットします。

・ARCameraの子のStereoCameraLeftとStereoCameraRightは非表示にしてください。

5.コード修正

・InitErrorHandler.csのOnInitError()の

if (error != VuforiaUnity.InitError.INIT_SUCCESS)
{

の下に

OVRManager.instance.monoscopic = true;

の行を追加します。

・OVRCameraRig.csの210行目くらいにある

if (UpdatedAnchors != null)

の上に

Vuforia.VuforiaBehaviour.Instance.UpdateState(false, true);

の行を追加します。

・同じくOVRCameraRig.csの440行目くらいにある

return cam;

の上に

cam.ResetProjectionMatrix();
Vuforia.VuforiaBehaviour.Instance.ApplyCorrectedProjectionMatrix(cam.projectionMatrix, eye == OVREye.Left);

を追加します。

・同じくOVRCameraRig.csの200行目くらいにある

centerEyeAnchor.localPosition = 0.5f * (hmdLeftEye.position + hmdRightEye.position);
leftEyeAnchor.localPosition = monoscopic ? centerEyeAnchor.localPosition : hmdLeftEye.position;
rightEyeAnchor.localPosition = monoscopic ? centerEyeAnchor.localPosition : hmdRightEye.position;

の下に

if (!monoscopic)
{
float stereoMultiplier = 0.2f;// use value you want between 0 (no stereo) and 1 (strong stereo)
leftEyeAnchor.localPosition = Vector3.Lerp(centerEyeAnchor.localPosition, hmdLeftEye.position, stereoMultiplier);
rightEyeAnchor.localPosition = Vector3.Lerp(centerEyeAnchor.localPosition, hmdRightEye.position, stereoMultiplier);
}

を追加します。

6.仕上げ

・ビルドするシーンはとりあえずVuforia-3-AR-VRだけでいいようです。

・忘れずにPlugins/Android/assetsにoculussigファイルを入れてください。

・ビルドセッティングでOrientationをLandscape leftにしてください。

・Build Settings > Other SettingsからMulti-Threaded Renderingを有効にしてください。

・実行させるにはApp License Keyが必要となります。

License Manager

↑こちらのリンク先からアプリ用のライセンスキーを作成してください。

ARCameraのVuforia BehaviourコンポーネントのApp License Keyにライセンスキーをコピペしてください。

・お疲れさまでした。
あとはビルドしてGearVRで実行するだけです!