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にした数値を戻すのも忘れずに)

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