2017年7月22日土曜日

Substance PainterでSecond Life向けのテクスチャを出力する手順

サブペだけで手軽にSL用テクスチャを作ろうという趣旨のゆるい内容です。
Webの情報参考にしながら手探りでどうにか出力できた感じなので、理解が至らず怪しい点もあるかもしれません。

新規プロジェクト作成

[ファイル]-[新規]で開いたダイアログから
UV展開済のメッシュを指定して新規プロジェクトを作成します。

以降の内容はすべてマテリアルが一つだけ設定された一つのオブジェクトを読み込んだ前提です。

Additional Mapのベイク

[TextureSet Settings]タブの[Bake textures]で
物理ペイントを行う際にメッシュがどんな形状なのかを判断してもらったりするための各種マップをベイクします(超大事)。

[Output Size]は大きい方がエッジの検出などが綺麗にされますが、ペイント中の動作も重くなります(サブペは結構重い)。最終的に作りたいテクスチャサイズより大きめ推奨。
[High Definition Meshes]にはハイポリメッシュを設定します。面を分割しただけのお手軽ハイポリメッシュでも効果的なので、なるべく用意して指定します。
[Antialiasing]はお好みで。

各種マップがベイクされたらペイントする準備は完了です。


ペイント

テクスチャを描きます。と言いつつ塗りつぶしとマスキングでざっくりやります。
(詳しくはちゃんとしたチュートリアル等を参照ということで)

塗りつぶしレイヤーを追加して[Shelf]の[Materials]から好きなマテリアル(ここではIron Rough)を選びます。
右にある[Properties]で向きや大きさ質感をいろいろ調整可能。
[Projection]でTri-planarを選ぶとUVマップではなく3Dオブジェクトに投影されるので、シームが目立たなくなります。

鉄だけだと寂しいのでさらに塗りつぶしレイヤーを追加して別のマテリアル(ここではPainted steel)を選びます。
[Paint Color]で色を赤くして、[Rust]でサビをちょっと足しました。


最初のマテリアル(下地)が見えなくなったので劣化させてペンキを剥がします。
[Shelf]の[Smart masks]にちょうど良さそうなPaint Oldというマスクがあるのでペンキのレイヤーに放り込みます。

思っていたのと逆の剥げ方をしたので[Global Invert]で効果を反転します。
上手く角が剥げたのでレイヤー名をわかりやすくしてペイント完了。


Second Life向けの仕上げ

サブペはPBR(材質をパラメータ化して物理的な計算をドーン)という仕組みで質感を出していますが、残念ながらSecond Lifeはこの仕組みに対応していません。

なのでそのまま色情報をテクスチャにすると悲しいことになります。
どんな感じになるかはCキーでBase Colorを表示すると…騙された感がすごい…

そこで質感を焼き付けるために[Shelf]の[Filters]からBaked Lighting Environmentをレイヤーの先頭に放り込みます。
ここから先はカラーマップに焼き付ける質感を調整するので、プレビューはMaterialではなくBase Colorのまま進めます(Materialだと二重にライティングされてしまう)。

映り込み用のテクスチャが未設定なので、Baked Lighting Environmentの[Properties]にある[Environment]からお好みで選択します。

設定したら引き続き[Properties]内でマテリアルや光源のパラメーターを納得がいくまでいじります。

最後に最初にベイクした際に生成されているAOマップを被せて擬似的な陰影をのせます。
塗りつぶしレイヤーを一番上に追加して[Base Color]にAOマップを読み込みます。

おかしなことになったと思うので、[UV Scale]を1:1にして、
[マテリアル]はcolor以外(height/rough/metal/nrm)をオフにします。

レイヤーの右上にあるモードを乗算(Mul)にすれば完成です。濃さはモードのすぐ下にある数字でお好みに調整。

テクスチャのエクスポート

あとはただ画像ファイルを書き出すだけですが、
せっかくサブペがいろいろな情報を持っているのでSecond Lifeの高度なライティングで使える(かもしれない)Normal MapとSpecular Map(凹凸と光沢)も出してみます。

[ファイル]-[Export Textures]でエクスポートダイアログを開きます。
[Configuration]タブで新規のプリセットを作成してRGBのマップを3つ作成。
Input MapsのBase Color、Converted mapsのNormal OpenGLとSpecularをそれぞれ作成したマップのRGBチャンネルに放り込んで完成。

※どのマップでもAlphaチャンネルを使っていないので、SLの仕様をフル活用した設定というものでは無いのでご了承ください。
【参考】http://wiki.secondlife.com/wiki/Material_Data

[エクスポート]タブに切り替えて、作成したSecondLifeテンプレートを選択。テクスチャサイズを出力したいサイズに変更しておきます。

エクスポートでテクスチャが完成!(Normal MapとSpecular Mapはペイント時にざっくり作業しすぎだと微妙なものが出来る可能性があります)

Second Lifeにアップロード

できた!

Normal MapとSpecular Mapの仕事ぶり。