リアルタイム系の3DCG制作に関するノウハウや実践的なTipsを共有するWiki形式のWEBサイトです。

そのノーマルマップ反転してませんか?

私はノーマルマップの仕様をよく知らなかった頃は
ライトをぐりぐり回して見た目で反転してないか、合ってるかチェックしていました。ごめんなさい。
という訳で、そんなノーマルマップを曖昧に理解している人のために解説を書きました。

ノーマルマップとは

RGBそれぞれのチャンネルにXYZの法線情報を持ったテクスチャです。
法線とは向き、つまりポリゴンにも向きがありますが、ノーマルマップを貼ることでより細かい凹凸が表現できます。
また、今回はタンジェントスペース形式のノーマルマップについて説明します。

OpenGL形式とDirectX形式

ノーマルマップにはOpenGL形式とDirectX形式の2タイプが存在します。
こちらは簡単に変換可能ですが、間違えると法線が反転してしまいます。

違いは、ノーマルマップのRGBチャンネルのうち、YつまりGチャンネルにあります。
OpenGLの場合テクスチャの↑を向いているピクセルは1.0(255)となり、↓を向いているピクセルは0.0(0)となります。正面向きは0.5(128)ですね。
DirectXの場合は逆で、↑が0.0(0)、↓が1.0(255)です。正面は0.5(128)で同じですね。
実際の画像ではこのようになります。
※このような凸型のハイポリを板ポリにベイクしています。

ノーマルマップの画像

左:OpenGL 右:DirectX

RGBチャンネルにそれぞれ分解すると下記のようになります。
Rチャンネル(X方向)

Gチャンネル(Y方向)

Bチャンネル(Z方向)
Gチャンネルのみ反転しているのが分かりますね。

ということなのでOpenGL形式のエンジン使ってるのにDirectX形式で作ってしまったというような場合はGチャンネルを階調反転させてやればとりあえずは使えます。
(フロー的にはノーマルマップを作成したツールまで戻ったほうがよいですが。あとで絶対忘れるので。)

各ソフト、ツールの設定

Unity、UE4
ゲームエンジンのノーマルマップタイプは下記のとおりです。
UnityOpenGL
Unreal Engine 4DirectX(Y反転のチェックボックスあり)
それぞれの形式に合わせてノーマルマップを出力しておきましょう。
UE4には反転機能があるのでUnityに合わせてOpenGL形式で作っても良さそうです。
SubstanceDesigner
SubstanceDesignerでは下記に設定があります。
3DView->Materials->Default->Edit
Material:NormalのDirectX Normal
Trueの場合はDirectX形式
Falseの場合はOpenGL形式となります。
また、ノードにもノーマルマップ関連のものは設定がありますので、どこかで反転しているということが無いよう気をつける必要があります。
SubstancePainter
新規のプロジェクトやProjectConfigurationにてNormal map formatという項目がありますのでまずここをチェック。

また、ノーマルをペイントするブラシについては注意が必要です。
これらのノーマルはプロジェクト設定と無関係だったりするので容易に反転しやがります。
そういう場合はペイントする前に下図の設定をしてみましょう。

▼ボタンのメニューから選択します。
ブラシの方のノーマルがDirectX形式の場合はDirect3D normalを選択する感じです。
これ、ブラシの元々の設定がどっちか分かんないので見た目で判断してます。
何かご存知の方は是非情報いただけるとありがたいですm(_ _)m

RGB=色?

余談ですが、このテクスチャに法線情報を書き込むって最初なんか違和感がありました。
だってRGBって色じゃないですか。ノーマルマップは一見人間の目にもそれっぽく見えるので余計に混乱しました。
でもメタリックやラフネスなんかを見ているうちに
「あーテクスチャっていうのは情報を格納するのに相性が良いから使ってるだけなんだなー」と分かってきました。
1枚のテクスチャを使えば、それぞれのピクセルに対してRGBAの最大4要素の数値を持たせることが出来るわけですね。
ゲームだったらRに温度とかGに水濡れの乾きにくさとか入れても良いわけで。
それがポリゴンだったらめちゃくちゃ分割しないとダメですし。テクスチャってすごい発明。
そう考えたら割とすんなり理解できたというか、機械に服従できた気がしました。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

※現在 ユーザーID保持者 のみがコメント投稿可能な設定になっています。

Wiki内検索

メニュー

Maya

管理人


管理者:kmj
Twitter:@kmj3dcg
ゲームグラフィックに携わり十数年、現在フリーランスのモデラーとして活動しています。
専門分野:モデリング、テクスチャ、ウェイト(キャラモデルがメインのゲームグラフィッカーです)
お問い合わせはこちらまでお願いいたします。

Amazonアソシエイト

皆様のご協力感謝しておりますm(_ _)m























管理人/副管理人のみ編集できます