写真から3Dモデルを作製する (5): 取り敢えずメッシュの作成

3Dのポイントクラウドからメッシュを作成する。ポイントクラウドの作成までは一本道で試行錯誤しなくてよかったのだが、ここから先は行きつ戻りつになると思う。出来るだけ無駄と手間を省くためにも、前もって知識を入れておくことは大切だ。メッシュの作成に使用する道具はMeshLabというソフト、もちろんフリーウェアだ。何年か前、磁場シミュレーションのプログラムを書いたとき、データの可視化でお世話になった覚えがある。Ubuntuならリポジトリにあるのでインストールは簡単だ。

で、このMeshLabつうソフト、個人的な感想だが、落ちやすい。フィルタという形で様々な処理を実装しているのだが、データの整合性の確認をしないものがあるっぽい。スパッとプログラムが落ちます。しかも、Ubuntuの現リポジトリにあるMeshLab v1.3.0 は新たにプロジェクトを保存するとSEGVります。使えねー。愚痴はこの位にして。メッシュの作成はこんな感じの手順になります。

  1. ポイントクラウド(ply形式)のインポート
  2. データの掃除、手作業
  3. 必要に応じてリサンプル、データが多くて手に負えないとき、ノイズが酷いとき (Poisson-disk Sampling)
  4. リサンプルしたのなら、ノーマルベクトルの再計算
  5. メッシュ再構築 (Poisson Surface Reconstruction)


ポイントクラウドのデータが完璧で、ウルトラ級PCならいきなりメッシュ再構築 (Poisson Surface Reconstruction)しても構いません。というか、どんなもんか一度やってみた方が分かりやすいでしょう。

なぜ、わざわざ毎回、Poisson Surface Reconstructionと書いてるか。これ、結構新しい技術というか理論というか実装で、メッシュ再構築が身近になったのはこいつのお陰といっても良いと思う。拵えたのは世界的難関校John Hopkins大学のエリートだ。元来、熱伝導とか拡散の問題を数値的に解くのに利用されていたポワソン方程式を3Dモデルの再構築に応用だと。目の付け所がスゲエ。なんでも、モデル表面のデータの穴(欠損)を埋めるときに使うんだって。よく分からんけどっ。つまり、予測的というかデータの内挿をしてしまうアルゴリズムっつうこった。

で、こいつがPoisson Surface Reconstructionのダイアログ。ムヅイっちうねん。

ここで言う"Octree"つうのは、一次元データの二分木(binary tree)に対する二次元データの四分木、に対する八分木、つうことだろう。空間をXYZそれぞれ二分割すると八つの領域に分かれる、そういうことだ。空間に広がるデータポイントを細分化された領域に閉じ込めて認識するという意味でしょう。なので、"octree"を大きくすれば解像度が上がるということだ。デフォルトは6となっているが、ちょっとサミシイね。モノにも因るが、10から12くらいが適当だと思う。octree=10としたら、約1/1000の分解能つうことだからね。

"Solver Divide"ってなんだろなあ、分かんねえなあ。ダイアログの説明によると、なになに、「実際のトコ、octreeが9以上のとき、こいつを7か8にすると良いぜ。デフォルトは8だっ。」って力強く言ってる割に、デフォルトは6なんすけど。ま、8にしとけば良いのでは。

"Samples per Node"、いつも1にしたまんまでイヂッタこと無い。ま、説明によると、「ノード(octreeで分割した領域のことだろう、多分)に、少なくとも幾つのデータポイントを入れるか」ってことらしい。「ノイズの多いデータの時には使えるかもね」と。「ノイズが無いときには1から5、ノイジーなときは15から20くらい、じゃね」だと。

さ、やってみるぞ。MeshLabを起動して、ポイントクラウドをインポートしたら、取り敢えずいきなりドンだ。大事なこと言い忘れてた。

  • Octreeを1増やすと、メモリをおおよそ4倍喰います。*1


アルゴリズム考案のご本人が論文でそう言ってるんで間違いない。と思う。酢タップ細胞はありましぇーん、by シャブ&アスカ。

15Mのポイントクラウド、Octree=12、Solver Divide=10、Samples per Node=1、Surface Offsetting=1で、数分掛かった。ファイルサイズは約200MB、頂点数はなんと5M。結構綺麗だぞ、これ。下はそれぞれ、ポイントクラウドと作成したメッシュ。データがでかいので、1FPS出てませんね、泣きたい。



しかし、これだけ綺麗に決まるとデータのリサンプリングの説明要らないなあ。元データが出来過ぎなんだな、これは。次は、自作の顔データでやってみる。