This explanation is currently available in Japanese.
ひとことで
平らな面に高さマップを持たせ、視線の角度と高さに応じてテクスチャを読む位置をずらすことで、凹凸が本当に奥へへこんでいるように見せる手法です。法線マップが「光の当たり方」だけを変えるのに対し、パララックスマッピングは「どこが見えるか」まで変えるので、斜めから見たときの奥行きが格段に増します。
ゲームでの使いどころ
- 石畳・レンガの壁・タイル床:目地が奥にへこみ、石が手前に出っ張って見える。
- 地面のディテール:足跡、轍、ひび割れ、砂利。
- 窓の奥の部屋:ビルの窓に室内が見えるように見せる「インテリアマッピング」も、同じ視差の考え方の応用です。
- SF のパネル・計器:実際のポリゴンを増やさずに、ボタンの溝やパネルの段差を表現する。
しくみ
接空間(面に沿った座標系)での視線ベクトルを 、高さマップを 、深さの倍率を とします。
パララックスマッピング(オフセット)は、その点の高さだけを使って 1 回で UV をずらします。
計算は軽いものの、急な角度や深い凹凸では、ずらす量の見積もりが外れて模様が崩れます。
視差遮蔽マッピング(POM) は、視線に沿って層を少しずつ進みながら高さマップをたどり、視線が表面の下に潜った最初の位置を探します(スフィアトレーシングと同じ「光線を進めて交点を探す」考え方です)。見つかった区間を線形補間して交点を求めるので、手前のレンガが奥の目地を隠す様子まで表現できます。視線が面に対して寝ているほど層の数を増やします。
| 手法 | 1 画素あたりの読み込み | 表現できるもの |
|---|---|---|
| 法線マップのみ | 1 | 陰影だけ(輪郭・奥行きは平面) |
| パララックス | 2 | 浅い凹凸の奥行き |
| 視差遮蔽(POM) | 10〜50 | 深い凹凸、遮蔽、(追加で)自己影 |
実装のポイント
- 接空間の視線が必要:通常のメッシュでは、頂点の接線・従法線から TBN 行列を作り、視線を接空間へ変換します(デモの板は xy 平面なので省略しています)。
- 求めた UV を全部に使う:色、法線、粗さなど、すべてのテクスチャを補正後の UV で読みます。
- 縁の処理:UV が 0〜1 の外へずれると、タイリングしない素材では縁に別の模様が現れます。範囲外なら discard する方法もあります。
つまずきやすい点
- 輪郭は変わらない:どれだけ奥行きが出ても、メッシュのシルエットは平らな板のままです。真横から見ると平面だと分かります。本当に形を変えたいならテッセレーションや頂点変位を使います。
- 急な角度での段差:POM の層数が少ないと、斜めから見たときに階段状の縞(スライス)が見えます。
- コスト:画面を大きく占める床に POM を使うと、1 画素あたり数十回のテクスチャ読み込みになります。距離に応じて層数を減らすか、近景だけに使います。
デモで試すこと
- 「凹凸の表現」をなし → 法線マップのみ → パララックス → 視差遮蔽と切り替えてください。法線マップだけでは、斜めから見るとレンガが平面に描かれた絵だと分かります。
- 視点を横に回して壁を斜めから見ると、POM ではレンガの側面が見え、手前のレンガが奥の目地を隠します。
- 「凹凸の深さ」を最大にすると、パララックスは崩れやすく、POM は深い凹凸にも耐えることが比べられます。