【ハウツー】周辺環境を3Dスキャンする簡単な方法 (RealSense)

本記事では、Intel RealSense デプスカメラ(D415, D435, D435i )や LiDARカメラ L515を活用し、周辺環境を3Dスキャンする簡単な方法をまとめています。

3Dスキャン(物体を三次元のデジタルデータ化)のためにはいくつかのソフトウェアを必要としますが、比較的簡単な手順で実現することができます。周辺環境を3Dスキャンし Mozilla Hubsでルームを作成するまでの手順となりますので、ご参考になれば幸いです。

※本記事は以下のWEBページを参照しています
How-To: A Simple Way to 3D Scan an Environment
https://www.intelrealsense.com/3d-scanning-an-environment

はじめに

3Dスキャンや3Dモデリングなど、目的やソフトウェアに合わせて様々なファイル形式を選択する必要があります。今回の記事内にもいくつかのデータ形式やファイル形式が出てきます。まずはじめに簡単な説明をいたします。

・PLYファイル形式
三次元の点群データを格納する3D画像ファイル形式

・OBJファイル形式
3Dモデル形式のひとつで、3次元の空間オブジェクト(ジオメトリ)を表現する単純なデータ形式

・GLBファイル形式
3Dモデルを伝送するためのGL伝送形式(GLTF)に保存された3Dモデルのバイナリファイル形式

周辺環境を3Dスキャンしたのち、使用するソフトウェアに合わせてデータを保存しながら、最終的にVRフレンドリープラットフォームである”Mozilla Hubs” での公開を目指します。

 

Hubsについて

Hubsはウェブブラウザで知られるMozilla(モジラ)の Mixed Reality(複合現実)チームにより製作された無料のVRフレンドリープラットフォームです。このオープンソースのソーシャルVR空間を通して、さまざまな疑似体験が可能です。自分のスペースに第三者を呼び込むことだけでなく、新しいルームを作成し、モデルをインポートすることで共有もできるようになります。

 

ステップ1:スキャンを実施する

インテル社のRealSense デプスカメラを活用し3Dスキャンを行うためのアプリケーションは数多くありますが、今回はその中でも使いやすさに定評がある”Dot3D Pro”のファイルのエクスポート機能を使用します。

本デモンストレーションではMicrosoft Surface Pro 4(第6世代)を使用しています。”Dot3D Pro”と互換性があればどのデバイス(デスクトップ、ノートPCなど)でも動作しますが、十分な長さのUSBケーブルが必要になる場合があります。またスキャン対象の物体までの距離によってはハードウェアの設置場所や配線までも考える必要があるでしょう。その点タブレットの選択は設置場所やハードウェア側の制限が少なく、周辺環境をスキャンするプロセスがより簡単になります。

 

1-1.スキャンの開始

Dot3D Proを使う際は、USB 3.0のケーブルとポートを必ず使用してください。

カメラをタブレットに接続しソフトウェアを開きます。ソフトウェアの設定ウィンドウ内で接続しているカメラを選択します。

次に新しいスキャンの作成を選択し、「スキャン」アイコンを選択しスキャンを開始します。

カメラを動かすと、カメラフィードのピクセルが白や黄色、緑に変わります。緑はそのエリアが完全にスキャンされていることを意味します。完全なスキャンを行うためには、時間をかけ、隙間を埋めるように細かな動きで周辺エリアを移動してください。

スキャンを行っている間にホストデバイス側のカメラを使用して、スキャンしている場所を高解像度RGB静止画として撮影することもできます。後の作業において”Blender”や”Maya”のような3Dパッケージでモデルを操作する際に、この静止画を参照し使用できます。

満足のいくスキャンデータを取得できたら、スキャンボタンをもう一度タップして作業を終了します。ここでモデルの最適化を行ってください。スキャンしたファイルサイズによっては数分程度かかる場合があります。最適化が終わったらスキャンをPLYファイル(3D/点群ファイル形式)として保存します。

 

スキャンの際の注意点

1.極端に明るい場所を避ける
屋外でのスキャンの場合、空間を正確にスキャンする際に問題が発生したり、結果のモデルに一貫性がないように見えたりする可能性があるため、直射日光など極端に明るい場所は避けてください。L515を使用する場合は、モデルの結果をより良くするために屋内スペースでのみスキャンを行ってください。

2.濃暗色、光沢素材を避ける
光沢のある黒テーブルなど、非常に暗く光を反射するような素材の物体は、視差が得られず距離が算出できなくなる可能性があるためできるだけ避けてください。

さまざまな環境でのスキャンデータの比較については、こちらの記事をご参照ください。

 

※参考動画

新しくサポートされたIntel RealSense デプスカメラ D455、および LiDARカメラ L515からのスキャンデータをキャプチャして処理する全プロセスです。

Master Class in Dot3D™ 4.0: Intel® RealSense™ Handheld 3D Scanning

 

 

ステップ2:OBJファイルに変換する

PLYファイル(3D/点群ファイル形式)には、3次元スキャナから取得した3次元データ(3Dモデル)が格納されており、そのままでも3Dモデルとして活用できます。 例えば3Dビューアー “Sketchfab“に3Dモデルをアップロードし、3D、VR、ARコンテンツとして簡単にシェア(公開や共有を)することができます。

しかしPLYファイルは非常に大きいため、ファイルの処理や柔軟性を高めたい場合などにはメッシュ形式へ変換することをお勧めします。”Meshlab”を使用して点群データ(PLYファイル)をOBJファイルに変換する方法は以下の通りです。

2-1.PLYファイルをインポート

“Meshlab”を開き、ツールバーの[File(ファイル)]>[Import Mesh(メッシュのインポート])に移動します。ステップ1でエクスポートしたPLYファイルをインポートします。

インポートされたメッシュが表示されている”Meshlab”

 

2-2.メッシュデータをきれいにする

インポートされた状態のままでは、まだ完全なデータとはいえません。さらにいくつかの操作を行いポイントクラウドデータ(点群データ)をきれいにし、メッシュデータに変換します。ファイルの外観によっては、設定をいじったり、不要な頂点を削除したりする場合があるかと思います。その場合には以下の手順がおすすめです。

2-2-1.
ツールバーの上部にある[Select Vertices(頂点の選択)]ツールを使用して、頂点のグループを選択します。その次に[Delete the current set of selected vertices(選択した頂点の現在のセットを削除する)]ツールを使用し削除してください。

きれいになったメッシュ ※ツールバーの2つのツールにマークしました

2-2-2.
[Filters(フィルタ)]> [Sampling(サンプリング)]> [Poisson-Disk Sampling(ポアソンディスクサンプリング)] に移動

設定画面で「Base Mesh Subsampling(ベースメッシュサブサンプリング)」が選択されていることを確認し、サンプル数を数万に変更します(ここでは35,000を選択しました)。ここでの数値が大きいほど、最終的なメッシュはより洗練されたものになります。なおポリゴン数(三角形の数)は他のプログラムやアプリケーションでのメッシュの動作に影響しますので、必要以上に設定を高くしすぎないようにしてください。

ここには画像がありませんが、右側のレイヤーメニューに、元の点群とポアソンディスクサンプリングが表示されます。これ以降必要がないため元のメッシュを削除します。

 

2-2-3.
[Filters(フィルタ)]> [Point set(ポイントセット)]> [Compute normal for point set(表面の法線を計算する )]に移動

メッシュネイバー番号を16に変更して実行します。これはマーチングキューブス法で面を生成するために、各点の法線ベクトル(各面がどちらの方向を指すか)を自動的に決定しようとしています。

 

2-2-4.
[Filters(フィルタ)]> [Remeshing, Simplification and Reconstruction(再メッシュ、単純化、再構成)]> [Surface Reconstruction: Ball Pivoting(表面再構成:ボールピボット)]を選択

「Pivoting Ball Radius(ピボットボール半径)」の横にある、ワールドユニットボックスの上矢印を1回クリックすると適切な値が自動入力されます。適用するとポイントクラウドの代わりにメッシュが作成されます。作成されたメッシュに満足するものができるまで、戻ってパラメータ少しずつ変える、という手順を繰り返してください。

 

色情報の取得

ここで”Meshlab”からエクスポートする際に、今ある色の情報を取得する方法もご紹介します。

[Filters(フィルタ)]> [Texture(テクスチャ)]> [Parametrization: Trivial Per triangle(パラメータ化:三角形毎のトリビアル)]を実行します。エラーが発生した場合は、三角形の間の境界線の値を1に変更します。

[Filters(フィルタ)]> [Texture(テクスチャ)]> [Transfer Vertex color to texture(頂点カラーをテクスチャに転送)]を実行。このときにプロジェクトを保存するように求められます。提案された名前「プロジェクト名」を使用してテクスチャファイルを保存します。なお保存名は「プロジェクト名」に「_tex.png」が追加されます。

同じフォルダにOBJファイルとしてエクスポートします。使用可能なすべてのチェックボックスが選択されていることを確認してください。作成したばかりのテクスチャファイルが右側のボックスに表示されます。このファイルタイプは、”Unity”や”Unreal”などの3Dパッケージやゲームエンジンでも使用できます。

 

次のステップでは、”Meshlab”からオープンソースの3Dモデリングツールである”Blender”に移動します。

 

ステップ3:GLBファイルに変換する

“Blender”を開き、OBJファイルをインポートします。ファイルをインポートする際に問題が発生した場合は、ビューポートの左上隅にある[View(表示)]をクリックして、[Sidebar(サイドバー)]のチェックボックスをオンにします。

ビューポートの右側に、「View(表示)」というラベルの付いたタブがあります。クリップの開始パラメータと終了パラメータを0.01m10000mにそれぞれ変更します。

モデルが表示されるまでズームイン、ズームアウトします。逆さまになっている可能性があるので、回転させて少し縮小してください。

Blenderでのモデル: 左側にはハイライトされた「回転」ツールが、右側には「ビューパネル」が表示されます

 

次に表示されているモデルをクリックします。画面の左側で「rotate(回転)」アイコンを選択し、床が正しい方向になっていることを確認できるまで、方向リングを使って調整します。

同時にこの段階でモデルを縮小します。次の段階で最終的なサイズを微調整できますが、おおよそ10%程度のサイズにすることをお勧めします。

またモデルにテクスチャがないことにお気づきかもしれません。ビューポートウィンドウの右上には、いくつかのビューポートシェーディングアイコンがあります。 「Material preview(マテリアルプレビュー)」を選択することで、モデルの色が表示されます。

“Blender”の編集ツールで穴を埋めたり、外側の面を削除したりして、メッシュをよりきれいに見せることもできます(メッシュをきれいにするのに役立つチュートリアルはたくさんありますのでここでは説明しません)。

作成したメッシュに満足できたら「GLTF2.0」としてエクスポートします。実際に必要なファイルの拡張子は、gltfのバイナリバージョンである「.glb」です。

 

ステップ4:Hubsへインポートする

Firefoxを開き、hubs.mozilla.com にアクセスし、アカウントにサインインしてください。「Create a room(ルームを作成)」、「Choose Scene(シーンの選択)」の順にクリックし、「Create a scene with Spoke(Spokeでシーンを作成)」を選択します。

新しいプロジェクトを作成する場合は「空のプロジェクト」を選択します。

スポーン地点を表すアバターとクレーター地形が表示されます。左下のパネルで「My assets(マイアセット)」をクリックします。ここにステップ3でエクスポートした.glbファイルをアップロードし、クレーター地形のすぐ上の階層パネルにドラッグ・アンド・ドロップします。

スポーン地点アイコンとクレーターの地形をガイドとして使用して、シーンをスケーリングします。今回はメッシュを、元のサイズから0.002にスケーリングしました。クレーターの地形を維持、または非表示にしたり、照明などのオブジェクトを追加したりできます。

スポーンポイントモデルに合わせてスケーリングされた、階層とビューポートの最終シーンを表示したスポークウィンドウ

 

仕上がりに満足したら、[Publish to hubs(Hubsに公開)]を選択します。メッシュは非常に精密なデータのため、ポリゴン数(三角形の数)が多すぎる場合などはモバイルではうまく機能しないかもしれません。理想的なのは “blender” の段階でメッシュを50,000ポリゴン未満に減らしてパフォーマンスを向上させることです。他のすべてのパフォーマンスパラメータは問題ないことを確認し、[view your scene(シーンを表示)]、[Create a room with this scene(このシーンでルームを作成)]の順に選択することでシーンを公開します。

ルームでは、リンクを他の人と共有し3Dスキャンを見せることができます。この流れは”Dot3D Pro”、またはその他のIntel RealSense対応ソフトウェアを使用してスキャンされたポイントクラウドオブジェクトでも機能するはずです。

これによりソーシャルVR空間が作られ、誰でもブラウザ経由で作成者(あなた)とチャットする、VRヘッドセットを使用したバーチャルな空間を楽しめるといったことができるようになります。

 

下の画像は今回作った最終シーンです。もちろん元のハイクオリティなスキャンから作成したメッシュをさらに最適化、そして改善するための作業は必要になりますが、このワークフローを使って3D環境を作成することを実証できました。

ソーシャルVR Mozilla Hubs ポータル内の3Dスキャン環境

 

 

最後に

この記事内で言及しておりますインテル社のRealSense Dシリーズ、LiDARカメラ L515 などは弊社にてお取り扱いがございます。研究開発者向けサービス「レンタルサービスtegakari」では実機をお気軽にお試しいただけます。ご利用に関しましてもぜひ気兼ねなくお問合せください。