5
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

Blenderで制作したモデルのTextureをSubstancePainterで制作するまでのフロー

初めに

Blender Advent calendarですが、遅れてしまい申し訳ありません。年内にはと思い書き始めました。
この記事では、Blenderで制作したモデルに、Substance Painterで制作するフローとその過程で行うチェック項目についてまとめました。(以降、Substance Painterのことを以下ではSPと省略します)

目次

1.なぜSubstancePainterを使うのか?
2.Low polyモデル制作
3.Face-Orientationに気を付ける
4.Materialを設定する
5.ポリゴンを分ける
6.Vertex paintでID Mapを制作する
7.High Polyモデルを制作する
8.ScaleとRotationの初期化
9.Meshを正常化する
10.UVを展開する
11.Bake
12.Combineする
最後に

1. なぜSubstancePainterを使うのか?

この記事では、SubstancePainterを使うことを前提に書いています。
Blender単体でも作成したモデルのマテリアルを十分作り込めます。また、keyframeなどをMaterialのノードでも利用できるので、用途として幅広い表現ができます。一方で、Blender内で作ったMaterialは、Blender以外の場所へ持ち出して利用することが難しいです。というのも、BlenderでMaterialをTextureへbakeする機能があるのですが、このBake機能は結構時間がかかってしまう上、出来上がりとして、精度の良いTextureを作るのには若干不向きな気がします。(何度か試した経験則です)

例えば、Blenderで作ったモデルをUE4などのゲームエンジンにExportしたときに見た目の質感をつけるためには、UE4内で制作するか、Blenderでbakeするか、Substanceなどの外部アプリで制作するかの選択肢がありますが、Normal Mapの制作とTextureの精度、プリセットの豊富さなどを考えるとSubstanceなどの外部アプリ(そのほかには、Toolbagなど様々なアプリがあります。)で行うのが良いという判断になりました。

動作環境

Blender2.9
SubstancePainter 6.2.1
Windows 10

2. Low polyモデル制作

まず、Blenderで、SubdivisionやBevelをする前のlowpolyモデルを制作します。今回は、Hard Surfaceのモデルを例に説明させてもらいます。

image.png

3. Face Orientationに気を付ける

このモデルのディーテルを作成する前に、ゲームエンジンやSubstancePainterでのBakeの際に正常に表示、機能するようにMeshのFaceの向き(=Face Orientation)を確認します。Meshの表面の法線の向きが外側に向くように設定をしておかないと、Blenderで正常に表示されていても、UE4やSPで透明に表示されてしまいます。Face Orientarionは、Blenderの右上のタブから、チェックボックスにチェックすることで表示できます。
スクリーンショット 2020-12-29 17.39.58.jpg

この状態で、Meshは青と赤色に塗りつぶされた二つの領域に分かれます。青色は、法線が外側に向いているFaceを表し、赤色は、faceが内向きになっていてSubstanceなどで透明になってしまう部分です。赤色の部分があれば、法線を逆向きに設定しなおしてください!(きちんとモデリングされていると、全て青色に表示されます。)
image.png

4. Materialを設定する

次に、SubstancePainterでTextureを制作するための基盤になるモデルのMaterialを設定します。名前を適当に設定し、アサインしておきます。ゲームエンジンなどでモデルを使うときに、ドローコールを減らす目的でMaterialは、なるべく複数セットせずに、一つにしておく方が良いです。

5. ポリゴンを分ける

上記の設定で、1つまたは、複数のMeshのMateiralを一つで設定しました。このように設定しておくと、後から、モデルの部品ごとに質感を変えることが大変になります。具体的には、SubstancePainterでPolygon一つずつを塗りつぶして質感を設定する必要があります。あとで面倒な作業を行わないためにも、質感が異なる部品と他の部分とポリゴンで切り離しておきます。同じメッシュではあるが、地続きに繋がっていない状態にしておくことで、この後の作業を簡単に行えます。
ポリゴンの分離については、以下の記事を参考にしてください。
【Blender】辺の分離(切り分け)と切り裂き方法

6. Vertex paintでID Mapを制作する

ポリゴンを分けるやり方の他に、VertixPaintを用いて同じマテリアル、同じMesh内で部品ごとに質感を分けることもできます。現実の世界では、異なる物質同士は、境目があることが多いですが、3Dモデルで表現するときには、Vertix Paintを用いる方が良い時もあります。VertixPaintを用いて質感を分ける方法は、以下の記事を参考にしてみてください。
【IDマップ】質感ごとにマスクを作る【Substance Painter 頂点ペイント】

7. High Polyモデルを制作する

ここまでの設定が終わったら、モデルのディテールを作り込んでいきます。low polyモデルで表現できなかった表面の微妙な凹凸、窪み、面取り、表面を滑らかにするための細分化などをここで行います。一旦low polyのモデルはコピーして、コピーしたものをベースに詳細を作り込む方がいつでも元のモデルに戻れるので安全だと思います。
ベベルについては、以前の記事を参考にしてください!
なぜベベルするのか?

この段階では、BevelもSubdivisionもModifierとして設定し、まだ適応しない方が良いと思います。
以下では、初めのlow polyモデルにさらに詳細を加えたモデルを元の画像と比較して載せておきました。

8. ScaleとRotationの初期化

ScaleとRotationの初期化は、ここで初めてすることは少ないと思います。ベベルや他のModifierを利用する際に、初期化していると思いますが、念のためここでも確認しておきます。ScaleとRotationの初期化はモデルを選択肢、Ctrl + Aで行えます。

9. Meshを正常化する

Meshの頂点、辺、面が二重になっているということが、ゲームエンジンやSubstancePainterでのBakeを邪魔する原因となることがあります。UV展開する前に、以下のチェックを行うと良いと思います。上部のタブから、Mesh>Clean Up>Merge By Distanceを選択し、実行します。この他にも、Faceがダブっているところは、ダブりを解消しておくようにすると良いです。

スクリーンショット 2020-12-29 20.11.37.jpg

10. UVを展開する

UV展開をすときには、注意する点はいくつかありますが、特に次のことに注意して展開しておくようにしています。
①複数のMeshをなるべく一緒にUV展開する
②UV展開したときになるべく隙間がなく、重なりがないようにする。
③同じ部品に関しては、なるべく同じUVを再利用する
④Hard Edge部分は切り離して展開する。

①の複数Meshを同じUVとして開く方法は簡単で、同じUVに含めたいモデルを選択し、editモードに入り、普段通りUV展開すれば良いだけです。
スクリーンショット 2020-12-29 18.39.57.jpg

②のUVをつめて配置するメリットは、一枚の限りある画質のTextureを効率的に利用できることです。もし、4KのTextureを使っていても、UV Mapに隙間がたくさんあると、実質支え得ているサイズは、2Kになってしまっているなんてことが起きてしまうからです。(せっかく4KのTextureを使っているのに、2K分の画像しか使っていないと、残りの2K部分が無駄にメモリーを圧迫することになるので、ゲームエンジンなどで利用する観点で非効率です)このUVの配置を手動でやると大変なので、ここは、Add-Onに頼っています。僕自身よく、UVPackmaster 2を使っています。このAdd-Onを使うことで以下のように最適化ができます。

image.png

image.png

③全く同じ部品の複製がいくつかある場合や、繰り返しの部分がある場合は、全てをUV展開せず同じものは一度だけUV展開すると(Array Modifierなどを適応せずそのままUVを展開する)効率的にUV Mapが利用できます。ただし、同じ部品に同じUVをアサインしていると重複感が出てしまうので使い所を選んで利用すると良いと思います。

④最後に、UV展開の切れ目についてです。以下の画像を用いて、Hard Edgeになぜ切れ目を入れておいた方が良いか説明します。
image.png

これは、SubstancePainterでBakeを行った時のモデルのMaterialの見た目です。上記の画像で中央部分にあるEdgeは、綺麗に表現されていますが、その右側のEdgeは、糸で縫われたような模様が現れノイジーです。Hard Edge部分ではときに気にせずUVを開くと、このようなノイズが現れてしまいます。以下では、実際のUVMapがどうのようになっているかを可視化して表てみました。
赤く塗った部分は、UVの島が連続的になっているのに対して、青く塗った部分は、UVの島が半分に切れていて、連続に繋がっていません。先ほど確認したように青い線の方は、ノイズが現れていなかったので、Hard Edgeはこのように切り離して展開しておくのが良いです。切り離しに関しては、以下のZen UVというAdd-Onが便利です。
Zen UV

image.png

実際のUV展開のFlowは以下の動画が参考になります。
https://www.youtube.com/watch?v=BhKQiuzQipg
https://www.youtube.com/watch?v=SChr2ThZ9C4

11. Bake

ここまでで、BlenderからSubstanceへExportする準備が整いました。SPでは、具体的にどのようなことをするかをここで詳しく説明するのは趣旨から外れるので、他の記事に譲ることにして、簡単に注意点をまとめていきます。

Substance Painterのチュートリアルでお勉強その5前編 テクスチャのベイク(焼きこみ)
Substance Painterのチュートリアルでお勉強その5後編 テクスチャのベイク(焼きこみ)

上記を参考に、LowPolyモデルに、HighPoluモデルをベイクしたものを以下に載せておきます。NormalMapを作成することで、ポリゴン数を押さえながら、見た目に違和感のないモデルを作れます。bakeの際に、Max Frontal DistanceとMax Rear Distanceの値で迷うことが多いですが、Max Frontal DistanceはMesh同士が近い距離にあり鑑賞しやすそうであれば、0.001~くらいから下げる、Max Rear DistanceはLow polyモデルからの凹みが大きいのであれば大きくすると覚えておくと良いと思います。

image.png

image.png

きちんとbakeができたら、以下の動画などのやり方にしたがって、質感ごとにPolygon FillでMaskを制作することができます。そのあと、実際の質感を設定すると、以下の画像のようになります。

image.png

12. Combineする

最後に、制作したモデルが複数のMeshからなる場合は、UVが共通なものは、Combineしておくとゲームエンジンでの調整や配置が楽になります。ただし、ゲームエンジンで動かしたいパーツに関しては予め別Meshとして作っておいた方が良いです。

最後に

ここでのフローは僕がよくやっていることであり、間違いや効率的でない部分があると思います。何かあれば是非、コメントいただけると嬉しいです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
5
Help us understand the problem. What are the problem?