好きに生きる

3DCGを仕事にしていくブログ

【MAYA⇔SubstancePainter】UDIMの設定方法【TIPS】

今回はUDIM(ユーディム、ユーディーアイエム)についてのお話。

 

UDIMとは?

 

UDIMとはUV座標のオフセットシステムのことです。

従来のUVマップは0から1の範囲のUV座標を扱うのに対して、UDIMは0から1の範囲のUV座標を1つのUVスペースと考え、それぞれをオフセットして複数のUVスペースをまとめて扱います。

 

これにより一つのオブジェクトに対して複数の高解像度のテクスチャを扱えるようになりました。地形や巨大な生物のようなサイズの大きいアセットや人の顔のような高解像度のアセットが必要になる場合に使用されます。

 1001~1010まで埋まったら上の段に続くようにレイアウトします。マイナス座標はサポートしていないようです。

 

2019.09.06_追記

Blender

UE4

・Unity

現状ではまだこのあたりサポートされてないようです。

https://answers.unrealengine.com/questions/753095/udim-textures-in-ue4.html

ワークフローをしっかり確認して作る必要があります。

 

2020.7.26追記

バージョン4.23からの機能であるVirtualTextureを使用することでUE4でもUDIMが使えるという情報があるようです。要検証

 https://docs.unrealengine.com/ja/Engine/Rendering/VirtualTexturing/Streaming/index.html

 

f:id:yuki_cg_blog:20190422183434j:plain

UDIM作成例

※見た目の解像度が変わってしまうので一般的にはテクセル密度は合わせたほうが良い。

 

メリット

 

大きく言えば以下の二つです。

①高解像度のテクスチャを扱える。

②効率的なテクスチャの管理・運用が可能。

 

従来の方法であれば一つのオブジェクトに対して複数のシェーダを割り当てることは出来ますが、1つのUVスペースしか適用できませんでした。これではシェーダ数が増え、複数枚のテクスチャを割り当てる手間とレンダリングの時間が増えてしまいます。

 

これに対し、UDIMは1つのオブジェクトに対して複数のUVスペースを適用できるため、オブジェクトのUVシェルを分割してそれぞれのUVスペースに配置することで高解像度のテクスチャを作成可能です。

また、複数のテクスチャをまとめて適用することも可能なため、テクスチャ適用時の不要な手間を無くし、必要最低限のシェーダで抑え、レンダリングにかかる時間を短縮することも出来ます。

後は、オブジェクトを選択したときにUVがオフセットされているので見やすいですね。

 

UDIMの設定方法

 

f:id:yuki_cg_blog:20190422191643p:plain

WindlassモデルのUDIM作成例


実際にMAYA⇔SubstancePainter間で設定する方法を紹介していきます。

 

①マテリアル単位か、パーツ単位でUVセットをレイアウトする。

 

SunstancePainter(以下SP)はMARIと異なりUVセット(MARIではPatchと言う)を跨いでは塗れないため、同じオブジェクトのパーツはなるべく同じUVセットに入るように今回はパーツ単位でレイアウトしています。

※2020/7/25追記

Substance Painter2020.2からタイルを跨いでのペイントが対応されました。

 

今回自動レイアウトしていきますがSPでエラーが出ないようにパディングの設定で4kテクスチャに対して8px程度間隔を空けておきます。

※パディングが0だとベイク時に帯状の黒い影が出来る。ベイクエラーの原因であることが多い。

 

f:id:yuki_cg_blog:20190422215605p:plain

 

SPやMARIに一度に持っていくもの単位でUVをオフセット配置していきます。

物のサイズとカメラに映るサイズを考えてUVのサイズを決定し、必要なUVを選択します。UVツールキットの移動の値を1に設定し右矢印をクリックすると右隣のUVスペースにオフセット出来ます。今回はUVセットを三つ使うことにしました。

 

f:id:yuki_cg_blog:20190422201312p:plain

 

②オブジェクトを選択し、FBXで書き出す。

 

アウトライナを見てみます。自分が分かりやすいようにパーツはUVセット毎にフォルダ分けしています。今回はIDマップやBy Mesh Nameの設定はしないので命名規則やマテリアル設定は何でもいいです(IDマップやBy Mesh Nameを設定したい場合は別)。オブジェクト全てに同じマテリアルをアサインします。※ただしMixシェーダーとかを割り当ててるとエラーっぽいものが出ますが未検証。その時はLambertやaistandardなど通常の物を設定してください。 

 

f:id:yuki_cg_blog:20190422202616p:plain

 

~ここからはSPでの操作になります~

 

③SPを立ち上げたら新規プロジェクトを作成

 

FILEに先ほどexportしたLow polyデータを選択します。UDIMで読み込むので"Create a texture set per UDIM tile"の項目にチェックを入れます。

※因みにマテリアル毎に読み込む場合ここのチェックを外します。

ドキュメント解像度は後で変えられますし重たいのでこのままでOKボタンを押します。

 

f:id:yuki_cg_blog:20190422204029p:plain


④好きに塗ります。

 

先ほどのチェックボックスにチェックしたことでTEXTURE SET LISTがマテリアルからUDIMに変わっています。

 

f:id:yuki_cg_blog:20190422205508p:plain

 

⑤Export Textureで全てのテクスチャを書き出します。

 

好きなマップを書き出します。DisplacementMap以外は基本8bitsで書き出します。最初にMAYAでUVレイアウトオプションで設定した際のシェルのパディングの値である8をDilationの項目には設定しています。

 

f:id:yuki_cg_blog:20190422210325p:plain

 

~ここからは再びMAYAでの操作になります~

 

⑥Arnoldでマテリアル設定

 

まずBase Colorのテクスチャを通常の手順通り読み込ませていきますがUVタイリングモードのところだけUDIM(Mari)に設定します。こうすることでそれぞれのWindlass_low_Base Color.1001、Windlass_low_Base Color.1002、Windlass_low_Base Color.1003という3枚のテクスチャが連番で読み込まれます。

一つのマテリアルに対して一度の設定で複数のテクスチャを一括で適用できるので管理が比較的楽です。他のMetalness、Roughness、Nomalも同様に設定します。

 

f:id:yuki_cg_blog:20190422211942p:plain

 

レンダリング

 

デフォルトではビューポート上では真っ黒ですがレンダリングしたら綺麗に再現されています。

 

f:id:yuki_cg_blog:20190422213603p:plain

 

この真っ黒が気になる人は、ビューポート2.0のレンダラ設定から”全UVタイルプレビューテクスチャを再生成”をクリックすればビューポート上でも確認出来るようになります。

 

f:id:yuki_cg_blog:20190422213808p:plain

 

 

使い方は以上になります。 

 

 

設定自体は簡単で効率的に作業するには非常に便利な方法です。ぜひ試してみてはいかがでしょうか。

 

参考になったよという方は、こっちでも作品や情報を発信してるのでフォローよろしくお願いします!

悠木意匠 (@yuki_isho) | Twitter