UV・マテリアル表現

トライプラナー

Triplanar / World-Aligned Mapping

複数方向から投影して岩や地形の継ぎ目を減らす。

3 / 10

インタラクティブデモ

デモを準備しています…

トライプラナー

ドラッグで視点を回転、Ctrl(⌘)+ スクロールでズーム。タッチ操作は 2 本指です。

ひとことで

UV 座標を使わず、物体(またはワールド)の位置を x・y・z の 3 方向から投影してテクスチャを 3 回読み、面の向き(法線)に応じて混ぜ合わせる手法です。UV 展開がない、あるいは引き伸ばしが避けられない形状、たとえば手続き的に生成した地形や洞窟、岩、壊れるオブジェクトの断面などに、歪みのない模様を貼れます。

ゲームでの使いどころ

  • 手続き的な地形・洞窟:マーチングキューブなどで生成したメッシュには、そもそも UV がありません。
  • 崖と地面の塗り分け:上向きの面(y 投影)に草、横向きの面(x, z 投影)に岩肌、とすると、傾斜に応じて自然に塗り分けられます(ワールド基準のトライプラナー)。
  • 岩・瓦礫のアセット:UV 展開の手間を省き、どんな大きさに拡大縮小しても模様の密度を一定に保つ。
  • レベルデザインのブロックアウト:箱や柱を並べるだけで、伸ばしても模様が崩れない仮素材になります。

しくみ

位置 p\mathbf{p}、法線 n\mathbf{n} の点で、3 つの平面に投影した座標でテクスチャ TT を読みます。

cx=T(pz,py),cy=T(px,pz),cz=T(px,py)c_x = T(p_z, p_y), \quad c_y = T(p_x, p_z), \quad c_z = T(p_x, p_y)

重みは法線の各成分の絶対値から作ります。

w=∣n∣kwx+wy+wz,c=wxcx+wycy+wzcz\mathbf{w} = \frac{|\mathbf{n}|^{k}}{w_x + w_y + w_z}, \qquad c = w_x c_x + w_y c_y + w_z c_z

指数 kk(デモの「混ぜ方の鋭さ」)が小さいと 3 方向の模様が広い範囲で混ざってぼやけ、大きいと境目がくっきりします。4〜8 程度がよく使われます。

基準特徴向いている対象
物体(オブジェクト空間)物体と一緒に模様も動く回転・移動する岩や小物
ワールド空間模様は空間に固定され、物体が動くと滑る地形、建物、動かない背景

実装のポイント

  • コストは 3 倍:テクスチャ読み込みが 3 回(法線マップも使えばさらに 3 回)になります。重みが十分小さい投影は読み飛ばす分岐を入れると軽くなります。
  • 法線マップの扱い:法線マップをトライプラナーで使う場合、各投影の接空間がそれぞれ異なるので、単純に混ぜると凹凸の向きが狂います。「Whiteout ブレンド」などの専用の合成方法を使います。
  • 向きの反転:負の方向を向いた面では投影した模様が左右反転します。文字や向きのある模様では、法線の符号で UV を反転させます。

つまずきやすい点

  • 45° の面でぼやける:2 方向の投影がちょうど半々で混ざる面では、模様が二重に見えます。境界を鋭くするか、ノイズで混ぜ方を揺らして目立たなくします。
  • スケールとタイリングの反復:ワールド基準では模様の大きさが均一なぶん、繰り返しが目立ちます。テクスチャボミングや、異なるスケールの重ね合わせと組み合わせます。
  • スキンメッシュ:アニメーションで変形するキャラクターにワールド基準で使うと、動くたびに模様が体を流れます。変形前の位置(バインドポーズ)を頂点属性として持たせて使います。

デモで試すこと

  1. 「模様の貼り方」を UV にすると、岩では模様が一点に集まって歪み、細長い柱では石積みが縦に引き伸ばされます。
  2. トライプラナー(物体)に戻すと、どちらの形でも石の大きさがそろいます。「3 方向の重みを色で表示」で、面の向きごとにどの投影が使われているかが分かります。
  3. トライプラナー(ワールド)では、回転する岩の表面を模様が滑っていきます。動かない地形向けの設定であることが実感できます。

参考資料

Unreal Engine Material Coordinates ↗

分野全体の資料で、この項目を直接扱っているとは限りません。