シムズ4でのノーマルマップの向きを試してみました

表題のとおりなんですが、ノーマルマップをシムズ4で使用するときに使うツールによっては法線の向きがシムズと逆の場合があり、実際ゲーム上で表示してみるとおかしな結果になってしまう事があります。
複数のツールを使用していたりすると、どれがどういった設定でノーマルマップを吐き出せばいいんだっけ??…といった感じで混乱する事甚だしいのであります。

いきなり前置きも無しにノーマルマップに関する文句を書き始めてしまったので、ちょっと恐縮な思いがします。なので一旦後の説明のためにもシムズのノーマルマップに関して軽く書いておきますと…
通常ノーマルマップを作成すると以下のような画像が吐き出されると思います。

チャンネルはR(レッド)がX方向の法線成分、シムズだと主に横からのライトが当たったりしている所で凸凹に見えます。
チャンネルG(グリーン)がY方向の法線成分、主に上からライトが当たってるときの凸凹です。
チャンネルB(ブルー)はZ方向です。シムズでは使用しません。

これをシムズで使用できる形に弄るとこんな感じになると思います。

チャンネルRを新たに作成したアルファチャンネルにコピーし、チャンネルGをRGBの各チャンネルにコピー、といった感じでチャンネルをスワップします。
RGBに同じ画像が入っているのでグレーに見えますが、チャンネル自体はそのまま残っているので、グレースケール画像にしている訳ではなくRGB画像です。

以下、便宜上「チャンネルR=シムズ用ノーマルマップではアルファチャンネル」をX、
「チャンネルG=シムズ用ではRGBチャンネル」をY、
として書かせていただくとこにします。
と宣言しないと書いてる本人も混乱します…

さらにややこしいことに、このノーマルマップ作成時にツールによって吐き出されるXとY成分が逆になっていたりします。
これはシムズ用にノーマルマップを変換する際、もしくはツールによって反転が可能であれば反転をして吐きだす必要があります。

そこで、どれがどこを反転すればいいのかテストデータを作って確認してみました。
使用ツールとノーマルマップ作成方法は以下の通りです。

  • Photoshop CC 「法線マップを生成」フィルター
  • Blenderで作った凹凸データからノーマルマップをベイク
  • ZBrushでスカルプトした凹凸からノーマルマップを作成
  • Substance Painterでノーマルマップを作成
    こちらのツールはノーマルマップの設定としてOpenGL方式かDirectX方式かを選択できます。両方試してみました。
  • Normal Map-Online http://cpetry.github.io/NormalMap-Online/
    ブラウザー上で、画像をドラッグ&ドロップでノーマルマップ、AO、ディスプレイスメントマップ等の作成ができます。

以上、自身の使ってるもののみで恐縮ですが…
またNVIDIAのPhotoshop Plug-inのNormal map filterはシムズでは使ってるかたも多いし、InvertYにチェックを入れる、つまりYを反転するというのは恐らくよく知られてる情報だと思うので割愛します。

さて、各ツールで初期設定(反転のオプションがある場合チェックせずに)でノーマルマップを以下のように吐き出して

元のTシャツのノーマルマップと合成してシムズ用マップに変換し、ノーマルマップのみ書き換えたリカラー?を作成しました。

インゲームで確認した結果がこちらです。いずれの絵も凸状態で表示される前提で作っています。

Photoshop 法線マップを生成フィルター
Xは狙ったとおりの向きですが、Yが逆です。凹に見えてしまってます。

Blenderでノーマルマップをベイク
X、Y共に光源とバッチリ向きがあってます。

Zbrushからノーマルマップ作成
Photoshopと同じく、XはOKですが、上下、つまりYが逆です。

Substance Painterでノーマルマップをエクスポート
設定OpenGLで吐き出しました。XYともにOKです。光源と凹凸が合ってます。

同じくSubstance Painter
設定DirectXで吐き出してみました。PS、Zbrushと同様、Yが逆になってます。

Normal Map-Onlineで作成
今回の中では唯一、Xのみが反転してます。YはOKです。

以上の結果から、以下の感じの設定でノーマルマップを作成すればシムズ上で正しく反映されるのかな、と思います。

  • Photoshop→法線ディティールの項目の中の『反転の高さ』にチェックを入れる
  • Blender→そのままでOK
  • Zbrush→FilpGにチェックを入れてからCreate Normal Map
  • Substance Painter OpenGLでノーマル作成またはOpenGL方式でノーマルマップを作成するその他のツール
    →そのままでOK
  • Substance Painter DirectXでノーマル作成またはDirectX方式でノーマルマップを作成するその他のツール
    →OpenGLで吐き出せるならそちらで。またはツールにY反転があればチェック、それも無理ならエクポート後Yを反転(後述)
  • Normal Map-Online→Invert Rにチェックを入れる

各ツールの設定で予め反転できるオプションが用意されていればそちらで設定して吐き出せばOKですが、無い場合、Photoshop等画像編集ツールで手動で反転できます。

各ツールからエクスポートしたノーマルマップを反転したいチャンネルのみ選択した状態にします。
Xが逆ならR(レッド)をYならG(グリーン)です。

イメージ→モード→階調の反転を選択します。
ノーマルマップは50%グレー(127)を真ん中にして法線の傾きを定義する値を階調で持っています。なので、階調の反転を選択して値の正負を逆転させています。
ツールから吐き出されたノーマルマップは大概凸凹を指定しない箇所は50%くらいのグレーになって吐き出されていると思うので問題ないと思いますが、反転する画像が極端に暗いグレーや明るいグレーになっていないか確認するといいかと思います。
ぶっちゃけあまり極端でなければ、見た目わからない程度なので値のずれに神経質になる必要はないと思いますが、ウエストとか首などの繋ぎ目であまりにノーマルマップのグレーの値がずれていると色が違って見えたりする不具合になる可能性があります。
あと、あまりにグレーの値がずれていると上記の反転技が使えません。

とりあえずなんのまとめも無しに以上でございます!
では、楽しいノーマルマップ制作を!…?

保存

保存

保存

保存

保存

保存

保存