はじめに
この記事では,大量の点群データをUnityに表示させるまでの手順を説明します。
目次
実行環境
・Windows11
・Unity 2021.3.19f1
・CloudCompare V2 (点群編集用ソフト)
・PotreeConverter 2.1.1 (点群ファイル形式変換コンバータ)
点群データをlas形式に変換
点群データをlas形式に変換します。
las形式への変換には,CloudCompareというフリーソフトを使用します。
点群データをCroudCompareにドラッグアンドドロップし,点群データを開きます。
今回は,ply形式のファイルを変換します。
大規模なデータの場合,必要に応じて点群データの間引きなどを行います。
las形式で保存
DB Treeから,点群データをクリックし,選択します。
上のツールバーFile>Saveをクリックし,las形式で保存します。
因みに,色を確認したい場合はProperties>Color>RGBで点群の色を表示することができます。
lasファイルをpotree形式に変換
potree形式とは,大量の点群データを効率的に表示するための形式です。
遠くのオブジェクトは粗く、近くのオブジェクトは細かく表示するLODや,空間分割し動的に読み込みを行うことにより,高速に表示することが可能になります。
手順
先ほど変換した,las形式の点群データをpotree形式に変換します。
以下のコンバーターをダウンロードし,zipファイルを展開します。
PotreeConverter
ダウンロードが完了したら、好きな場所に出力用のフォルダを新規作成します。
PotreeConverterのフォルダで,パスにcmdと入力し,コマンドプロンプトを起動します。
コマンドプロンプトで以下のコマンドを実行します。
(ファイルパスは,ドラッグアンドドロップでもコピーできます)
PotreeConverter.exe <lasファイルorフォルダのパス> -o <出力フォルダーのパス>
注意:ファイルパスに日本語が存在すると正常に実行されない可能性があります。
これでPotree形式への変換は完了です。
UnityにBA_PointCloudを導入
Unityで新規プロジェクト(3D)を作成します。
BA_PointCloudをダウンロードします。
unitypackageをダウンロードし,ファイルをダブルクリックすると,Unityで以下のような画面が表示されます。
すべての項目をチェックし,「Import」をクリックします。
Unity・BA_PointCloudの設定
Assetsフォルダ内に,「StreamingAssets」というフォルダを新規作成します。
注意:"StreamingAssets"という名前を間違えないようにしてください。このフォルダを作成することで,スクリプトから簡単に点群データファイルを参照できるようになります。
StreamingAssetsフォルダ内に,Potree形式に変換した点群データのフォルダを配置します。
Sceneで右クリック>CreateEmptyをクリックし,空のGameObjectを3つ作成します。
わかりやすいように,以下のように名前を変更します。
- DynamicPointCloudSet
- PointCloudLoader
- DefaultMeshConfigration
それぞれのゲームオブジェクトを設定していきます。
DynamicPointCloudSet
ゲームオブジェクトに「DynamicPointCloudSet」コンポーネントを追加します。
Inspector > Add Component > Dynamic Point Cloud Set をクリックします。
「PointCloudLoader」「DefaultMeshConfigration」でも,同じ操作を行っていきます。
PointCloudLoader
DefaultMeshConfigration
それぞれのコンポーネントの設定を行います。
DynamicPointCloudSet
- MeshConfigration : DefaultMeshConfigrationを設定
-
UserCamera : MainCameraを設定
※gameObjectをドラッグアンドドロップでも設定できます。
PointCloudLoader
- CloudPath : StreamingAssetsフォルダに配置した点群データのフォルダ名
- StreamingAssetsAsRoot : True
- SetController : DynamicPointCloudSetを設定
DefaultMeshConfigration
RenderCamera以外は,必要に応じて設定します。
- RenderCamera : MainCameraを設定
- PointRadius : 点の半径
- RenderCircles : falseで四角の点 / trueで円の点を描画
- ScreenSize : falseで点が遠近法で描画 / trueで全ての点のサイズが等しく描画
- Interpolation : 補間モード
- Reload : trueでアプリ実行中にこれらの設定の変更を反映
- DisplayLod : ロードされた Octree ノードの境界ボックスを表示
MainCamera
最後に,カメラを操作できるようにMainCameraに「CameraController」コンポーネントを追加します。
結果
参考文献