この記事のゴール

点群データをVR空間に表示させる

点群と長い付き合いの人間としてはやはりこれを実装したい.
初めChatGPTに聞いたら小さい球のオブジェクトを点数分生成するという攻めた回答をいただき,その後はParticleを使う案もいただいたが撃沈.

色々調べ,見つけては実装して撃沈を繰り返した結果,以下の記事の内容が実装できたので記載します.ただ,Metaquest3内で制御していることを考えるとしょうがないのですが20万点でも動作がすごく重く,10万点が限度のようで,別手段が開発でき次第新しく記事を書きます.
(それでも自分で測った点群を実寸+VRで見られるのは楽しかったので,先駆者様に感謝!)
https://qiita.com/fallaf/items/88391afc4819248723b9

点群データの準備

後述するプラグインがoff形式のみ対応なので,まず表示させたい点群データをoff形式に変換する.
MeshLab(フリーソフト)であればoffファイル出力できる.Meshlabに入力する際のファイル形式はtxtが扱いやすいので,別ファイル形式であればCloudCompareなどを使ってtxtファイルに変換する.

色は反映できることを確認済み,法線はある場合ない場合両方試したところ,表示に差がなかったのでデータを軽くするためにもなくてよい.

Meshlabに入力時,以下の画面が表示される.CloudCompareで色付き点群をtxt出力した場合は以下の設定.

File > Export Mesh Asでoffファイルに出力.色付きにしたい場合はColorにチェックを入れる.

Unityプロジェクトから点群データPrefab生成

次に,点群データPrefab生成用のUnityプロジェクトを新規作成する.MetaXRに関する環境構築は不要.

Unity AssetのPoint Cloud Free Viewerをダウンロードし,プロジェクトにインポートする.
https://assetstore.unity.com/packages/tools/utilities/point-cloud-free-viewer-19811?locale=ja-JP&srsltid=AfmBOopuMZchlm9S7aTAQERKs9hXqYo88Nk-a13BPrm3gAzAVhElPrRH

UnityプロジェクトのAssets内に「PointCloud」フォルダが作成されているので,その中に先ほど出力したoffファイルを入れる.

PointCloudの中にある「Example」というSceneを開き,Hierarchy内の「PointCloudManager」を選択し,Inspectorの「DataPath」を「/PointCloud/ファイル名」とする.拡張子は含めない.Scaleの値は「1」にする.

「▶」を押すとAssets>Resource>PointCloudMeshes内に「ファイル名」のPrefabが作られる.
※これ以降,Scaleなどの設定を変えた場合は,「ファイル名」のPrefabを削除してから「▶」を押さないと変更が反映されない.

これ以降はDataPathの中身を変えれば他のoffファイルもPrefab化可能.

MetaXRのUnityプロジェクトへの読み込み

VRで表示させたいUnityプロジェクト(MetaXR環境構築済み)を別に開く.

こちらでもPoint Cloud Free Viewerをインポートするが,MaterialsとShadersだけにチェックをすればいい.

点群データPrefab生成をしたUnityプロジェクト内のResourceフォルダにあるPointCloudMeshesの中身を,こちらのプロジェクトのAssetsフォルダ内の任意の場所にドラッグアンドドロップする.Prefabはもちろん,同名のフォルダも忘れないこと.

読み込んだPrefabをHierarchyにドラッグ&ドロップすれば,あとはCube等のオブジェクトと同様に扱える.角度等がおかしい場合は適宜調整.