Instant Meshesを使って自動でリトポロジーする

この記事では、Instant Meshesというフリーソフトを使って、頂点数の多い3Dモデルの頂点数を減らす「リトポロジー」の作業を自動で行う手順をご紹介します。

リトポロジーとは

フォトグラメトリやスカルプトを使って3DCGモデルを生成すると、どうしても頂点数が多くなってしまい、重くて扱いにくいモデルになってしまいがちです。
そこで「リトポロジー」と呼ばれる方法を使って、形をできるだけ維持しながらローポリゴンのモデルに置き換えます。

リトポロジーは手動でもできますが、アドオンやソフトウェアを使うとより効率的に行えます。

リトポロジー例

リトポロジー例

Instant Meshesのダウンロード

Instant Meshesはチューリッヒ工科大学の研究室が研究開発している技術を使ったオープンソース(フリー)のソフトウェアです。
Windows、Mac、Linuxに対応しています。

プロジェクトページは以下にあります。

https://igl.ethz.ch/projects/instant-meshes/

ダウンロードするには、以下のGitHubページを開きます。

https://github.com/wjakob/instant-meshes

下のほうにスクロールしていくと、Pre-compiled binaries という項目が見つかるので、自分の使っているPCに合わせてzipファイルをダウンロードしてください。

zipファイルを解凍後、exeファイルをクリックするとソフトウェアが起動します。

Instant Meshesの画面

Instant Meshesの画面

使い方

Instant Meshesの操作

今回は3Dスキャンした以下のモデルをお借りし、作業を行います。

リトポロジー前のモデル

リトポロジー前のモデル

Blenderで確認すると、頂点数は49,998でした。

頂点数を確認

頂点数を確認

「Open Mesh」クリック後に表示されるフォルダアイコンをクリックし、3Dモデルを読み込みます。
対応形式は.plyと.objです。

objファイルの読み込み

objファイルの読み込み

3Dモデルが読み込まれました。読み込まれた3Dモデルにはテクスチャがつきません。
リトポロジー後、新たにテクスチャをベイクする必要があります(この手順は文末の記事をご参照ください)。

モデル読み込み直後

モデル読み込み直後

これより先は左側のメニューを上から順番に設定していくだけです。
まず、「Remesh As」の項目から、仕上がりを三角形メッシュ(Triangles)にするか四角形メッシュ(Quads)にするかを選択できます。

メッシュの形状を指定する

メッシュの形状を指定する

「Target vertex count」からリトポロジー後の頂点数を指定します。

頂点数を指定する

頂点数を指定する

「Orientation field」の 「Solve」ボタンをクリックします。

Solve

Solve

すると以下のように、生成される予定のメッシュの流れが線になって表示されます。

メッシュの大まかな流れが表示された

メッシュの大まかな流れが表示された

メッシュの流れが違うと思ったら、櫛のアイコンをクリックしてマウスでモデル上に線を引くと、その方向に向くように再計算されます(以下は首から真下に線を伸ばした場合)。

櫛で調整

櫛で調整

「Position field」の 「Solve」ボタンをクリックします。

Solve

Solve

すると生成される予定のメッシュが表示されます。

メッシュが表示された

メッシュが表示された

この状態から、前の手順に戻ってメッシュの流れを整えることもできます。

櫛の線を増やした

櫛の線を増やした


Solve後

Solve後

調整が完了したら、出力をします。
「Export mesh」をクリックすると出力メニューが表示されます。

モデルを出力する

モデルを出力する

全て四角ポリゴンにしたい場合はPure quad meshにチェックを入れます。
チェックを入れると「Target vertex count」で設定した頂点数より多くなるので注意してください。
Smoothing iterationsでスムージングの繰り返し回数を設定します。

「Extract mesh」をクリックします。
すると以下のように、最終的なメッシュが表示されます。

最終メッシュを確認

最終メッシュを確認

「Save」を選択後、以下のエラーが出た場合は保存するファイル名に日本語を使用していないことを確認する。
また、保存ファイル名に「.obj」を付けて保存(例、「xxx.obj」)すると上手くいきます。

Instant Meshes_Error

Instant Meshes_Error

Blenderで確認

元のモデルとリトポロジー後のモデルをBlenderで読み込んで比較すると以下のようになります。
細かいところを除けば形はほぼそのままで、頂点の数が減っていることがわかります。

左:元のモデル / 右:リトポロジー後

左:元のモデル / 右:リトポロジー後

リトポロジー後のモデルの頂点数は3,049でした。

頂点数が減った

頂点数が減った

リトポロジー後のモデルを編集モードに切り替えて表示すると、全ての辺が水色になっています。
「シャープ」が適用されている状態です。

辺にシャープがついている

辺にシャープがついている

シャープは「辺」メニューの「シャープをマーク」でオン、「シャープをクリア」でオフにできます。

シャープのオンオフ

シャープのオンオフ

なお、今回は最後にPure quad meshのチェックを入れていないので、以下のように三角形や多角形のポリゴンも混ざっています。

四角形以外のメッシュも混ざっている

四角形以外のメッシュも混ざっている

リトポロジー結果の比較

途中のオプションを変更するとどのように結果が変わるのかを検証してみました。

メッシュ形状の比較

「Remesh As」の項目を変更しました。
上からTriangles、Quad(2-RoSy, 4-Posy)、Quad(4-RoSy, 4-Posy)のデフォルト出力結果になります。

Triangles

Triangles


Quad(2-RoSy, 4-Posy)

Quad(2-RoSy, 4-Posy)


Quad(4-RoSy, 4-Posy)

Quad(4-RoSy, 4-Posy)

Configuration detailsオプション

続いてはConfiguration detailsのオプション項目をみていきます。

これらの設定項目はそれぞれ

  • Extrinsic: 形状の特徴線に沿うようにスムージング
  • Align to boundaries: 入力メッシュが閉じていない場合は、境界線を保存する
  • Sharp creases: 入力表面メッシュの法線が不連続な場合は、スムージングしない

という意味を持ちます(参考元:方向場による再メッシュ – Mesh Wiki)。

「Extrinsic」オンオフ結果を並べてみました。

左:Extrinsicオン / 右:Extrinsicオフ

左:Extrinsicオン / 右:Extrinsicオフ

「Extrinsic」をオフにした場合はモデルの形状に沿わず、ただ直線的にメッシュが引かれているのがわかります。

続いて「Sharp creases」のオンオフ結果を並べてみました。

Sharp Creases オフ

Sharp Creases オフ


Sharp Creases オン

Sharp Creases オン

「Sharp creases」をオンにすると、リトポロジー後のメッシュは滑らかに補正されることなく元の形状に忠実に配置されます。

STYLYにアップロードする

リトポロジー後の3DモデルをSTYLYにアップロードする方法は、以下の「取り込めるアセットを理解しよう」記事の「Upload」の章をご参照ください。

リトポロジー後の3Dモデルにテクスチャをベイクする

リトポロジー後のモデルは、テクスチャがない状態です。
元のモデルと違うUV配置を持つことになるので、元のモデルのテクスチャをそのまま適用してもうまくいきません。

ベイクという機能を使って、元のモデルのテクスチャをリトポロジー後のモデルのテクスチャに焼き付ける方法は以下の記事で紹介しております。