3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MoAR - Museum of ARAdvent Calendar 2022

Day 1

ビルスケールで AR 表現をする VPS 選定 1

Last updated at Posted at 2022-11-30

MoAR - Museum of AR とは

六本木にある Whatever Co. が入居する WHEREVER ビルの壁面に自由に絵を描くことのできるスペースがあって、せっかくならビルやこのエリア一帯を盛り上げるなにかを描こう!でも単に絵を書くだけじゃつまらんので AR 連動するものにしよう!って流れでスタート。

WHEREVER

ビルスケールで AR する方法

ビルにオーバーレイして AR 表現をするのは通常の ARKit / ARCore ではできなそうというのは容易に想像できたので、何らかの VPS (Visual Positioning System)を使う方向で調査した。

VPS - Visual Positioning System
事前に収録されたデータとカメラ画像(と場合によっては GPS などの位置情報)をマッチングさせることでカメラが世界中のどの位置にあってどの方向を向いているかを推定する技術。
誤差数センチ〜数十センチメートルでカメラ位置と姿勢が取得できるのでそれらの情報をもとに適切な位置に絵を描くことでマーカーなどを使用せずに AR 表現ができる。
GPS だけで同じような処理をする場合、誤差が数メートル程度になるので ビルレベルで AR 表現をするのは難しい。(遠景の山とか星とかなら気にならない

Immersal

企画当初の 2022 年 1 月時点でまともに使えそうなのが Immersal だった。(ARKit の Location Anchors はアメリカ国内限定だったし ARCore の Geospatial API はまだ公開されてなかった。)

使い方

  1. Immersal Mapper というキャプチャ用アプリがあるので対象物を色んな方向から撮影する。
  2. Immersal Mapper から専用サーバーに撮影した画像を送信する。
  3. しばらく待つと写真から解析された特徴点データ (Immersal 専用フォーマット) と位置合わせ用のモデルデータ(PLY と glTF)が生成される。(1.71.0 で glTF 出力機能廃止…)
  4. glTF はフォトグラメトリされたっぽいモデルになってるのでこれを Blender などによみこんで AR コンテンツの位置あわせをする。
  5. Immersal SDK を組み込んで↑の特徴点データを読み込ませてカメラ画像をつっこむと一致したときにその画像に対するカメラ姿勢パラメータが取得できるのであとはそれを AR カメラに設定してコンテンツ動かすなりする。

やってみた

  • Immersal Mapper で 130 枚ぐらい撮影した。
  • だいたい位置あってるけど完全ピッタリってこともない。(ドリフトする)(Localize ボタン押したときだけ位置あわせしてるので数秒おきに localize するようにすればよいかも
  • 遠いほうがズレが気にならない(あたりまえ
  • 昼間撮影したデータが夜でも使えるのかは要検証(たぶん別途撮影してデータ作らないといけない

精度をあげるためにフォトグラメトリアプリで解析したカメラデータを使う

Immersal にはカメラ画像とその姿勢パラメータを送るとそれらをもとに特徴点データを生成してくれる API があって、これを使うと Immersal Mapper を使わずに特徴点データが作れる。(というか Immersal Mapper はその API を使っている)

ドキュメントにはサンプルとして Metashape で解析したカメラパラメータで生成する方法が書いてある。

精度がイマイチなのは Immersal Mapper のロジックの問題かな?と思ったのでサンプルコードのまんま、Metashape に写真を食わせてカメラパラメータを取得して API つかって特徴点データを生成してみたものの、結果はあまり変わらなかった。

Metashape の解析精度がイマイチかな?と思って Reality Capture で同じようにやってみたものの、こっちも結果はあまり変わらなかった。(Immersal API が求める形式と Reality Capture の出力できる形式が座標系含めいろいろ違うので Unity でコンバートする仕組みを作る必要があってわりと苦労したのにー)

結局 Immersal Mapper で作るのと外部解析での特徴点データの精度はあんまり変わらないという結論。

生成方法による違い

特徴点データとともに生成される glTF のモデルデータを見ると精度がある程度わかるので重ねてみた絵。紫のがビルのモデルデータでこれに近いほど精度が高い。テクスチャがついてるメッシュが Immersal Mapper でグリーンのメッシュが Reality Capture で解析したカメラパラメータをもとに生成したデータ。どっちもほぼ同じで実際にアプリに組み込んでみても精度はあまり変わらない。

・・・

(余談:要はカメラの絶対位置と姿勢の精度がしっかりしてればいいんしょ?と思って RTK でカメラ位置を取得しようとしてみたのだが都会のビルのはざまでは RTK Fix するわけもなく断念…)

結論

全くズレが気にならないレベルではないけど Immersal の精度であれば今回の用途には使えそう。ただしコンテンツ側でそのズレが気にならないようにする演出は必要そう。

・・・

といったあたりで別プロジェクトが燃えだしたので一旦 R&D は中断、続きは数カ月後…(明日の記事に続く

3
0
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?