じゅころぐAR

ARのブログ

Niantic Lightship ARDKを試してみた

お久しぶりです。最近WebXRやっててARご無沙汰になっているjyukoです。

そんな私が重い腰を上げてブログを書いてる理由はそう、以前から注目していたNiantic Lightship ARDKが2021年11月9日についに正式公開されました!
早速試してみながら基本的な機能や特徴についてまとめつつ、既存のAR開発キットとしてAR Foundationとも比較してみたいと思います。

先に断っておきますが、ARDKの評価だけでかなりのボリュームになることが予想されるため、自作アプリを開発する方法については本記事では触れません。次回以降の記事で別途まとめたいと思います。

f:id:jyuko49:20211119084214p:plain

Niantic Lightship ARDKとは

Ingress、ポケモンGO、ピクミンブルームなど世界規模の位置情報ゲーム、ARゲームを開発しているNiantic(ナイアンティック)社が、AR開発者向けに提供したUnityのSDKになります。
一部の機能ではARDK内部でARKit/ARCoreも使用しており、iOS/Androidの両プラットフォームに対応したスマートフォンARアプリが開発できます。

類似の製品としては、冒頭でも挙げたAR Foundationがあります。こちらはUnity Technologies社が提供しているSDKで、 (HoloLensやMagic Leapにも一部対応しているものの) iOS/Android向けスマートフォンARアプリの開発に適しています。
AR Foundationとの比較は記事中でも触れていきますし、後半に改めてまとめます。

Lightship ARDKの機能・特徴

Lightship ARDKのリリース時点で使える特徴的な機能として、以下の3つが紹介されています。

  • Real-Time Mapping
    • 周囲の空間のリアルタイムメッシュを作成し、ARに利用できる
  • Multiplayer
    • 複数のユーザでマルチプレイヤーのAR体験を行うための機能が提供されている
  • Semantic Segmentation
    • コンピュータビジョンを用い、屋外のオブジェクトをクラス分けする

それぞれの機能については後ほど詳しくみていきますが、ARDK全体の特徴として、スマートフォンの単眼カメラのみで動作し、iOS/Androidスマートフォンで同様に動くという点です。

具体的には、Real-Time MappingとSemantic Segmentationの推進環境が以下となっています。

Recommended for iPhone 8 and above, and high-end Android devices released since 2018.

iPhone 8の販売開始も2017年の秋ですので、今から約4年前までに販売されていてスペックが低くないデバイスであれば、ここで紹介されている機能が使えます。

AR Foundationだと、iPhone 8ではARKitのPeople Occlusion(Human Occlusion)がギリギリ使えません。また、ARKitの機能であるPeople Occlusion(Human Occlusion)はAndroidでは動かないなど、デバイスによる機能差異が多くあります。
Lightship ARDKはまだ機能が少ないため、今後様々な機能が追加される過程でデバイス間の差異が生まれるかもしれません。

これから提供される機能

既に利用できる機能に加え、現在開発中で今後の追加される予定の機能についてもロードマップとして公開されています。

気になるワードとしては、

  • AR Mavmesh
  • Visual Positioning System(VPS)

が開発中となっており、Semantic Segmentationについてもクラス分けの分類がさらに増える予定です。

AR Navmeshについては、Real-Time Mappingで取得したリアルタイムメッシュを活用し、UnityのNavmeshを動的ベイクする機能と推測されます。
同様の機能は、AR Foundationの上位プラットフォームにあたるUnity MARS(有償SDK)で提供されていることを確認しており、差別化の意味でAR Foundationには実装されない可能性が高いでしょう。
AR Navmeshが無料で提供されるのか現時点ではわかりませんが、Unity MARSを導入するよりリーズナブルな選択肢になる期待感はあります。

Visual Positioning System(以下VPS)は、AR技術を以前から追ってきた方々は聞き覚えがあるのではないでしょうか。あれはまだARCoreが生まれる前、今は亡きTangoのロードマップとしてGoogle I/O 2017の発表で使われたワードです。
VPS生きとったんかワレですね。

NianticはGoogleの社内スタートアップ発でGoogleとの関係性が深い企業です。あくまで推測の域を出ませんが、GoogleがTangoを終了してARCoreに方針転換した際、ARCoreは名前の通りコア機能のみを対象とし、より高度な機能はNianticのプラットフォームに移行して引き継がれた可能性が高いとみてます。

実際、Nianticのプラットフォーム構想自体はかなり前から発表されていました。

japanese.engadget.com

時系列で並べてみると、

  • 2017/5: Google I/OでVPSの発表
  • 2017/8: ARCore発表
  • 2017/12: Tango終了のお知らせ
  • 2018/3: ARCoreの正式リリース
  • 2018/6: Nianticのプラットフォーム発表

ほぼ3ヶ月(四半期)ペースでGoogleから発表・リリースがあり、この1年でプロジェクトの整理が済んだように見えますね。なお、この背景として、2017年6月にAppleがARKitを発表しています。

閑話休題。ロードマップをもう一度よく読んでもらうと、一番上に6週間ごとにマイナーアップデート、6ヶ月ごとにメジャーアップデートを行う開発サイクルを計画していると書いてあります。
11月上旬を起点にすると、12月中旬、2月上旬、3月中旬頃にマイナーアップデートがあり、5月上旬にメジャーアップデートがありそうです。

Lightship ARDKの価格

機能については、事前の発表やアルファ、ベータ版で概要をつかむことができてましたが、価格については情報を得られていませんでした。

で、実際に発表された価格はというと、

  • Real-Time Mapping、Semantic Segmentationを含む基本機能は無料!
  • Multiplayerも月間アクティブユーザ(MAU)で50,000ユーザまでは無料!
    • 50,000ユーザ以上の場合も10,000ユーザあたり$5.00
    • しかも、2022年5月までは無料!

いや、安すぎでしょ!どうなってるんですか、Nianticさん!

もちろん、今後価格が改定されないとは限らないですし、これから提供される機能が無料かどうかもわかりません。とはいえ、発表時の価格が自身の予想を下回ってきたことで小さくないインパクトはあります。

Lightship ARDKの使い方

前置きはこれくらいにして、実際にARDKをダウンロードして使ってみましょう。
参考にするのは、公式のDeveloper Documentationです。

Niantic AR Development Kit (ARDK): User Manual

開発環境の準備

スマートフォンARの開発を進めるには、「Unityで開発・ビルドを行うPC環境」「ビルドしたアプリを実行するスマートフォン」が必要になります。

Lightship ARDKに必要な環境は、以下のページに詳しくまとまっています。

Niantic AR Development Kit (ARDK): ARDK System Requirements

まとまっているのですが、一部ドキュメント通りではないようなところもあったので、私の環境での動作実績ベースで記載します。

Unityで開発・ビルドを行うPC環境

PC環境は、MacBook Pro 2017モデル(macOS Big Sur 11.6)を使っています。
iOSアプリのビルドを考えるとMacの方が都合がよいのですが、M1 チップのMacにはまだ対応していないという点に注意が必要でしょう。対応を進めていることは明記されていますが、提供時期は未定です。

次にUnityのバージョンについて、公式にサポートされているバージョンはUnity 2019.4 LTSと記載があるのですが、パッケージの依存関係の問題か、私の環境ではUnity エディタ上でエラーが大量に出力されてしまい、ビルドができませんでした。
私のMacBookでビルドできることを確認できたのはUnity 2020.3 22f1(LTS)なので、もし同様の事象に遭遇したらUnityバージョンを上げてみてください。

iOS向けのビルドを行う場合、Xcode12.2以上が必要と記載されています。私の環境はXcode 13.0をインストールしており、問題なくビルドできました。

Android向けのビルドを行う場合、Android API level 24(Android 7 Nougat)以上が必要になります。Unity Android Build Supportモジュールをインストールしていれば、Target API LevelをAutomaticにするだけで問題ないかと思います。

ビルドしたアプリを実行するスマートフォン

iOS、Androidそれぞれで見ていきましょう。

iOS

iOSではiPhone 8以上が推奨されており、具体的なデバイス一覧が先のドキュメントに記載されています。

  • iPhone 8, 8 Plus, X
  • iPhone XR, XS, XS Max
  • iPhone 11, 11 Pro, 11 Pro Max, iPhone SE (2nd Gen)
  • iPhone 12, 12 mini, 12 Pro, 12 Pro Max
  • iPhone 13, 13 mini, 13 Pro, 13 Pro Max

上記の中間のスペックにあたるiPhone 11で動作することを確認しました。

また、ドキュメントにはiPadには対応していないと記載されているのですが、所有しているiPad Pro 4(2020) でもアプリは動作しました。
LiDARスキャナを利用した高精度のリアルタイムマッピングなどには対応していません。

OSバージョンについて、ARDKを使える最低バージョンはiOS 11ですが、OcclusinやMeshing、Semantic SegmentationはiOS 13が最小バージョンとなっています。
iOSは比較的アップデートがしやすいため、最新のiOS 15またはiOS 14にアップデート済みなら問題なさそうです。

Android

Androidの場合、機能紹介では2018年以降のハイエンドデバイスとの記載でしたが、システム要件には具体的なチップセットやデバイス名が記載されています。

  • Adreno 630, Mali G-72 (Google Pixel 3, Samsung Galaxy S9 and S9+, Samsung Note 9)
  • Adreno 640, Mali G-76 (Google Pixel 4, Samsung Galaxy S10, Samsung Note 10)
  • Adreno 650, Mali G-77 (Samsung Galaxy S20, Note 20)
  • Adreno 660, Mali G-78 (Samsung Galaxy S21, Note 21)

上記はあくまで推奨環境で、リストに含まれていないGoogle Pixel 3aでもアプリは動作しました。

OSの最小バージョンは、Android 7 Nougatと記載されています。Pixel 3aではAndrid 11, 12で動作を確認しています。

その他

対応デバイスについての気になる記載として、

Note Currently ARDK does not support landscape mode on mobile devices

と書いてあります。

Landscape(デバイスの横向き表示)にまだ対応していないという点は注意が必要でしょう。

ARDKのダウンロード・インポート

Lightship ARDKはUnitypackageで提供されており、Nianticのサイトからダウンロードできます。

lightship.dev

ダウンロードにはサインイン(Sign in)が必要ですが、アカウントを持っていなくてもRegisterからすぐに作成ができます。登録したメールアドレスに認証メールが届くので、メール内のURLをクリックして認証を完了させます。

登録・サインインまで完了したら、DownloadsからARDKのUnitypackageがダウンロードできます。

f:id:jyuko49:20211116232743p:plain

ダウンロードしたUnitypackageをUnityプロジェクトにインポートします。

Niantic AR Development Kit (ARDK): Adding ARDK to your Unity project

手順は一般的なもので、Assets > Import Package > Custom Packageからファイル選択するか、インポート先のUnityプロジェクトを開いた状態でUnitypackageをダブルクリックすればインポートできます。

Example Scenesのダウンロード・インポート

先の手順でインポートしたARDKはSDK本体のみで、サンプルコードなどは含まれていません。

Example ScenesをUnityプロジェクトにインポートするには、Downloadsページの別のリンクからダウンロードします。

f:id:jyuko49:20211117031209p:plain

こちらもUnitypackageなので、ARDKと同様にUnityプロジェクトにインポートします。
インポート完了後、ProjectパネルのAssetsにはARDKフォルダとARDKExamplesフォルダが追加されているはずです。

f:id:jyuko49:20211117031745p:plain

License keyの発行と設定

Lightship ARDKでMultiplayer(マルチプレイヤー)を利用するには、License keyが必要になります。
詳しくはこちらのページに記載されています。

Niantic AR Development Kit (ARDK): Authentication

License keyは、ARDKをダウンロードした際と同じダッシュボードにサインインして発行します。
App name にアプリの名前(Unityプロジェクト名やビルド時のアプリ名など)を入力し、Createをクリックするだけです。

f:id:jyuko49:20211118231249p:plain

発行完了すると、英数20桁のKeyが発行されます(画像では黒く塗りつぶしてあります)

f:id:jyuko49:20211118231442p:plain

こちらをコピーして、Unityプロジェクトに戻ります。

今回は、Example Scenesをビルドしてみようと思うので、Example ScenesにLicense keyを設定します。

ARDKExamplesフォルダの "Resources > ARDK" に"ArdkAuthConfig.asset"というファイルがあります。

f:id:jyuko49:20211118231746p:plain

このファイルの"API Key"に発行したLicense keyを入力します。

f:id:jyuko49:20211118232347p:plain

ドキュメントにも記載がありますが、アプリの起動時に自動で読み込まれるため、"API Key"を入力してもエラーが発生していたら、Unityエディタを再起動するとエラーが消えます。

ビルド設定

ここまで準備できたら、Example Scenesから適当なシーンを選択してビルドしてみましょう。
おすすめは、"ContextAwareness > Meshing > MeshingSemantics"で、こちらを実機で動かせば、ARDKの特徴的な機能であるReal-Time Mapping、Semantic Segmentationが両方確認できます。

Niantic AR Development Kit (ARDK): Context Awareness

Build Settingsを開き、選択したシーンを"Scenes In Build"に追加します。
次に、Platformを動作確認するスマートフォンにあわせてiOS/Androidのいずれかに切り替えてください。

f:id:jyuko49:20211118233837p:plain

ここからは、iOS/Androidで設定する項目が異なるので、それぞれ見ていきます。

iOS

ドキュメントはこちらです。変更が必要な箇所は多くありません。

Niantic AR Development Kit (ARDK): Building the ARDK-Getting-Started App for iOS

Target minimum iOS Versionは11.0にしましょう。9.0だとMultiplayerの機能だけ使えるようですが、肝心のAR機能が使えません。

f:id:jyuko49:20211118234926p:plain

あとは、"Camera Usage Description"に何かしらのメッセージを入れます。AR機能ではほぼ間違いなくカメラを使用し、ユーザーに許可ダイアログが表示されるので、そのダイアログに表示するメッセージです。
ドキュメントではカメラのみに触れているのですが、ビルドするシーンによっては位置情報(Location)も使います。そのため、"Location Usage Description"も空欄ではなくメッセージを入れておきましょう。

f:id:jyuko49:20211118235443p:plain

他に注意すべき設定はないと思うので、ビルドできるか試してみてください。Unityでのビルドが完了した後、Xcodeでビルドして実機にインストールする流れは、一般的なUnityの開発と同じです。

Android

ドキュメントこちらです。どちらかと言えば、Androidの方が注意点は多いですが、ARCoreやAR Foundationを扱ったことがあれば、頻繁に目にする設定です。

Niantic AR Development Kit (ARDK): Building the ARDK-Getting-Started App for Android

まず、ドキュメントに記載されているExternal Tools の設定についてですが、私が構築した手順と同様に、Unity HubでUnity 2020.3 22f1(LTS)とUnity Android Build Supportモジュールをインストールしていれば、以下のUnity推奨設定でJDKなどはインストール済みになっていると思います。
今回試した限りでは、ここの設定は特に変えずにビルドできました。

f:id:jyuko49:20211119001451p:plain

次にRenderingの設定ですが、ドキュメントの指示に従い、まず"Auto Graphics API"のチェックを外し、表示される"Graphics APIs"に"Vulkan"があれば選択して"−"で削除します。
これはARCoreが"Vulkan"に対応していないためで、結果として"Graphics APIs"は"OpenGL ES3"になるかと思います。

f:id:jyuko49:20211119000923p:plain

続いて、"Minimum API Level"を"Android 7.0 'Nougat' (API Level 24)"以上、"Target API Level"を"Automatic (highest installed)"に設定します。
あわせて、"Scripting Backend"を"Mono"から"IL2CPP"に変更します。

f:id:jyuko49:20211119002553p:plain

最後に、"Target Architectures"の"ARMv7"、"ARM64"にチェックを入れます。

f:id:jyuko49:20211119002930p:plain

これで準備はOK。AndroidスマートフォンをUSB接続して、ビルドすればインストールされるはずです。

機能評価

実際にサンプルアプリを動作させた結果などから、特徴など評価してみます。

Real-Time Mapping

AR FoundationではLiDARスキャナを使ったMeshingがありますが、Lightship ARDKは単眼カメラの画像のみでメッシュを取得します。

ARKitのLiDARスキャナを使ったMeshingほど高速ではないですし、精度面で若干でこぼこもしていますが、スペックが高くないPixel 3aでここまで取れていれば、壁や床に反応するアプリの開発には十分使えます。
LiDARなしでメッシュが取れる反面、LiDARスキャナでのメッシュ取得にはまだ対応していません。LiDARを活用したい場合は、AR Foundationを使うべきでしょう。

メッシュが取れる距離は5〜10mほどで単眼カメラだからといって遠くまで取れる訳でもなく、LiDARスキャナとあまり変わりません。

少し気になる点として、アプリを起動(もしくはボタンをクリック)してからARセッションを開始するまでにやや時間がかかっているような印象があります。
こちらの動画で最初に黒い画面が続きますが、InitからRunを実行してすぐにARセッションが始まるわけではなく、カメラが映るまで数秒かかっている感じが見て取れます。

ARCoreやAR Foundationではこのようなラグは感じなかったので、Lightship ARDK特有の処理が影響している可能性はあります。コードを読み込まないとなんとも言えませんが、ありそうなのは機械学習モデルの読み込みなどです。

Semantic Segmentation

どのような機能かは、こちらの動画を見てもらうのが早いでしょう。

古い記事を読んでいたため、ARKitのMesh Classification(Plane Classification)のような機能をイメージしていたのですが、実際はPeople Occlusion(Human Occlusion)に近い機能です。

AR FoundationのClassificationとPeople Occlusionがわからないという方は、当ブログの過去記事を参照してみてください。

www.jyuko49.com

特徴として、AR FoundationのClassificationが床、天井、机、椅子など屋内のオブジェクトを分類しているのに対し、Semantic Segmentationのクラス分けは空、地面、建物など屋外のオブジェクトを分類しています。

  • Sky(空)
  • Ground(地面)
  • Artificial Ground(人工的な地面)
  • Water(水面)
  • Building(建物)
  • Foliage(木々の葉)
  • Grass(芝)

単眼カメラだけでリアルタイムにセグメンテーションを行っていて技術的にはすごいと思う反面、People Occlusionに比べると使いどころが難しい印象はあります。

People Occlusionの場合、ARオブジェクトと人が重なった際にどちらが手前かの遮蔽処理で現実感を持たせることができますが、屋外のオブジェクトを検知しても、ARオブジェクトとの位置関係で言うと、ほぼ背景に近くARオブジェクトが前に来るケースが多いため、遮蔽処理には使いにくいです。
例外として、ARで表示したいオブジェクトが巨大ロボットや怪獣だったとします。表示順を「空 > ロボット > 建物」として、ロボットの手前に建物があれば遮蔽処理を行うことで、ARオブジェクト(ロボット)の大きさを表現できそうです。
ただ、Meshingの距離が5〜10mしかないので機能が噛み合いにくいですし、対象物が広い・大きい分、セグメントの境界が安定しない事象も見受けられます。

Occlusionではなく空の部分だけ色を変えるといった利用にしても、やはり境界が安定しないですし、電柱・電線や街路樹のような部分で隙間ができやすく、下手に使うと現実感を損ねてしまいます。
この機能をどう活かすかは、やはりアイデア次第となりそうです。

メリットを挙げるとすれば、単眼カメラの映像をコンピュータビジョンで解析しているので、現実の空間ではなく、写真や映像に対してもセグメンテーションが可能です。デモ等を行うには都合がよいですね。むしろ、あらかじめ決められた映像に対してARで演出を行う使いかたをした方が体験の質は安定するかもしれません。

Multiplayer

名前の通り、マルチプレイヤーのAR体験を行うため、Lightship ARDKのサーバを介して、P2P(Peer to Peer)の通信を確立してメッセージを送り合います。
ARDKではありますが、ARよりはPhotonやUnityのNetworking APIに近い位置付けです。

Niantic AR Development Kit (ARDK): Multiplayer

ひとまず、Example Sceneでは、API Keyを設定した状態でLowLevelNetworkingのシーンをビルド・実行することで通信を確立できることは確認しました。

f:id:jyuko49:20211119022007p:plain

こちらの評価に関しては、実際にマルチプレイヤー機能を実装してみないと開発のしやすさを含めて評価が難しいので、しっかりとした評価は機会を改めることとして、ドキュメントベースで制限など確認しておきます。

Niantic AR Development Kit (ARDK): Networking Limits and Best Practices

まず、ユーザー体験の最適化のために、セッションは5人以下で、最大5分間という記述があります。

For optimal multiplayer experiences, we recommend no more than 5 users per session, with sessions lasting up to 5 minutes.

上記の制限から考えると、時間制のミニゲームのような使い方が想定されているようです。

BroadcastDataで送受信できるデータのサイズも上限が決まっています。

まとめ

AR Foundationとの比較でまとめていきます。

機能

現時点ではAR Foundationの方ができることは多いです。特にLightship ARDKではLiDARが有効に働かないため、LiDARを使う場合は、AR Foundationを選択しておいた方がよいでしょう。
対応している機能の多寡で言うと、今後もAR Foundationが先行するような気がします。理由は次項に書きます。

ただ、AR NavmeshやVPSなどAR Foundationにはない機能が提供されてくる可能性が高く、用途次第でLightship ARDKと使い分ける形になっていくかもしれません。
まだリリースされたばかりなので、今後のアップデートを楽しみに待ちたいと思います。

コンセプト

提供されている機能から、屋外で複数人で共通の体験をする といった用途が見えてきます。これは、Nianticが提供している位置情報ゲーム(基本プレイエリアは屋外で、レイドバトルなどは人数集めてプレイする)の特徴でもあり、ゲーム開発で得た機能・ノウハウをARDKとして提供してくれているからでしょう。
また、ゲームなどのサービスとしては、できるだけ多くのユーザーに体験してもらいたいというところで、LiDARなど特定のハードウェアには依存せず、一定のスペックと単眼カメラで動作する機能を優先しているように受け取れます。この方針はGoogleのARCoreに似ています。

AR Foundationは、UnityとAppleとの協力体制が強く、LiDARがないと動かないようなARKitの新機能でも早期に対応してくれるため、新しい機能を使いたい・試したい場合には、対応が早いという安心感があります。 一方で、Unity MARSという高レベルのSDKを有償で提供している以上、AR Foundationはシンプルな機能の提供が中心になりそうです。

全体として

スマートフォンARの開発では、AR Foundationが有力な選択肢でしたが、Niantic Lightship ARDKは用途によって代替もしくはそれ以上の選択肢になり得ると思います。どちらがというより両方の動向を注視しつつ、使い分けられるのが理想です。

ただし、Lightship ARDKはまだ機能が少なく、M1 Macにまだ対応していない、Landscape(デバイスの横向き表示)にまだ対応していないなど、制限事項も多くある状態です。
マイナーアップデート6週間、メジャーアップデート6ヶ月というサイクルを考えたときに、2022年5月のメジャーアップデートまでにどこまで制限事項が解消され、開発中の機能がどれくらい提供されるかが1つの指標になると思います。

NianticはLightship ARDKの正式公開とあわせて、Lightship ARDKを通じて、任天堂、集英社ソフトバンクなど多くの企業とのパートナーシップを発表しています。
コンテンツ、ネットワーク、アプリ(ARDK)が揃うことでサービス面に事業展開しやすいと思いますし、世界規模の大手IPがARに参入して市場を盛り上げてくれるであろう点も踏まえ、個人的に大いに期待を寄せています。