はじめに
こんにちは。
ARアプリケーションを開発するうえでOcclusionはぜひ実装したい機能です。AR Foundationには簡単にOcclusionを実現するためのコンポーネントが用意されていますが、LiDAR非搭載iPhone(iPhone無印)ではEnvironment Occlusion(環境オクルージョン)をすることができません。そこで今回はLightship ARDKを利用してLiDAR非搭載iPhoneでEnvironment Occlusionをしていこうと思います。
Lightship ARDKとは
Lightship ARDKとは『Pokémon GO』を開発したNianticよるAR開発ツールキットで、リッチなARを実現するための機能が提供されています。AR Foundationを拡張することができ、AR Foundationで強力なLightship ARDKの機能を利用できるようになります。AR Foundationでは行うことのできない単眼深度測定を行うことができ、これによってLiDARなしでOcclusionを実現します。
実装
Lightshipの準備
上のリンクからアカウントを作成します。
アカウントの登録ができたらダッシュボードに入るので、プロジェクトの作成に進みます。
プロジェクトを作成したら、(お好みでプロジェクトの名前を設定してもよいです)API Keyをコピーします。
Unityプロジェクトの作成
Unity Hubからプロジェクトを作成してください。このとき使用するエディターのバージョンは公式で以下のように明言されています。
Unity 2022 LTS(2022.3.37f1)と2021 LTS(2021.3.37f1)をサポートしています。
筆者の環境で全く同じバージョンでなくても2022.3.53f1
で動作しているので2021や2022のLTSを使っておけば大丈夫でしょう。(だめだったらごめんなさい)
パッケージインストール
AR開発に必要なパッケージをインストールしていきます。
まず、ARパッケージをまとめてインストールしてしまいましょう。
エディターの再起動の指示があったら、そのまま再起動してください。
再起動したら、もう一度Package Manager
を開いて、以下のGit URLからパッケージを追加してください。
https://github.com/niantic-lightship/ardk-upm.git
プロジェクト設定
Edit
> Project Settings
からProject Settings
を開きます。
XR Plug-in Management
で以下のように操作してください。
Niantic Lightship SDK
の設定に移ります。
API Key
に先程のAPI Keyをペーストしてください。
Project Validation
を確認するといくつか問題が発生してようですがFix All
を押すと解決します。
画像ではiOS
のみ確認していますが念の為他のタブも確認していおいたほうが良いでしょう。
以上でLightship SKDの設定は完了です。
ビルド設定
皆さんの環境に合わせてビルド設定を行いましょう。ここではiOS向けのビルド設定をしておきます。
iOSにSwitch Platform
をした後、Player Settings
へ。
プロジェクト名がTestAR
など普遍的なものの場合はBundle Identifier
も変えておきましょう。
Bundle Identifierは全世界で重複できません。そのためプロジェクトで固有の値を設定する必要があります。UnityにおけるBundle Identifier
の設定方法は他にもありますがここでは詳しくは触れません。
これでビルド設定も完了です。
Sceneの準備
いよいよARを実現するSceneを作っていきます。
まず、ヒエラルキーからMain Camera
を削除してください。
続いて、ヒエラルキー上で右クリックしXR
の中にあるAR Session
とXR Origin(Mobile AR)
を追加してください。
ヒエラルキーからXR Origin
> Camera Offset
> Main Camera
にLightship Occlusion Extension
コンポーネントを追加してください。AR Occlusion Manager
とLightship Occlusion Extension
が追加されます。
XR Origin
の子として3D Object
> Cube
を追加して、Transform
からPosition
を少しずらして、Scale
をそれぞれ0.3
ぐらいに設定しましょう。
Unityで利用される長さの単位はUnity unit
といい、デフォルトで「1Unity unit = 1メートル」です1。1メートルだと大きいと思うので調整しています。
このTransform
の設定だと1辺30cmの立方体が60cm先に出現します。
これで終わりです!お疲れ様でした。
実行結果
iPhoneへのビルド方法は以下の記事を参考にしてください。
3Dオブジェクトとの距離が離れていたり、遮蔽となる物体が大きいとき(扉など)だともうちょっときれいに動作します。
まとめ
AR Foundation単体ではLiDAR搭載iPhoneでないと環境オクルージョンできなかったので困りましたが、これならとても簡単にLiDARなしで実装することができます。他にも便利な機能がたくさんあるので、皆さんぜひ使ってみてください!
参考
Lightshipのドキュメントが2つありますが、私は上のものを主に参考にしていました。なぜ2つあるのか、違いはわかりません...