バンプマッピング(英: Bump mapping、バンプマップ)は、レンダリングするオブジェクトの面の法線に対する揺らぎをハイトマップ(高低マップ)で調べて、光源計算の完了前に各ピクセルに対して適用する、CGの技術である(具体例はフォンシェーディングを参照)。出力結果はより豊かで細かくなり、自然界に固有の細やかさにぐっと近いものとなる。
ジム・ブリンが1978年に公表した。
ゲームなどの3DCG表現において、2000年代以降はバンプマッピングよりも高度な法線マッピングが一般的に使われている。「高さ」の情報しか保持できないバンプマップに対し、法線マップではx・y・zの各「方向」の情報を保持できるので、より正確な表現ができる。しかし、法線マップは何らかの専門ツールを使って出力する必要があるのに対し、バンプマップはペイントソフトなどを使って手描きで簡易に制作できるメリットがある。
2010年代以降のゲームでは視差マッピング (parallax mapping) のようなさらに高度な手法も一般的に使われている。バンプマッピングや法線マッピングでは、オブジェクトのテクスチャの位置はそのままで濃淡を変化させて陰影を表現するだけだったので、大きな凹凸を表現する際はかなり不自然な結果となったのに対し、視差マッピングではオブジェクトのテクスチャの座標をずらして表示するので、より正確な表現ができる。しかし、バンプマッピング、法線マッピング、視差マッピングのいずれでも、オブジェクトの形状自体は元のオブジェクトそのままであり、そのためオブジェクトのシルエットは変化しない。そのためリアルな表現ができる視差マッピングでも、オブジェクトのシルエットの付近の表現は不自然な結果となる。
2010年代のゲームでは負荷が高すぎるために使われていないが、映像などのプリレンダリングCGなどではさらに高度なディスプレースメントマッピングも一般的に使われている。バンプマッピングでは面の法線を変化させ光の当たり具合を変えて、あたかも凹凸があるかのように見せているだけであり、幾何学的な形状は元のオブジェクトそのままだったが、ディスプレースメントマッピングではオブジェクトの形状自体を変化させるので、より正確な表現ができる。
3D CGのプログラマはバンプマッピングをシミュレートするために算術的に低コストな疑似バンプマッピング技術を使うことがある。面の法線を書き換えるのではなくテクセルのインデックスを書き換える手法があり、'2D'のバンプマッピングでよく使われる。NVIDIA GeForce 2クラスのGPUではハードウェアレベルでこの技術を実装している。
非常に単純かつ高速なレンダリングのループで簡単に実装できる全画面2D疑似バンプマッピングは1990年代のデモプログラムで視覚効果として多用された。
正式なバンプマッピングではハイトマップを決めて各ピクセルの計算用ベクトルを利用する。全てのピクセルに対してXとYの勾配を計算するためにはわずかなコードの追加だけで実装でき、より複雑な実装法もある(最終目的は傾斜を計算するということであり、コードの複雑さは重要ではない)。次にコードは法線を正しく調整するための法線情報が収められたバンプマップのU軸とV軸の情報でこれらの点計算を揃えるように作られる。その後、典型的な光源処理では、グラフのような特定の範囲内で、マップ内のベクトルの方向を光源の法線XYZの各点の計算結果と比較して、法線のUVテクスチャのピクセルの影を調整する。もし点がより光源に向いている場合は明るくなり、点が光源と違う方向に向いている場合はより急激に暗くなる。
初期のシェーダーモデルから低解像度のフィルタなしスペキュラのように低解像度のライトを使用した場合、アニメーションのスイープのように見え、これがどのように動くのかを間近で確認できる。
ベクトルをピクセル毎に計算するのではなくあらかじめ準備しておく法線マップでは、色としてマップ内に法線ベクトルを格納する。光源の点からXとYの処理までは同じである。
描画に必要なパスの数およびテクスチャレイヤーの量により、正式なバンプマッピングの一部のケースではエンボスバンプマッピングより低コストにできる。正式なバンプマッピングが1つの追加パスあるいはテクスチャレイヤーのみで処理を完了できるのに対し、エンボスバンプマッピングは2, 3の余分なパスを使う。法線マッピングは一般にマルチチャンネル構造であるために複数のパスが必要なので、法線マップよりもまた低コストである。
安定した正式なバンプマッピングには、GPU内に組み込まれたシェーダープログラミングユニット(バーテックスシェーダー)あるいはGPUに接続された専用のベクトル演算ユニットのいずれかが必要である。GPUはマルチパスレンダリングの機能を持っていなければならない。さもなければ、2つのテクスチャレイヤーという制限により、バンプマップだけが唯一利用可能なテクスチャ効果になる。
ソニー・コンピュータエンタテインメント (SCE) のPS2に搭載されたEmotion Engineはベクトル演算ユニットでバンプマップを取り扱うことのできる実例である。SCEはバンプマッピングの操作に使えるGPUシェーダーではなく、2つのベクトルプロセッサを搭載した。このシステムではピクセル単位の計算を片方のベクトル演算ユニットで続けている間にハイトマップを独立して計算できる。しかし、この能力はゲーム機が寿命に近づきHitman: Blood Money[1]のようなゲームが登場するまであまり使われなかった。
SCEのPlayStation 3、マイクロソフトのXboxとXbox 360、そしてほとんどのパーソナルコンピュータで利用されているグラフィックスカードでは、ピクセルシェーダーを使ってバンプマッピングを実行する。