RealityCapture:部分的にポリゴンを削減する


フォトグラメトリは高精細なディテールを表現できる代わりにハイポリゴンなモデルとして生成されることが特徴です。 しかし平面的、直線的なオブジェクトではそこまでポリゴン数は多くなくてもいいな、と言う時があります。 ディテールを維持しつつそう言った箇所のポリゴン数を減らす方法をここで書きたいと思います。

RealityCaptureのポリゴンリダクション

複雑な凹凸のある表面と比較的平面的な表面の組み合わせで出来たオブジェクトでも、平面的な表面にも数万ものポリゴンが使われることがよくあります。 Reality Captureのポリゴン削減はSimplify Toolを使用しますが、オブジェクトのシルエットを維持しようとしながらポリゴンの削減が行われると言うのが通常動作で、基本的には均一にポリゴンは削減されるのでいくらポリゴン数を減らしていっても平面的な箇所が極端に少なくなる、という事はありません(一応シルエットを維持するうえで必要な分だけ残して、複雑な表面よりも単純化されますが) ならば平面的な表面のポリゴン数を大幅に削減して、ディテールの表現リソースを複雑な表面に割り振りたいと思うのが人情という物です。

作業手順

例として、崎陽軒のシウマイ弁当のフォトグラメトリモデルを使用します。 お弁当は複雑な表面をした具材と単純な表面をした容器の組み合わせで出来ており、今回の題材には最適です(本当に?)

この状態で1300万ポリゴンあるシウマイ弁当です。 iPhoneで撮影したものですが、容器の木目のディテールも表現が出来ていていい感じにフォトグラメトリできていると思います。

まず、ポリゴンを削減したい箇所を選択します。 今回は容器のみを削減したいのでこのようにします。

次にSimplify Toolを選択しセッティングメニューから

  • Type : Abusolute
  • Target triangle count : 任意のポリゴン数を入力**(削減したい数ではなく、選択範囲が入力したポリゴン数になります)**

設定後Simplifyボタンを押す

そうすると、1300万ポリゴンあったシウマイ弁当は具材のディテールを維持したまま880万ポリゴンまで削減されました。 画像を見ると、容器が単純化されたのが分かります。

もしこれを何かのコンテンツに使いたい場合、880万ポリゴンでも多いと思うのでここからさらにポリゴンリダクションを行い自分が使いやすいようにします。

注意点

注意点としては、あまり全体のポリゴンを減らすと部分的にポリゴンを削減した意味が無くなるという事です。 例えば1万ポリゴンまで削減すると、全体を均一にリダクションした場合とほぼ見た目が変わらなくなります。

[caption id=“attachment_607” align=“aligncenter” width=“1200”] 左:全体をリダクション 右:器のみ削減後さらに全体をリダクション[/caption]

[caption id=“attachment_610” align=“aligncenter” width=“1200”] Target triangle countの値が少なすぎた(30000ポリゴン)[/caption]

また、選択範囲のポリゴン数の数値指定が少なすぎると形状が維持できなくなってしまうので、どれくらいが形状を維持できる最低ラインなのかを見極める必要があります。

この辺りは物によって違うので、何が適当な値になるのかは個別に試行錯誤しなければならないというところが難点です。

もう一つ、テクスチャ生成の際にUnwrap toolがデフォルト設定だとこのようにテクスチャがうまく貼られない場合があります。

これは、Unwrap toolのLarge triangle removable thresholdの値が初期設定では10で、ポリゴンリダクション後の出来た大きなポリゴンがこのしきい値から外れてしまうためです。

そのためこの値を適切に設定する必要があります。 値は物によって違うためこのシウマイ弁当では150と設定しました。

Unwrapをした後、Checkerboardで満遍なくチェッカーが配置されていることを確認したらテクスチャを生成します。

テクスチャがうまく貼られたら完了です。