最終更新: rt_3dcg_tips 2021年07月24日(土) 03:55:24履歴
サブスタンスペインターを使っていて一番困るのが
重なって邪魔なメッシュやポリゴンを隠して奥にあるメッシュにペイントできない
という点です。(↓こういうのです
腕と腕輪、髪と頭、口の中など直接ペイントしづらいところはよくあります。
映像系なら「マテリアル分ければ」で終わりかもしれませんがゲームではマテリアル数の制限が厳しいため現実的ではありません。
ではどうやって回避するのでしょう。
こちらの問題ですが、
バージョン2021からの機能で改善しました!(解決とは言っていない)
2021からはメッシュ単位でハイドしてペイントすることができるようになりました。
Geometry Mask機能です。
ちょっとクセのある使い方なので以下に使い方を記しておきます。
等の回避方法があります。ただどれもメリット、デメリットがありますので下記を参考にしてくださいませ。
共通して下図のようなメッシュで試してみたいと思います。
十字のベルト部分と本体のキューブか重なっています。
マテリアル、UVは共有しています。ゲーム仕様ですね。
普通に描くと十字もキューブも一緒くたにペイントされてしまうのです。
では、
各方法について解説していきます。
重なって邪魔なメッシュやポリゴンを隠して奥にあるメッシュにペイントできない
という点です。(↓こういうのです
腕と腕輪、髪と頭、口の中など直接ペイントしづらいところはよくあります。
映像系なら「マテリアル分ければ」で終わりかもしれませんがゲームではマテリアル数の制限が厳しいため現実的ではありません。
ではどうやって回避するのでしょう。
こちらの問題ですが、
バージョン2021からの機能で改善しました!(解決とは言っていない)
2021からはメッシュ単位でハイドしてペイントすることができるようになりました。
Geometry Mask機能です。
ちょっとクセのある使い方なので以下に使い方を記しておきます。
まずメッシュの分かれたモデルを用意します。
キノコの傘と柄の部分で分けておきます。ぶっ刺しモデルです。
サブスタでペイントしてみます。
ぶっ刺しなので柄で隠れた傘の下面が上手く描けません。
そこでまず、レイヤーの破線□部分をクリックします。
このレイヤーにジオメトリーマスクを適用します。
ジオメトリーマスクのプロパティーを変更します。
どこにも見当たらない人は下記で表示します。
つまり邪魔なメッシュはOFFにすれば良いわけですね。
傘(cap_low)に描きたいので柄(stipe_low)のチェックを外します。
右上のハンバーガーメニューから一括で変更することも可能です。
3Dビュー上でクリックしても同じことができます。
OFFになっているメッシュはグレーの斜線で表示されます。
ただこれだけだとマスクはされますが、ハイドされないので隠れている部分に描くことはできません。
次に、ビューポートの上にある目のマークをクリックします。
これはマスクなどペイントできる状態でないと機能しないので注意してください。
これで、ジオメトリーマスクで除外したメッシュがハイドされ隠れた部分もペイントできるようになりました。
キノコの傘と柄の部分で分けておきます。ぶっ刺しモデルです。
サブスタでペイントしてみます。
ぶっ刺しなので柄で隠れた傘の下面が上手く描けません。
そこでまず、レイヤーの破線□部分をクリックします。
このレイヤーにジオメトリーマスクを適用します。
ジオメトリーマスクのプロパティーを変更します。
どこにも見当たらない人は下記で表示します。
Window->Views->Properties - Geometry Maskここにチェックが入っているメッシュにだけレイヤーの描画(ストロークの投影も)が作用するようになります。
つまり邪魔なメッシュはOFFにすれば良いわけですね。
傘(cap_low)に描きたいので柄(stipe_low)のチェックを外します。
右上のハンバーガーメニューから一括で変更することも可能です。
Include all | すべてチェック |
Exlude all | すべて外す |
Invert | チェック反転 |
3Dビュー上でクリックしても同じことができます。
OFFになっているメッシュはグレーの斜線で表示されます。
ただこれだけだとマスクはされますが、ハイドされないので隠れている部分に描くことはできません。
次に、ビューポートの上にある目のマークをクリックします。
これはマスクなどペイントできる状態でないと機能しないので注意してください。
これで、ジオメトリーマスクで除外したメッシュがハイドされ隠れた部分もペイントできるようになりました。
ただまだ新しい機能なせいか、色々と安定しません。
特にプラグインのPSDエキスポートとは互換性がありませんし、スマートマテリアルとの相性も悪いです。
どなたか良い感じの回避策あれば教えて下さい!
一応古いバージョンの解決方法も残しておきます。
特にプラグインのPSDエキスポートとは互換性がありませんし、スマートマテリアルとの相性も悪いです。
どなたか良い感じの回避策あれば教えて下さい!
一応古いバージョンの解決方法も残しておきます。
- 重ならないようにメッシュを移動してFBX化する
- 2Dビューでペイントする
- ただしUV変更すると消えてしまう
- ハイドするだけならアルファブレンドマテリアルを使えば可能
等の回避方法があります。ただどれもメリット、デメリットがありますので下記を参考にしてくださいませ。
共通して下図のようなメッシュで試してみたいと思います。
十字のベルト部分と本体のキューブか重なっています。
マテリアル、UVは共有しています。ゲーム仕様ですね。
普通に描くと十字もキューブも一緒くたにペイントされてしまうのです。
では、
各方法について解説していきます。
重なっているメッシュが問題なら移動してから読み込めばいいという発想です。
単純ですがそれぞれのメッシュ単位で被らない位置に移動してからFBX出力します。
移動値にアニメーションのキーを入れると楽です。
そうすると当たり前ですがサブスタンスペインター上でも被らずにインポートできます。
注意点として、
単純ですがそれぞれのメッシュ単位で被らない位置に移動してからFBX出力します。
移動値にアニメーションのキーを入れると楽です。
そうすると当たり前ですがサブスタンスペインター上でも被らずにインポートできます。
注意点として、
- AOなどは元の重ねた状態で欲しいので必要に応じて予めベイクしておく必要があります。(2パターンFBX出力しておく必要がありますね)
- ジョイントのアニメーションはフリーズされずにバインドポーズに戻ってしまうので、そういった場合(口を開ける等)は、一時的にメッシュのヒストリを消してFBX出力する必要があります。
- ハイポリメッシュも同じ位置に移動しておかないとベイクできません。
- 左右対称のパーツはX方向に動かしてしまうと対称軸がズレるのでY方向かZ方向のみ移動します。
3Dペイントでなく2Dビューに描く方法もあります。
ただし、UV空間に投影されるため、メッシュを差し替える際UVが移動しているとズレたり消えたりしてしまいます。
また、そのまま描くとこのように被っているフェースにもストロークが入ってしまうため下記の方法で回避する必要があります。
ブラシの設定にアラインメント(Alignment)という項目があります。
こちらをUVに変更します。
これによってフェースが重なっていても問題なく描くことができます。
3Dペイントの利点であるUVの切れ目がシームレスに繋がる効果等は無くなるので注意して下さい。
ただし、UV空間に投影されるため、メッシュを差し替える際UVが移動しているとズレたり消えたりしてしまいます。
また、そのまま描くとこのように被っているフェースにもストロークが入ってしまうため下記の方法で回避する必要があります。
ブラシの設定にアラインメント(Alignment)という項目があります。
こちらをUVに変更します。
これによってフェースが重なっていても問題なく描くことができます。
3Dペイントの利点であるUVの切れ目がシームレスに繋がる効果等は無くなるので注意して下さい。
もし単純に隠れている箇所を見たいというだけならアルファブレンドのシェーダーを使用するだけでできます。
↓シェーダーをpbr-metal-rough-with-alpha-blendingにします。テクスチャセットは共通です。
テクスチャセットにOpacityチャンネルを追加します。
このOpacityチャンネルを真っ黒(0.0)で塗りつぶした部分は透明になります。
残念ながらポリゴン自体は存在するのでペイントはできませんが……
↓シェーダーをpbr-metal-rough-with-alpha-blendingにします。テクスチャセットは共通です。
テクスチャセットにOpacityチャンネルを追加します。
このOpacityチャンネルを真っ黒(0.0)で塗りつぶした部分は透明になります。
残念ながらポリゴン自体は存在するのでペイントはできませんが……
次はマテリアルを一時的に分ける方法です。
↓十字部分とキューブのマテリアルを分けました
サブスタンスペインターはマテリアル=テクスチャセット毎に表示非表示を切り替えることができます。
こんな具合に十字の部分だけ隠してペイントすることができます。
ただし、仕様的に1枚に収めなければいけないので、下記のツールを使って統合します。
Texture Set Combiner for Substance Painter
Gumroadリンク
サブスタンスペインターから出力されたテクスチャを統合してくれるツールです。
分かりやすいようにマテリアル毎に塗りつぶしてみました。
下記設定でテクスチャ出力します。
Dilationで塗り足しと透過を付けることでUV外に影響が出ないようにする訳ですね。
このように出力されます。テクスチャセットを分けているのでベースカラーテクスチャが2枚になっています。
これを先程のTexture Set Combinerで統合します。
このように2枚のベースカラーテクスチャが統合されました。
注意点
↓十字部分とキューブのマテリアルを分けました
サブスタンスペインターはマテリアル=テクスチャセット毎に表示非表示を切り替えることができます。
こんな具合に十字の部分だけ隠してペイントすることができます。
ただし、仕様的に1枚に収めなければいけないので、下記のツールを使って統合します。
Texture Set Combiner for Substance Painter
Gumroadリンク
サブスタンスペインターから出力されたテクスチャを統合してくれるツールです。
分かりやすいようにマテリアル毎に塗りつぶしてみました。
下記設定でテクスチャ出力します。
Config | Document channels + Normal + AO(With Alpha) |
Common padding | Dilation + Transparent |
Dilation | 24 |
拡張子 | png,tga,tiff |
このように出力されます。テクスチャセットを分けているのでベースカラーテクスチャが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 とは】
【Preserve strokes とは】
タグ
コメントをかく