Maresfield イギリスの飯、別にマズくないよ

UVのお話

UV Subdivision

Maya2015からOpenSubdivが入ったことによってUVサブディビジョンの扱いが少し変わった。

サブディビジョンサーフェスモデリングをする上で特に気をつけなければならないことの一つがUVサブディビジョン

モデリング、UVレイアウト、テクスチャーペインティングと違って、このことについて書いているものは、あるにはあるけど意外と少ない。会社も2015に移行中で社内のWikiも更新しなければならなず、良い機会なので少しまとめてみる。

当たり前だけどモデルをスムースしたらUVもスムースされる。SDSにCatmull-ClarkとかDoo-Sabin等いくつかのスキームがありそれらによって形が変わるように、UVの分割方法にも種類がありUVボーダーの形が変わってくる。これを3Dソフト、レンダラー、テクスチャーペイントソフト等々で統一しておかないとレンダーした時にシームが発生してしまう。

UV Subdiv Scheme

だいたい一般的に見るのは4種類で、それぞれ

ピンボーダーという名前はArnoldでの呼び方で、MayaのスムースオプションのSmooth Internal, 3D-CoatのSmooth, Keep Edges, MudboxのPreserve UV Borders ONと同じ。

ピンコーナーもArnoldでの呼び方で、Mayaの旧スムースオプションには同じものは無し、3D-CoatのSmooth But Keep Corners, MudboxのPreserve UV Borders OFFと同じ。

これらに加え、Maya2015からデフォルトのサブディビジョンがOpneSubdivになり、そのUVスムースオプションが

ソフトウェアによって呼び方がバラバラなのが少し困るが、個人的にはArnoldの呼び方が分かりやすい気がする。

それぞれがどういうルールに基づいてスムースされるかはソフトウェアのドキュメントに書いてあるのである程度は省略する。しかしMayaのドキュメントの説明がどうも分かり難い。そこで古い分割方法を含め、それぞれのスキームがどう違うかを実際のテクスチャーの見え方と共に簡単に比べてみる。

Maya Document: Smooth
Arnold UV Smoothing

例1 シリンダー

問題が分かりやすくなるようにあえてかなりローポリなモデル。
image これを各UVスキームごとにUVとテクスチャーを見ていくと

旧Smooth

OpenSubdiv(Maya)

例2 3D-Coatのクリーチャー

3D-Coatにデフォルトで入っているサンプルモデルのクリーチャー(?)
####旧Smooth

OpenSubdiv(Maya)

縦に並べると分かり難いのでアニメーションさせるとこんな感じに。こうやってみると結構ちがう。

各スキームの良い所/悪いところ

どうれを使うべきか

上の比較画像でも分かるように、あちらを立てればこちらが立たずで「コレ!」という一つがない。 ただソフトウェア同士の兼ね合いを考えると、ピンボーダーかピンコーナーになると思う。 実際、今会社で使っているのはこの2つ。

ソフトによる

まずレンダラーが対応していなかったら意味が無い。OpenSubdivっていうぐらいだからまぁレンダーマンはもちろん問題ないんだろうけど、レンダーマンでライティング業務をやったことがないので詳しくはわからない。Arnoldであれば最初に上げた4つが対応しているのだが、Arnoldのピンコーナーが旧タイプ(?)かOpenSubdiv的なピンコーナーなのかはちょっとわからない。でもまぁたぶん古いほうだと思う。ドキュメントみてもOpenSubdivがどうとか一言も書いてないし。

もうひとつ、ZBrushを使うかどうか。先にも書いたけどZBrushでスムースUVをオンにした場合、マップはピンボーダーで書き出される。例えば、最初のシリンダーをZBrushで適当にマップを書き出してみると下のようになる。
よって、ZBrushで書き出されたディスプレイスメントマップをそのまま設定変更せずArnoldでレンダーすると、正しい結果にならない。(Arnoldのデフォルト設定はピンコーナー) ZBrushでクリーチャーモデルをスカルプトをする場合はレンダラーとペイントソフトもピンボーダーを使って作業することになる。ペイントする際、Mudboxや3D-Coatであればローポリモデルを読み込んだあと、そのソフトウェア内でUVスキームを変更し、モデルを分割出来る。しかしMariだけはソフト内でモデルを分割できない。その為、それなりに分割されたモデルを事前に用意しておくことになる。ピンボーダーであれば普通にMayaのスムースオプションでいいのだが、厄介なことにMayaはピンコーナーで分割出来ない。3D-CoatやMudboxでペイントするか、それらを経由してメッシュをMariに持って行くことになる。(会社によってはMaya用のプラグインがある)

ちなみに、最初のシリンダーをmentalrayとV-Ray2.4でレンダーしてみたら下のような感じになった。

mentalrayでピンボーダーを使いたい場合はどうすればいんだろう。大分昔まだZBrush3の頃、チュートリアルやドキュメントはmentalraysubdivapproxを使っていたけど、あれはUVボーダーが合ってなかったんじゃないだろうか。ZBrushはピンボーダーだし、掲示板とかでもシームが云々とか見かけていた気がするし。自信が無いのではっきりとは言えないけど。V-Rayは3からOpenSubdivも対応しているらしいのでオプションが増えているのかもしれない。

モデルの種類による

ハードサーフェイスのようにエッジループを使ってベベルを作っていく場合はピンボーダーだと歪みが発生しやすいので、ピンコーナーが向いているが、逆にオーガニック系モデリングのように比較的均等な四角形が多い場合はピンボーダーが向いている。Sharp edges and cornersは両方に使えそうだけど、対応していないソフトが多い。

最後に

向き不向きはあるものの、結局時と場合に合わせて好きなものを使えばいいし、プロジェクト単位で統一している場合もある。 要はこのあたりの認識を押さえておかないと思わぬトラブルになったりするということ。
また、記事に誤りがあったら誰か教えてください。