対応するシェーダーで、凹凸をグレースケールの高さとして制作・調整したい場合はバンプマップを使います。ベイク済みのゲーム用アセットなど、出力先が明示的な表面方向を求める場合は接線空間の法線マップを使います。 輪郭や実際の奥行きが重要な場合は、ジオメトリや実際のディスプレイスメントが必要です。
グレースケールのバンプマップは高さを、法線マップは方向を記録します。どちらもメッシュを動かさずに陰影を変えます。同じ高さ画像から作った法線マップに、自動的により多くの表面ディテールが含まれるわけではありません。また、バンプマッピングも動く光源に反応します。
2つの手法を比較した方法
このガイドでは、UV展開済みの表面に、メッシュを保ったまま浅い凹凸を追加する作業を比較します。制作方法、記録する情報、組み込み、合成、失敗の原因を評価します。Blender 4.5 LTSとUnity 6のドキュメントは2026年10月22日に確認しました。
独自の図では、両経路に同じ周期的な高さフィールド、微分スケール、光源、陰影関数を使っています。一方は計算した法線を直接使い、もう一方は8ビットRGBに符号化してから復号し、正規化して陰影を計算します。これにより表現形式の違いを切り分けています。Blenderのレンダー、ベイク品質のテスト、GPUベンチマークではありません。
SeamlessCanvasは私たちが提供するサービスです。以下では写真から推定するマップを出発点として紹介しますが、対象メッシュに合わせたハイポリからローポリへのベイクを置き換えるものではありません。
左に高さ、その隣に符号化した法線を示しています。最後の2枚は同等の元勾配を使うため、小さな数値差はRGBの量子化に由来します。実際のプロジェクトでは、レンダラーのフィルタリングや接線の扱いによって別の差が生じる場合があります。
完了させたい作業から選ぶ
| 作業 | 最初に選びたい方法 | 主な理由と限界 |
|---|---|---|
| Blenderで浅い傷、毛穴、プロシージャルな粒子を描く | 高さをBumpに接続 | 編集とスケール調整が容易。最終的な見え方はバンプのフィルタリングやマッピングに依存 |
| スカルプトの細部をローポリのゲーム用メッシュに転写する | ベイクした接線空間の法線マップ | 対象メッシュを基準に方向を記録。互換性のあるUVと接線が必要 |
| UnityのNormal Map入力に凹凸を渡す | 接線空間の法線マップ | シェーダーが想定する入力形式に合う。グレースケールは先に変換が必要 |
| ベイクした面取りに独立した細かな粒子を加える | ベイク済み法線と独立したバンプ/ディテール法線 | 2段階の編集可能なディテールを保持。同じ凹凸の二重適用を避ける |
| レンガの縁、溝、崖の輪郭を突き出させる | ジオメトリまたはディスプレイスメント | 形状を変える。バンプと法線だけでは輪郭は変わらない |
| 均一な照明で撮った1枚の素材写真から始める | 推定した高さと法線の組み合わせ | 下案に便利。ただし色素や照明を形状と誤認する可能性がある |
ここに有益な総合点はありません。描いた高さフィールド、スカルプトのベイク、写真からの推定では情報源が異なります。法線側だけに精細なスカルプトを与えて「法線の勝ち」とする画像比較では、マップ方式自体を切り分けられません。
バンプマップが記録するもの
この文章でいう「バンプマップ」は、陰影計算に使うスカラーの高さテクスチャです。一般に白が高く、黒が低い部分を表しますが、反転設定やシェーダーのスケールに左右されます。シェーダーは高さの変化をサンプリングし、陰影用の法線を傾けます。
BlenderのBumpノードにはHeight、Strength、Distance、Normal入力があります。グレースケールでの描画やプロシージャルな高さが便利なのは、ベクトルを示す色を手で直さずに高さのパターンを変えられるためです。
重要なのは単独の明るさではなく、傾きです。全面が同じ白でも黒でも高さ勾配はゼロなので、通常のバンプだけの構成では凹凸が生まれません。すべての高さ値に同じ定数を加えても勾配は変わりません。コントラストを上げると勾配が変わり、効果が強くなる場合があります。
バンプマップは本質的に縦方向の照明だけに限定されるものではありません。テクスチャの両方向の微分から傾いた法線が生じ、異なる方向の光に反応します。制約は、スカラーの高さフィールドで表現すること、フィルタリング、そして追加したディテールの尺度では元の表面が平面のままであることに由来します。
グレースケールだからといって「必ず8ビット」というわけでもありません。高さにはより高い精度を使えます。Blenderのディスプレイスメントガイドでは、特に勾配に段差が見える場合、16または32ビット浮動小数点のバンプ画像が、一般的な8ビット画像より良い結果を得られることを説明しています。
法線マップが記録するもの
法線マップは方向ベクトルを符号化します。一般的な接線空間マップでは赤と緑が局所的な接線方向、青が外向き方向を表します。符号なし8ビットRGB画像の約(128, 128, 255)が、よく知られた平坦な法線です。
BlenderのNormal Mapノードは、この画像を陰影用の法線に変換します。公式資料では、接線空間マップに対応したUV座標とNon-Colorでの画像解釈を求めています。
由来は2つに分けて考えられます。高さから作る法線マップは、その高さフィールドの勾配を記録します。精細なメッシュからベイクする法線マップは、別の表面の方向を対象メッシュ基準で記録し、写真には存在しない情報も持てます。どちらもローポリメッシュに元の表面の実際のシルエットを与えるわけではありません。
オブジェクト空間の法線マップは別の基準座標を使い、より多彩な色に見えることがあります。ファイル名が法線マップだからという理由だけでTangentを選ばず、どのように制作されたアセットか確認してください。
Blenderでどちらのマップも正しく接続する
凹凸を設定する間はベースカラーとラフネスを一定にします。UV展開した平面か簡単な丸い物体と、1つのエリアライトを使うと、凹凸の経路を変えた効果が分かりやすくなります。
これは接続図であり、UIのスクリーンショットではありません。高さはBump: Height、RGB法線はNormal Map: Colorに入ります。どちらも最終的にシェーダーへNormalを出力します。
経路A:グレースケールの高さをBumpへ接続
- Image Textureを追加し、高さマップを開いてColor Space: Non-Colorにします。
- Image Texture: Color → Bump: Heightを接続します。
- Bump: Normal → Principled BSDF: Normalを接続します。
- 物体の尺度に合う小さなDistanceから始めます。凹凸が見えるまで上げ、稜線が膨らんで見えたら下げます。Strengthは効果の混合量、Distanceは高さの倍率です。
- 盛り上がりがへこんで見えたら既知の特徴と比較し、適切ならBumpのInvertを使います。
経路B:RGB画像をNormal Mapへ接続
- 別のImage Textureを追加し、法線画像を開いてColor Space: Non-Colorにします。
- Image Texture: Color → Normal Map: Colorを接続します。
- 接線空間で作られたマップならTangentを選び、制作時のUVマップを使います。
- Normal Map: Normal → Principled BSDF: Normalを接続します。
- 既存アセットを評価するときはStrength 1から始めます。見え方が違う場合は強くする前に色空間、向き、UV、接線の互換性を確認します。
Blenderのカラーマネジメントガイドでは、これらの数値データ画像に色変換をかけない理由を説明しています。通常のベースカラー画像は一般にsRGB経路のままです。
同じディテールを重ねず、独立した情報を合成する
既存の法線マップに新しい細かな粒子を加えるには、Normal Map: Normal → Bump: Normalを接続し、独立した粒子の高さをBump: Heightへ入れ、Bump: Normal → Principled BSDF: Normalをつなぎます。
各入力の役割を区別できるようにします。法線マップがまったく同じ高さマップから生成された場合、その高さを追加すると通常は同じ凹凸を誇張します。各経路を順に外し、何を加えているか確認してください。2つの方向フィールドを混ぜるためにRGB法線マップの色を平均しないでください。法線合成用の方法を使うか、適切なら変換前に高さ情報を合成します。
Unityで法線の規約を合わせる
Unityの法線マップの紹介では、OpenGL形式と呼ばれることが多いY+法線マップを指定しています。テクスチャの書き出しでいう「DirectX」は通常、その逆の緑チャンネル規約です。規約を示す名前であり、特定のグラフィックスAPIでしか使えないという意味ではありません。
既存のRGB法線画像は、インポーターでTexture Type: Normal mapを選び、設定を適用します。すでに符号化されている法線マップに対しては、グレースケール変換を無効にしてください。読み込んだアセットをマテリアルのNormal Map入力に割り当てます。
実際のグレースケール高さ画像には、UnityのNormal Mapインポート設定にあるCreate From Grayscaleと、Bumpinessやフィルタリングの設定を使えます。これは高さから法線情報を作ります。グレースケールファイルの名前を変えるだけでは変換されません。
規約が合わない場合は、インポーターのFlip Green Channelを使えます。反転前に、既知の盛り上がりを上下からの光で確認してください。緑チャンネルの反転は方向成分を1つ変えるもので、誤ったUV、オブジェクト空間マップ、あらゆる凹凸の逆転を解決するものではありません。これらはUnityインポーターの設定です。生成ツールから書き出すときも規約を再確認してください。
変換、画像品質、パフォーマンスの限界
高さから法線への変換は局所勾配を計算し、得られたベクトルを符号化します。強度とピクセル間隔が重要です。高さ画像のサイズやUVスケールを変えると同じ変換でも見え方が変わるため、想定する解像度と表面スケールで比較します。
法線から高さへの変換は復元問題です。法線マップには絶対的な高さが含まれず、編集またはベイクされた方向フィールドが、全体として整合する1つの高さフィールドに対応しない場合もあります。復元した高さはずれたり、細部を失ったりします。元の高さやスカルプトがあるなら保存してください。
可能なら可逆圧縮の元ファイルを使います。強い圧縮は高さに稜線を作ったり、法線方向を乱したりするため、データとしての読み込みと適切な法線マップ圧縮は拡張子と同じくらい重要です。
「バンプのほうが速い」という一律の規則で選ばないでください。実行コストはシェーダーの実装、サンプル、微分、テクスチャ形式、圧縮、解像度、ハードウェアに依存します。元画像が1チャンネルでも、エンジンで圧縮された法線マップより最終的なメモリ使用量が少ないとは限りません。このガイドでは時間やメモリのベンチマークを行っていません。納品に影響する差なら実際の対象環境で計測してください。
症状から原因を調べる
| 症状 | 最初に確認すること | 試すこと |
|---|---|---|
| グレースケール画像で不自然な色の照明になる | 復号経路の誤り | Bump: Heightを使うか、RGB法線マップへ変換する |
| 表面が膨らむ、または深く彫り込まれる | 強すぎる設定や高さの二重適用 | 凹凸の経路を1つにし、高さスケールを下げる |
| 縦方向の照明だけが逆に見える | Y方向の規約 | 既知の特徴を確認し、緑チャンネルの反転を1回試す |
| ベイクしたアセットに継ぎ目が出る | UV配置、余白、接線基底、メッシュ変更 | ベイク対象の三角形分割と互換性のある接線を保ち、必要なら再ベイクする |
| 中央は細かいのに輪郭が平ら | 陰影だけを変える手法 | 端をモデル化するか、正しく設定したディスプレイスメントを使う |
| 描かれた文字が盛り上がった稜線になる | 色を高さとして解釈している | 色素由来の凹凸を元の高さマップから除く |
実際のディスプレイスメントは表面位置を変え、適切なジオメトリとレンダラー設定を必要とします。Blenderのディスプレイスメント資料は、実変位とバンプによる陰影を区別しています。法線を強くしても、欠けている視差、本当の穴、変位したシルエットは復元できません。
適した用途なら、写真から推定した組み合わせで始める
SeamlessCanvasの写真からPBRを作るツールは、ログイン後に無料でマップを生成します。現在の高さ出力は画像の輝度と局所変化から凹凸を推定し、法線出力はその推定高さから方向を求めます。見えていないハイポリメッシュを調べるわけではありません。
きれいな画像から石、木、布のマテリアルを試す用途に使います。まず、生成した高さをBumpへ渡すか、生成した法線をNormal Mapへ渡すか、どちらか一方から始めてください。動く光の下で確認し、影や色の模様による偽の凹凸を除いて、出力先が対応する経路を選びます。
キャラクターのスカルプト、ハードサーフェスのベイク、正確なローポリ構造に陰影が依存するアセットでは、専用のベイク工程を使います。凹凸ではなく反射の仕上がりについては、別のラフネスマップガイドを参照してください。
よくある質問
法線マップは常に正確ですか?
いいえ。情報源が重要です。精細なスカルプトのベイクは単純な高さ画像にない方向を記録できますが、同じ高さ画像をRGBへ変換しても新しい形状は発見されません。インポートの誤りは、どちらの経路も悪く見せる原因になります。
バンプマップを法線マップの入力欄に入れられますか?
入力欄がRGBで符号化した方向を求めるなら先に変換します。Blenderはグレースケールの高さをBumpで評価し、UnityはインポーターのCreate From Grayscaleで高さを変換できます。
生成したセットの両方のマップを使うべきですか?
意図した合成で別の情報を与えるなら両方を使います。法線が同梱の高さから生成された場合は、凹凸の経路を1つにして始め、必要なときだけ独立したディテールを追加します。
どちらかでシルエットは変わりますか?
いいえ。どちらもメッシュを保ったまま陰影用の法線を変えます。目に見える端の奥行きや形状の変化には、ジオメトリまたは実際のディスプレイスメントを使ってください。
公式資料
- Blender 4.5 Bumpノード — 高さから求める陰影法線と各設定。
- Blender 4.5 Normal Mapノード — 方向の復号、空間、UVの要件。
- Blender 4.5 カラーマネジメント — 数値画像データ。
- Blender 4.5 ディスプレイスメント — 陰影上の凹凸と実際の表面変位。
- Unity 6 法線マップの紹介 — 法線マッピングとY+規約。
- Unity 6 Normal Mapインポート設定 — グレースケール変換と緑チャンネル反転。