ブログタイトルで「Unreal Engineするよ。」と謳っていますが、今回はUnityです。
Unityで点群をウォークスルー!?して連番で書き出しました。
UE4はじめ、その他有料ソフト等々かなり色々と試したんだけど、基本的な機能含めUnity以外は重たくて駄目でした。
Unity以外で他になにかいい方法があれば教えていただきたいですが…。
そしてまだ、Unity自体よくわかっていないので今回は詳しいことは要望+もっといい方法があったときに記事にしたいと思いますが、とりあえず今回やったことをサクッとまとめました。
- 点群データはLeica Geosystemsより拝借→データセットのダウンロード
21スキャン/3GBのやつ。形式は.e57ですね。 - その.e57を”Cloud Compare”で.txtに変換(スキャン分21個の.txtに変換)。
- “Meshlab”でtxtを.offに変換。
- Unityへ”Point Cloud Free Viewer”でインポート。
- “Unity Recorder”でレンダリング。
今回はテストの意味も含め、4Kの60fps。 - After Effectsでコンポ→レンダリング
それで出力したのがこちら。
とにかく点群データの変換がめちゃくちゃ時間かかりました。
加えて、ちゃんと調べてないので正確ではないかもしれないけど、.txtデータの1つのファイルに大体1,500万ポイントくらいあってそれが21.txtファイル。
自分のPCがそんなにスペックの高いものではないというのもあり、とにかく時間がかかりすぎることにしびれを切らし、実際には14.txtファイルしかインポートしていません。
なので、1,500万ポイント×14ファイル=2億1,000万ポイントくらいはあるんですかね?
もしかしたら、勘違いしているかもしれませんが、多分それくらいです。
それにしても、Unityって結構メンド…いやいや、色々なことができますね。
やっぱり、Unityもやっていくかなぁ…。
ちなみに、Unreal Enigneでも点群を読み込むプラグインがあるのですが、今回の自分のケースだとマッチしませんでした。
2018/12/08 追記
2,745,568,238
— ZANNI (@zannijp) December 7, 2018
☝︎この数字、仕事案件だから載せられないけど、Unityでおよそ27億の点群を読み込んでカメラアニメーションつけて連番で画像出力できた。
でも、個人じゃこんな点群データ用意できないし、そもそも使うことがまずない…。
まぁ、何事も経験。#pointcloud
この感じだと、PCのスペック次第では限度はあるだろうけど、かなりのポイント数イケるんじゃないかなと。
Unityの方も今日試すことができました。UE4で使った点群をそのままやってみました。
一応動きましたが、かなりヌルッとした感じでした。
キューブを床にしてなんとか歩き回りはできましたが、これよりも数の多い点群だと動かないのではないかと思います。
RotateのXを-90°してスケールのXを-1することできちんとした向きに配置できましたが、プレイして歩き回りしている時に気づいたのですが、だいぶ先の方に、RotateのXを-90していない点群が現れて驚きました。
プレイしていない3Dのビューにはそんなものは見えていないのになぜかプレイしている時に出現します。
理由が分からなかったので、ヒエラルキーのPOINTCloudManagerの方を非表示にしてみるとプレイしてもRotateのXを-90していない点群は出現しなくなりました。
これは何なのか分かりますでしょうか?
Playで作られた(表示された)PointCloudManagerの点群ですね。
まさに、非表示か削除してあげれば現れないと思います。
返信有り難うございます。
とても参考になっております。自分はまだUnity初心者な為良く分かっていないことばかりですみません。
Point Cloud Managerを複製してパスを入れてみました。
とりあえず1ファイルだけでためしてみたのですが、プレファブはできており、Resorceフォルダのプレファブを選択するてプレビューには天群らしいものが表示されていました。
プレファブをシーンに配置しましたが、天群が全く見えてこない状態です。
すみません、いくつか質問よろしいでしょうか?
①お試しされた点群のファイルの座標はxyzともに0付近にありますでしょうか?
私の点群は、0よりはるか遠い座標になっておりますので、もしかしたら表示されないのはそのためかなと思いまして。
しかしながら、ヒエラルキーでプレファブをダブルクリックしても点群は見えなかったのですが‥
②Point Cloud ManagerはPCスペックにもよるが5つ前後とありましたが、点群ファイルが10や20ファイルになる場合は、無理やり10や20複製するしかないんでしょうか?
14ファイルインポートして試されたようですが、どのようにされましたでしょうか?
③一度プレイでプレファブができた後にまたプレイしてしまうとプレイの度にプレファブが作られてしまうのでしょうか?
①そうですね、基本的には原点近くにありますね。
点群のスケールを例えばXYZすべて100とか、もしくはそれ以上の数値を入れてみてはどうでしょう。
それか、カメラのNear Farの設定を変更してみるかですかね。
②自分の場合は、Play→生成された点群(Hierarchieに配置されたprefab)コピー→Stop→Hierarchieにペーストって流れで、Sceneに複数配置しました。
Resouceにあるprefabを配置するのと、結果は同じことです。
③上書きされているのか、すでに生成されたものに対しては作られないのかは分かりませんが、一度生成されたものは比較的早く生成が終わるので…おそらく、再生成ではない様な気がします…読み込んでるだけかも?←超憶測です。
度々の質問にも分かりやすく説明いただきまして有り難うございます。
①なるほど、やはり原点付近にあるのですね。
ライカさんの一番容量の軽いサンプルデータで試してみました。このデータだと点群の表示ができました。
座標を0付近に全部移動はかなり大変なので、まずは、教えていただいた、点群のスケールにの値やカメラのNear Farの設定をためしてみたいと思います。
表示できた点群ですが、既に配置しているカメラの角度が悪いのか、プレイすると黒い長方形みたいのが表示されませんでしたでしょうか?
最終目標としてこの点群の上を歩き回りたくやっております。
サードパーソンキャラクターを配置して歩くことが可能なんでしょうか?
点群にコリジョンをつけないと落ちていってしまうので、physicsをつければいけるのかと想像しています。
②点群が生成されたらコピーしてヒエラルキーにペーストされていらっしゃるのですね。
その方法も試してみたいと思います。
③一回プレイした後にもう一度プレイすると、ヒエラルキーに配置している点群と同じものがもう1セット表示されたので、プレイを終了させるとヒエラルキーには表示されていたもう1セットは消えていたので、プレイする度に生成されるのかと勘違いしてしまいました。
黒いモノは特にはなかったですが、なんだろ?
スペック的(グラボとか)なものですかねぇ?
歩き回るのは…なかなか難しいんじゃないでしょうか…。
頂点数にもよるとは思うのですが、このUnityの点群は点群データをメッシュ化しているだけなのでLODも効かないですし、超超超ハイパーハイスペックPCで動かしてもカッチカチになるので、現実的ではないのかなと思います。
ただ、前にも記事を書いたUE4のプラグインの方が実は優れていると最近思い、今色々と試しています。
今、サクッと2億近くの点群を入れてみたのですが、ビューもそこそこ動きますし、点群を間引いたりしながら調整すれば勝ち目はありそう(あるではなく、ありそう)です。
とはいえ、自由に歩き回るとなると…どうでしょう。かなりフレームは落ちてしまうのかなと。
返信有り難うございます。
黒いものですが、恐らくですが、デフォルトで配置されているカメラが点群に対して真横から見ていた為点群の集まりが黒く見えたのではないかと思います。カメラの角度を変えてみると点群が確認できました。
やはり点群の中を歩き回るのは厳しいんですね。
昨日は点群書き出しが失敗していたこともありまだUnityでは歩き回る作業に至っておりません。ちなみにヒエラルキーにあるPoint Cluod Manager ですが、デフォルトだとスケールが100倍になってるのですね。サードパーソンを置いて点群がめちゃくちゃでかいことに気付き確認するとスケールが100になっていました。
Unrealの方が勝目がありそうということを聞いてUnrealでこちらのUnrealの記事を参考にやってみました。
Unityがまだ歩く作業まで至ってないのでまだ分かりませんが、点群表示と床を配置して透明なマテリアルをつけ、サードパーソンキャラクターを置いて動かしてみました。
点群は約2億くらいあるので最初そのままやってみると、ポイントクラウドでUnreal内にインポートし、点群の配置を画面ないにするとこまではできましが、再度プロジェクトのファイルを開こうとすると、アセットを検索みたいな表示が画面下に表示されたままフリーズします。何度開こうとしても同じ画面が出てフリーズします。
べつのPCでは、点群を1.5億くらいまで間引くと開くことができましたが、プレイするとかなりヌルヌルの動きになってしまいFPSを確認するとかなり少ない値になっていました。
よろしければ教えていただきたいのですが、
Unityで27億の点群をやった時の記事を拝見させていただいたのですが、その時のPCスペックはどのくらいのものになりますか?
また、一昨日やった2億くらいの点群をUnrdealでやった時のPCスペックはどのくらいのものになりますか?
なるほどです。
UE4では、ライト関係を一切無効にしたらどうでしょうか?
例えば、Render MethodをPoint Unlit RGBにしたり非ライティングにしてみたり諸々。
ただ、勝ち目はあるとはいえ、勝機は高くはないです…。
当然、PCスペックも関わってくるとは思いますし、あとは点群をどれだけ減らすかだったり見せ方に工夫をしてうまい具合を探るしかなさそうです…。
仕事との機密に関わってくるのでPCスペックは詳しくは言えませんが、そこまで良いものではないPCからありえないくらいのハイスペックまで試しましたが、ポイント数が多くなってくるともう、落ちるか落ちないかの差だけで基本的にはビュー操作だけでもカッチカチです。←Unityの話です。
自分の場合の用途は基本映像(連番書き出し)なので、重たろうがなんだろうが書き出しができれば問題はなかったのでそれでOKだったといった感じです。
返信ありがとうございます。
確かにインポート時にウィンドウ出ました。
私は右側にしていたので警告やエラーが表示されていたのですね。
今左側でやってみましたが、スクリプトのエラーは無くなりましたが、警告がいくつか残っていますが、先には進めそうです。
PointCloudManagerのパスは1つしか設定できないのでしょうか?
点群のファイルが数個ありますが、2つ目以降の設定はどのようにされていますでしょうか?
また、点群の表示はプレイを押して初めて表示されるということでしょうか?
おお!
よかったです!
PointCloudManagerはDuplicate(Ctrl+D)で複数設置してパスを個別に変えればOKです。
あまり同時に多くやりすぎると固まってしまうので、PCスペックにもよるとは思いますが…どうでしょう、5つ前後ってところでしょうか…。
それと、自分の記事ですがかなり不親切な記事ですね…。
Playして作られた点群(正確にはメッシュ化された点群)は、停止をする前に生成されたHierarchy内の点群をコピーして、停止後Hierarchyへペーストするか、またはAssets > Resources > PointCloudMeshes内に生成された点群のPrefabが出来ているので、それをSceneに配置してもOKです。
ちなみに、自分が色々と試した結果、なぜか点群が左右反転してしまうのでScaleXに-1を入れて調整していました。
※RotationXにも-90を入れると水平になります。
こちらの記事を参考にUnityで点群を読み込んでみようとしていたのですが、Point Cloud Free Viewerをプロジェクト内にインポートすると警告とPoint Cloudのスクリプトのエラーが出てしまい先に進めない状態です。
エラーや警告は表示されませんでしたでしょうか?
Unityのバージョンは2018.2.20になります。
コメントありがとうございます。
今、外出中なので詳細まではわかりませんが、Point Cloud Free Viewerインポート時にウィンドウが出てきてなにか聞かれますよね?
それの左の方をクリックしないとダメだったような…?
Point Cloud Free Viewerがまぁまぁ前に作られたまま更新されていないようなのですが、自分が確認したのは最新でUnity 2018.3.2です。