Substance Painterでテクスチャペイントする下準備・ベイク・質感の作り方などを紹介する。
もくじ
下準備
UV展開についてはこちら。
モデルを描きやすいように位置調整する
着脱や分離・大きく変形するオブジェクトは、まとまりごとにオブジェクト同士の位置を離す。不要なAOができないようにし、描きやすくする。
- 脇や腕が描きやすいように腕を上げるポーズにする
- オブジェクト同士の位置を離す
- ボーンやキーフレームなどを利用して、元の位置に戻せるようにしておくこと
モデルを読み込む
データに何らかの問題があると、エラーが出てモデルを読み込めない。その場合はエラーログを確認して適宜対応する。
マテリアルは、Substance Painter上ではテクスチャセットとして扱われる。
- 不要な回転・スケールなどのトランスフォームを適用する
- マテリアル割り当てが正しいか確認する
- マテリアルに名前をつける
- これを書き出す際のテクスチャ名にする。マテリアル名とテクスチャ名を分けたい場合は、SP上でテクスチャセットを名前変更してもよい
- 不要なマテリアルを除去する
- モディファイアを適用する
- サブディビジョンモディファイア以外の生成系モディファイア
ベイクする
メッシュの曲率や位置・AOなど、様々な情報をベイクすることで、スマートマテリアルやマスク処理で多くの表現ができるようになる。
Substance Painterでのペイントでほぼ必須の工程。
スカルプトしたハイポリモデルから、リトポしたローポリモデルへのディティールの転写もすることができる。
より情報量の多いベイクになるので、スカルプトで作ったモデルならば積極的に利用したい。
別パーツへの影響を避ける
ハイポリモデルからのベイクの場合、凹凸の差がローポリモデルと大きいと、うまくベイクできない。
そのため、ケージの値を調整してエラーが起こらないようにする。
パーツ同士の位置を離す
ケージなどのベイク設定を調整しても対処しきれないエラーが起こる場合もあるので、パーツ同士をベイクの影響の起こらない程度に距離を離してベイクした後、再度モデルの位置を元に戻す、という方法がある。
- モデルの全パーツの間隔を開けて位置調整し、位置をキーフレームに保存し、モデルを書き出す
- この状態でSubstance Painterに読み込み、ベイクする
- 正常な位置に戻して、モデルを書き出し、Substance Painterに再読み込みする
- 正常な位置に戻して作業した方が最終ルックに近く作業できる
- 隠れる部分の描きやすさを優先する場合は、離したままペイントする方がよい
- 手動でペイントしたストロークは、3D空間の位置に保存されるため、書き始めたらパーツの位置を動かさないこと(書き直しになる)
- パーツ同士のAOがほしい場合は、再度AOのみをベイクする
必要なチャンネルのみベイクする
ベイクするマップや使用マテリアルが多いほどベイク画像も多くなり、ファイルデータサイズが大きくなる。軽く1GB超えるので、不要ならばベイクしないようにする。
- ノーマルは不要
- ハイポリからベイクするなら必要
- IDは不要
- 頂点ペイントやポリグループ分けを用意しているなら必要
AOチャンネルを追加
陰影にメリハリを付けることができるため、あるとよりよい。
AOはデフォルトで存在しないので、追加する必要がある。
- TEXTURE SET SETTING → チャンネル → [ + ] アイコン → Ambient Occlusion
AOマップをそのまま使う
ベイクしたAOマップを塗りつぶしレイヤーのマスクとして利用する。
ローポリすぎると、ベイクではポリゴン感が出てしまってうまくいかないので、手動で描き込む方がよい。
- 白黒が逆なので、レベルを追加して、反転する。必要あれば値を調整
- ノイズがあるので、ブラーフィルターでぼかす
- いらない部分のAOはペイントで消す
ベイク手順
- TEXTURE SET SETTING → Mesh Maps → Bake Mesh Maps をクリック
- Common parameters → Output Size を、2048px x 2048pxにする
- Bake all texture sets を実行
- 場合によっては時間がかかるので、放置して別の作業をするとよい
質感を作る
質感ごとにマスクする
同じテクスチャセットの中でも、別の質感で分かれていることがある。
まず、パーツごと・質感ごとにフォルダを作って、塗りつぶしレイヤーをマスクする。
ほぼ必須なので、これのスマートマテリアルを作っておくとよい。
- 描き分ける部位ごとにフォルダを作る
- なんでもいいので識別しやすい色のFillレイヤーをその中に入れる
- フォルダにブラックマスクを追加する
- このフォルダを必要な数だけ複製しておく
- Polygon Fill (4キー)などを利用して塗りつぶす
- わかりやすい名前をつける
いくつかのマスク作成方法
マスクを作る方法はいくつかある。
簡易的にやるならPolygon Fillの手動塗りつぶしで、何度もメッシュやUVを調整しやすくするなら頂点カラーを使うのがよい。
- Polygon Fill (4キー)などを使って手動で塗る
- ベイクでのIDマップを使用しない方法
- UV・面・リンクしたメッシュから塗ることができる
- 事前用意する必要がないので、簡易的に使える
- 複雑な面選択がしにくい
- メッシュの位置やUV位置に依存するので、それらが変更されたときは書き直しになる
- IDマップの頂点カラー
- オブジェクトやUVに依存しない
- モデリングツールの多用なポリゴン選択方法を利用してマスクを作成できる
- IDマップのMaterial color
- ベイク対象のモデルから、マテリアルの色をベイクする
あくまでベイクなので、近すぎる無関係の面にまでついてしまうことがある
- ベイク対象のモデルから、マテリアルの色をベイクする
- IDマップのZBrushのポリグループ
塗りつぶしレイヤーを使う
基本的に塗りつぶしレイヤーを利用し、マスクに描きこんだり、プロシージャルテクスチャでマスクする。
これの利点は、色を一括して後調整することができること。
一般的なCGペイントの手法と同様のやり方。
Fillレイヤーを追加してマスク作業を繰り返し、レイヤーを作っていく。
- 塗りつぶしレイヤーを追加
- 必要なマップ以外は無効化し、各値を調整
- [Add Black Mask] でマスクを追加
- Add Fill で塗りつぶしを追加
- Add Fillにプロシージャルクスチャを設定
- プロシージャルテクスチャの値を調整する
- 必要であれば、Add Paint の手動ペイントで、意図しない部分を加筆修正する
直接マスクに書き込まない
手動で描き込む場合は、Add Paint から新規マスクを追加して描き込むこと。
要素を分けておけば、あとで手動で描き込んだ箇所だけオフにしたり不透明度を調節することができる。
マップを多く使う
特定のマップだけに情報を入れても安っぽく、質感が出てこない。
使えるなら色・金属・粗さ・高さ・AOなどのマップに質感を入れる。
特にカラー・高さ・粗さに質感を入れると情報量が増える。
なにかしらうまくいかない時は、各マップ単体で見るといい場合もある(Cキー)。
カラー - Color
色。陰影を強調させたいときにもカラーに入れる。
最終的な色味は光が当たって明るくなっている状態であるため、カラーは少し暗めに設定するとよい。
ハイトマップ - Height
凹凸情報。簡単に情報量を追加できるので積極的に使う。
アルファやプロシージャルテクスチャを活用する。
ノーマルマップ - Normal
凹凸情報。ハイトマップとは違って手書きでは書きにくい。ノーマルマップ用のアルファを利用する時は個々に書き込む。あまり利用することはないか?
反射 - Roughness
均一な反射は不自然・安っぽいCGの作り物感が出てしまう。
プラスチックや漆塗りのようなツルツルとした表面にも、汚れとして薄っすら誤差を入れてあげるとよい。
金属 - Metallic
金属の質感以外では使用しないチャンネル。
金属の時にだけ使えばよい。
AO
溝をはっきりさせ、形状をわかりやすくする。
モデルの再読み込み
Substance Painterでは、3Dビューで描いたものはメッシュを更新してUVが変更されても引き継ぐことができ、UVに依存しないテクスチャペイントが可能である。
- 編集 → Project Configuration...
モデルのミスはその都度修正する
ライティングのあるビューポートでモデルを見ると、モデリングソフトのシンプルなビューポート表示では分かりづらいミスが浮き彫りになる。
テクスチャペイント中にモデルのミスが見つかれば、モデリングソフトに戻り、修正し、メッシュの更新する。これを繰り返す。
読み込んだら既存のレイヤーが消えた
読み込んだモデルのマテリアル名が変更されていた場合は、新しくテクスチャセットが作られてしまう。
データは残っているので、テクスチャセットを再割り当てして直すことができる。
Substance Painter側でも読み込み前にマテリアル名変更しておけば再割り当て作業も不要になる。
その他
必要に応じて2Dペイントと使い分ける
3Dペイントの方が利点は多いが、完全に3Dペイントソフトだけで完結できるわけではない。そのため、アルファやパターン素材作りはPhotoshopなどで作る、というような分担は必要。
逆にUVの切れ目をまたいで描く模様はSubstance Painterでやる方がよい。
それぞれ利点・欠点を理解し、併用してテクスチャを制作する。
ブラシサイズを[筆圧なし]にする
ブラシサイズは、基本的に筆圧がない方が描きやすい。
- PROPERTIES - ペイント → ブラシ → サイズ → [筆圧なし]にする
テクスチャ素材
タイリングできる素材がよい。
これも塗りつぶしレイヤーと同様に、マスクを利用して必要な場所だけ表示するようにする。
UVに依存しない質感データを作れば、使い回すことができる。
- cgTextures.com などでテクスチャを探す
- Photoshopでレタッチ・色調補正・タイリング・ハイトマップ化などをする
グラデーションを作る
- マスクにAdd generatorで、ジェネレーターを追加
- 3D Distance を追加
- 値を調整する
ストライプ模様を作る
Gradient Linearのプロシージャルテクスチャを利用する。
コントラストを1にすれば、はっきりとしたストライプ模様を作ることができる。
シェーディングをカラーに変換する
フィルター → Baked Lighting Stylizedを利用する。ライトの当たり具合を調整できる。
グラデーションマップ(カラーランプ)を利用する
フィルター → Gradientを利用する。
上記のBaked Lighting Stylizedと併用することで、陰影をカラーに変換して、好きなように濃度や色の変化を調整できる。
ライティングがなく、すべてテクスチャのみで再現する必要のあるアニメ系キャラモデルで便利。
テクスチャのUVの切れ目を消す
- 投影方法をUVではなく、Tri-planar projection に変更する
- クローンツールで修正する
不要なデータは除去する
Substance Painterは非破壊なので、レイヤーを構成するためのあらゆるデータを、ファイル内に保持している。そのため、データ容量が1GBを軽く越えることが多い。不要なレイヤーやテクスチャは消すこと。
- ファイル → Clean... により、未使用のデータを一括してファイル内から除去することができる
テクスチャとして書き出す
画像のような設定で出力している(アルベド・メタリックとラフネス・ノーマル・AO)。
自分はUnityで使えるようにしているので、これは各自にあった設定で出力する方がよい。
命名は、マテリアル名 + マップ名としている。
ファイル名は長いのが嫌なので、マップ名を短く設定している。
$textureSet がテクスチャセット(マテリアルの名前)を意味する。
結果 : MAT_Lulu_Skin_Ald
- $textureSet_Ald
- $textureSet_MtlRgh
- $textureSet_Nml
- $textureSet_AO