📈

Immersal 2.0 で名前や使い方が変わったところ

2024/04/01に公開

ARドラム(#さくたまDrums)でImmersalを使っているさくたまです。

Immersal 2.0.1を導入してみたので,今までと使い方が変わった部分を紹介します.
Mapを入れて位置合わせする.Localizeを止めたり再開したりする.という基本的な使い方の範囲の話になります.

https://developers.immersal.com/docs/unitysdk/2.0/
https://developers.immersal.com/docs/unitysdk/changelog/

ざっくり変更点

1.x 2.0
インポート方法 Custom Package Git
インポート先 Assets Packages
ImmersalSDK Prefab 一つのGameObject SDKの中に複数のGameObjectが入っている
Space AR Space XR Space
Map AR Map XR Map
位置合わせのInterval, 停止・再開制御 AR Localizer Immersal Session

Cahgelogざっくり和訳 (太字は気になったもの,変化を体感したもの)

  • クラス継承ベースの実装からインターフェイスベースの実装にリファクタされた
  • 複数のメソッドによる非同期ローカリゼーション
  • 複数のXRSpaceをサポート
  • カスタマイズ可能なデータ処理チェーン
  • マップ固有のローカリゼーションオプション
  • 効率化されたマップ設定
  • イベントの改善
  • エディタースクリプトの更新によるUXの向上
  • REST apiフレームワークの更新
  • プロジェクトの自動検証
  • ランタイムマップ管理のためのMapManager
  • デバッグユーティリティとしてのImmersalLogger
  • Unityパッケージフォーマット

iOS の Immersal Mapper 2.0.0が,リアルタイムにマップ生成から検証までできるようになってて進化が凄かったので是非試してみてください.
現在(2024/4/1)では,メッシュ生成の機能だけ無くなってて残念ですが,Discordを見る限り実装中っぽいので楽しみにしてます.

インポート

Custom PackageからGitに変わりました.これによって,Immersal SDKがインポートされるディレクトリも,AssetsからPackagesになりました.
https://developers.immersal.com/docs/unitysdk/tutorial/
以下公式ドキュメントの和訳とスクショです.

  1. Window > Package Managerからパッケージマネージャーを開きます。

  2. ボタンをクリックし、"Add package from Git URL "を選択します。

  3. 以下のパッケージURLをコピー&ペーストし、Addをクリックします。

https://github.com/immersal/imdk-unity.git

さくたまポンカスミス

バージョンどうしようかと思って色々いじるうちに,いつの間にか1.20.0と2.0.1が両方インポートされていてXCodeでのビルド時に

Showing Recent Messages Ignoring duplicate libraries: '-lPosePlugin'
16 duplicate symbols

というエラーが出ました.

基本シーンの構成

Immersal 1.20.0

GitHubからダウンロードできるサンプルのContentPlacementSampleから削ぎ落とした最小構成シーンがこちらです.(赤枠はImmersalに関係ある部分)

また,位置合わせをするには,AR LocalizerをImmersal SDKにアタッチする必要がありました.

Immersal 2.0.1

サンプルはPackage Managerからインポートできるようになりました.

最小構成のSimpleSample シーンが追加されています.(赤枠はImmersalに関係ある部分)

また,Immersal SDKに子オブジェクトができ,位置合わせの頻度やスクリプトからの停止/実行ができる Immersal Sessionなど,各機能が実装されています.
Immersal SessionはAR Localizerに実装されていた機能の一部です.Prefabに後からアタッチする手間がなくなりました.

また,AR SpaceAR MapXR SpaceXR Mapになりました.

XR Space内のPoseSmoother, PoseFilterは,位置合わせ時のオブジェクトの動きを制御するスクリプトで,XR SpaceにDataProcessorとしてアタッチされています.(Geospatial APIとかは位置合わせのタイミングで座標が飛ぶんじゃなくて、「シューン」てオブジェクトが移動してくる感じで合いますよね、ああいう動きが実装されています。)
Changelogの下記にあたる部分だと思います(まだ試してません)

Multiple XRSpace support
Customizable data processing chains

XR Map

Map idでロードできるようになった

試したけど 400 Bad Request だった

Map idを入れてみたんですが,ダメでした

Map一覧のSDKに1.20.0とあったから?

手動でダウンロードしたbytesファイルとmetadata.jsonファイル置くと使えます.
リクエストのログがないのでよくわからず.Dev Tokenはちゃんと入れています.

Visualizerが独立して子オブジェクトに

XR Mapの一番したのAdd Visualizerで子オブジェクトが生成されます.

この時plyファイルは自分でダウンロードしなくても,Editor上のボタンからダウンロード可能.便利.

位置合わせの一時停止・再開

ARLocalizerにメソッドがあったのが,ImmersalSessionというオブジェクトに変わりました.

ImmersalSessionは

ImmersalSession session = ImmersalSDK.Instance.Session;

で取得できます.

1.x 2.0
中止 ARLocalizer.Pause() ImmersalSession.PauseSession()
再開 ARLocalizer.Resume() ImmersalSession.ResumeSession()
終了 ARLocalizer.StopLocalizing() ImmersalSession.StopSession()
開始 ARLocalizer.StartLocalizing() ImmersalSession.StartSession()

おわりに

触ってみてとても使いやすくなったなと思いました.
まだBetaでドキュメント整っておらずメソッド名とか一瞬探したのでまとめてみました.

Discussion