iPhone Xで3Dスキャンを試す
最近、スマホをiPhone XSに乗り換えました。今まで使っていたiPhone5Sで特に不満を感じていなかったのですが、Xの顔認証にはDepth Sensorが使われていてこれを使って3Dスキャンができるという話を(遅ればせながらですが)知って試してみたくなったのでです。
Captureというアプリの使い方は簡単で
- 前面カメラを対象に向けて静止した状態でレコードボタンをクリック
- 3,2,1と数字がカウントダウンされるのを待つ
- ゆっくりとiPhoneを動かして対象物をスキャン
- レコードボタンをクリックしてスキャンを終了
即座に得られた点群データ(Point Cloud)が表示されます。
このデータをローカルにセーブしたり、(無料のアカウントを作成しておけば)クラウドにアップロードすることができます。
クラウドからはOBJやPLYの形式に変換してデータをダウンロードすることはできますが残念ながら点のデータを保存しているだけなのでそのままでは3Dモデリングの材料に使えません。OBJファイルの中身を見ると”v”で始まる点データを表す行と”vn”で始まる法線ベクトルを表す行があるだけで、面を表す"f"で始まる行がありません。ZBrushでこのOBJファイルを読み込もうとしてもエラーになります。
でも、大丈夫。ネットで調べたらポイントクラウドから3Dのメッシュを生成してくれる(それ以外にもいろいろできますが)オープンソースのソフトがあることがわかりました。
CloudCompare - Open Source project
PLY形式でダウンロードした点群データをこのCloudCompareに読み込みます。
左上のDB Treeというパネル上で対象の点群データを選ぶと画面上で点群に対して黄色の外接矩形が表示されいろんな処理が行える状態になります。例えばEdit->Segmentで切出しのためのアイコン群が画面右上に表示され、注目部分だけを切り取ることができます。
さらにPlugins->Poisson Reconで点群データからメッシュ(つまり面)のデータを再構築することができます。
パラメータが何個かあって実はまだ意味がわかっていないのですが、とりあえずデフォルトのままで上のような結果が得られました。再構築にあたっては法線ベクトルの情報も参照されるようです。何個かの画像を試してみたとき中にはメッシュ再構築の前に法線ベクトルの再計算(Edit->Normals->Compute)や反転(Edit->Normals->Invert)を行っておいたほうが良い結果を得られることがありました。
メッシュ化したデータをFile->Saveでファイル修飾子objやplyを指定して格納すれば面の情報を持った3Dデータが格納されます。ZBrushで読み込むにはOBJ形式のデータが欲しいのですが、CloudCompareで出力したOBJファイルには色の情報が含まれていません(OBJ形式で点の座標といっしょにRGBを記載するのは正式な仕様ではないらしい)。いったんPLY形式で出力してこれをMeshLabで読み込んでOBJ形式で出力するとカラーの情報を含んだOBJファイルを作ることができます。ZBrushでこのファイルを読み込めば色付きのメッシュの3Dモデルが手にはいります。
あとはうちのわんこがスキャンしている間じっとしていてくれればよいのですが、こちらはまだ解決のめどがたっていません。人の顔を見るとおやつのおねだりでどんどん前にでてきてしまうので。