2014年10月5日日曜日

[Tips]NormalMapのGチャンネルが反転する問題の解決

先日Substanceテクスチャワークフローのセミナーに参加したところ、NormalMapの反転の解決方法について知ることができたので、追記をさせていただきます。

多分、これが一番正しい修正方法。
元の投稿も何かの役に立つと思うので残しておきます。

NormalMapが反転する原因はベイクした環境はOpenGLかDirectXかによって異なるそうです。
これを3DViewの設定で変更することができます。

Materials>Default>Edit で3DViewの設定画面を開きます。


デフォルトではDirectXがTrueで有効になっています。






DirectX NormalをFalseにすることで3DViewで正しく見ることができます。




ボーンデジタルの方曰く、ZbrushからベイクしたNormalはOpenGLだそうで、
そうすると、MayaもOpenGLってことでいいのかな?

Normal編集に関係するノードを使用する場合にもNormalのフォーマットを指定する箇所があるので、メインで読み込んでいるNormalに合わせてOpenGLかDirectXかを選択しておいたほうがいいのかなと思います。

これはHeight Normal Blendノードですが、パラメーターの中でフォーマットの変更ができます。



これでひとまず、Normalの反転は解決できそうかな。






(古い投稿)

xNormalやMayaからベイクしたNormalmapをSDに持って行くと表示がおかしいと感じていたので調べてみました。

MayaでベイクしたNormalmapは以下の様なもの。















MayaでNormalを貼った結果は以下のとおり、正しく凸で表示されています。


















同じテクスチャをSDに貼ったものは以下のとおり。
明らかに反転して凹んで見えます。
















SubstanceDesignerはデフォルトでGチャンネルが反転してしまうようなので、
ベイクするソフトによってはNormalを反転させる必要があるようです。

で、その反転の仕方ですが、設定でできるかなと思ったのですがどうやらないみたいなので、
ノードをつないで修正します。



Normalmapの反転の仕方

反転の方法はすごく簡単。
Levelノードを追加し、Gチャンネルの下の▲を白と黒の位置を逆に入れ替えるだけです。







結果は以下の通り、正しく出るようになりました。





簡単なノードの接続で解決できますがちょっと面倒ですね。
UE4はSDと同じようにGチャンネルが反転するので都合がいいかもしれないですが、
個人的にはNormalmapのGチャンネルフリップは統一させたいので、
xNormalから直接出したものと、SDから出したもので混合するような場合は面倒だなと…。


Forum:Convert normal map from DirectX to OpenGL

0 コメント:

コメントを投稿