月: 2014年11月

未分類

モデリング時の注意点について考察してみた

最近、公私共にモデルデータの綺麗さということについて考えさせられることが結構あったので、自分の勉強のためにモデリングを行う際に注意する点をまとめてみました。自分で検証と考察を繰り返している段階な上に、自分自身は業務としてモデリングを行ったことはないのでこれが正しいとは全く思っていません。むしろおかしいところがあったら教えてください。

ここでは主にムービー用の高精度のモデルを作成することを想定していて、 リアルタイムやローポリゴンのモデルを作成する場合は事情が変わってきます。

※そのため、ここ数日話題になっているシドニアモデルに関してはこの内容は当てはまらないと考えています。トゥーンレンダリングにはそれに合ったモデリング手法があり、それに沿った解釈を行う必要があると私は思います。

Transform ノードの数

Transform ノードの数が多いとシーンファイルのサイズが大きくなったりビューポート上の処理が重くなったりするので、可能な限りモデルはコンバイン(アタッチ)して一まとめにします。

Transform ノードの数による違い

Transform ノードの数が違うとどれくらい影響があるのかを検証するために、Maya で 10000 個の Cube を別々に作成したものと、一つのオブジェクトとしてまとめたものを比較しました。 どちらも Cube を作成後ヒストリーの削除をおこない、ただのメッシュとしたものを 10000 個用意し、上位のグループで回転アニメーションをつけています。ThinkPad T530(Corei7-3720QM/16GB/NVIDIA NVS 5400M) での計測結果です。

タイプ fps メモリ使用量 ファイルサイズ(ma) ファイルサイズ(mb) ファイル読み込み時間(mb) オブジェクトの選択にかかる時間
別々に作成 3.8fps 686.7MB 14MB 11.2MB 15秒 15秒
Combine 130fps 456.9MB 9.3MB 6.1MB 体感上ゼロ 体感上ゼロ

数値化すると激的な違いがあることがわかります。

メッシュ構成

基本

基礎は北田さんの Blog を見るのがいいです

四角形ポリゴン化

モデルは極力四角形ポリゴン化します。

四角形ポリゴンでモデリングする際の参考画像があります。

http://www.pixelandpoly.com/graphics/referenceimages/step-down-guide.png

試しに自分でも同様のモデルの作成をおこなってみました。

三角形ポリゴンがダメというわけではないですが、五角形以上のポリゴンは使用してはいけません。五角形以上のポリゴンは必ず三角形と四角形で構成できるので適切に分割します。

三角形ポリゴンを使用して一番影響があるのは、メッシュにスムースをかけた場合です。

四角形ポリゴンのみで構成されている場合、メッシュにスムースをかけても元のメッシュの形はそのままで間が綺麗に補間されるだけですが、三角形ポリゴンが含まれているとその周りのメッシュがゆがんで補間されてしまいます。

このゆがみが平面上にある場合は大きな影響を及ぼさないですが、曲面上にある場合はメッシュの皺やゆがみとしてレンダリングされてしまいます。

※これは本当?前述の参考画像でもメッシュのゆがみは発生しているので、これをもってNGな原因とするのは根拠が弱くないか?

ポリゴンは平面に

三角形ポリゴンの場合は必ず平面になりますが、四角形ポリゴンの場合は四つの頂点がずれると平面にならなくなってしまいます。誤差が小さい場合は気にならないですが、ずれが大きくなると問題が大きくなってきます。

ポリゴンのシェーディングは法線の情報を使用して行われます。法線はノーマルマップやディスプレイマップのようなものを使用しない限りポリゴン上のどの位置でも同じ値が使用されるため、ポリゴンが歪んでいるとその影響が大きくなります。

※これはちょっと根拠が弱い気がする。面の法線方向が正しくならないほうが問題としては大きい?

面の解釈が曖昧という方が根拠になりそう?

多分、これが問題になるかどうかはレンダラーに依存する。 例えば、Renderman の場合はレンダリング時にマイクロポリゴンにされるので問題にならない。それに対し、レイトレーサーの場合はポリゴンを三角形分割するので、面の状態によって割り方が変わってアーティファクトが発生するかもしれない。

まとめ

私の知識の範囲内でモデリングをする時に気をつける必要がある内容を考察・検証してみました。直観的にこれはマズそうだなーとか、一般的にダメと言われている内容でもキッチリと理論付けしようとすると意外とアレアレッ?と思うことがあります。特に面の解釈についてはレンダラ依存ですしね。

ぜひ、この記事を読んでおかしいところやご自分で検証した内容があれば教えてください。よろしくおねがいします。