Unreal EngineのマテリアルでTriplanar Mappingを作成してみます。検証に使用したUnreal Engineのバージョンは5.0.3です。
マテリアルのネットワーク全体は次のようになります。
上部でXYZの各方向に対する重みを計算し、下部で各方向ごとにテクスチャをサンプリングします。最後にそれぞれで求めた値を用いて重み付き和を計算します。
このマテリアルを適用すると次のようになります。
以下ではネットワークの各箇所を詳しくみていきます。
重みの計算部分です。
法線の絶対値に対してブレンド部分の鋭さを調整するために累乗を計算し、重みの和が1になるようにします。プレビュー表示は次のようになります。
テクスチャのサンプリング部分です。
ワールド座標を利用してX方向(YZ平面)、Y方向(ZX平面)、Z方向(XY平面)ごとにサンプリングします。プレビュー表示は次のようになります。
各方向のUV値を求める箇所が少し複雑ですが、こうすることで以下のようにテクスチャが反転したりせず適用することができます。
例えば以下のように、もっとシンプルに各方向のUV値を求めることもできますが、気をつけないと2つ目の画像のようにテクスチャのブレンド部分付近で同じUV値となることで対称な構造(わかりづらいですが中心付近から右上へ延びる部分)ができてしまうことがあるので注意が必要です。
テクスチャのサンプリング値と重みの積を合計している箇所です。