ARCoreでポジショントラッキング
過去、Vuforia、Kudan、ARKitにてモバイルVR向けのポジショントラッキングを実現する方法を書いてきました。
今回は、先日Googleより発表されたARCoreを利用したポジショントラッキングを実現します。
ARCoreのインストール
ARCoreを利用するためには、以下が必要です。
現状ARCoreをサポートする端末は、Galaxy S8, Pixel, Pixel XLの三種類のみです。
これら端末でARCoreを利用するためには、arcore-preview.apkをダウンロードし、adbで端末に書き込む必要があります。
adb install -r -d arcore-preview.apk
UnityでARCoreのサンプルを実行する
まず、以下の手順でARCore SDK for Unityに付属のサンプルシーン(HelloAR.unity)を動かしてみます。
- arcore-unity-sdk-preview.unitypackageをインポート
- HelloAR.unityをダブルクリック
- File->Build Settingsにて、PlatformをAndroidに切り替える
- Edit->Project Settings->Playerにて、以下の通り設定
- Other Settings > Multithreaded Rendering: Off
- Other Settings > Package Nameに適当な名前を設定(例えばcom.example.helloAR)
- Other Settings > Minimum API Level: Android 7.0以上
- Other Settings > Target API Level: Android 7.0 か 7.1
- XR Settings > ARCore Supported: On
- 端末をUSB接続し、Build & Run
アプリを起動すると、数秒ほど「Searching for surfaces...」と表示され、その通り平面を探します。平面が見つかると、平面上にメッシュが表示されます。
メッシュの上をタップすると、そこにドロイドくんが配置されます。技術的にはARKitと同様の感じです。
ARCoreでポジショントラッキング
次に、ARCoreを利用してGoogle Cardboardにてポジショントラッキングを実現します。
まず、以下のスクリプトを作成します。
using UnityEngine; using GoogleARCore; public class PosiTra : MonoBehaviour { private Vector3 origPos; void Start () { origPos = gameObject.transform.position; } void Update () { if (Frame.TrackingState == FrameTrackingState.Tracking) { var pose = Frame.Pose; gameObject.transform.position = pose.position + origPos; } } }
ARCoreには、カメラ位置・回転を取得するためのPoseクラスが用意されているため、非常に簡単にポジショントラッキングが実現できます。
次に、以下の通り、シーンを編集します。
- GoogleARCore/Prefabs/ARCore Device.prefabをシーンに配置。Session ComponentのFirst Person CameraをNoneにする(カメラライブビュー表示を削除するため)
- 空GameObjectを作成し(Playerとします)、PosiTraコンポーネントを追加
- ARCore Deviceの子オブジェクトFirst Person CameraをPlayer配下へ移動
最後に、Edit->Project Settings->Player->XR Settings->Virtual Reality Supportedをチェックし、SDKsにCardboardを追加して、Build & Runします。
おわりに
ARCoreを使うと、ARKit同様の高品位なポジショントラッキングをGoogle Cardboardアプリで実現できます!・・が、対応機種が少なすぎます・・
ARCoreを活用したVRアプリが量産される、ためには、ARCoreの対応機種がもっともっと増える必要がありそうです。