テクスチャマップから高さマップを求める
高さマップとは、テクスチャマップをグレースケール化して作ります。
黒い部分を 0 (最も低い)、白い部分は 1 (最も高い)として、rgb値に同じ値を格納jし、a値には1を格納するのが普通だと思います。
高さマップが固定なら、事前に画像ファイルとして作成しておきます。
高さマップとしては、オフスクリーンのフレームバッファに描画しておき、それを高さマップのテクスチャとして利用するのが一般的かなと思います。
高さマップから法線マップ(バンプマップ)を求める
法線マップ内の各ベクトルは、三角形内部の点における補間後の法線ベクトルに対する、法線のベクトルの向くべき相対的な方向を示します。
例えば、法線マップ内のベクトル は、三角形内部の点における補間後の法線ベクトルが変化しないことを表します。
ピクセルの高さマップ内の座標 に格納されている値を で表すと、
方向と 方向に沿ったベクトル および は以下のように表せます。
定数 は高さの値の範囲を変えるためのスカラー係数で、法線の変化をどの程度目立たせるかを制御します。
と の Z 成分を とすると、法線ベクトル は、次のように表せます。
式 で求まった法線ベクトルを RGB カラーにエンコードすれば法線マップが出来上がります。
参考リンク
参考文献
ゲームプログラミングのための3Dグラフィックス数学 p150-p152