リアルタイム系の3DCG制作に関するノウハウや実践的なTipsを共有するWiki形式のWEBサイトです。

サブスタンスペインターを使っていて一番困るのが
重なって邪魔なメッシュやポリゴンを隠して奥にあるメッシュにペイントできない
という点です。(↓こういうのです

腕と腕輪、髪と頭、口の中など直接ペイントしづらいところはよくあります。
映像系なら「マテリアル分ければ」で終わりかもしれませんがゲームではマテリアル数の制限が厳しいため現実的ではありません。
ではどうやって回避するのでしょう。

こちらの問題ですが、
バージョン2021からの機能で改善しました!(解決とは言っていない)

2021からはメッシュ単位でハイドしてペイントすることができるようになりました。
Geometry Mask機能です。
ちょっとクセのある使い方なので以下に使い方を記しておきます。

ジオメトリーマスク機能を使う

まずメッシュの分かれたモデルを用意します。


キノコの傘と柄の部分で分けておきます。ぶっ刺しモデルです。


サブスタでペイントしてみます。
ぶっ刺しなので柄で隠れた傘の下面が上手く描けません。


そこでまず、レイヤーの破線□部分をクリックします。
このレイヤーにジオメトリーマスクを適用します。


ジオメトリーマスクのプロパティーを変更します。
どこにも見当たらない人は下記で表示します。
Window->Views->Properties - Geometry Mask
ここにチェックが入っているメッシュにだけレイヤーの描画(ストロークの投影も)が作用するようになります。
つまり邪魔なメッシュはOFFにすれば良いわけですね。


傘(cap_low)に描きたいので柄(stipe_low)のチェックを外します。


右上のハンバーガーメニューから一括で変更することも可能です。
Include allすべてチェック
Exlude allすべて外す
Invertチェック反転


3Dビュー上でクリックしても同じことができます。


OFFになっているメッシュはグレーの斜線で表示されます。


ただこれだけだとマスクはされますが、ハイドされないので隠れている部分に描くことはできません。
次に、ビューポートの上にある目のマークをクリックします。
これはマスクなどペイントできる状態でないと機能しないので注意してください。


これで、ジオメトリーマスクで除外したメッシュがハイドされ隠れた部分もペイントできるようになりました

注意点

ただまだ新しい機能なせいか、色々と安定しません。
特にプラグインのPSDエキスポートとは互換性がありませんし、スマートマテリアルとの相性も悪いです。
どなたか良い感じの回避策あれば教えて下さい!



一応古いバージョンの解決方法も残しておきます。

それ以前の解決方法


等の回避方法があります。ただどれもメリット、デメリットがありますので下記を参考にしてくださいませ。



共通して下図のようなメッシュで試してみたいと思います。

十字のベルト部分と本体のキューブか重なっています。

マテリアル、UVは共有しています。ゲーム仕様ですね。


普通に描くと十字もキューブも一緒くたにペイントされてしまうのです。


では、
各方法について解説していきます。

メッシュを移動して読み込む

重なっているメッシュが問題なら移動してから読み込めばいいという発想です。
単純ですがそれぞれのメッシュ単位で被らない位置に移動してからFBX出力します。

移動値にアニメーションのキーを入れると楽です。
そうすると当たり前ですがサブスタンスペインター上でも被らずにインポートできます。


注意点として、
  • AOなどは元の重ねた状態で欲しいので必要に応じて予めベイクしておく必要があります。(2パターンFBX出力しておく必要がありますね)
  • ジョイントのアニメーションはフリーズされずにバインドポーズに戻ってしまうので、そういった場合(口を開ける等)は、一時的にメッシュのヒストリを消してFBX出力する必要があります。
  • ハイポリメッシュも同じ位置に移動しておかないとベイクできません。
  • 左右対称のパーツはX方向に動かしてしまうと対称軸がズレるのでY方向かZ方向のみ移動します。

UV(2Dビュー)に描く

3Dペイントでなく2Dビューに描く方法もあります。
ただし、UV空間に投影されるため、メッシュを差し替える際UVが移動しているとズレたり消えたりしてしまいます。

また、そのまま描くとこのように被っているフェースにもストロークが入ってしまうため下記の方法で回避する必要があります。


ブラシの設定にアラインメント(Alignment)という項目があります。
こちらをUVに変更します。

これによってフェースが重なっていても問題なく描くことができます。
3Dペイントの利点であるUVの切れ目がシームレスに繋がる効果等は無くなるので注意して下さい。

見えなくしたいだけなら

もし単純に隠れている箇所を見たいというだけならアルファブレンドのシェーダーを使用するだけでできます。
↓シェーダーをpbr-metal-rough-with-alpha-blendingにします。テクスチャセットは共通です。


テクスチャセットにOpacityチャンネルを追加します。


このOpacityチャンネルを真っ黒(0.0)で塗りつぶした部分は透明になります。


残念ながらポリゴン自体は存在するのでペイントはできませんが……


テクスチャセット(マテリアル)を分けて統合する

次はマテリアルを一時的に分ける方法です。
↓十字部分とキューブのマテリアルを分けました


サブスタンスペインターはマテリアル=テクスチャセット毎に表示非表示を切り替えることができます。

こんな具合に十字の部分だけ隠してペイントすることができます。


ただし、仕様的に1枚に収めなければいけないので、下記のツールを使って統合します。
Texture Set Combiner for Substance Painter
Gumroadリンク
サブスタンスペインターから出力されたテクスチャを統合してくれるツールです。

分かりやすいようにマテリアル毎に塗りつぶしてみました。


下記設定でテクスチャ出力します。
ConfigDocument channels + Normal + AO(With Alpha)
Common paddingDilation + Transparent
Dilation24
拡張子png,tga,tiff
Dilationで塗り足しと透過を付けることでUV外に影響が出ないようにする訳ですね。

このように出力されます。テクスチャセットを分けているのでベースカラーテクスチャが2枚になっています。


これを先程のTexture Set Combinerで統合します。
Set Source Folder...バラバラになったpngテクスチャフォルダを参照
Set Destination Folder...出力するフォルダを指定
Mesh Name名前_Base_Color.pngのようになります
Opaque Background Colors範囲外の背景色を指定できます
Combine Files出力ボタン

このように2枚のベースカラーテクスチャが統合されました。


注意点
  • マテリアル分けが面倒(メッシュをグループなどに分けてスクリプトでマテリアルアサイン&FBX出力する等しないとミスりそうですね)
  • 逆に繋げたい所が繋げられない。テクスチャセットが違うと同時に描けないのです。

テクスチャセット(マテリアル)を分けて統合する

このプラグインが気になるので近いうちに検証したいと思います。

関連ページ

こちらもおすすめ
【Preserve strokes とは】

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

※現在 ユーザーID保持者 のみがコメント投稿可能な設定になっています。

Wiki内検索

メニュー

Maya

管理人


管理者:kmj
Twitter:@kmj3dcg
ゲームグラフィックに携わり十数年、現在フリーランスのモデラーとして活動しています。
専門分野:モデリング、テクスチャ、ウェイト(キャラモデルがメインのゲームグラフィッカーです)
お問い合わせはこちらまでお願いいたします。

Amazonアソシエイト

皆様のご協力感謝しておりますm(_ _)m























管理人/副管理人のみ編集できます