Unreal EngineのマテリアルでWorldAlignedTextureノードを使うとテクスチャをTriplanar Mappingすることができます。ノーマルマップをTriplanar Mappingする場合には、WorldAlignedNormalノードを使用します。WorldAlignedTextureノードもWorldAlignedNormalノードも実態はマテリアル関数なので、ノードの内部を見れば実装を確認することができます。
今回の検証に使用しているUnreal Engineのバージョンは5.0.3です。
WorldAlignedTexture
BaseColorなどをTriplanar MappingするためにWorldAlignedTextureノードを使用します。
インプット
- TextureObject: 使用するテクスチャ
- TextureSize: テクスチャタイリングにおける1タイルの大きさ
- WorldPosition: ワールド位置
- Export Float4: 出力にアルファも含めるか
- World Space Noraml: ワールド法線
- ProjectionTransitionContrast: プロジェクションの境界部分の鋭さ
TextureObject
以外はデフォルト値が設定されています。
アウトプット
- XY Texture: X方向、Y方向からの投影のブレンド
- Z Texture: Z方向からの投影
- XYZ Texture: X方向、Y方向、Z方向からの投影のブレンド
使用例
WorldAlignedNormal
ノーマルマップをTriplanar MappingするにはWorldAlignedNormalノードを使用します。
インプット
- TextureObject: 使用するテクスチャ
- TextureSize: テクスチャタイリングにおける1タイルの大きさ
- WorldSpace: ワールド座標系の法線を出力するか
- Normal: タンジェントスペースにおける上方向
- ProjectionTransitionContrast: プロジェクトションの境界部分の鋭さ
- WorldPosition: ワールド位置
- Use High Quality Normals: より高精度な法線計算をするか
TextureObject
以外はデフォルト値が設定されています。
アウトプット
- XY Texture: X方向、Y方向からの投影のブレンド?
- XYZ Texture: X方向、Y方向、Z方向からの投影のブレンド
- XYZFlatTop: ???
- Z Texture: Z方向からの投影?
XYZ Texture
以外のアウトプットは何を出力するか正確には理解できていませんが、主にXYZ Texutre
アウトプットを使用することになると思います。
使用例
WorldAlignedTextureノードと同じようにProjectionTransitionContrast
で境界部分の鋭さを調整できますが、値を大きくすると以下のように不自然な法線となるので注意が必要です。
WorldAlignedTexture + WorldAlignedNormal
WorldAlignedTextureノードとWorldAlignedNormalノードを組み合わせて使用すると次のようになります。