📰

Immersal 1.17.0の変更点(2022/11/06時点)

2022/11/06に公開
4

はじめに

TL;DR

Immersal は 1.17.0 にアップデートするにあたり、マップビューアの機能追加や REST API のエンドポイント追加、メッシュ生成機能の廃止やパフォーマンス向上などの変更が入った。

概要

日本時間の 2022 年 11 月 2 日に、Immersal SDK やクラウドサービスを含む Immersal サービスの全体が約 8 か月ぶりにアップデートされました。
変更や機能追加などがいろいろあり、個人的には結構びっくりしたので備忘録も兼ねてまとめていきます。

公式ドキュメントの Change Log は以下をご参照ください。
本記事では Change Log に書かれていない詳細な情報も取り上げていきます。
https://immersal.gitbook.io/sdk/about/changelog

対象読者

  • Immersal を使ったことがある/知っている方
  • Immersal 1.17.0 でどのような変更点があるか気になる方

1.17.0 の変更点と現状

マップビューアでカメラ姿勢の描画をサポート

まずは AR マップビューアから見ていきましょう。
1.17 からのビューアではカメラ姿勢の表示ができるようになっており、
撮影した時にどんな位置でどこを向いていたのがわかるようになっています。

img
カメラ姿勢を表示したときの見え方

上図は 300 枚のマップのため 300 個のカメラ姿勢が描画されており非常に見づらいものの、軸と一緒に描画されているのでイメージしやすいですね。
この機能ができることによって、どのような足運びで写真を撮影したのかぱっとわかるようになるため、マップ作成のフィードバックができるのではないかと期待しています。
Immersal でそこそこの規模のマップを作成するためには経験とノウハウが必要であり、もしマップが失敗しても原因がわからないこともしばしばで、難しいといわれることがあります。
この機能の登場によって、マップ作成のイテレーションがもっと早くなるといいですね。

マップビューアで点群サイズや色を変更可能に

次にビューアの小さな変更ですが、Sparse 点群を閲覧するときの点群サイズや色が変更可能になりました。

img
点群サイズ最小

img
点群サイズを大きく

img
点群の色を緑っぽく

メッシュ生成の廃止(2022/11/06 時点)

今回の一番大きなニュースだったと感じたのが、メッシュ生成機能の廃止です。
これまでの Immersal ではマップ作成の際に下記 5 種類のファイルが作成され、ダウンロードして使うことができました。

  • Sparse 点群(.ply 点群)
  • Dense 点群(.ply メッシュ)
  • Textured メッシュ(.glb メッシュ)
  • バイナリファイル(.bytes)
  • メタデータ(.json)

しかし 1.17.0 がリリースされた現時点では、下記 3 種類のデータのみダウンロードできるように変わっています。

  • Sparse 点群
  • バイナリファイル
  • メタデータ

img
SDK のバージョンによって DL できるファイルが違う様子

これはクラウドサービスでの仕様なので、バージョン 1.16.x の Immersal Mapper で作成したマップも同様の結果になると予想されます(未確認)。

今回メッシュ生成機能が廃止になった理由として、公式 Discord ではこのように言われていました。

None of our paying customers actually use the meshes we generated and we haven't seen much use from free license users either. We had to prioritize development, focus on our core feature set, and ended up cutting mesh generation out from the Cloud Service.

要約すると、Immersal から見るとメッシュ機能が使われている場面が少なく需要はあまりないと判断できたため廃止するということらしいです。
なお次のような文言が強調されて続けられています。

if you feel meshes were important for your project, please let us know and showcase your work! If there's enough interest in meshes, we can prioritize adding the feature back to our Cloud Service

つまりメッシュ生成機能の需要が高いと判断できれば復活することもありうるということですね。
これを受けて公式 Discord では復活してほしいという意見がとても多く上がっています。

ここからは個人的な見解ですが、筆者もメッシュ生成機能の廃止はとても残念に感じています。
現状のマップだと色付きの特徴点のみによって位置合わせをすることになるのですが、特徴点の分布はまばらであることが基本なので、それだけを頼りにコンテンツを配置するのは困難なことが多いです。特に遮蔽物が多かったり広域のマップだったり撮影枚数が相当数必要なマップではメッシュの断片から頑張って位置を推測することも少なくありませんでした。
また公式 Discord でも上がっていたのですが、簡易的なオクルージョンや物理演算などメッシュの使い道は位置合わせにとどまりません。
メッシュ生成は Immersal の特徴的な機能の 1 つですし、Immersal を触り始めたときにメッシュ生成機能を見て興奮したのは自分だけではないはずです。
ぜひとも復活してほしいですね。

2022/11/18 追記

メッシュ生成機能はユーザのリクエストを受けて復活しており、
以前に 1.17.0 版のマッパーで生成したマップにも後から GLB メッシュが生成されていました。

REST API

こちらについては詳細な変更内容が公式には上がっていませんでしたので、
筆者の記憶と照らし合わせて「1.16.1 のときにはなかったような......」というエンドポイントを挙げていきます。間違っていたら教えていただけると嬉しいです。
ざっと書き出してみると次のような機能が追加されているのではと推測されます。

  • ポータルの操作が API から可能になった系
    • Align Maps
    • Copy Map
    • Stitch Maps
    • Change Password
    • Set Map Privacy
    • Register New User
    • Change Developer Token
  • ファイルダウンロード系
    • Download Immersal Unity SDK
    • Download Sparse Point Cloud
    • Download Dense Point Cloud
    • Download texture Mesh
    • Gets Map Metadata
  • バイナリファイルのサポート系
    • Capture Image (Binary)
    • Localize Image  (GPS Binary)
    • Localize Image (Binary): Receive Longitude, Latitude, Altitude
    • Localize Image Binary
    • [GET]Load Map
  • その他
    • Map Construct(パラメータの追加)
    • Set EULA To Accepted

2022/11/18 追記

Twitter でyoggy さんから下記のご指摘をいただきました。

https://twitter.com/yoggy/status/1589192114902298624

筆者もこのご意見にはおおよそ同意で、おそらくポータルではユーザ操作やマップ操作の API を使っていたと思われますし、SDK でも同様のコードを見かけたことがありました。
ということで正確には新機能という扱いではない可能性がありますのでご注意ください。
yoggy さん、教えていただきありがとうございます 🙏。

ポータルの操作が API から可能になった系

タイトルのままですが、開発者ポータルからできていた処理のいくつかは REST API 経由でできるようになりました。
マップ操作とアカウント操作が追加されたので、簡易的な開発者ポータルが作れてしまいそうですね。

ファイルダウンロード系

こちらもポータル操作由来の処理ではありますが、
各種ファイルが API 経由でダウンロードできるようになっているみたいです。
前から点群やメッシュをプログラムから取得したいなぁと思っていたのでこれは良さそうな機能追加ですね。
ただドキュメントによると Textured Mesh のダウンロードも PLY 形式みたいで、ちょっとわからないですね。
Unity SDK のダウンロードもできるようになっていますが、これはどのような需要なのでしょうね。旧バージョンもダウンロードできるみたいなので、最新以外の SDK をダウンロードするためでしょうか。

バイナリファイルのサポート系

従来の REST API でバイナリファイルをやり取りする際には Base64 エンコードした文字列を使っていましたが、バイナリファイルを直接やり取りできるようになったみたいです。Base64 エンコードする手間が省けるので良いアップデートだと感じました。
リクエストの形式ですが、Python コードの例が載っています。
パラメータの JSON に NUL 文字を追加し、続けてバイナリデータを追加する形みたいですね。

body = json_bytes + b"\0" + img_bytes
r = requests.post(complete_url, data=body)

その他

まず軽い変更として Map Construct エンドポイントにpreservePosesという bool パラメータが追加されました。
連続写真の撮影時に送信される姿勢データをマップの最適化に使うかを決めるパラメータらしいですね。姿勢データは高精度なデータが求められるそうですが、モバイル AR エンジンの SLAM でも大丈夫なのか気になります。

あと気になる追加項目としてSet EULA To Acceptedがあります。
名前から推測するに、このエンドポイントに 1 回リクエストを送らないと他の REST API も使えなさそうなのですが筆者は最初に雑に投げてしまったので本当にそうなるのか未確認です(すみません)。

パフォーマンス向上

公式 Discord では、(BLK2GO などのリグを使った)マップ作成速度とリローカライズの安定性が向上したと言われていました。
スマホの Mapper アプリで試しに 300 枚のマップを生成して速度を測ってみたところ、肌感として速くなったかは分からなかったです。やはりマップ生成の速度向上は BLK2GO などによる広域マップに限ると推測されます。
一方でリローカライズの安定性ですが、こちらはなんとなく感じることができました。
いつもマップ作成のサンプルデータとして自室を使っていますが、特徴点が少なくて失敗することが多い場所でも結構位置合わせが成功するように感じたためです。
また、特徴点が多く撮れている場所でも位置合わせの結果にブレが少なくなったように感じました。
詳しく検証はできていないのですが、ちょっと期待していいのではないかと考えています。

サンプルアプリ

サンプルアプリにも下記のような変更が入りました。

  • 対応バージョンが 2021.3.11f1 に変更
  • MultiPlayer Sample が削除
    • 非推奨になった UNet HLAPI が使われていたため
  • ARCore / ARKit のプラグインのアップデート
    • iOS 16 のバグの修正も追加

おわりに

最近 Immersal はメタバースアプリをリリースしていた影響なのか、VPS 関連で目新しいニュースがなかったため今回 1.17.0 がリリースされて嬉しいです。
あまりアップデートが騒がれていないものの、そこそこ大きな変更があったように個人的には感じたため「これはみんなに知らせなければ」というテンションで取り急ぎ記事を執筆してみました。
こちらの内容が何かのお役に立てれば光栄です。

参考文献

https://immersal.gitbook.io/sdk/about/changelog

https://immersal.gitbook.io/sdk/api-documentation/rest-api

GitHubで編集を提案

Discussion

s_akas_aka

お世話になっております。
記事を読ませていただきました。

すみません、
Immersalについて聞きたいことがあります。

Githubからダウンロードしたimmersal-sdk-samplesプロジェクトデータと

ImmersalSDKv1_17_1.unitypackageをUnity3dからXcodeを書き出し、
そのXcodeプロジェクトから実行するとエラーが発生するのですが原因はわかりますでしょうか?

エラーが大量にあるため一部画像を添付いたします。

以上、宜しくお願いします。

s_akas_aka

すみません、追記いたします
使用しているバージョンは以下になります
Unity3d 2021.3.13f1
XCode 13.4.1
immersalSDK 1.17.1

宜しくお願いします。

にー兄さんにー兄さん

記事を読んでいただきありがとうございます
残念ながら当方Windows+AndroidでしかImmersalを扱ったことがなく、ちょっと原因がわからないですね......
公式discordに質問してみるのがよさそうと思いましたが、すでにされていそうですね...

iOS環境で試されている詳しい方に聞くか、
SDK由来で起きている現象ならばSDKを含めずにREST APIで処理をするようにするなど考えられますが、ちょっと不便ですね........
申し訳ございません

s_akas_aka

お返事ありがとうございます。

はい、公式Discordでも質問をしております。
調べてみます。

すみません、ありがとうございました!