ScaniverseでスキャンしたモデルをUnityに取り込む方法

現実空間(部屋全体)をまるごとスキャンしてUnity上にデジタルツイン空間を生成する必要が出たため、その手法を調べた。
ここでは、現実空間をスキャンする方法、データをPCに取り込む方法、Unityで取り込む際の設定を備忘録としてまとめる。

現実空間をスキャンする方法

まず、iPad proのLiDARを使用して現実空間をスキャンするアプリの選定を行う。

  • メッシュスキャンができる(点群でない)
  • テクスチャ解像度が高い

という2つの理由と、次の2つのツイートを参考に、Scaniverse を使用することを決めた。これは年額2000円の有料アプリだったが、ポケモンGOなどARゲームやプラットフォームを持つNiantic, inc.が買収し、無料となったことも理由の一つである。

データをPCに取り込む方法

Scaniverseは、多くのモデルの出力に対応している。

  • FBX (Supported by most 3D software & game engines)
  • OBJ (Text-based 3D model format)
  • GLB (Open 3D format for the web (binary GLTF))
  • USDZ (Best for ARKit and sharing to iPhones)
  • STL (Stereolthography file)
  • PLY (High-density color point cooud)
  • LAS (Georeferenced color point cloud)

Unityのドキュメントによると、
各種3Dオブジェクトファイルの中で、FBXが扱いやすいとわかった。

ScaniverseはUIがわかりやすいため、使用方法は省く。Scanしたあと、アプリ内で適宜取り込む範囲をCropするといい。 Fileに保存して、Onedriveで共有するなり、メール添付で飛ばすなりしてPCにfbxが格納されているzipファイルを取り込む。
私の場合、研究室一部屋をスキャンして20~30MB程度(最高解像度)だった。

Unityへ取り込む方法

Unityプロジェクトを開いたらProjectに適切なフォルダを作成し、FBXファイルをドラッグ&ドロップで取り込める。
しかし、そのままシーンに取り込むとテクスチャが反映されていない白いモデルが表示されてしまう。 そこで、fbxを選択した際のInspector - Materialsから[Textures: Extract Textures…]を選択する。 そして、fbxの格納されていたフォルダ自身を選択すると、fbxからテクスチャが抽出され、適用される。

これで、Unity上で現実のスケールと合わせたモデル表示が可能となる。
ただし、マテリアルとDirectional Lightの関係でScaniverse上とモデルの見え方は異なる。適宜調節が必要。

Unity上で生成したTextureのTexture max sizeは16384 まで対応しているが、Scaniverseの出力が8192までしか対応していないのため、これ以上テクスチャ画質を上げることは出来ないと思われる。