1
3

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.

Unityに大量の点群を表示する手順

Last updated at Posted at 2023-12-10

はじめに

この記事では,大量の点群データをUnityに表示させるまでの手順を説明します。

image.png

目次

  1. 実行環境
  2. 点群データをlas形式に変換
  3. lasファイルをpotree形式に変換
  4. UnityにBA_PointCloudを導入
  5. Unity・BA_PointCloudの設定
  6. 結果
  7. 参考文献

実行環境

・Windows11
・Unity 2021.3.19f1
・CloudCompare V2 (点群編集用ソフト)
・PotreeConverter 2.1.1 (点群ファイル形式変換コンバータ)

点群データをlas形式に変換

点群データをlas形式に変換します。

las形式への変換には,CloudCompareというフリーソフトを使用します。

点群データをCroudCompareにドラッグアンドドロップし,点群データを開きます。
今回は,ply形式のファイルを変換します。

image.png

大規模なデータの場合,必要に応じて点群データの間引きなどを行います。


las形式で保存

DB Treeから,点群データをクリックし,選択します。

image.png

上のツールバーFile>Saveをクリックし,las形式で保存します。

image.png


因みに,色を確認したい場合はProperties>Color>RGBで点群の色を表示することができます。

image.png

lasファイルをpotree形式に変換

potree形式とは,大量の点群データを効率的に表示するための形式です。
遠くのオブジェクトは粗く、近くのオブジェクトは細かく表示するLODや,空間分割し動的に読み込みを行うことにより,高速に表示することが可能になります。

手順

先ほど変換した,las形式の点群データをpotree形式に変換します。

以下のコンバーターをダウンロードし,zipファイルを展開します。
PotreeConverter

image.png

ダウンロードが完了したら、好きな場所に出力用のフォルダを新規作成します。
image.png

PotreeConverterのフォルダで,パスにcmdと入力し,コマンドプロンプトを起動します。
image.png

コマンドプロンプトで以下のコマンドを実行します。
(ファイルパスは,ドラッグアンドドロップでもコピーできます)

PotreeConverter.exe <lasファイルorフォルダのパス> -o <出力フォルダーのパス>

注意:ファイルパスに日本語が存在すると正常に実行されない可能性があります。

成功すると以下のようなlogが表示されるかと思います。
image.png

出力先のフォルダに,以下のようなファイルが作成されます。
image.png

これでPotree形式への変換は完了です。

UnityにBA_PointCloudを導入

Unityで新規プロジェクト(3D)を作成します。

image.png

BA_PointCloudをダウンロードします。

image.png

unitypackageをダウンロードし,ファイルをダブルクリックすると,Unityで以下のような画面が表示されます。

image.png
すべての項目をチェックし,「Import」をクリックします。

Unity・BA_PointCloudの設定

Assetsフォルダ内に,「StreamingAssets」というフォルダを新規作成します。

image.png

注意:"StreamingAssets"という名前を間違えないようにしてください。このフォルダを作成することで,スクリプトから簡単に点群データファイルを参照できるようになります。

StreamingAssetsフォルダ内に,Potree形式に変換した点群データのフォルダを配置します。

image.png


Sceneで右クリック>CreateEmptyをクリックし,空のGameObjectを3つ作成します。

image.png

わかりやすいように,以下のように名前を変更します。

  • DynamicPointCloudSet
  • PointCloudLoader
  • DefaultMeshConfigration

image.png

それぞれのゲームオブジェクトを設定していきます。


DynamicPointCloudSet

ゲームオブジェクトに「DynamicPointCloudSet」コンポーネントを追加します。

Inspector > Add Component > Dynamic Point Cloud Set をクリックします。

image.png


「PointCloudLoader」「DefaultMeshConfigration」でも,同じ操作を行っていきます。

PointCloudLoader

image.png

DefaultMeshConfigration

image.png


それぞれのコンポーネントの設定を行います。

DynamicPointCloudSet

image.png

  • MeshConfigration : DefaultMeshConfigrationを設定
  • UserCamera : MainCameraを設定
    ※gameObjectをドラッグアンドドロップでも設定できます。

PointCloudLoader

image.png

  • CloudPath : StreamingAssetsフォルダに配置した点群データのフォルダ名
  • StreamingAssetsAsRoot : True
  • SetController : DynamicPointCloudSetを設定

DefaultMeshConfigration

image.png

RenderCamera以外は,必要に応じて設定します。

  • RenderCamera : MainCameraを設定
  • PointRadius : 点の半径
  • RenderCircles : falseで四角の点 / trueで円の点を描画
  • ScreenSize : falseで点が遠近法で描画 / trueで全ての点のサイズが等しく描画
  • Interpolation : 補間モード
  • Reload : trueでアプリ実行中にこれらの設定の変更を反映
  • DisplayLod : ロードされた Octree ノードの境界ボックスを表示

MainCamera

最後に,カメラを操作できるようにMainCameraに「CameraController」コンポーネントを追加します。

image.png
これにより,プレイ中にキーボードでカメラ操作ができます。

結果

実行すると,Unity上に点群データが表示されました。
image.png

参考文献

1
3
0

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
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?