ゲームエフェクトデザイナーのブログ (新)

レポート記事とかUE4のマテリアルとか。C#とかも触ったり。

UE4 円柱状に投影するCylindricalUVsについて

マテリアルでテクスチャを円柱状に投影マッピングしたい場合、マテリアル関数「CylindricalUVs」を使ったりするかと思います。今回はこちらの中身について。

f:id:moko_03_25:20180618103629j:plain

使い方は簡単。
TextureObject」ピンにTextureObjectノードでテクスチャを入力。
In」に投影するUVの基本サイズ (1mなら100) を入力。
Normal」は「Cylinder Projection w Top」の出力を使う場合、ここにノーマルマップを入力しないとエラーが出ます (デフォルト値が設定されていないため)。
※ノーマルマップが無い場合はConstant 3 Vectorで 0, 0, 1 の値を入力すればOK


Cylinder Projection」の出力を使った場合は円柱マッピングのみ。
UVの極座標展開により、やはり切れ目が入ります。。

f:id:moko_03_25:20180618103626j:plain

Cylinder Projection w Top」の出力を使った場合は円柱マッピングと、Z軸方向の平面マッピングブレンドした結果になります。

f:id:moko_03_25:20180618174129j:plain

イメージとしては下図のような感じ。ブレンド具合は右の図のような感じ。

f:id:moko_03_25:20180618103621j:plain

補足すると「In」に100を入力した場合、1mの立方体を原点に置くと下図のような感じでUVが綺麗に 0~1 の範囲で収まったマッピングになります。ただし円柱マッピングでのV方向が上下逆さまになってるのでここは自前で作る場合の修正候補の1つと思います。

f:id:moko_03_25:20180618172633j:plain

次にコンポーネントの移動・回転・拡大時のUVの追従について。

Cylinder Projection」の場合は移動には追従しますが、それ以外は追従しません。
Cylinder Projection w Top」の場合は移動も追従しません。
自前で作る場合は TransformVector ノードを使って追従させるように構成することもできます。メッシュパーティクルで出す場合は設定で Mesh Particle Space を利用することでパーティクルの移動・回転・拡大にUVを追従させることもできます。

f:id:moko_03_25:20180618184213g:plain

さて、お次は「CylindricalUVs」の中身について。
ノード群を綺麗に並べて各構成部分にコメントを加えたのが下図になります。

このうち「極座標UVを生成」については以下の2つの記事で解説しています。
UE4 極座標のマテリアル構成 - ゲームエフェクトデザイナーのブログ (新)
UE4 atan2を使った極座標のUV展開について - ゲームエフェクトデザイナーのブログ (新)

f:id:moko_03_25:20180618172637j:plain

Cylinder Projection w Top」での投影は「法線方向をワールドスペースの高さ分だけ取り出す」と「円柱と平面の投影をブレンド」の部分が担っています。
ここで TransformVector を使って法線方向のベクターからワールドスペースのZ軸の大きさだけ取り出してブレンドに使っているのはなるほど~!と。

f:id:moko_03_25:20180619022407j:plain

また、ブレンド具合をマテリアル関数の CheapContrast で調整していますが、CheapContrast についてはこちらの記事で解説しています。
UE4 CheapContrastについて - ゲームエフェクトデザイナーのブログ (新)

コントラストの値は1の決め打ちになっていて調整できる構成ではないので、自前で作る場合はこのあたりも修正候補の1つかも知れません。

とりあえず今回はここまで。