じゅころぐAR

ARのブログ

ARKit3.5およびAR Foundation4.0を試しました

LiDARスキャナを搭載したiPad Pro 2020の発売に合わせて、ARKit3.5が発表になりました。ほぼ同時にリリースされたAR Foundation 4.0も含めていろいろ触ってみたので、基本的な部分を紹介します。

LiDARとは

「light detection and ranging(光による検知と測距)」の略だそうです。
LiDARという用語自体は自動運転車で障害物を検出するセンサとしてよく使われている印象。自動運転で使われるものは、高精度で測定距離も長く、もっと高額ですね。

赤外線などのレーザー光を飛ばして、物体を三次元的に検出する仕組みはGoogleのTangoで使われていたToF(Time of Flight)センサと同じです。

iPad Proに搭載されているLiDARの性能

公式な仕様の記載が見つからず、ニュース記事や実機で試しての数字ですが、検出できる距離は5m程度です。
これもTango対応スマートフォンに搭載されていたセンサと同程度のスペックです。

ARKit3.5について

何ができるのかは、Appleが公開している記事を読むのが手取り早いでしょう。

https://developer.apple.com/augmented-reality/arkit/

冒頭の説明に、

ARKit 3.5 uses the new LiDAR Scanner and depth-sensing system on iPad Pro to make AR experiences more realistic than ever before.

と書かれている通り、ARKit3.5ではLiDARスキャナを前提とした機能アップデートが行われています。
現状では、iPad Pro 2020を購入した人でないと体験・開発ができません。

とはいえ、ARKit3.5として公開された以上、次期iPhoneや噂のARグラスにもLiDARが搭載される可能性が高く、今後に向けての布石と思われます。

少し話が逸れましたが、先程の記事を参照すると3つのトピックが紹介されています。

  • Scene Geometry
  • Instant AR
  • Improved Motion Capture and People Occlusion

それぞれ、実際に試した内容を交えて紹介します。

Scene Geometry

ARKit3.5ではLiDARスキャナを活用することで、周囲の空間の3Dメッシュを生成することができます。Tangoにも同等のメッシュ構成機能がありましたが、ARCoreより先にARKitで復活した形です。

LiDARスキャナの測定範囲内(5m先まで)を瞬時に検知してメッシュを構成します。
詳細およびデモアプリはこちらから。 https://developer.apple.com/documentation/arkit/world_tracking/visualizing_and_interacting_with_a_reconstructed_scene

特筆すべきは、検知したメッシュにラベルが付けられているという点です。
ARKit3.5で利用できるラベルには以下があります。

  • Floor(床)
  • Wall(壁)
  • Ceiling(天井)
  • Table(机)
  • Seat(椅子)
  • Door(ドア)
  • Window(窓)
  • Node(ラベルなし、その他)

このメッシュ構成と分類(Classification)がARKit3.5の唯一の新機能であり、アイデア次第で様々なARに使える非常に楽しいアップデートです。
詳細はAR Foundatuon 4.0のところで再度触れます。

Instant AR

これは特段新しい機能という訳ではなく、従来のARKitでも対応していた平面検知やHittestで内部的にLiDARスキャナが使われるようになり、対応デバイスでは反応が速くなるということです。

文字にすると地味ですが、実際に体験すると感動する速さです。

LiDARスキャナに対応したデバイスをiOS13.4にアップデートすれば、アプリ側は特に実装を変更しなくても検知の速度が上がります。
ほとんどの場合で従来よりも体験の質が上がるはずですが、平面検知の反応が良すぎてマイナスに働くケースも稀にあるかもしれません。

Improved Motion Capture and People Occlusion

最後にモーションキャプチャとピープルオクルージョンの性能向上です。こちらもLiDARスキャナを利用することで、アプリを変更しなくても精度がよくなります。

モーションキャプチャ

iPad Proの実機で試してみましたが、依然として横向きや後ろ向きの検出に弱く、手や足の交差も破綻しやすいです。
動画は撮り忘れました。すいません。

明らかな差異としては、画像、動画、イラスト、フィギュアといった「人物が映っている or 人物を模している物」の検知がしにくくなりました。

こういうやつです。

厳密には人ではないので、誤検知が減ったと言われればそうなんですが、それはそれで面白かっただけにちょっと残念。
そういうイレギュラーな使い方を考えていた人がもしいれば、再考が必要でしょう。

ピープルオクルージョン

精度が良くなったとのことですが、ピープルオクルージョンに関しては元々かなり精度が出ていたんですよね。

以下はARKit3.5にアップデート前のiPhone 11の画像です。

で、こちらがiPad Proのデモ。

違いはわかりにくい。

AR Foundation 4.0について

ARKit3.5が発表されてすぐに4.0.0のpreview版が公開されていました。ARKitに関してはAppleとUnityの連携が取れているのでありがたいです。

About AR Foundation | AR Foundation | 4.0.0-preview.1

サポートプラットフォームの拡充

AR Foundation 4.0はARKit3.5にとっても重要なんですが、もっと大事なアップデートが、Magic Leap XR PluginとWindows XR PluginがAR Foundationに統合されたことです。

これで、

  • ARKit(iPhone、iPad)
  • ARCore(Android)
  • Magic Leap
  • Microsoft HoloLens

の開発が(機能の差異はあれど)AR Foundationでできることになります。

元々、AR FoundationはモバイルARに限らず、様々なARデバイスを今後サポートすると明言してたんですよね。Appleやfacebookで発売が噂されているARグラスもサポートされていく可能性が高く、UnityでARやるならAR Foundation一択になっていくんじゃないでしょうか。

AR Foundationは簡単に使えるのですが、マニュアルやチュートリアルが不足気味なので初心者向けの技術同人誌書いてます。参考にしてもらえるとうれしいです(宣伝)

jyuko.booth.pm

ARKit3.5対応

AR Foundation 4.0.0でのARKit3.5の対応状況について、平面検知、モーションキャプチャ、ピープルオクルージョンの性能向上についてはコードを直さずに…とのことなので、AR Foundationに関係なく反映されています。

となると、関係があるのはScene Geometryなのですが、現状はメッシュを構成する機能が見当たりません(探し方が悪かったらすまん)

ただし、平面検知で検知した平面を分類する拡張がARPlaneに対して行われています。

こちらはAR Foundation Samplesにも実装されており、PlaneClassificationが該当のサンプルです。

GitHub - Unity-Technologies/arfoundation-samples: Example content for Unity projects based on AR Foundation

サンプルをiPad Proの実機で動かすと、このような結果になります。

平面の分類は機械学習で行っているように見え、LiDARなしでも動作するかと思ったのですが、iPhone 11(iOS 13.4)では全ての平面がNoneになりました。

このPlaneClassificationはなかなかに面白く、使い方次第でAR表現がワンランクアップすると考えています。

PlaneClassificationを活用した実装

平面を区別できるということは、ラベルに合わせてインタラクションを変えることができ、ARが不自然な表現にならないような制約を設けることができます。

例えば、デジタルポスターをARで表示するとします。
ポスターを壁、天井、ドアに貼っても違和感はないですが、床、机、椅子、窓に貼る人はいないんじゃないでしょうか?

別の例として、食べ物をARで表示するとします。普通、机の上に置きますよね?
じゃあ、家具は? 壁を背にして床に置くケースが多いんじゃないでしょうか。

このように特定の平面だけに作用するアクションをスクリプトで実装してあげることで色々な実装ができます。

天井だけARで向こう側が見えるようにするデモです。仕組みは壁や床に穴を開けるARの窓枠シェーダーと一緒です。

従来だと床や机の水平面に反応させずに天井だけきれいに抜くことは難しかったのですが、ARKit3.5なら簡単に実装できます。

もう1パターン、キャラクターが椅子に座るデモです。キャラクターを立たせる位置は床(Floor)に限定して、椅子(Seat)をタップしたら移動して座ります。

椅子(Seat)はちょっと特殊なラベルで、座面は水平面、背もたれは垂直面として検出ができます。これを上手く使うことで背もたれの向きに合わせて座るように実装しています。

こんな感じで、

  1. 配置するARオブジェクトの種類(キャラクター、家具、ポスター、食べ物、etc...)
  2. 検知した平面のラベル(床、壁、天井、机、椅子、ドア、窓)
  3. 検知した平面の周囲にある平面(床、壁、天井、机、椅子、ドア、窓)

の組み合わせでルールを作っていくと、まだまだ面白い使い方ができそうです。

まとめ

ArKit3.5、AR Foundation 4.0は、現時点ではLiDARスキャナを搭載したiPad Pro 2020限定の機能となっていますが、空間を3Dメッシュとして構成する機能(Scene Geometry)や平面の分類(PlaneClassification)にはAR表現を大きく発展させる可能性があり、GoogleのTangoがサポート終了になった今、AppleがLiDARスキャナ前提のアップデートを行った意味はとてつもなく大きいです。

先に述べた通り、LiDARスキャナを前提としたARKit3.5は次期iPhoneやARグラスへの布石とも考えられるため、先行して開発していくメリットは大きいと思っています。
購入を迷っている方は是非、iPad Pro 2020を入手して試してみてください。