[UE5] VR FPV 点群ノイズ除去システムのサンプルを公開しました！

# はじめに
こんにちは。筑波大学 修士2年 なかむらた と申します。
***
# お仕事依頼待ってます
初めに言っておきますが、2次元でのGUI点群編集ソフトでやるよりも、恐らく全員が
**VRだと短時間で精度もよくノイズ除去することができます。
ただ、それでも時間はかかります！VR被ってたら1時間経ってたとかざらにあります！！**
このシステムは2022年の夏頃には既にできていて、この半年で沢山の点群をVRで処理してきました！
つまり

<font>$\huge{僕はVR点群ノイズ除去のプロ}$</font>　です笑

他の人より短時間でより精度よくこの仕事を終わらせられます！

ノイズ除去をお願いしたい！そんな場合は是非僕に外注してみてはいかがでしょうか？

点群データサイズ、ノイズの量によりますが、最低3000円くらいから承ります。
スキャナの特性等にもよりますが、点群全体の点数が1億点以下≒データサイズ10GB以下とかでも全く問題ありません。ノイズの量が1万点程であれば、恐らく1時間くらいで終わります。
***


僕は知ってます。みなさんが毎日こう思ってることを
> **点群のノイズ除去ムズくね？？？？**

外れ値とかの簡単な自動除去ならCloudCompareとかPCLとかOpen3DでRORとかSORとかのアルゴリズム使ってできますよね。
だがしかし、自動では消せない点群がこの世には存在して、より綺麗な点群を求める場合、Cloud Compareとか、他の有料のGUIソフトとか使って**手作業で**ノイズ除去やってる人が多いのも知ってます。
大規模点群をきれいにする人の苦労はよーくわかります。
自動処理だとノイズじゃないとこ消えるじゃん。2Dのディスプレイで手作業で点群編集するのむずいわ！
そんな心の声はちゃんと僕の第六感に届いています。

そんな人には！
# VRFPV点群ノイズ除去システム 
***
https://github.com/nakamuratanakamurata/Unreal_VR_PointClouds_denoising
***

Youtubeにて操作解説


<iframe width="560" height="315" src="https://www.youtube.com/embed/BieNlr3j0O8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

## 前提
**WindowsでもLinux (試したのはUbuntu)でも試してはないが多分Macでも動きます！！**


Unreal Engine 5.0 (多分どのバージョンでも動くと思う。)
VRHMD (MetaQuestシリーズとかHTCシリーズとかは動く) あとOpenXRに対応してるやつは動くやつも多いかも

さえあれば誰でも触っていただけます。

ただし、ハイスペックPCじゃないとフレームレート落ちるし、途中でクラッシュしやすいと思います。

### 推奨環境
Intel i7 gen 9thとかAMD ryzen 9とか以上の強いPC 
少なくとも RAM 16 GB
NVIDIA RTX 3080 以上 (まあ1050とかでも動くっちゃ動くけどよくクラッシュする)
Unreal Engine 5.0
Meta Quest Pro / Meta Quest 2 (HMDはまあOpenXRに対応してればなんでもいい)

## 解説
主には少し上に載せたYoutubeの動画にて操作の説明をしています。
スタンドアロンのVRは想定してません。
必ずVRHMDをPCにつなぎます。PCVRってやつです。

Meta Quest シリーズでやる方は Oculus link / Air link でPCにつなぎます。
Mogura VR さんのこの記事が分かりやすいので紹介しておきます。

https://www.moguravr.com/oculus-link-setup-explanation/

### 点群Iｍport
Content Drawerに点群ファイルをインポート
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442991/3321e6ea-3ece-d95d-a94b-7b06fc244b5c.png)

そして、点群をレベル上で開く、

### 編集する
　VR Preview モードでPlay
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442991/4a2ec1c7-58d5-656a-5cbe-f378c0983e05.png)

### Input　(Quest 2 の環境を例に)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442991/5b3c8f72-6167-66cf-ee12-0fec4eabe457.png)

|Input|操作|
|:---:|:--:|
|HandTrigger|Sphereの表示非表示|
|HandTrigger & IndexTrigger|Sphere内の点群の削除|
|左 Thumbstick|前後, 左右移動|
|右 Thumbstick|上下移動, Yaw回転|
|HandTrigger & 左 Thumbstick|ゆっくり 前後, 左右移動|
|HandTrigger & 右 Thumbstick|ゆっくり 上下移動, Yaw回転|
|左 X,Y,  右 A,B |Sphereのサイズ変更|

Sohereと点群を重ね合わせ、HandTrigger & IndexTriggerで点群を削除


### Export 方法
編集した点群ファイル(.uasset)を右クリックし、Asset Action → Export
![Screenshot 2022-12-19 195309.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442991/3c9447f8-62d6-040c-6f21-f0096f825f16.png)



### 注意点
* 今のところ、Redo機能 or 戻る機能(Ctrl+z) は実装されていない。
* ノイズ除去後の点群はプロジェクトを保存して閉じて再びプロジェクトを開いた際は、ノイズ除去前の点群が表示される。(保存機能はない)

ので注意してください。
ですが、今後もいろいろ改良はしていく予定なので、楽しみにしておいてください。


### 今後
今後の展開としては、いちいち点群他のソフトに読み込んでSORとかRORとか除去するのもめんどいんで、どうにかUnreal内でできないかなあとか画策しています。
あとは、深層学習を使った点群ノイズ除去の教師データづくりのラベル付けとかにこいつ使えないかなとか思っています。
お楽しみに！

何かしら質問やアドバイス等あれば言って頂けると幸いです。