Qiitaみたいな仕組みのサイトでDCCツールやデザインツールのtipsを投稿できるところないですかねー。Qiitaはエンジニア向きなのであれなんですが、とても使いやすいのでここに書くのがやりやすいんですよねえ。
と言う事で、SubstancePainterでペイント範囲をグループ化する際のメモ書きです。エンジニア向けじゃないかもですが、ご容赦ください。
1.やってはいけない事
グループを作る目的で、マテリアル分けしたファイルを取り込む事。
これで確かにテクスチャセットが別の状態となり、グループが別れた状態でペイントができる。
では、何がいけないのか?
このままテクスチャをエクスポートした場合、テクスチャセットの個数だけ掛け算でファイル数が増殖してしまう。
例えば、ベースカラー(Albedo)と法線とMetallicSmoothnessを書き出したい場合、3種x2セット=6枚のテクスチャが書き出されてしまう。
これはレンダリングソフトやゲームエンジンに取り込んだ時に設定が面倒になるし、テクスチャ枚数が多いので動作も重くなる。
テクスチャセットはそもそもシェーダープログラムが切り替わる場合や、テクスチャを意図的に別途にしたい場合に分けるべきで、ペイント時の利便性のために分けて使うものではない。
2.推奨される方法
モデルの形状が複雑でないなら、手作業でうまくマスクを切ればいい。正確にはグループ化ではないが、範囲を区切ってのペイント作業はできる。さらに、IDマップ画像が用意できるならそれを元にマスクを切ることができる。
レイヤー選択 -> add mask with color selection で、IDマップを元にしたマスクが切れる
Pickカラーを押すと3DビューがIDマップ表示に変わるので、マスクを作りたい箇所を選択する
ZBrushなら...ポリグループ別に単色でポリペイントしてフラットなシェーダーでテクスチャ書き出ししてIDマップとする例をみたことがある。今度やってみて投稿する。
MAYAなら...知らないがきっといとも簡単にできる。今度やってみるかも。
3.IDマップをサブスタンスペインター上で作る方法
IDマップが書き出せないソフトの場合どうするか?
SubstancePainter上でも、Baking処理でメッシュ(メッシュID)を基にしてIDマップを作ることができる。
メタセコイアならオブジェクトを別にしてobjを書き出せば、メッシュIDがそれぞれ別となったobjを書き出すことができた。(ここでマテリアルは同一のものを割り当てる事。)
これをSubstancePainterに取り込んで、
メッシュIDを元にIDマップをベイクすれば良い。あとは上記2の方法でマスクを作る。
まとめ
テクスチャセットが少ない方が(全部画面にパーツを表示する前提なら)動作が軽いので、マスクで頑張った方が気持ちよくペイントできる。とはいえ、テクスチャセットを分ける意味はもちろんある。安易にグループ化の目的でテクスチャセットを使うのはやめた方がいいですよ、というのが今回のコンクルージョンです。
なお、SubstancePainterでIDマップを作る際のソースはメッシュID以外にも色々あります。
モデリングソフトによっては別の方法の方が楽かも。
ZBrushだと頂点カラーが具合が良さそうだ。これは、そのうち。
以上です!