Open51

liltoonのためのSubstancePainterテクスチャ作成

marumaru

SubstancePaitner上ではテクスチャが良い感じに見えるのに、Unityに持っていってliltoonの設定をすると全然違う!ってなってしまうことありますよね?
そんな悩みを解決する手助けになれば!というスクラップです。

インポート設定、出力テンプレート、liltoonでの設定項目まで出来たら良いなと思ってます。
試行錯誤しつつやるので体系的というより断片的な解説が多くなると思います。

私のSubstancePainterの知識は独学なので、効率がよくなかったり改善できるところがあったりすると思うので参考程度に考えてくれればありがたいです。
自分はこうしてる、ここはこうすると綺麗にできる、間違ってる情報などありましたらコメントでもXのDMでもくれると嬉しいです!

marumaru

ワークフロー、全体的な流れ

Blenderでメッシュの作成→UV展開
→SubstancePainterでテクスチャの作成
→Unityに持って行ってliltoonの設定

UV展開はテクスチャを作る上で重要だと思ってるので今回はUV展開のところからやっていきます。基本的なことはスキップするので中級者向けになると思います!

marumaru

補足ですが、私は大雑把にウェイトを塗る→UV展開→テクスチャを作る→ウェイトの微調整という順番でやってます。
ウェイトを塗りにくいトポロジーだった場合、テクスチャを塗ったあとにメッシュの修正をしてUV展開をやり直したりするのが面倒くさいからです。

marumaru

SubstancePainterで行うこと

・パスを利用したディテールの追加
・UVタイリングによるレースの作成
・Blenderで作成したハイポリのベイク
など

marumaru

UV展開

具体的な方法は省略しますが、どういう所を気を付けて展開したかだけメモ的に解説します。

シームを入れる場所のコツは、角度が急に変化するところ、素材が入れ替わるところです。
シームを入れるときのイメージは牛乳パックを切るときの感じです。
「Tシャツ 型紙」「スカート 型紙」などと検索して実際の服と同じ位置にシームを入れると良い感じになることが多いです。

あと、アドオンのmio3uvはとても便利なのでぜひ使ってください
とにかく便利

一回公式の説明見てみてください!→ https://addon.mio3io.com/#/ja/mio3uv/

marumaru

靴は左右のUVを重ねてます。
ベルト部分などのまっすぐにできそうな部分はまっすぐにしてます

marumaru

靴下

自信ないのでやり直すかもしれません、左右重ねてるのも解除するかも

marumaru

スカートの内側部分

ここはほぼ単色の塗りつぶしになる予定です。
まっすぐにできるところはまっすぐに!
ウエスト部分はノーマルマップでシワシワ感を出すために解像度を高めにしてます。

marumaru

スカートの外側のレース部分

レースはUVのタイリングをしてるのでちょっと特殊です。
UVの0~1の領域からはみ出たところは繰り返しUVが使われる性質を利用して解像度を無理に高くしなくても高解像度に見えるようにします。

marumaru

ビスチェ

まっすぐにできるところはまっすぐに!(何度でも言う)
左右対称にして管理を楽にします

marumaru


こういう感じにシンプルなタータンチェックの画像をネットで拾ってきて、UVを微調整します。
こういうときにトポロジーが綺麗だと、UVの整理が楽になる

marumaru


例えば、リボンのUVはこんな感じに展開してます。
全部四角形メッシュで作って、この方向にこの柄が欲しいんだ、と考えながらトポロジーを作るとUVをあえて歪ませることにより理想の方向にテクスチャを貼ることができます。

もし、ポリゴン数を減らしたいならあとで、いらない辺を融解したり三角化してあげれば良いと思います。

marumaru


インポートします
Normalの形式はOpenGLにします

marumaru


ベイクします
common settingのところで、
OutputSizeを512
AntialiasingをSupersampling 4x にします

サイズはベイクが上手くいってるのを確認したら大きくします

marumaru


Ambient occlusionのSelf OcclusionをOnly Same Mesh Nameにします

marumaru

ベイクが完了したらBキーを押してベイクの結果を確認します
Curvatureが不自然に変わっているところ、AmbientOcclusionが想定外の黒さをしているところ、World space normalが不自然なところなど
を探してUVを修正していきます

marumaru



World space normalが急に変わっている
これはUVが重なっているのが原因ですが、ここはUnityで単色でマテリアルを塗りつぶしてマットキャップで光沢を再現する予定なので無視します

marumaru


位置をずらしてベイクし直して改善

marumaru

このあたりで一回このスマートマテリアルを割り当ててみます
CurvatureやAmbientOcclusionのベイク情報が重要になってくるのはこのためです
このスマートマテリアルによってUnityに持って行ったときにSPと違ってのっぺり見えるのを改善します
https://booth.pm/ja/items/4792340

marumaru

ダウンロードしたスマートマテリアルをレイヤーの一番上に入れます
入れたら必ずチャンネルをBaseColorに切り替えて見え方を確認してください

SPのライティングのおかげでSP内だと質感が良く見えがちなのですが、liltoonに持っていくとSPでのライティング情報が持っていかれないのでのっぺり見えてしまいます。 
私も最初この問題に頭を悩まされました。。
SPのライティングの情報をliltoonに持っていくために、BaseColorマップとNormalマップに情報を増やすのを頑張る感じです。

今後もチャンネルをBaseColorにして質感を確認します。これがliltoon内の見え方に一番近いので

marumaru

オブジェクトのメッシュがくっついてるとCurvatureが正しくベイクできないのでオブジェクトを分離します

marumaru

一旦綺麗にCurvatureがベイクべきました(これ以降4kでベイクしてます)

marumaru

オブジェクトを切り分けていたことによって欲しい場所のAOがベイクされていないので、ずらしていたオブジェクトの位置のみ戻してベイクしなおします

marumaru

このようにCurvatureやAOを綺麗にベイクできたら先述のスマートマテリアルを入れただけでも影の情報がBaseColorチャンネルに反映されます
スマートマテリアルの値をいじれば後で見た目をある程度変えられるのでこの時点では大体想定通りの影の付き方してたらOK

marumaru

このように綺麗にベイクする方法は私が完全に自力で考えたものなので、もっと効率が良くて綺麗な方法があるかもしれません、すみません

marumaru

ここのチェック外してベイクします
MatchをBy Mesh Nameに変えます
ローポリのオブジェクトには○○_low、ハイポリのオブジェクトには○○_highと命名します

marumaru


ベイク自体は成功しているのですが、ハイポリを用意していない部分のAOが真っ黒になっていることによってBaseColorがちょっとおかしくなっています
↓AO

marumaru

面倒くさいので、今回はベイクによってできた、Curvature、Normal、AOのマップを一度書き出して
その画像を使いたい部分だけに割り当てて使おうと思います
簡単な解決策知ってる人いたら教えてください

marumaru

これがエクスポート設定です、自分で設定つくりました

marumaru

書き出せたものを
SPにD&Dして読み込みます

marumaru

textureで読み込みました(分かりやすければ何でも可)

marumaru

やっとテクスチャを作っていきます
分かりにくくてすみません
まずはハイポリのデータを使わない靴からやっていきます

marumaru

現段階
ベイクをして、影のスマートマテリアルをレイヤーの一番上においただけの状態
(ベイクミスでAOが1プロセス手前のものに戻ってます、この次の画像からは修正されてます)

marumaru

レイヤーの一番下にColorのみの塗りつぶしで黒を配置
その値を細かくいじりつつ、曲率のレイヤーにマスクを着けて場所によって質感を微調整

marumaru

マテリアルビューだとこんな感じ
光沢などはliltoonで最終的に調整します

marumaru



変更あると思うけど一旦このくらいになりました

marumaru

順番にできるだけ解説します
ステッチはシンプルにペイントレイヤーにパスに沿ってペイントでペイントするだけです。
Offset、Irreglarityの値などいじるとイメージに近づくかもしれません
レイヤー自体にマスクを追加してペイントしてほしくないところは制限してます

marumaru

模様というかシームというかの作り方です
塗りつぶしレイヤーのColorとHeightのみ有効にして、マスクで制御しています
今回はへこんでほしいのでHeightをマイナスの値に
溝部分なので、周りよりわずかに暗くなってほしいので黒で塗りつぶしをしてます

marumaru

基本はジェネレータのUVBorderDistanceを2つ使って縁取りをしてます
ジェネレータはコントラストをマックスの1にして、Distanceを調整してます
1番下のレイヤーをLdge、2つ目がSubにしてます
UVBorderDistanceのDistanceパラメータの値を1つ目よりも2つ目を小さくすると多分できると思います

このように縁取りをしたあとに、Paintでペイントしてほしくないところに制限して、Transformフィルタで微調整してます

marumaru

Curvatureのジェネレイタも似た感じで使えます

marumaru

体調悪くて更新遅いですすみません

marumaru

Unityで見るとこんな感じです
liltoon5分セッティング
liltoonのちゃんとした設定はまた後で書きます

marumaru

来月入院する予定があって今月中になんとか衣装出したいので、SPの細かい解説は省きます。
でも基本的に靴のやり方と同じで、あとはUnityで見たときに情報量が足りないと感じたところをノーマルマップやカラーマップに情報量を増やすような操作をSP内でしてあげればなんとかなると思います。。

marumaru

エクスポートの設定だけ書いておきます
自分用にカスタムしたものです、SP内で設定してあげれば以降使いまわせます
真似して設定してみてください

liltoon用にBaseColor、Normal、AOを書き出すテンプレート

marumaru

金属のマスクを書き出すテンプレート
Unityで部分的にマスクが欲しいときに、塗りつぶしレイヤーにMetalicチャンネルを追加してあげれば金属部分以外でもマスクを作るのに便利です

marumaru

Opacity(透明部分)を書き出すテンプレート
レース部分などのマスクを書き出すのに使います