ここ最近、UE4&Unityの点群表示とReality Capture関係の記事へのアクセスが多く、
ニーズもあるかなと思い、
前々から試そうと思っていたことを検証してみたので、3回にわたって書いていきたいと思います。
基本的には、以下の3つの点群に関する記事になります。
- (DCCツールで)作成したモデルを点群表示する編
- 点群の色味を変える&修正する編
- 点群のシーンを作る編
では、いきます。
試したかったこと
実は、objファイルってテキストエディタで開けるって知ってました!?
「そんなのも知らないでCGやってんのかい!」と叱られそうですが…ご心配なく、ちゃんとこの仕事してごはん食べれてます…はい。
実際には、テキストエディタで開くとこんな感じの情報が並んでます。↓
v -22.901806 -8.628660 -0.125873
v 6.030825 -12.819688 0.304918
vt 0.481815 0.578659
vt 0.502564 0.578659
f 4/1 6/2 5/3 7/4
f 4/1 7/4 20/5 21/6
“v”は、頂点の位置(X,Y,Z)だったり、”vt”はテクスチャ情報、その他にも法線やメッシュなどの情報がズラズラっと詰まっています。
…と、言うことは、objから頂点の情報だけ抽出すれば、点群データ出来るじゃぁーん!というのが「前々から試してみたかったこと」なんです。
手順
基本的に、最終的にはUE4で点群を表示することをゴールとします。
では、ゴールへの手順を先に明かしておきます。
objファイルの用意→ハイポリ作成→テクスチャから頂点にカラーをベイク→.ply形式で書き出し→.xyzに変換出力→UE4へ
こんな流れです。
objファイルの用意&ハイポリ作成
今回は、ZBrushで作成したモデル(途中までやってほったらかしになってなるやつ…)を、使用します。
前提として、ZBrushでモデリング→リトポ →UV展開→ZBrushに戻して投影ハイポリの状態(21,576,706頂点)。
すでにカラーのテクスチャがある場合は、次の工程でテクスチャが必要になって来るので、ちゃんとテクスチャが使えるようにUVも開いておく。
今回の自分の場合は、検証プラステクスチャが無かったので、とにかくUVの開けてるハイポリobjを作った。
マシンスペックにもよると思うけど、ZBrushを使った方が後の工程もラク。
というか、ZBrushで作っているものは、いつもの流れで進めればよし。
※フォトグラメトリや3Dスキャンしたデータであれば、必要な部分はある程度密度が均一なので問題ないが、ローポリの場合、下準備として全体のフェースの大きさを均一にしてから、ZBrushならスムースをかけずに”Divide”、MAYAなら”Modify > Convert > Subdiv to Polygons”などで頂点数を増やし、密度を高めるのがおすすめ。
テクスチャから頂点カラーをベイクする
この時点で点群を表示したらどうなるかというと、色の情報がないので真っ白または、その表示しているソフトのデフォルト色になると思います。
なので、テクスチャから各頂点に色をベイク(ポリペイント)する。
(ZBrushで)テクスチャを読み込んで、Tool > Polyoaint > Polypaint From Texture(テクスチャからポリペイント)で、頂点に色をつける=頂点カラー。
ちなみに、今回は分かりやすいテクスチャを書こうかなと思ったんだけど、
ちょっとめんどくさくなってしまいとりあえず後でちゃんとやろうと思い、
先日旅行で行った京都でフォトグラメトリ用に撮ったこの写真を無理やり正方形にしたこいつを使用(仮のつもりが…結局…)↓
.ply形式で書き出し
objに書き出してもokなんだけど、.ply形式で書き出した方が工程がひとつ少なくて済む。
また、objの場合MeshLabというソフトを介さないと頂点カラーを含んだ点群データ(.xyz)ができないうえに、MeshLabで数GBのデータを読み込むと駄々をこねはじめ動かなくなるので、MeshLabは使わず、.ply形式でCloudCompareを使った以下の方法でやる。
デフォルトだとZBrushでは.plyで書き出せないようなので、以下のURLからプラグインを入れて.plyで書き出せるようにする。
PLY format plugin for ZBrush 4R8
http://www.zbrushcentral.com/showthread.php?193288
.plyをCloudCompareで読み込む
CloudCompare
http://www.danielgm.net/cc/
開いたら、DB Treeの点群を選んで → File > Save(Ctrl+S)→ ファイルの種類:ASCII cloud を選んで拡張子を.xyzに書き換えて(.txtのままでもok)保存
UE4でレンダリング
.xyzまたは.txtファイルが出力できたら、UE4へ持って行きます。
ここからは、以前の記事を参照してください。
Unreal Engine 4で点群(Point Cloud)をレンダリングするよ。
Unreal Engine 4で点群(Point Cloud)をウォークするよ。
うーん、改めて、テクスチャちゃんとすればよかった…。
黒くて全然よく見えない…。
なので、頂点カラーはずしたものと、頂点カラーのもの。
しかも、重たくて調整等々あまりできず、空の色も変わってしまいなんとかキャプチャしたので…これでご勘弁ください。
まとめ
普通に考えたら「あぁ、それだったら…できるよね。」って感じですが、
自分の中では勉強になったし、色々と解決できました。
もっと、簡単な方法や楽なやり方もあると思います。
そんな場合は、コメントで教えていただけると助かります。
残り2回は今回の応用というか、基本やることは同じです。
ですが、結構調べてみたのですがなかなか見つけられなかったことなので、一応記事を書いていこうと思います…書く気があったら…。
では、また次回。