Tutti Lab

元シリコンバレー在住のおっさん技術者、モバイルVRアプリ開発に挑戦中

ARCoreでポジショントラッキング

過去、VuforiaKudanARKitにてモバイルVR向けのポジショントラッキングを実現する方法を書いてきました。
今回は、先日Googleより発表されたARCoreを利用したポジショントラッキングを実現します。

f:id:tuti107:20170916180729p:plain

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します。

youtu.be

おわりに

ARCoreを使うと、ARKit同様の高品位なポジショントラッキングをGoogle Cardboardアプリで実現できます!・・が、対応機種が少なすぎます・・
ARCoreを活用したVRアプリが量産される、ためには、ARCoreの対応機種がもっともっと増える必要がありそうです。