おもちゃラボ

Unityで遊びを作っていきます

【AR Foundation入門】セットアップから平面検出まで

これまでUnityからARKitを使いたい場合は、Unity ARKIt Pluginを使うのが一般的でした。ただ、Unity2019からはUnity ARKIt Pluginに変わってAR Foundationが公式でサポートされるようになりました。そのため、これからUnityでARを始めたい人は、AR Foundationを使うのが一般的になるでしょう。

そこで、この記事ではUnityでAR Foundationを使うための基本的なセットアップ方法を紹介します。また、初回の今回はAR Foundationを使って平面検出を行ってみます。

f:id:nn_hokuson:20200707221306j:plain:w650

AR Foundationを使った平面検出の流れは次のとおりです。

プロジェクトの作成

UnityでAR関連のアプリを作りたい場合は、Templeteから3Dのプロジェクトを作成します。プロジェクト名や保存場所は任意のもので構いません。

f:id:nn_hokuson:20200706160128p:plain:w500

AR Foundationのインストール

AR Foundationはパッケージという形で配布されています。したがって、UnityからAR Foundationを使うにはPackage Managerからインストールする必要があります。

メニューバーのWindow→Package Managerを選択して下さい。パッケージマネージャのPackages欄で「All」を選択した上で、検索欄にAR Foundationと入力します。すると、左カラムにAR Foundationのパッケージが表示されるので、インストールしたいバージョンを選択して、右下のインストールボタンをクリックして下さい。

f:id:nn_hokuson:20200706160515p:plain:w500

これにより、AR FoundationとAR Subsystemsのパッケージがインストールされます。次に、ARKitを使いたい場合は追加でARKIt XR PluginとARKit Face Tracking(顔検出を使いたい場合のみ)、ARCoreを使いたい場合はAR Core XR Pluginのパッケージをインストールして下さい。このとき、ARKIt XR PluginとAR Foundationのバージョンは揃えておくことをおすすめします。


AR Sessionを作成する

AR Foundationではセッションという単位でARの挙動を定義します。そのセッションの動きを管理するのがAR SessionとAR Session Originのオブジェクトです。

これらのオブジェクトをシーンに追加しましょう。ヒエラルキーウインドウの「+」をクリックして「XR→AR Session Origin」と「XR→AR Session」を追加して下さい。

f:id:nn_hokuson:20200706161216p:plain:w300 f:id:nn_hokuson:20200706161241p:plain:w300

AR Sessinはその名の通りセッションを管理するためのもので、AR Session OriginはAR座標系の原点とカメラの挙動を管理するためのものです。AR Session Originの子要素にはAR用のカメラが追加されているため、最初からあるMain Cameraは不要です。削除しておきましょう。

平面検出を行う

基本的にはAR Session Originオブジェクトに、様々なARのコンポーネント追加していきます。今回は平面検出をしたいので、AR Session OriginオブジェクトにAR Plane Managerコンポーネントをアタッチします。

f:id:nn_hokuson:20200706161519p:plain:w300

AR Plane ManagerのDetection Mode欄では、検出する面の方向(水平面・垂直面)を指定できます。選択できる項目の意味は次のようになります。

項目 意味
Everything 全ての平面を検出
Horizontal 水平面のみ検出
Vertical 垂直面のみ検出

また、Plane Prefabに平面のPrefabを設定することで、検出した平面を視覚化することができます。平面のPrefabを作って、検出した平面を視覚化してみましょう。

ヒエラルキーウインドウの「+」から「XR→AR Default Plane」を選択して下さい。

f:id:nn_hokuson:20200706161850p:plain:w300

作成したAR Default Planeオブジェクトをプロジェクトウィンドウにドラッグ&ドロップしてPrefabを作成します。作成したPrefabをAR Plane ManagerのPlane Prefabの欄にドラッグしてくだい。ヒエラルキーウインドウにあるAR Default Planeは削除しておいて下さい。

f:id:nn_hokuson:20200706162840j:plain

ビルドする

最後にiOS用にビルドしてみましょう。iOSのビルドには次の設定が必要になります。

  • Player Settings
  • XR/ARKit Build Settings
  • Plug-in Providers

Player Settingsの設定

メニューバーから「File → Build Setting 」を選択してBuild Settingsパネルを開き、ビルドターゲットをiOSに変更して下さい。次に「 Player Settings」ボタンをクリックして、Player項目のOhter Settingsの欄を次のように設定して下さい。

Bundle Identifire 任意の文字列
Camera Usage Description 任意の文字列
Target minimum iOS Version 13.0

f:id:nn_hokuson:20200706163129p:plain:w400

XR/ARKit Build Settingsの設定

また、Project Settingsのウインドウの左カラムからXR/ARKit Build Settingsを選択して、右カラムでCreateボタンをクリックします。

f:id:nn_hokuson:20200706163412p:plain:w400

XR Plug-in Managementの設定

最後に左カラムのXR Plug-in Managementを選択して、右カラムのiOSタブを選択、iOSタブをクリックして、Plug-in ProvidersのARKitにチェックを入れてください。

f:id:nn_hokuson:20200706163439p:plain:w400

実行してみる

Build Settingsのウインドウに戻ってBuild And Runのボタンを押して端末にインストールして下さい。アプリを起動してカメラを左右に動かすと平面が検出されて、検出された平面が黄色で表示されます。

f:id:nn_hokuson:20200707221903g:plain:w600

【AR Foundation】AR Foundation 4.0の使い方

AR Foundation4.0では、People OcclusionやHuman SegmentationなどARKIt 3.0の機能をUnityから簡単に使えるようになっています。ただ、AR Foundation4.0は2020年7月現在はpreview版のため、UnityのPackage Managerからインストールできなくなっています。

そこで、ここではUnity2020でAR Foundation4.0 previewを使う方法を説明したいと思います。AR Foundationを動かす流れとしては次のようになります。

プロジェクトの作成

プロジェクトの作成は通常のARアプリと同様に、テンプレートは3Dを選択してください。プロジェクトが作成できてUnityエディタが起動したら、次はmanifest.jsonを編集します。

f:id:nn_hokuson:20200703165147j:plain:w500

manifest.jsonの編集

作成したプロジェクトのフォルダを開き(Unity上ではなく、FinderやExploerから開いてください)Packagesフォルダの中にmanifest.jsonというファイルを見つけてください。

f:id:nn_hokuson:20200703165652p:plain:w500

このmanifest.jsonにはUnityのパッケージマネージャで扱うパッケージの一覧が記述されています。このファイルをテキストエディタなどで開いて、次の4行をdependencies:{}の{}の中に記述してください。場所はどこでも大丈夫です。

"com.unity.xr.arcore": "4.0.0-preview.3",
"com.unity.xr.arfoundation": "4.0.0-preview.3",
"com.unity.xr.arkit": "4.0.0-preview.3",
"com.unity.xr.arkit-face-tracking": "4.0.0-preview.3",

ここに記述したパッケージがUnityのPackage Managerから見えるようになります。manifest.jsonを保存してUnityエディタに戻ると、自動的に今追加したARFoundationのパッケージのインストールが始まります。

f:id:nn_hokuson:20200703165809p:plain

Project Settingの設定

AR Foundation4.0でARKitやARCoreを使う場合、Project Settingから次の2点を設定する必要があります。

  • ARKit Build Settings
  • Plug-in Providers

ARKit Build Settingsを設定する

メニューバーからEdit→Project Settingsを選択して、Project Settingsの画面を開いてください。左カラムからARKit Build Settings(またはARCore Build Settings)を選択して、右カラムでCreateボタンをクリックします。

f:id:nn_hokuson:20200703165922p:plain:w400

Plug-in Providersを設定する

またARKitの場合、Project SettingsのXR Plug-in Managementを選択して、右カラムのiOSを選択、iOSタブをクリックして、Plug-in ProvidersのARKitにチェックを入れてください。

f:id:nn_hokuson:20200703170030p:plain:w400

あとは、いつものようにAR Foundationの各種設定を行ってからビルドすればAR Foundation 4.0.0 preview をUnityから使うことができます。

【Unity】樹木を作る

Unityには様々な形の木を作ることができるツールが付属しています(知りませんでした)。ただ、このツール、設定しなくてはいけないパラメータがめちゃくちゃ多いので、1本の木を作るまでが大変です。そこで、ここではUnity2019を使って、最小限のパラメータだけで木を作る方法を説明します。

f:id:nn_hokuson:20200331185250p:plain:w600

Unityを使って木を作る流れは次のとおりです。

木を作成する

ヒエラルキーウインドウでCreate→3D→Treeを選択してください。シーンウインドウに一本の木が表示されます。これが、これから作っていく木の幹になります。

f:id:nn_hokuson:20200331185307p:plain:w220 f:id:nn_hokuson:20200331185317p:plain:w350

幹の設定

作成した木の幹の設定を行います。設定と言っても幹で必要になるパラメータは次の2つぐらいです。

  • Length
  • Crinkness

Lengthは木の幹の長さ(そのままですね・・)です。また、Crinknessは木のねじれ具合を表します。盆栽の松みたいにくねくねした木を作りたいときにはこのパラメータを調節してください。

これらのパラメータを操作するために、シーンウインドウで木のモデルを選択した状態でインスペクタを見てください。インスペクタのTreeパネルに表示された木の幹の画像をクリックすると、幹のパラメータが表示されます。表示されたパラメータのうちLengthとCrinknessを調整します。

f:id:nn_hokuson:20200331185329g:plain:w600

いい感じの幹ができたら、次は枝の設定をしていきましょう。

枝の設定

次に幹から枝を生やします。Treeパネルの幹を選択した状態で、パネル右下のAdd Brunch Groupボタンをクリックしてください。一本だけ木から枝が生えると思います。

この枝の調整には次の3つのパラメータを使います。

  • Freqency
  • Grown Angle
  • Length

Frequencyは親の木(ここでは幹)から何本の枝を生やすかを指定します。GrownAngleは枝が成長する向きを決めます。Lengthではスライダを使って長さのばらつきを決めます。ここではFrequencyに「5」、Grown Angleに「0.93」を設定しました。

f:id:nn_hokuson:20200331185349g:plain:w600

いま生やした枝から更に枝を生やします。そのためTreeパネルの一番上の木のパネルを選択して、先程と同様にパネル右下のAdd Brunch Groupボタンをクリックしてください。今回は先程よりも枝の本数を増やしたいのでFreqencyを「15」、Grown Angleを「0.53」に設定しています。

f:id:nn_hokuson:20200331185415g:plain

また、木の枝の形状を上向けに反らせるために「Seek Sun」のパラメータを大きくしています。この値を大きくすることで枝が太陽の方向を向くように変形します。

葉の設定

木に葉っぱを付ける

最後に木に葉っぱを生やしましょう。葉っぱも先程と同様にTreeパネルから設定できます。Treeパネルの一番上の木のパネルを選択した状態で、Treeパネル右下のAdd Leaf Groupボタンをクリックしてください。

葉っぱの設定に必要なパラメータは次のようになります。

  • Frequency
  • Distribution

Frequencyは葉っぱの枚数を表すので、値を大きくすればそれだけ葉っぱの数が増えます。ここでは「10」に設定しました。

f:id:nn_hokuson:20200331185443g:plain

また、ここでは操作していませんが、Distributionは葉っぱの付き方(葉っぱのばらつき方)を変えるパラメータです。Random、Alternate、Opposite、Whorledが選択でき、それぞれの意味は次のようになります。それぞれどのように見え方が変わるか試してみてください。

パラメータ 意味
Random ランダムに生成
Alternate 交互に生成
Opposite 対になるように生成
Whorled 螺旋状に生成

葉のマテリアルの作成

今のままでは葉っぱが平面モデルのままなので、ここにマテリアルを割り当てます。そのマテリアルを作りましょう。

プロジェクトウィンドウで右クリックして、Crate→Materialを選択してください。Unityには葉っぱ用のシェーダがすでに用意されているので、それを利用します。作成したマテリアルを選択して、インスペクタからNature/Tree Creator Leaves Fastを選択してください。また、葉っぱのテクスチャは次のものを使いました。
f:id:nn_hokuson:20200331190814p:plain:w100
マテリアルのシェーダを変更した上で、マテリアルのテクスチャ欄には上記の葉っぱのテクスチャを設定してください

f:id:nn_hokuson:20200331185506j:plain:w650

いま作成したマテリアルを、葉っぱのモデルに反映しましょう。シーンウインドウで木を選択した状態で、インスペクタのTreeパネルから葉っぱのパネルを選択してください。

f:id:nn_hokuson:20200331185517p:plain:w200

葉っぱの設定画面が表示されるので、GeometryのMaterialの欄に作成したマテリアルをドラッグ&ドロップしてください。

f:id:nn_hokuson:20200331165427j:plain:w650

木の幹にも茶色のマテリアルを作成して適応すれば完成です。

f:id:nn_hokuson:20200331185540p:plain:w650

まとめ

ここではUnityを使って木のモデルを作る方法を紹介しました。一見、設定しなくてはいけないパラメータが多いので大変そうですが、実際には数個のパラメータを調整するだけでそれっぽい木を作ることができました。