LoginSignup
8
11

More than 3 years have passed since last update.

iPhone12ProのLiDARセンサーとARKit4をUnity+AR Foundation4.1で遊ぶ【オクルージョン編】

Last updated at Posted at 2021-02-15

はじめに

昨年11月にLiDARセンサーで遊ぶためにiPhone12Proを買ったところ、既成アプリで遊ぶだけでなく自分でも触りたくなってしまったのと、ちょっとお得に買えるツテもあったのでMacBook Air M1を買いました。
iOSビルドするのにMacが必要だったので。
それで、先週末そのMacBookが届いたので、早速ARKit4で遊んでみました。そんな日記です。

自動環境オクルージョンといって、現実の部屋に仮想のオブジェクトを配置した映像を写したときに、現実の部屋の手前にある物体が、仮想オブジェクトよりもちゃんと手前に表示されるという機能ができるようになりました。
詳しい説明はこちら:
 AR Foundation support for ARKit 4 DepthAR Foundation が ARKit 4 の深度検出をサポート - Unity Technologies Blog

今回は、これをやっていきたいと思います。

環境

  • iPhone 12 Pro
    • iOS 14.4
  • MacBook Air (M1, 2020)
    • macOS Big Sur 11.2.1
  • Unity Hub 2.4.2
  • Unity 2019.4.20f1
  • Xcode 12.4

Unityプロジェクトの準備

Unity Hubでプロジェクトを作成する

  1. Unity Hubを起動し、「新規作成」をクリック
  2. テンプレートは「3D」を選択し、プロジェクト名を適当に決めて「作成」をクリック
    (今回は ARkit4Occlusion とします)(画像のスペルミスは気にしないように)
    スクリーンショット 2021-02-14 21.50.02.png スクリーンショット 2021-02-14 21.50.28.png

Unity上でのiOSプロジェクトの初期設定

  1. プラットフォームを変更する
  2. メニューバーから「File」→「Build Settings」→Platformで「iOS」を選択し、「Switch Platform」を押下

    スクリーンショット 2021-02-14 21.53.04.png スクリーンショット 2021-02-14 21.53.49.png

  3. メニューバーから「Window」→「Package Manager」→「Advanced」から「Show preview package」をクリック

    スクリーンショット 2021-02-14 21.58.43.png スクリーンショット 2021-02-14 21.59.29.png

  4. AR Foundation 4.1.5を選択し、「Install」ボタンをクリック

    スクリーンショット 2021-02-14 21.59.56.png

  5. ARKit XR Pluginを選択し、「Install」ボタンをクリック

    スクリーンショット 2021-02-14 22.03.28.png

  6. メニューバーから「File」→「Project Settings」→「Player」→「iOS」→「Other Settings」と選択し、以下の3項目を設定する。

    1. Camera Usage Descriptionに、「AR機能にカメラを使用します」(実機でカメラを有効にする際にユーザーに表示されるメッセージです)
    2. Target minimumu iOS Versionに、「12.0」と入力
    3. Architectureで、「ARM64」を選択
      スクリーンショット 2021-02-14 22.13.08.png スクリーンショット 2021-02-14 22.14.36.png スクリーンショット 2021-02-14 22.14.40.png
  7. 同じダイアログの左側のメニューから「XR Plug-in Management」を選択し、「ARKit」をチェック

    スクリーンショット 2021-02-14 22.15.06.png

AR Foundationの基本設定

  1. Hierarchyから「Main Camera」を削除する

    スクリーンショット 2021-02-14 22.15.51.png

  2. メニューバーから「GameObject」→「XR」→「AR Session」とクリックして、AR Sessionオブジェクトを追加

    スクリーンショット 2021-02-14 22.16.31.png

  3. 同様に「GameObject」→「XR」→「AR Session Origin」とクリックして、AR Session Originオブジェクトを追加

    スクリーンショット 2021-02-14 22.19.30.png

  4. AR Session Originを右クリック→「3D Object」→「Cube」とクリックして、AR Session Originの子としてCubeを追加。
    (このCubeがARで映し出され、オクルージョンで隠れるものになります。Cubeじゃなくて好きなオブジェクトでも可。)

    スクリーンショット 2021-02-14 22.22.58.png

  5. InspectorのTransformのScaleの値をすべて「0.1」にする。(Cubeの大きさで、単位はメートル。お好みで変更可)

    スクリーンショット 2021-02-14 22.23.32.png

環境オクルージョンを使う

ARで表示させた仮想物体より手前にある現実の物体を優先して表示させる設定をします。

AROcclusionManagerコンポーネントの追加

  1. Hierarchyから、AR Session Originの子にあるAR Cameraをクリック
    スクリーンショット 2021-02-16 0.38.05.png

  2. Inspectorから、「Add Component」をクリック
    スクリーンショット 2021-02-14 22.34.08.png

  3. 「AR Occlusion Manager」をクリックして追加する
    スクリーンショット 2021-02-14 22.34.26.png

  4. 「Environment Depth Mode」、「Human Segmentation Stencil Mode」、「Human Segmantation Depth Mode」をすべて「Best」に変更する
    スクリーンショット 2021-02-14 22.51.42.png

プロジェクトをビルドして実行する

Unity側での作業

  1. メニューバーから「File」→「Build Settings」

スクリーンショット 2021-02-14 22.59.01.png

  1. 「Add Open Scenes」をクリックする。シーンが追加されたことを確認する
  2. 「Build And Run」ボタンをクリック スクリーンショット 2021-02-14 23.00.01.png
  3. ビルドする名称を聞かれるので、わかりやすい名称を入力する スクリーンショット 2021-02-14 23.00.52.png

Xcode側での作業

  1. 左のメニューの「Unity-iPhone」をクリック
  2. 中央の「Signing & Capabilities」タブをクリック
  3. 「Automatically manage signing」にチェックを入れる
    スクリーンショット 2021-02-14 23.06.27.png

  4. 確認ダイアログが表示されるので「Enable Automatic」をクリック
    スクリーンショット 2021-02-14 23.06.48.png

  5. Team欄で自分のアカウントを選択する。(初めての人は「Add an Account...」から自分のAppleアカウントを追加する)
    スクリーンショット 2021-02-14 23.07.02.png

  6. 上部の「Any iOS Device (arm64)」をクリックし、自分のiPhoneを選択する。
    ※自分のiPhoneをMacに有線接続しておく。ちなみに、初めに設定をすれば以後は有線接続しておく必要はない(参考リンク)
    スクリーンショット 2021-02-14 23.12.45.png スクリーンショット 2021-02-14 23.12.50.png

  7. 画面左上の実行ボタン▶️をクリック
    スクリーンショット 2021-02-14 23.22.45.png

  8. iPhoneのロックを解除するメッセージが表示されたら適宜解除する
    スクリーンショット 2021-02-14 23.54.16.png

iPhone実機で動作確認する

正常にビルドされると、自動的にiPhone側でアプリが起動します。
起動時にiPhoneがあった現実空間の座標にCubeが作成されています。
椅子や自分の手にオクルージョンされて、Cubeが隠れて表示されることが確認できます。
楽しい!
IMG_7169.PNG IMG_7170.PNG

Cubeではなく他のオブジェクトを配置してみる。例えばストカジちゃんを配置することで、ナデナデできてよいです。
IMG_7172.PNG

所感

AR Occlusion Managerの設定をすべてBestに設定したので、CPUに負荷をかけてでもオクルージョンの精度を優先しているはずなのですが、想像していたよりも精度良くはありませんでした。
角が丸いものに対しては深度が正しく取得しづらいのか、指や椅子のフチよりもCubeが優先して表示されていることがわかります。
かなしい。今後の改善に期待。

VRと違って、好きなアバターを自分の部屋に配置して自分の手で干渉できる!!とも思ったのですが、やはり没入感がないと言うか、スマホの画面越しだと「目の前にいる」感が薄いのも残念。
衝突判定持たせて動かせるようにすればちょっとは変わるかなあ?

それから、実際に動かして初めて気付いたことがひとつ。
部屋の奥行きがあると、カメラの手前に仮想オブジェクトを配置していても、カメラ自体は奥の背景にピントが合っているという状態になります。
もちろん仮想オブジェクトもピンぼけはしないのですが、その状態で例えば自分の手を出したりすると、自分の手だけがピンぼけしてることがあります。
2.png
すっごい違和感。
今後のxRでは、アプリで演算した仮想オブジェクトの距離に合わせて、アプリからカメラのピントを調整する仕組みが必要になるのかも。
それと同時に、ARでよくある、ARマーカーを読むと起動する仕組みっていうのはこの問題が発生しづらい、よくできた仕組みだなあと思いました。

さいごに

今回はオクルージョンの機能を触りましたが、ARKit4の目玉のもう一つにボディトラッキング(モーションキャプチャ)があるので、こっちも触ってみようと思います。
トラッカーなしでフルトラを目指して!

参考にしたサイト

8
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
11