夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

SpatialMappingの性能を調査してみた ~HoloLendで3Dモデルを作る~ HLアドベントカレンダー2020 2日目

本日はHoloLensのSpatialAwarenessの調査枠です。またこの記事はHoloLensアドベントカレンダー二日目の記事になります。

〇SpatialAwarenessとは?

HoloLensの生み出すMixedRealiry体験では現実の壁や床に対してオブジェクトを配置したり、ナビゲーションなどを行えます。

これはHoloLensのカメラによって空間が常にスキャンされており、自己位置推定とともにscanした空間にMeshを貼ることで実現しています。

hololabinc.github.io

この認識する機能をSpatialAwareness(空間認識)、生成されたMeshをSpatialMeshと呼びます(一連の機能全体をさしてSpatialAwarenessもしくはSpatialMappingと呼ばれることもあります)。

今回はこの空間認識の性能を調査する一つとして生成されたMeshを外部PCにエクスポートしてフォトグラメトリのような3Dモデルを作成しながらSpatialAwarenessフィールドワークで調査します。

〇SpatialMeshの生成と閲覧

SpatialMeshはHoloLensの体験においてあらゆるところで見ることができます。

排他的アプリを起動していない状態(MixedRealityHome)では、AirTapを行うことで波紋上にSpatialMeshが見える演出があります。

SpatialMeshが生成される仕組みとしてHoloLensのIRカメラ(深度カメラ)が使用されています。

このためガラスや黒体など一部のオブジェクトは認識することができません。

f:id:Holomoto-Sumire:20201202105431j:plain

また、自己位置推定(SLAM)に空間の特徴点を使用しているので、例えば学校の教室など同じ大きさ、同じようなレイアウトの二つの部屋では混同することがあります。(Microsoftのドキュメントではこの現象をワームホールと呼んでいます。)

docs.microsoft.com

〇SpatialMeshのエクスポート

SpatialMeshは次の二つの手段を使用してエクスポートすることができます。

①HoloLensアプリ内でMeshをエクスポートする

 アプリ内で現在使用しているMeshを取り込む方法です。

こちらは後日別記事で紹介します。

②デバイスポータルを使用して取り込む

 こちらは特別なアプリが必要なくPCと接続してデバイスポータルを用いる方法です。

f:id:Holomoto-Sumire:20201124201341j:plain

 今回はデバイスポータルを使用する方法でSpatialAwarenessの性能を調査して3Dモデルを作成します。

〇調査

 今回以下の理由で山手線上野駅をスキャンすることにしました。

 ・屋内で広いスペースである。

 ・人に迷惑をかけない

 ・環境が大きく変わらない

 ・筆者が頻繁に利用する

このうち『人に迷惑をかけない』という点で、上野駅の場合改札が複数の階に分かれており、3階(公園口改札、入谷改札)は通路が広く、混む時間帯を避け電車到着時を除けば人が比較的少ないため上野駅を選びました。

f:id:Holomoto-Sumire:20201202105415j:plain

〇調査方法

今回以下の目的で上野駅をスキャンしました。

・広い空間を認識できるかの確認

・認識したメッシュをPCにエクスポートする

 調査の際はHoloLens 2を着用し、タブレットPCとUSBで接続し、デバイスポータルを使用しました。 以下調査環境

・HoloLens 2

Surface Book(初代)・・・デバイスポータル接続用

・USB-Cケーブル

・予備バッテリー(HoloLens 2ロゴ入り※)

f:id:Holomoto-Sumire:20201202105402j:plain

なお調査に関して始発の人が少ない時間に行っています。

※こちらコミュニティイベントの景品でいただいたものです、HoloLens 2専用というわけではありません

〇スキャンの限界

SpatialMeshはデバイスポータルのVeiwウィンドウで見ることができます。ここでSpatialMeshはVolume(立体物)としてまとめられます。

f:id:Holomoto-Sumire:20201202094850j:plain

バイスポータル上の表記でVolumeの数が120(Triangles数が8~10万)になったあ たりから古いVolumeが破棄されるようになりました。

どうやらHoloLensでは広い空間を一度に認識することは制限があるようで、立体物の数で上書きが行われているようです。

しかしDefaultで9~10万ポリゴン近くのMeshを生成することができることはHoloLensアプリ内で使用できるモデルの推奨ポリゴン数(3~10万が上限 15~20万以上はパフォーマンスが落ちる)を考えるとかなりの数のメッシュを生成できると言えます。

〇スキャンしたデータ

今回上書きされる前に定期的にobjとして書き出しBlenderを使用して一つのメッシュに変換することに挑戦しました。

2時間ほどで上野駅3階の半分をスキャンでき9万ポリゴンのobjモデルを16個書き出しました。

エクスポートに関して詳しくは以前の記事でまとめています。

redhologerbera.hatenablog.com

スキャン限界である1個単位のオブジェクトは以下のようになります。

f:id:Holomoto-Sumire:20201202092230j:plain

Blenderで取り組むことでMesh同士がValueにまとめられていることを確認できます。

f:id:Holomoto-Sumire:20201202092543j:plain

床の場合一つ一つのValueの大きさは約2.5×2.5mの大きさを持っています。

f:id:Holomoto-Sumire:20201202093020j:plain
床のValue緑いろの部分が1×1mの大きさ

f:id:Holomoto-Sumire:20201202094130j:plain
ワイヤフレーム表示

これでSpatialMeshの生成の調査と、それを取り出し3Dモデルを作成することができました。

〇まとめ

・HoloLensのSpatialAwarenessで生成されるMesh数(正確には立体物数)には制限がある。

・HoloLensのSpatialMeshで空間の3Dモデルが作れる

〇HoloLensアドベントカレンダーとは?

qiita.com

冒頭でもお知らせしましたが、本日の記事はHoloLensアドベントカレンダー二日目の記事になります。

昨日は私の師匠のガチ本さんがFaceAPIをHoloLens 2で使ってみる記事を紹介されています。

qiita.com

(実は私が沼にハマってガチ本さんに相談したとところ記事にしてくださいました。別記事でやってみたいと思います。)

明日、三日目は引き続き私、ホロ元がお送りします。