【フォトグラメトリ】3DF Zephyrを使ってモデルのメッシュを綺麗にする方法

皆さんフォトグラメ撮ってますか。noria901です。

前回フォトグラメトリの写真8枚からテクスチャ付きメッシュを作成する記事を公開しました。

あとは▼こちらの記事通り書き出してUnityからアップロードしたらSTYLYで使えますね!

ところで、フォトグラメ撮ったモデルですがゴミが残ってる穴が開いてる凸凹であることは無いでしょうか。もしそのように感じたのであれば、現状のモデルではSTYLYでは使えないということです。そんな時はモデルの加工をしましょう!モデルの加工というと、Blender等のモデリングソフトが登場する場面ですが、実のところ、フォトグラメトリツール自体にも加工機能があります。というわけで今回は3DF Zephyrを例にどのような加工機能があるのか、そして利用例を見ていきましょう。

3DF Zephyr による加工

3DF ZephyはFree版でも高機能が提供されています。

はじめに

3DF ZephyrはWindowsで利用できるフォトグラメトリツールです。普段使い慣れてない方もいらっしゃると思いますので、3DF Zephyrの基本であるワークフローをおさらいしましょう。

3DF Zephyrのワークフローおさらい

3DF Zephyrの作業手順は、ワークフローにしたがってモデルを生成して出力するだけです。とくにモデル作成までのワークフローはワークフローメニューにまとまっています。モデルを作りたいだけなら①新規プロジェクト作成、②3Dモデル作成、③テクスチャ付きメッシュを作成の3Stepでモデル作成することができます。

ワークフローメニュー

上から順番に押していけば良い

ワークフロー 説明
新規プロジェクト
  • 入力写真をアライメントし低密度点群を生成する。アライメントの結果がすべてを決める。
  • 低密度点群生成が完了したら境界ボックスを設定することが出来る。
3D モデル生成
  • 高密度点群生成とメッシュ生成をまとめて行う。
  • 高密度点群は境界ボックスの範囲内のみ生成する。
テクスチャ付きメッシュ作成
  • メッシュに対してテクスチャを生成する。
高度な
  • 3Dモデルの生成で行われる高密度点群生成とメッシュ生成を個別に行うことが出来る。
写真を追加
  • アライメントした際に写真が足りなかった場合は写真を追加することが出来る。
クイックプロジェクト
  • 対象ディレクトリにある画像に対して、低密度点群、高密度点群、メッシュ、テクスチャ付きメッシュの生成をまとめて行う。

完成したモデルの書き出し方法は、出力メニューにそろっています。

エクスポートメニュー

書き出しする方法は3つある

出力 説明
テクスチャ付きメッシュを出力
  • Obj/Mtl、Ply、Glbといった形式での出力や、Sketchfabへのアップロードが可能です。
  • Unityに取り込む際は”ローカル基準システム”を付けるのを忘れないようにしましょう。
カレントビューをPDFとして出力
  • 現在のビューをPDFとして出力することが出来ます。
スクリーンショットを取得
  • 現在のビューをPNGとして出力することが出来ます。透過PNGも出力することが出来ます。

以上で写真からObj等のモデルを得ることが出来ました。所でテクスチャ付きメッシュの生成を行う際にメッシュが間引かれモデルが劣化する可能性があることをご存じでしょうか。きれいなモデルを得るためには、テクスチャ付きメッシュ作成時の”間引き”について知る必要があります。

テクスチャ付きメッシュ作成時の”間引き”

いきなりですが、綺麗なモデルとは何でしょうか。一つの考え方としては最終的に出来上がるモデルの頂点やポリゴンが多ければ多いほど高精細(=綺麗なモデル)になります。ただし、頂点やポリゴンが多いと計算量が多くなりPCが重くなるといったことが発生します。結果、そのモデルを利用して作成したシーン全体の体験を損なう可能性があります。そのため、見た目を損なわない範囲で頂点やポリゴンを“間引く”ということを考える必要があります。

メッシュの現在の頂点数は、メッシュのプロパティを表示すると確認できます。ポイントと書かれているところが頂点数です。例えばこの例では3,522,323頂点になっていますね。

プロパティを表示する

ポイントの項目を見ると3,522,323頂点。とても多い。

 

では早速間引いてみましょう。テクスチャ付きメッシュウィザードでアドバンスドに変更してみると、最大頂点の設定がありますね。最大頂点にはメッシュの頂点数と同じ値がデフォルトで設定されます。つまり、高精細な状態ということになります。このままではSTYLY上で複数のモデルを配置した際に処理が重くなる可能性があります。そこで頂点数を間引くために、テクスチャ付きメッシュウィザードの最大頂点の設定を5000にしてモデルを作成してみましょう。

テクスチャ付きメッシュウィザード

アドバンスドに変更すると最大頂点数の設定が見れる


テクスチャ付きメッシュを作成する

間引いたら破断してしまった

元の頂点数が多い状態からいきなり低い頂点数に間引いたためにメッシュが破断し、このままでは使えないモデルになってしまいました。このように、間引きと高精細さにはトレードオフの関係が成り立ちます。これを回避するには、メッシュの頂点数を十分に減らしてからテクスチャ付きメッシュ作成時の間引きを行う必要があります。そのための加工機能が3DF Zephyrには用意されています。

3DF Zephyrには高密度点群とメッシュに対して加工する機能があります。果たして高密度点群とメッシュのどちらに加工すればよいかというと、3DF Zephyrのバージョン4.5からは高密度点群作成とメッシュ作成が”3Dモデル作成”というワークフローにまとめられました。そのため”3Dモデル作成”完了時に得られるメッシュを加工するのが一般的でしょう。そのため以降の説明ではメッシュの加工を主に説明します。

全体と部分の加工

加工機能には適応範囲があります。つまりメッシュ全体に対しての加工か、一部分に対しての加工かです。どちらをいつ使うべきかについてですが、私見では先に気になる部分を加工し、最後に全体を整えるのが良いと考えてます。気になる部分を加工するとは冒頭でも触れたような、余計なメッシュを削除するメッシュの穴を埋めるメッシュの凹凸をキレイにするといったものになります。この工程を経ると必然的にある程度頂点数が減っています。そのうえで全体を整えながらさらに頂点数を削減していきます。

所で加工を行うと失敗することがあります。Undoすることもできますが、保険をかける意味でもメッシュをクローンしたうえでプロジェクトを保存しておきましょう。

メッシュのクローン

加工する前にクローンして保存しておけば安心

これで準備が整いました。早速余計なメッシュを削除してみましょう。

余計なメッシュを削除する

境界ボックスの設定を行って3Dモデル作成したのであれば、余計な部分はある程度削れているでしょう。ただし、対象のオブジェクトにはまだまだ余計な部分が残っています。この余計なメッシュを選択し削除していきましょう。選択をする手段は、選択パレットにまとまっています。

選択パレット

選択機能は選択パレットに集まっている

選択手段 説明
手で 一般的なペイントツールのように領域でくくって選択する方法。
カラー テクスチャの色に基づいて選択する方法。
平面 平面で区切った片方のメッシュを選択する方法。
ポイント 高密度点群専用の選択方式。メッシュに対しては利用しない。
三角形 特定の閾値よりエッジが長いポリゴンを選択する方法。
カメラ アライメントしたカメラを選択する方式。メッシュに対しては利用しない。

ここでは”手で”からポリラインを利用して選択してみましょう。例えば床面のメッシュが不要であれば、床面のメッシュをくくるように選択します。メッシュが赤くなった部分が選択できた場所ということになります。

ポリラインによる選択

ポリラインを引いて、領域内を選択する

さっそく選択した余分なメッシュを削除しましょう。選択したメッシュを編集する手段は編集パレットにまとまっています。

編集手段 説明
削除 選択した領域のメッシュを削除します。Delキーを押しても削除できます。
反転 選択した領域を反転します。
カット 選択した領域を別メッシュとして切り取ります。
コピー 選択した領域を別メッシュとしてコピーします。
選択 選択した領域にフィルタをかけます。

今回の場合残したい部分が選択状態にあるので、反転後に削除をしましょう。

選択したメッシュを削除

削除はDeleteキーでもできます

”手で”による選択は、選択領域内にあるメッシュを全て選択します。モデル側面だけ選択したつもりが、反対側まで選択してしまったということがおきがちです。そんな時は選択ダイアログのモード”削除”を選択し、選択が不要な領域を改めて選択すると一部分だけ選択解除できます。反対にモード”追加”を利用すれば選択箇所を追加できます。

選択の一部分解除

不要な選択箇所を解除できる

まだまだ細かな余計なメッシュが残っていますが、削除を繰り返すとゴミが綺麗になくなりましたね。

ゴミを一通り消し終えた

ゴミが綺麗に消えた弊クマ

メッシュの穴を埋める

撮影が足りてない部分や薄い物はメッシュに穴が開きやすいです。この穴を埋めるための機能がフィルタリングパレットに2つあります。

穴埋め機能 説明
選択的穴埋め メッシュが閉じていない穴を探し、穴を選択して埋める機能。
ウォータタイト メッシュが閉じていない穴を探し、穴を全て埋める機能。

どちらを使うかは場合によりますが、小さい物などのフォトグラメトリは全ての穴を埋めても問題ないでしょう。広域フォトグラメトリの場合は穴を埋めると不用意な形状になることが多いので、選択的穴埋めで地道に穴をふさぐのが良いでしょう。

穴を埋める

選択して埋めるか、全てを一気に埋めるか

選択的穴埋めの場合、特定の穴を指定して塞ぐ”数で指定”と穴の大きさで選択する”サイズで指定”があります。自身の塞ぎたい穴が上手く指定出来たら”塗り潰しを選択”もしくは”フィルタを有効にする”を選択しましょう。”塗りつぶしを選択”の場合は現在のメッシュに直接加工します。”フィルタを有効にする”の場合はメッシュをクローンしてから加工するので、現在のメッシュを残したい場合は”フィルタを有効にする”を選ぶと良いでしょう。

穴を選択する

机に接している面は穴になっているので埋めてみる

これで一見埋まったように見えますが、実はメッシュがとても荒い状態です。”ワイヤフレームの表示”を有効化するとメッシュの荒い状態が見れます。メッシュが荒い状態でテクスチャ付きメッシュを作成すると破断しやすいので、荒いメッシュを補修しましょう。

ワイアフレームを表示する

ワイアフレームを表示するとメッシュの状態が分かる

荒いメッシュを補修するためにリトポロジーというフィルタを使います。荒いメッシュの周囲を少し広めに選択し、編集パネルの”選択”もしくはフィルタリングパネルの”選択的フィルタ”を選ぶと選択的フィルタダイアログが表示されます。この中からリトポロジーを選び実行すると部分的にメッシュを整えることができます。

選択してリトポロジー

選択してからリトポロジーすると、選択箇所のメッシュが綺麗になる

繰り返し数というのがリトポロジーの回数で、この回数を増やすとよりメッシュが綺麗になりますが時間がかかるので程々の回数を指定しましょう。

リトポロジー完了

選択してリトポロジーした結果。足りなかったら重ね掛けしましょう。

ところで例として弊クマの背中の穴を埋めましたが、実は穴を埋める必要が無いかもしれません。例えばベットに寝そべり状態で配置するのであれば、穴が開いている背中はベットに埋まって見えないということになります。また、背中の写真は撮れてないのでこのままテクスチャ付きメッシュを作成してもテクスチャはきれいには生成されません。頂点数を削減する為にも穴をあえてふさがない、ということも考えてみましょう。

穴を埋める必要性

その穴、本当に埋める必要性ありますか?

穴が開いているのに穴と認識されない時

たまにこれらの穴埋め作業を行っても穴がふさがらない時があります。よくあるのは、穴が開いているように見えてメッシュが閉じているバターンです。薄い物は特におこりやすいですね。

車の扉

車の扉が薄かったのでボロボロになってしまった


穴のメッシュ

穴を横から見てみたら、反対側のメッシュと繋がっている。

この場合、あえてメッシュが閉じている部分を削除して穴をあけてやることでふさぐことができます。

メッシュが閉じている

閉じているメッシュ部分を選択して削除、すると穴が2つ見つかる

これで穴が綺麗にふさがりましたね。

穴をふさいだ車

3DF Zephyrだけでこのくらい塞げます。

メッシュの凹凸をキレイにする

撮影時の光源の状態や撮影対象の特徴点が取りづらい場合は、メッシュが凸凹することがあります。これを直していきましょう。

メッシュの凸凹

頭の後ろが凸凹だ。これは気になる。

基本操作は先程で同様に選択してフィルタをかけていきます。今回使うフィルタはこの2つです。

フィルタ 説明
ラプラシアンスムーサー 凹凸を平坦にするフィルタです。球体に対して使うと痩せます。平面を出すときに使うと良いでしょう。
バイラテラルスムーサー エッジを強調して細かい凹凸を平坦にするフィルタです。角張った部分を強調するときに使うと良いでしょう。

今回は平坦にしたいのでラプラシアンスムーサーが適切ですね。早速選択してラプラシアンスムーサーをかけてみましょう。繰り返し数が増えるほど平坦になります。平坦になると平面が多くなるので、不要なメッシュが多くなることがあります。選択状態のままリトポロジーで整えるとこのようになります。

ラプラシアンスムーサー

ラプラシアンスムーサーで凸凹が滑らかに

今までの加工の結果、カドがつぶれてしまうこともあります。そういった場合は選択してバイラテラルスムーサーをかけましょう。

バイラテラルスムーサー

解りにくいが全体の丸みが潰れずにカドが際立った

これで凹凸が綺麗になりましたね。

応用:飛び出たメッシュを滑らかにする

光の当たり方によっては極端に飛び出ることがあります。これをラプラシアンスムーサーを使って平坦にするのは大変です。この場合はあえて飛び出た部分のみを選択後に削除して穴を作り、穴をふさぐことで平面を出すことができます。この時の穴は周囲のメッシュの影響を受けるので、極端に飛び出ているメッシュの周囲にある平坦なメッシュのみが残るよう削除すると綺麗な平面を作ることができます。

出過ぎた凸凹

飛び出した凹凸は削除して穴埋めした方が早い

平面の面積が大きい場合、もしかしたら穴を埋める必要はないかもしれません。平面であってもそれなりの頂点数になります。であればあえて平面を穴をあけたままにしておき、あとでその平面にあうテクスチャを板ポリに張って組み合わせるという選択もあることを覚えておきましょう。この実例は【フォトグラメトリ】建築デジタルアーカイブ 第3回「後処理編」が参考になります

以上で気になる部分が一通り加工完了しました。今でも十分見違えるほど綺麗なモデルになっていると思いますが、ここでもうひと手間加えるとより少ない頂点数で表現できるようになります。そう、全体を整えるのです。

全体を整える

所で現在の頂点数は初めからどれだけ減ったでしょうか。メッシュのプロパティから確認してみたら現在は332,373頂点、つまり3,189,950頂点も減ったことが分かります。部分的な修正でも十分頂点数は減ってますが、今までかけていたリトポロジー等のフィルタを全体にかけることで、さらに頂点数を最適化できます。

全体にリトポロジーするだけでも大分頂点数を削減できますが、その前に細かい凹凸の扱いを考えるべきでしょう。先ほど部分的に凹凸を綺麗にしましたが、全ての凹凸に対して選択→スムーサーというのは大変です。全体的に凹凸があるのであれば、今こそ全体に対してラプラシアンスムーサーをかけるべきでしょう。そのうえでリトポロジーをします。逆にカドが重要なモデルの場合、カドを強調する為にバイラテラルスムーサーをかけてからリトポロジーをかけると良いでしょう。

全体にフィルタ

丸みの多いモデルなのでラプラシアンスムーサーをかけてみました。

これで頂点数が最適化され、全体を整えることが終わりました。現在の頂点数は51,416、全体の調整によって280,957‬頂点減らすことができました。この状態であれば、テクスチャ付きメッシュを最大頂点数5000設定で間引きをしても破断せずきれいなモデルを作ることができます。作ってみたところテクスチャ付きメッシュは7,038頂点、これならPCが重くなるようなこともないでしょう。早速STYLYにモデルをアップロードしましょう。アップロード方法はフォトグラメトリ入門 撮影方法~3Dモデル作成をご覧ください。

頂点数の変化

頂点数は減ってもかわいさは減らない弊クマ

応用:STYLYで組み合わせる

所で先程平面にわざと穴をあける、という話をしました。簡単なテクスチャはもとより、動画を組み合わせるとよりダイナミックな作品が作れます。これらの操作は全てSTYLY上でできてしまいますね。また、穴が開いていることを壊れている表現として使うなど、フォトグラメトリで作ったモデルの表現方法は様々です。

今回の例で登場したモデルを使ったSTYLY GALLARYからサンプルシーンを確認できます。

10

未加工のモデルを利用したため一部のPCなどではロードが終わらない、動作が重いことがあります。その場合はこちらをどうぞ。

 

さいごに

ここまで3DF Zephyrのモデル加工機能について紹介してきましたが、結局のところ自分のやりやすい方法、使いやすいツールを使うのが一番です。Metashapeにも同様の機能はありますし、そもそもテクスチャ付きメッシュを作成するタイミングでは間引きをせずに、Blender等のモデリングツールで加工するのも良いでしょう。しかしそんな中でフォトグラメトリツールで軽度な加工ができることを知っておくと、作業がより効率的に進められると思います。また、3DF Zephyrには今回説明しきれなかった機能が他にもあります。英語になりますが3DF Zephyrのチュートリアルが用意されているので興味がある方はご確認ください。