スマホVRはポジトラの白昼夢を見るのか? - ReDo

2017年10月20日

スマホVRはポジトラの白昼夢を見るのか?

Mobile inside-out VR Tracking, now readily available on your phone with Unity - Unity Blog
https://blogs.unity3d.com/jp/2017/10/18/mobile-inside-out-vr-tracking-now-readily-available-on-your-phone-with-unity/

Mobile inside-out VR TrackingをSamsung Galaxy S8でDaydreamGear VR+ARCoreにて実現する話がUnity Blogに掲載されました。
ASUS ZenFoneAR+Tangoでも実現した話がついでに掲載されています。

特に後者について、target23だとDaydreamが動かず、target24だとTangoが動かなかった僕の確認結果が突破されていて謎だったので、追試をしてみました。


〇プロジェクト一式よこせ系

Tangoはもう公開されてない古いSDKが必要だったりウニョいのでアレですが全部込みでGitHubに置きました。apkもあります。

Tango + Daydream
https://github.com/youten/TangoDream
ARCore + Daydream
https://github.com/youten/ARCoreDream


〇Daydream+ARCore

・Pixel XL(Android8.0)
・Unity2017.2.0f3を使用
・arcore-unity-sdk-preview.unitypackageをインポート
・Player Settingsまわりはblogにも掲載されている他、Unityのネイティブ対応に任せたGear VR/DaydreamとARCoreの公開ドキュメントの通りのため省略。

ここから話がはしょられ気味、よしなに補完しつつ完成させる。

・ARCore DeviceプレハブをHierarchyに配置、Tracking TypeはPosition onlyに設定。配下のFirst Person Cameraは使わないので無効にする。
・AR Session ConfigのDefaultSessionConfigを開き、Enable Plane FindingとEnable Pointcloudのチェックを外す
・GoogleARCore/HelloExample/Scripts/HelloARController.csをベースにblogの内容に従ってゴリゴリと書き換える
・VRCameraParent(Empty)>Camera(Camera)>CanvasCamPose(Empty)>CanvasとCamPoseText(Text)という階層構造で、ARCoreでposition移動させる対象の下に標準カメラを、さらにその下にデバッグ表示TextをWorld Spaceでぶら下げる。

ARCoreは起動・初期化時にカメラが原点になるらしく、適当に起動すると地面に埋まります。手元に持った状態で起動する方が楽なのでCameraのTransoform Y=1.2を設定。
このあたりはPlain Findingを有効にして地面認識を待ってずらす処理などが必要そう。

動かしてみた感想はそれなりに動いているが、Tangoと比較してプルプル気味、座標が飛びやすい。
Tangoと違ってArea Learningによる復帰ができないので実際に使おうとすると、人をうまく狙ったように動かす起動前チュートリアル設計が重要そうです。


〇Daydream+Tango


・ZenFoneAR(Android7.0)
・Unity5.6.3p4を使用
・Player Settings > Other Settings > Virtual Reality Supportedを有効に、Virtual Reality SDKsにDaydreamを追加
・Minimum API LevelをAndroid 7.0 'Nougat' (API level 24)に設定
・blogに従って、最新のTango SDK Ikariotikosを避けるも、TangoSDK_Biyelgee_Unity5.unitypackageは古すぎて手元にない。2つ前のTangoSDK_Gankino_Unity5.unitypackageが見つかったのでそちらを利用、Deprecatedフォルダ内のTango Delta Camera(Deprecated)を利用して成功。
・AndroidManifest.xmlのマージエラーは直下のmin17をmin19に変更することで回避。

結論として、Unityの設定としてAndroidのSDKバージョンがmin24だとしても、Pluginフォルダ内に含まれるAndroidManifest.xmlの方が優先され、min19target23としてDaydream(Android 7.0が要件)とTango(target23が制限)は同居できました。
Google VR SDKを含めるとtarget24になってしまうので、Daydream Controller APIが使えなくなるはず(回避可能?)。
Daydreamコントローラを使わないのであればペアリングまわりの操作は不要なので、デベロッパー設定でVR Entry Screenは外しておくとちょっと便利です。


〇さいごに

はー技術書典3前に色々すっきりしてよかった。

コメントする