ノーマルマップはOpenGLかDirectXか · 判定と変換
出っ張りがへこんで見える、光が逆から当たって見えるときは、ノーマルマップの緑(G)チャンネルの規約がエンジンと逆なことがほとんどです。GodotとUnityはOpenGL形式(Y+)、UnrealはDirectX形式(Y−)を読みます。ファイル名や目視の判断は意外とよく外れます。

- Godot 4 2D lights検証済み· Godot 4.7.2
- Unity 6 URP 2D検証済み· Unity 6000.5.3f1 (URP 17.5)
- PNG set + JSON通常ファイル
できること
- チェックパネルは表面そのものから規約を測ります。OpenGLとして読んだとき実在の表面なら傾きどうしが矛盾せず、DirectXのマップはそれを測れる形で崩します。
- スプライトではシルエットによる独立した2つ目の検査も。縁の法線は外を向くはずで、2つの検査が一致すると信頼度が上がります。
- 判定には信頼度と根拠を表示。斜めの起伏がない平らなマップは推測せず判定なしに。「OpenGL です/DirectX です」を押すまで何も変わりません。
- スプライトでは反転した赤(R)チャンネルも検出し、Flip red(X−)で修正。透明な縁のないテクスチャでは赤と緑を区別できず、パネルがそう伝えます。
- 両方の規約で書き出し。PNGセットに_n(OpenGL)と_n_dx(DirectX)、または片方だけの法線マップPNG 1枚。
使い方
- テクスチャ作業画面に画像とそのノーマルマップを入れる。
- 法線マップパネルでソースを読み込んだノーマルマップにする。
- チェックパネルで判定、信頼度、根拠を読む。
- 「OpenGL です」か「DirectX です」を押し(指摘があればFlip redも)、Cでフラットとライティングを比較。
- エンジンが読む規約で、または両方入りのPNGセットで書き出す。
エンジンごとに使うノーマルマップ
| エンジン・入手元 | 緑の規約 | Studioから使うファイル |
|---|---|---|
| Godot 4 | OpenGL(Y+) | _n.png、またはGodot 4バンドル(CanvasTextureとライト付きシーン) |
| Unity(URP 2D) | OpenGL(Y+) | _n.png、またはUnity 6バンドル(Secondary Texture _NormalMap) |
| Unreal Engine | DirectX(Y−) | _n_dx.png |
| ambientCGのダウンロード | NormalGL = OpenGL、NormalDX = DirectX | GodotとUnityにはNormalGL |
| 出どころ不明のマップ | チェックパネルで測定 | 判定を確定してからどちらかを書き出し |
| 赤が逆のスプライト用マップ | 赤反転(X−) | Flip red(X−)の後で書き出し |
エンジン別の書き出しと検証方法
「検証済み」は、実際のCC0アセットから書き出したファイルを本物のエンジン・ツールで読み込み、元データと比較したという意味です。読み込んでいない形式はそのように表示します。
| 書き出し先 | ファイル | 検証 |
|---|---|---|
| Godot 4 2D lights | _lit.tscn · CanvasTexture .tres · normal / specular PNG | 検証済み Godot 4.7.2実在のCC0ケース6件をGodot(gl_compatibility)で描画し、確認した全フレームがStudioのライティングプレビューと1/255以内で一致。緑を反転した同じ描画は3.8〜37段階ずれるため、規約の誤りを検出できます。 |
| Unity 6 URP 2D | PNG · nerulio-texture.json · Editor/NerulioNormalMapImporter.cs | 検証済み Unity 6000.5.3f1 (URP 17.5)12回中12回合格(6ケース×ガンマ・リニア色空間):URPが適用したライティングが書き出したノーマルマップと一致(平均誤差0.0037〜0.0085)。光の減衰はURP独自なので、明るさはプレビューではなくUnityの基準です。 |
| PNG set + JSON | albedo · _n (OpenGL) · _n_dx (DirectX) · 16-bit height · AO · specular · manifest | 通常ファイルどのエンジン・ツールでも使える通常ファイルで、エンジンでの実行検証はうたっていません。 |
検証の根拠
Godot 4.7.2で実在のCC0ケース6件(ドット絵、HDスプライト、繰り返しテクスチャ、読み込んだDirectXマップ)を描画し、確認した全フレームがStudioのプレビューと1/255以内。Unity 6000.5 URP 2D:12回中12回合格(6ケース×ガンマ・リニア)。規約が分かっている実在のマップでOpenGL/DirectX判定:1Kのマップ128枚で100%正解、1,562サンプル中で誤った「高」判定は0件(「緑が明るければOpenGL」という単純な規則は46%)。
制限
- 透明な縁がない絵(繰り返しテクスチャ)では、赤の反転とDirectXの緑を区別できません。チェックパネルがそれを伝え、「赤を反転」を用意しています。
- シートはスプライト作業画面でフレームを切るまで1枚の絵としてライティングされます。テクスチャ作業画面ではフレームを切りません。
- リムライトはプレビュー専用で、Unityにはスペキュラーマップを書き出しません(Godotには書き出し)。
- Unityは独自の光の減衰を使います。書き出したノーマルマップはUnityで検証済みですが、明るさの曲線はUnityのものです。
よくある質問
Godot・Unity・Unrealはどちらの規約?
GodotとUnityはOpenGL形式(Y+)、UnrealはDirectX形式(Y−)です。StudioのGodot 4とUnity 6向け書き出しはOpenGLで、Godot 4.7.2とUnity 6000.5.3f1で想定どおりに照らされることを確認しました。
判定はどれくらい当たる?
規約が分かっている実在のマップで測定:1Kマップ128枚で100 %、256²の切り出しは判定した分の100 %(99.2 %で判定)、64²は99.6 %、スプライト213フレームで100 %。1,562サンプルで誤った「高」判定は0件。「緑が明るければOpenGL」という単純な規則は46 %でした。
DirectXと分かっているなら緑を反転するだけでいい?
はい。下のリンクの従来のテクスチャ工房のページで緑を一度に反転できます。チェックパネルは確信のないファイル向けで、変える前にライティング結果を見せます。
赤が反転していると出るのはなぜ?
赤を逆に書く生成ツールがあります(NormalMap-Onlineの既定出力もそうです)。スプライトではシルエットで赤を別に測るため、判定は緑について、赤は別に報告し、信頼度は「中」までに抑えます。
無料ですか?アカウントは必要ですか?
このページの機能はすべて無料で、アカウントなしで使えます。透かしや制限された書き出しはありません。
スプライトはアップロードされますか?
いいえ。Studioはこのブラウザのタブ内でデコード・パック・書き出しを行います。プロジェクトはブラウザ(IndexedDB)に自動保存され、.nerulioファイルとして保存できます。
Asepriteやエンジンのプラグインは必要ですか?
いいえ。.asepriteファイルはブラウザで読み書きします。エンジン別のバンドルには必要なものが入っています(Godotはインポート設定とシーン、UnityとGodotのタイルセットは小さなエディタースクリプト)。