2017年11月3日金曜日

Substance PainterのBaked Lighting EnvironmentでHard Surfacesを使う

Second Life(PBR非対応の環境)向けにSubstance Painterを活用するニッチな投稿その2.1です。

昨日ポストした
Substance PainterのBaked Lighting Environmentにマテリアルの凹凸を反映させる
で力尽きて書けなかった応用編です。
なのでやっていることは基本的に一緒です。

メッシュの表面にディテールを追加する

Substance Painterでメッシュの表面にディテールを追加するには
参照用のハイポリメッシュでモデリングしてNormalにベイクするという方法があります。

この方法だとWorld Space Normalsにもディテールの情報が焼き込まれるので
Baked Lighting Environmentにもそれなりに反映されます。

しかし、この方法は自由度が高い反面、
モデリング作業やベイクの調整などちょっと手間がかかります。

ShelfにあるHard Surfacesでディテールアップ

より手軽にメッシュの表面にディテールを追加する方法として
Substance PainterではNormalを直接描き込むことが出来ます。

では実際にやってみます。

レイヤに新規レイヤ(塗りつぶしレイヤではなく普通のレイヤ)を追加します。
つづいて[Shelf]-[Hard Surface]を開きます。

今回はブラシを使って手軽にペタペタしてみます。
ブラシはこんな設定にしてみました。

・スタンプ的に使うのでストローク関連の設定は不要
・同じ理由でAlphaも不要なので設定されていたら右上の×で消す
・マテリアルはNormal(nrm)以外オフにする
・Normalに先ほど開いた[Shelf]-[Hard Surface]から使いたいものを放り込む

ブラシを当てるとこうなるので…


ペタッ


ついでに別のをもう一個ペタッ


MatFx Detail Edge Wearを使って
描き足したNormalのエッジにダメージを追加

お手軽!(しかし…)

Baked Lighting EnvironmentでBase Colorに焼き込む

お察しの通りBaked Lighting Environmentを適用してBase Colorを見ると…

うわぁ…

壁にスプレーで描いたみたいになってます。
(これはこれで意図的に使えばありかもしれない)

Base Colorに描き足したNormalを反映

今回の問題も前回と同じで
追加した凹凸がBaked Lighting Environmentに反映されない
というやつなので解決方法も一緒です。

尚、MatFx Detail Edge Wearのレイヤーを追加している場合は
以降の手順で不要になるので消しておきます。

前回と同じ手順でNormal Mapをエクスポート&インポートして再ベイク!


できた!






2017年11月2日木曜日

Substance PainterのBaked Lighting Environmentにマテリアルの凹凸を反映させる

Second Life(PBR非対応の環境)向けにSubstance Painterを活用するニッチな投稿その2です。

その1の「Substance PainterでSecond Life向けのテクスチャを出力する手順
でペイントをしていると、光沢弱めで凹凸が強いマテリアル(布とか)で
出力結果がのっぺりとした残念な感じになることがあると思います。

今回はそこをなんとなく良い感じにしてみます。

布っぽいマテリアルで塗ったオブジェクトを用意


上記の例では新規プロジェクトで読み込んだメッシュにAdditional Mapのベイクをして、
[Shelf]の[Smart Materials]にあるFabric Dobby Agedをレイヤウィンドウに放り込んでいます。

Material表示なので良い感じに表示されています。

Baked Lighting EnvironmentでBase Colorに質感を焼き付け

手順はその1の記事を参照。
Base Colorで表示するとこうなります。

せっかく質感を焼き付けたのに、なんだかのっぺりしてしまいました。

のっぺりした理由と解決方法

手順だけ知りたい場合は読み飛ばして大丈夫です。

Baked Lighting Environmentフィルターは
PBR未対応の環境にPBRテクスチャを流用するために
Base Colorに質感を焼き付けてくれるという超SL向けなフィルターです。

このフィルターが質感を焼き付ける際に参照する形状情報は
Additional Mapの
・曲率(Curvature)
・ワールド空間法線(World Space Normals)
という2つのマップから取得しているようです
(画像はBaked Lighting Environmentフィルターのプロパティ)

これらのマップはペイントするメッシュ(とハイポリメッシュ)から生成されているので
あとからペイントしたマテリアルなどの凹凸は反映されません。

そんなわけで今回の例では平面に光が当たったような結果になっています(たぶん)。

これを解決するためにペイントした凹凸をなんとかぶっ込みたいと思います。

具体的には…
Additional MapのベイクでNormal Mapを作る代わりに
ペイントで追加された凹凸を反映したNormal Mapをエクスポートして
それ読み込んでベイクすることでワールド空間法線(World Space Normals)にペイントした凹凸を反映します。

ペイントした凹凸をNormal Mapとしてエクスポート

まずは今編集しているプロジェクトの法線マップフォーマットを確認します。
[編集]の[Project Configration]から確認できます。

この例ではDirectXになってます。

確認したら[ファイル]-[Export Textures]の[Configuration]で
Normal Mapをエクスポートする設定を作りましょう。

RGBのマップを1つ作成してConverted Mapsから
さっき確認した法線マップフォーマットに対応したマップ
(Normal DirectX/Normal OpenGL)をRGBチャンネルに放り込みます。

間違えると凹凸が逆になるので気をつけましょう。

できたら[エクスポート]タブに切り替えて、作成したテンプレートを選択。
[エクスポート]ボタンを押してペイントした凹凸入りのNormal Mapが完成です。


エクスポートしたNormal Mapをインポートして再ベイク

作成したNormal Mapのファイルを[Shelf]に放り込むと
リソースをインポートするダイアログが開きます。

ファイル名の右にある[undefined]を[texture]に変更し、
右下のImport your resources toでproject~を選択して現在のプロジェクトにImportします。

つづいて[TextureSet Settings]タブにある
Normal Mapをクリックしてインポートしたものに変更します。


変更したらすぐ上の[Bake textures]でBakingダイアログを開きます。

今回はインポートしたNormal Mapを使いたいので[通常]からチェックを外して[Bake~textures]を実行します。
(Normalの和訳が法線と通常で混在してて紛らわしい)

テテーン

Base Colorに凹凸がついた!
でもまだちょっとつづく。

SLにNormal Mapもアップロードして使う場合の補足

今回の手順を実行するとAdditional Mapにペイントした凹凸がベイクされるので、
そのままだと凹凸が二重に適用されてしまいます。

なのでNormal MapをエクスポートしてSL内で使う場合は
各レイヤの[高さ]チャンネルと[Normal]チャンネルを0にしておきましょう。
(左上でチャンネル切り替え、レイヤの右下で数値の変更)



デメリットについて

この手順でベイクをすると、Normal Mapをエクスポートした時点の状態で凹凸が固定されてしまいます。
なのでそれらに影響する変更を行った場合は同じ手順を行う必要があります。
(再度エクスポートする時はこの直前で0にした数値を戻すのも忘れずに)

要するに塗り替えや質感の変更が気軽に出来なくなります。
超めんどくさい。

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の仕事ぶり。