見出し画像

Appleの「RoomPlan」をわかりやすくまとめてみた (2/2回)

ANDPAD ZEROの藤田です。
今回は、前回に引き続きAppleの「RoomPlan」について紹介いたします!

Apple Developperサイトより

前回の記事では主にAppleのリファレンスをベースに「RoomPlan」がどういったものなのか、また、どのような感じで使えるのかについて紹介いたしました。今回の記事では実際にいろいろなものをスキャンして、どういう情報が得られるのかについて深堀りしていこうと思います。


検証にあたって

前回のnoteの際に簡単なサンプルアプリを作成してスキャンをしてみたところ、他のメンバーから「検証に利用してみたい」といった声が寄せられたため、今回は弊社の3DスキャンアプリにRoomPlanのAPIを組み込んでみました!

検証のため「ANDPAD 3Dスキャン」にRoomPlan機能を追加してみた

実は、新規アプリとして作成するより、既存のアプリに組み込む方が他のメンバーへの配布に便利なんです。また、UIに関しても、既存の3Dスキャンのスキャン画面と同じUXになるよう調整を行っています。
*現在リリースされている「ANDPAD 3Dスキャン」アプリには、この機能は追加されておりません。

それでは、実際にいろいろとスキャンをしていきましょう。

実際にスキャンしてみよう

今回、いろんなパターンの家具や部屋をスキャンするため、オフィス内の様々な場所でスキャンしてみることにしました。
小さな会議室、大きな会議室、半個室スペースなど、空間や設備の違いがスキャン結果にどう現れるでしょうか。それでは実際にスキャンしていきましょう!

小さな会議室をスキャンしてみよう

まずは定員4名の会議室をスキャンしてみました。

図1:今回はじめにスキャンする小さな会議室

スキャン中のキャプチャがこちら(図2)になります。
テーブルや椅子以外にもガラス窓やドア、TVまで認識してスキャンできていることがわかります。

図2:スキャン中のスマホキャプチャ

スキャンした結果がこちら(図3)です。
椅子の数が2つしかスキャンできていませんが、窓部やドア部分は解放されており、TVもきちんとスキャンできていますね。

図3:小さな会議室のスキャン結果

前回の記事にて「RoomPlan」は家具やドア、窓といった部屋を構成するオブジェクトを識別することができると紹介させていただきました。
実際のところはどうなのか、このスキャン結果のモデルをMacで見てみましょう。

なお、「RoomPlan」ではスキャンした結果は「USD」というフォーマットでのエクスポートがサポートされています。このフォーマットはアメリカのアニメーションスタジオであるPixerが公開した3Dモデルのオープンフォーマットであり、MacやiPhoneで標準で取り扱うことができる拡張子です。

エクスポートしたモデルを実際にMacで表示させた結果がこちら(図4)です。

図4:USD形式でエクスポートしたモデルをMacで表示

Xcodeというアプリ上で上の図のように表示することができました。この状態では1つのモデルとなっており、認識していたはずの各オブジェクトを選択したりすることはできません。
そこで、画面右上の「Export to SceneKit」というボタンを押してみます。
*「SceneKit」はAppleの3Dを取り扱うフレームワークです。

すると「scn」というSceneKitの拡張子に書き出され、それを表示したものがこちら(図5)になります。

図5:SceneKitでの表示結果

この状態では、各オブジェクトが独立したモデルとして認識されるようになります。
例えば、ドア部分をクリックしてみると、以下のキャプチャ(図6)の通り、ドアとしてパースされていました!

図6:ドアが認識されること確認

また、ディスプレイをクリックしてみると、こちら(図7)もディスプレイ(モデル上はTelevision(テレビ))として認識されていることがわかります。

図7:ディスプレイが認識されることを確認

さらに、X/Y/Z軸の矢印をドラッグすることで、オブジェクトを移動させることもできました!

図8:オブジェクト単位で編集できることを確認

オブジェクトごとにきちんと識別されており、また、エクスポートできたモデルでもそのオブジェクト単位で編集できることがわかりました。なかなかすごいですよね!
「RoomPlan」でスキャンすることでBIMモデルを構築できるといっても過言ではないんじゃないかと思いました!

一方で、Viewerで表示されている情報では少しわかりづらかったところもあり、今回、メタデータ情報についても確認してみたいと思います。
メタデータ情報は、スキャン結果をJSONに変換させることでエクスポートできるようです。
JSONに変換させてメタデータを確認したところ、Appleのリファレンスに記載されていたとおり、カテゴリーとしてドアや壁、窓等が識別されていること、さらに、それらの認識精度についても仕分けされていることが確認できました。
また、寸法や3次元情報についても格納されていることが確認できました。それらを活用して2次元図面として描画させることもできそうです。

また、2部屋跨いでスキャンするとどうなるのか試してみました。

図9:2部屋跨いでスキャンした結果

部屋を跨いでいても問題なくスキャンできていますね!

大きな会議室をスキャンしてみよう

次は、より大きな会議室をスキャンしてみました。

図10:今回スキャンする大きな会議室

スキャンした結果がこちら(図11)になります。

図11:大きな会議室のスキャン結果

スキャン結果を見ると、会議室への出入口となるドアが1つスキャンできておりません。
また、ガラス部分(図11の右側)をクリックしてみたところ、この広いガラス部分がドアと認識されてスキャンされていることがわかりました。

図12:ガラスがドアとして認識されている

メタデータを確認したところ、ドアは2つ検出されており、片方の精度は中(「RoomPlan」ではそれぞれのオブジェクトの認識精度について「high」「medium」「low」の3段階で表現されます)となっておりました。このスキャンを行った際、移動したりカメラをかざす際のスピードが少し早めだったことが起因しているのかなと思い、次は先ほどよりもゆっくりとスキャンを行ってみました。
その結果がこちら(図13)になります。

図13:再度大きな会議室をスキャンした結果

今度はドア部分も問題なくスキャンできました。
やはり「RoomPlan」でも、スキャン時はゆっくりカメラを移動させた方が精度が高くなるようです。

半個室スペースをスキャンしてみよう

次は半個室のような解放部分のあるスペースをスキャンしてみました。
弊社には半個室型の集中スペースがあり、この場所をスキャンしたらどうなるのでしょうか。

図14:今回スキャンする半個室スペース

結果がこちら(図15)になります。

図15:半個室スペースのスキャン結果

半個室のような解放部分が大きいスペースのスキャンでしたが、概ね正確にスキャンできています。
しかし、一部パーテーションがうまくスキャンできず欠損しています。このスペースはそもそもが狭く、後ろに引いてカメラをかざすことが難しかったのでスキャンに漏れがでてしまったと考えられます。
うまくスキャンするためには、オブジェクト全体がカメラに収められるようなスペースの確保や工夫が必要のようです。

番外編(スキャン結果を二次元図面化してみた)

「小さな会議室をスキャンしてみよう」の項にて、スキャン結果のメタデータにはオブジェクトの寸法や3D空間情報が含まれており、それらを利用して3Dモデルを2次元図面に変換することもできそうと記述しました。
この項では、3Dモデルを2次元図面に変換する機能を実際に開発してみたので、それについてみていきましょう。

まずは最初にスキャンした小さな会議室です。

図16:小さな会議室のスキャン結果を2次元図面化してみた

デスクや椅子、TVまでいい感じに描画できていますね。
さらに、大きな会議室ではこんな感じの図面(図17)が作成できました。

図17:大きな会議室のスキャン結果を2次元図面化してみた

こちらもかなりいい感じに図面化できています。
オブジェクトも認識されているので、部屋の枠だけの図面が欲しい時は椅子や机、TVを描画させないことで、そういった図面を得ることもできそうです。
寸法情報も存在するため、寸法線の付与も頑張ればできるんじゃないかと感じました!

最後に

今回は「RoomPlan」の検証を行ってみましたが、いかがでしたでしょうか。

今回、載せなかったのですが、フロア全体のスキャンも試してみました。
しかし、さすがに広すぎたためかスキャンが途中で強制終了するような挙動となってしまいました。
前回のnoteでも説明させていただきましたが、Appleも一般家庭の部屋のサイズ(9m x 9m)までを推奨しておりますので、あまり広いスペースを一度にスキャンすることは難しいようです。

ですが、iOS17からは「RoomPlan」でスキャンした結果を結合させる「CapturedStructure」という機能が追加されています。
1部屋単位でスキャンを行っていき、結合したモデルが必要であればそれらを結合させるというのがAppleの考えているフローのようです。
また、取得したメタデータより3Dモデルから2次元図面を作成することもできました。これ以外にもいろいろと応用して様々な機能の開発が行えるような気がしています。まだ新しい機能のため、今後のアップデートにも期待できますし、今後がとても楽しみですね!

最後までお読みいただきありがとうございました!!


この記事が気に入ったらサポートをしてみませんか?