2 / 4 視線と高さによるUVのずれ
模様がずれることで奥行きを感じる原理と、変わらない部分を学びます。
視点によって読む場所が変わる
Parallaxは、視線の向きと高さからTextureを読むUVをずらす方法です。斜めから穴を見ると奥の模様の見える位置がずれる、という関係を平面上の参照座標へ近似します。
視線と高さを同じ表面の基準で扱う必要があります。正面ではずれを小さく、斜めでは大きくするのが基本の考え方です。極端に斜めの視線ではずれが大きくなりやすいため、無制限に増やしません。
断面で参照位置を追う
表面に沿う方向をx、表面から外へ向かう方向をzとします。基準面はz=0です。前のステップと同じくHeightが0、倍率が0.4なら、高さは (0−0.5)×0.4=−0.2 で、基準面より奥にあります。この例では高さとxを同じ距離の単位で扱います。
| 視線 | 基準面から奥へ0.2進む間の横ずれ | 奥の模様を読む位置 |
|---|---|---|
| 正面から見る | 0 | 基準面と同じx |
| 右斜めから見る:zが1変わるとxが0.5変わる向き | −0.1 | 基準面より左へ0.1 |
右斜めの視線を奥へたどると、表面から離れて右へ向かう向きとは逆に進みます。そのため、奥行きの変化−0.2に傾き0.5を掛けると、横ずれは−0.1になります。実際の計算でも、視線を「表面からカメラへ」とするか、その逆とするかをそろえないと符号が逆になります。
次に距離をUVへ換算します。模様の横幅2単位がUの0〜1に対応するなら、横ずれ−0.1はUの−0.05です。元のUが0.5なら0.45を読みます。高さの距離をそのままUに足すのではなく、模様が何単位に1回繰り返すかも必要になります。
これは高さを一定とした断面の説明例です。高さが場所ごとに変わるTextureでは、まず読んだ高さから参照UVを近似的にずらします。平面全体をその高さへ移動する処理ではありません。Heightが基準の0.5なら高さも横ずれも0になります。
表示される凹凸と形状を分ける
UVをずらしてもメッシュの頂点は動きません。物体の外側の輪郭やColliderが凹凸どおりになるわけではありません。基本では浅い表面模様の変化を対象とし、自己遮蔽まで扱う多段階の探索は発展へ分けます。
条件を変えた確認
本文の右斜めの視線で、Heightを0.25、倍率を0.4にします。横方向の傾き0.5、模様の幅2単位のとき、U=0.5からどこを読みますか。
考え方の確認
高さは−0.1、横ずれは−0.05、Uのずれは−0.025なので0.475を読みます。距離からUVへの換算を省かないでください。
Height=0.5ならずれ0へ戻ることを確認します。
- 説明例で横ずれ−0.1がUの−0.05になる理由と、Heightが0.5ならずれが0になる理由を説明できる。変わるのは参照UVであり、輪郭やColliderではないと区別できる。
- 変更した条件と、予測・計算した結果を対応付けて説明できる。