Tutti Lab

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

ARKitを利用してGoogle Cardboardでポジショントラッキング

過去、モバイル向けARエンジンであるVuforiaKudanを利用したモバイルVRでのポジショントラッキングに挑戦してきました。
今回は、先のWWDCで発表されたAppleのARエンジンであるARKitを利用したポジショントラッキングに挑戦してみます。

youtu.be

UnityでARKitを利用するための準備

これについては、各所で詳細な説明がされているようなので、仔細は書きませんが、

  1. Apple Developer Programより、XCode 9 betaをインストールする
  2. 同じく、iOS11 betaをインストールする(こちらはMacからではなくiOS端末にて)
  3. Unityを5.6.1以上にアップデートする
  4. こちらより、unity-arkit-plugin.unitypackageをダウンロードする

となります。

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

まずは、Assets -> Import Package -> Custom Packageにて「unity-arkit-plugin.unitypackage」をインポートします。
次に、以下のスクリプトを作成し、適当なオブジェクト(MainCameraなど)に設定します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.iOS;

public class PositionTracker : MonoBehaviour {

	public Transform vrCamera;
	private UnityARSessionNativeInterface m_session;

	void Start () {
		Application.targetFrameRate = 60;
		m_session = UnityARSessionNativeInterface.GetARSessionNativeInterface();
		ARKitWorldTackingSessionConfiguration config = new ARKitWorldTackingSessionConfiguration();
		config.planeDetection = UnityARPlaneDetection.Horizontal;
		config.alignment = UnityARAlignment.UnityARAlignmentGravity;
		config.getPointCloudData = true;
		config.enableLightEstimation = true;
		m_session.RunWithConfig(config);
	}
	
	void Update () {

		if (vrCamera != null) {
			Matrix4x4 matrix = m_session.GetCameraPose();
			vrCamera.transform.localPosition = UnityARMatrixOps.GetPosition(matrix);
		}
	}
}

次に、プレイヤーが歩き回るための適当なオブジェクト群を用意します。
私は、夏に向けてホラーコンテンツを開発すべく、以下を利用しました。
https://www.assetstore.unity3d.com/jp/#!/content/18703
f:id:tuti107:20170703000902p:plain

次に、Scene上に空のGameObject(CamParent)を生成し、Main CameraをCamParentへドラッグ&ドロップします。
また、Main Cameraに貼り付けたPositionTrackerのCr Cameraに、CamParentを設定します。
Main CameraのClipping Planes->nearは0.1等としてください。これで、オブジェクトに近づき過ぎても、オブジェクトが欠けづらくなります。
f:id:tuti107:20170703001037p:plain

ビルド・実行

あとは、iOS向けにビルドし、実行するだけです。

  1. File->Build Settingsにて、PlatformをiOSにする
  2. Player Settingsにて、Virtual Reality Supportedにチェックを入れ、Virtual Reality SDKsにCardboardを追加する
  3. Bandle IdentifierやCamera Usage Description(ここが空だと、実行直後に落ちる)を適当に設定する
  4. Build and Runを押下する。しばらくするとXCode9 betaが起動してくるので、Signing -> Teamを正しく設定し、実行する

f:id:tuti107:20170703001718p:plain

終わりに

ARKitよくできていると思います。Google CardboardでVR空間を自由自在に歩き回れる日が来るとは・・感激です!
私の端末はiPhone 6S plusですが、処理落ち等は全く気にならず、精度・パフォーマンス共に素晴らしいです。
ただ、iOSでしか利用できないのがネックです・・Kudanさんがポジショントラッキング機能をサポートする日が待ち遠しい・・