2016.12.31
先日のブログにも記載しましたが、京丹後市で開催されたイベントの中で、Kinectでスキャンした上半身のデータと、
CADでモデリングした台座データと合体させて自身の胸像をつくる、というワークショップを行いました。
後日スキャンデータの修復作業を行っている際に想定外のクラックが見つかり、若干アタフタしましたが、いろいろソフトをこねくり回して、無事にデータを納めることができました。
せっかくなので、その際に行ったスキャン~データ修復の方法をまとめておきたいと思います。
————————————————————————————————
■3Dスキャン編
まずはスキャン環境について
機材:Kinect v1
スキャンソフト:Kinect Fusion Explorer-WPF
OS:Windows 7(64bit)
PCスペック:Intel Core i7 2.9GHz / メモリ8G / Intel HD Graphics 4000
Kinect Fusion Explorerの基本的な使い方は、こちらのページを参考にさせてもらいました。
「Kinect for Windows」を3Dスキャナとして活用する(MONOist) 」
テストした結果、Kinect Fusion Explorerを以下のように設定。
スキャン方法は、Kinectを三脚に固定した状態で、対象者が回転イスに座り、もう一名がイスをゆっくり一周回転させる、という手法。
Kinectと対象者の距離は50~60cmぐらい。
なぜか正面からスタートすると後ろ半分がスキャンされないという事象が起こりやすく、背中からスキャンを始めるとスムーズにいきました。
事前にラボで行った時も同様でしたが、理由は未だに不明。とりあえず全員背中側からスタートして一周回ってもらいました。
回すスピードが合わなかったり、途中で動いてしまったりするとデータが途切れますが、大体2~3回トライすると360度の3Dデータが取れました。
■データ修復編
このように対象物を回してスキャンしていった場合、いい感じのデータが取れたとしても、頭頂部や底の部分をはじめ、大小さまざまな穴がいっぱい空いているので、3Dプリンターで出力するには、それらを修復する必要があります。
①MeshLabを使ったデータ修復
スキャンデータの修復については、当初こちらの記事を参考にさせてもらいました。
「デジタルエンジニアリング演習 3Dスキャンしたモデルの編集①」
使っているソフトはMeshLabというフリーソフト。
まずはイベントの前にスキャンからデータ修復までのテストを行いました。
記事の通り作業を進めるものの、私が取ったスキャンデータのメッシュの数が多過ぎるのか、PCのスペックが低過ぎるのか、下部の選択→削除ができず。
そこで、先に「Quadric Edge Collapse Decimation」でメッシュ数を削減してから、下部を「選択」して削除、その後「Close Hole」で穴をふさぎ、それでも埋められない穴はMeshmixierの「Erase & Fill」で個別に閉じていきました。
何はともあれ、事前テストではそんな感じで無事穴埋めができました。
しかし、イベントでスキャンしたデータを同様の方法で修復しようとすると、以下のメッセージが出てうまくいきません。
拡大してみると、どうも体の前後をスライスするようにクラックが入っているもよう。
Meshmixierで開いてみると、よくわかります。
全員前後のどこかにクラックが入っています。現地でKinect Fusion Explorerの画面を見ている限りでは全然気づきませんでした。
とはいえ、もう取り直しはできないので、何とか修復していかなくてはいけません。
とりあえずMeshLabでの修復は一旦あきらめ、Meshmixerでの修復に切り替えました。
②Meshmixerを使ったデータ修復
Meshmixerで穴をふさぐには、主に、
「Analysis」→「Inspector」→「Auto Repair All」
「Select」で穴の周りを選択「Edit」→「Erase & Fill」
の2種類があり、大概の場合はこれで何とかなると思います。
ただ、今回のようにガッツリと面が分断されているデータで実行すると、
修復できない部分があったり(↓の青い線)、修復できても顔のところに筋が入ってしまったり、
あるいは、「Inspector」でスライス部を修復後、頭頂部に残った穴を「Erase & Fill」で修復しようとしたら、こんな感じになったり、
メッシュの数を削減したり、いろいろイジったりしましたが、どうにもスライス部分に道を阻まれます。
「Edit」→「Make Solid」が一番惜しいところまでいきましたが完全修復はできず。
造形士かリペア職人かというぐらい手間暇かけて手直ししていけば何とかなるかなと思いつつ、他の方法を試してからにしようということで、、Meshmixerでの修復も一旦棚上げ。
次は、まだ使ったことのない「Netfabb」か「Microsoft 3D Model Repair」でのトライを試みます。
③Microsoft 3D Model Repairを使ったデータ修復
「Netfabb」はいつの間にか、AutoDeskに買収されてたんですね。有料っぽいですが、Fusion360のような有難い状況になってるのでしょうか。
「Microsoft 3D Model Repair」も裏では「Netfabb」の機能が走ってるっぽいので結局一緒かもしれませんが、ソフトをインストールするのが面倒だったので、まずは「Microsoft 3D Model Repair」をトライしました。
すごいシンプルなこのサービス。
選択できるのはOPERATIONメニューのこの3つだけのようです。
Repair:データ修復
Reduce Faces:メッシュ削減
Convert:STL/OBJ/VRMLファイルから3MFファイルへの変換
使い方も非常にシンプル。
Microsoftアカウントでログインしたのち、ファイルをUPLOADしたら自動的にREPAIRが始まります。
あとはDOWNLOADをクリックするだけ。
1分ほどで完了したものの、出来上がるファイルが「3mf.」という新しいフォーマットのみということが判明。
今の環境では修復結果を確認できない上、このあと台座データとドッキングさせるので「stl.」に変換したい・・・
ということで、3mf.→stl.の変換を行うため、結局Netfabb(フリートライアル版)をインストールしました。
早速Repairした3mf.データを開いてみると、なんてことでしょう。
不自然な線が入ることもなく、キレイに修復されています。
素晴らしい。
「Part」→「Export Part」→「as STL」でstl.データに変換します。
それをMeshmixerで開くとこんな感じ。「Analysis」→「Inspector」でもクラックは検出されません。
何の前処理もせず、Low dataをそのまま突っ込んだのに、この修復力。素敵やん。
唯一気になるのは大きな穴を埋めた部分の粗さ。とりあえず埋めたって感じで、段差が目立ちます。
これに関してはMeshmixerの「Erase & Fill」の方が自然ですね。
ということで、ここだけ手直し。
「Sculpt」→「Brushes」→「Bubble Smooth」で段差を滑らかにしていきます。
こんな感じかな。
ほかにも気になる凹凸があれば、「Flatten」や「Inflate」で手直しをしていきます。
そして、「Edit」→「Plane Cut」で下のガタガタの部分をカットします。
その後、必要に応じてメッシュ数の削減を行います。
Meshmixerの場合は、
「Select」→「Edit」→「Reduce」
MeshLabの場合は、
「Filters」→「Remeshing, Simplification and Reconstruction」→「Quadric Edge Collapse Decimation」
今回はMeshLabで10,000前後まで減らしました。
そして、それを123D Designにインポートし、作成した台座とサイズを合わせて合体させれば完成です。
そんな感じで無事全員の胸像データができました。
■まとめ
いろいろ右往左往しましたが、
今回行ったデータ修復の手順は、以下の通りです。
①「Microsoft 3D Model Repair」でデータ修復(穴埋め)
②「Netfabb」で3mf.→stl.に変換
③「Meshmixier」でデータを手直し&底のカット
④「MeshLab」でメッシュ数を削減
4つのソフトを渡り歩いていますが、各ソフトをちゃんとマスターしたら、もっと減らせると思います。
好みの部分もありますが、個人的にはしばらく以下のような感じで使い分けようと思います。
・元データの状態がいい場合は、「Meshmixier」が仕上がりが自然で楽。
・「Meshmixier」でうまく修復できない場合は、「Microsoft 3D Model Repair」で修復後、「Meshmixier」で微修正。
・メッシュの削減に関しては、メッシュ数の管理がしやすい「MeshLab」が使いやすい。
・「Netfabb」はもうちょっと触ってみないとわからないけど、どれか一個って言われたら、これをマスターするのがいいじゃないか、と思う。
以上、アタフタした経緯をそのまま記載いたしましたが、
もしこれからスキャンにトライすることがあれば、ご参考いただければと思います!