見出し画像

AR Foundation 4.0 入門

「AR Foundation 4.0」の使い方をまとめました。

1. AR Foundation

AR Foundation」は、「Unity」を使って「ARアプリ」を作成するためのパッケージです。

2. AR Foundation の対応端末

「AR Foundation」の対応端末は、次の4つです。

・Android
・iOS
・Magic Leap
・HoloLens

3. AR Foundationの主な機能

「AR Foundation」の主な機能は、次のとおりです。

Device tracking : 物理空間のデバイスと仮想空間のカメラの位置と姿勢を同期。
Light estimation : 物理空間と仮想空間の光源と輝度の同期。
Plane detection : 水平面および垂直面の検出。
Point clouds : 特徴点の検出。
Anchor : アンカーの位置と姿勢の追跡。
Environment probe : 物理空間の特定領域を表すキューブマップの生成。
Face tracking : 人間の顔の検出と追跡。
2D image tracking : 2D画像の検出と追跡。
3D object tracking : 3Dオブジェクトの検出と追跡。
Meshing : 物理空間に対応するメッシュの生成。
Body tracking : 物理空間の人間の姿勢推定。
Colaborative participants : 共有セッションを使って他のユーザーのデバイスの位置と姿勢を追跡。
Human segmentation and occlusion : オクルージョン。
Raycast : レイキャストで面および特徴点の衝突判定。
Pass-through video : カメラ映像をARコンテンツの背景として利用。
Session management : ARのセッション管理。

機能のサポート状況は、次のとおりです。

画像2

4. AR Foundation のインストール

「AR Foundation 4.0」は、Unityの「Package Manager」でインストールします。「AR Foundation」本体に加えて、プラットフォーム毎のパッケージをインストールする必要があります。

AR Foundation : 本体
ARCore XR Plugin : Android
ARKit XR Plugin : iOS
ARKit Face Tracking : iOS (Face Tracking用)
Magic Leap XR Plugin : Magic Leap
Windows XR Plugin : HoloLens

サポートしているUnityのバージョンは、次の2つになります。
・Unity 2019.2
・Unity 2019.3

今回は、iOS用に「AR Foundation」と「ARKit XR Plugin」をインストールします。インストール手順は、次のとおりです。

(1)  Unityプロジェクトの作成。
(2)  メニュー「Window → Package Manager」を選択。
(3)「Advanced → Show preview packages」を選択。
(4)「AR Foundation 4.0.0 - preview.1」を選択して「Install」ボタンを押す。
(5)「ARKit XR Plugin 4.0.0 - preview.1」を選択して「Install」ボタンを押す。

5. AR Foundationの基本階層の作成

はじめに、「AR Foundation」の基本階層を作成します。

(1) Hierarchyウィンドウに最初から配置されてる「Main Camera」と「Directional Light」を削除。
(2) メニュー「GameObject → XR → AR Session」で「ARSessionオブジェクト」を追加。
「ARSessionオブジェクト」は、ARエクスペリエンスのライフサイクルを制御するオブジェクトです。
(3) メニュー「GameObject → XR → AR Session Origin」で「ARSessionOriginオブジェクト」を追加。
「ARSessionOriginオブジェクト」は、ARアプリケーション開始時のデバイスの位置の原点となるオブジェクトです

画像3

6. 平面の検出

次に、平面を検出して表示する機能を追加します。

◎ ARPlaneManagerスクリプトの追加
「ARPlaneManagerスクリプト」は、平面の検出を行うスクリプトです。

(1)「ARSessionOriginオブジェクト」に、「ARPlaneManagerスクリプト」を追加。
(2)「ARPlaneManagerスクリプト」の「Detection Mode」に「Everything」を指定。
これは検出する平面の種類になります。

・Nothing: なし
・Everything: 両方
・Horizontal: 水平面
・Vertical: 垂直面

画像4

◎ Planeプレハブの指定
「Planeプレハブ」は、平面検出時に表示する平面のプレハブです。

(1) メニュー「GameObject → XR → AR Default Plane」を選択し、シーンに「ARDefaultPlaneオブジェクト」を追加。
(2)「ARDefaultPlaneオブジェクト」をProjectウィンドウにドラッグ&ドロップしてプレハブ化。
(3) プレハブ化した「ARDefaultPlaneオブジェクト」を「ARPlaneManagerスクリプト」の「Plane Prefab」にドラッグ&ドロップ。
(4) Hierarchyウィンドウに追加したままの「ARDefaultPlaneオブジェクト」を削除。

画像5

7. 画面タッチの検出

検出した平面のタッチ時に、3Dオブジェクトを配置する機能を追加します。

(1)「ARSessionOriginオブジェクト」に「ARRaycastManagerスクリプト」を追加。
「ARRaycastManagerスクリプト」は、レイキャストを制御するスクリプトです。
(2)「ARSessionOriginオブジェクト」に「CreateObject」という名前の新規スクリプトを追加し、以下のように編集。

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

[RequireComponent(typeof(ARRaycastManager))]
public class CreateObject : MonoBehaviour
{
    [SerializeField]
    GameObject objectPrefab;

    ARRaycastManager raycastManager;
    List<ARRaycastHit> hitResults = new List<ARRaycastHit>();

    // 初期化時に呼ばれる
    void Awake()
    {
        raycastManager = GetComponent<ARRaycastManager>();
    }

    // フレーム毎に呼ばれる
    void Update() {
        // タッチ時
        if (Input.GetMouseButtonDown(0))
        {
            // レイと検出平面が衝突時
            if (raycastManager.Raycast(Input.GetTouch(0).position, hitResults))
            {
                // 3Dオブジェクトの生成
                Instantiate(objectPrefab, hitResults[0].pose.position, Quaternion.identity);
            }
        }
    }
}

(3)「CreateObjectスクリプト」の「Object Prefab」に表示したい3Dオブジェクトのプレハブ(CubeでもOK)を指定。

画像6

8. iPhoneでの実行

ARアプリケーションはUnityエディタ上では動作しません。iOSアプリにビルドしてから、iPhoneで動作確認します。

(1) メニュー「File → Build Settings」を選択し、「Scenes In Build」にシーンを追加し、「Platform」で「iOS」を選択。
(2) メニュー「Edit → Project Settings」を選択し、「Player → Other Settings」で以下の設定を行う。

Camera Usage Description : AR機能にカメラを使います。
・Target minimum iOS Version : 12.0Architecture : ARM64

画像7

【注意】「4.0.0 Preview-3」 では、「Edit → Project Settings → XR Plug-in Management」の「ARKit」のチェックも必要になりました。

(3) 「Build Settings」で、「Build」ボタンを押す。
成功すると、Xcodeのプロジェクトが生成されます。

(4) Xcodeのプロジェクトから、通常のiOSの開発方法と同様に、iOSアプリをビルドし、iPhoneにインストール。

【おまけ】 AR Foundationのコンポーネント

◎ ARSessionオブジェクト
AR機能のライフサイクルを制御するオブジェクトです。ARシーンには必須のオブジェクトになります。

画像7

以下の2つのスクリプトが含まれています。

・ARSessionスクリプト
・ARInputManagerスクリプト

「ARSessionスクリプト」のパラメータは、次のとおりです。

・Attempt Update: ARソフトウェアのインストールを試みるかどうか。
・Match Frame Rate: ARフレームが利用可能になるまでセッションをブロックするかどうか。
・Tracking Mode: トラッキングモード。
 ・DontCare: 追跡しない
 ・PositionAndRotation: 6自由度(位置と向き)
 ・RotationOnly: 3自由度(向き)

◎ ARSessionOriginオブジェクト
ARアプリ開始時の端末の位置の原点となるオブジェクトです。このオブジェクトの子ノードとして、AR空間内のカメラや3Dオブジェクトを配置します。

画像8

以下の1つのスクリプトが含まれています。

・ARSessionOriginスクリプト

「ARSessionOriginスクリプト」のパラメータは、次のとおりです。

・Camera: ARカメラ

◎ ARCameraオブジェクト
AR空間内のカメラのオブジェクトです。現実空間内のカメラ位置と、AR空間内のカメラの位置を同期させることで、ARを実現します。

画像9

以下の3つのスクリプトが追加されています。

・ARPoseDriverスクリプト
・ARCameraManagerスクリプト
・ARCameraBackgroundスクリプト

「ARCameraManagerスクリプト」のパラメータは、次のとおりです。

・AutoFocus: オートフォーカスの有効・無効。
・Light Estimation: 光源推定。
 ・None: なし
 ・Everything: 全て
 ・AmbientIntensity: 環境の平均アンビエント強度の推定。
 ・AmbientColor: 環境の平均アンビエントカラーの推定。
 ・AmbientSphericalHarmonics: 環境の平均周囲光を表す球面調和関数の推定。	
 ・MainLightDirection: 環境におけるメインライトの方向の推定。	
 ・MainLightIntensity: 環境内のメインライトの強度の推定。	
・Facing Direction: カメラ方向
 ・None: なし
 ・World: 背面カメラ	
 ・User: 前面カメラ	

「ARCameraBackgroundスクリプト」のパラメータは、次のとおりです。

・Custom Material: カスタムマテリアルの利用

◎ 追跡可能なオブジェクト
追跡可能なオブジェクトには、以下の8種類があります。

・平面(ARPlane)
・ポイントクラウド(ARPointCloud)
・アンカー(ARAnchor)
・2Dイメージ(ARTrackedImage)
・キューブマップ(AREnvironmentProbe)
・顔(ARFace)
・3Dオブジェクト(ARTrackedObject)
・マルチユーザーコラボセッション時の他のユーザー(ARParticipant)

画像10



この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
8

こちらでもピックアップされています

AR・VR入門
AR・VR入門
  • 31本

AR・VR関連のノートをまとめました。

コメントを投稿するには、 ログイン または 会員登録 をする必要があります。