【CG】テクスチャをオブジェクトスケール等を無視して、UV値のみに依存させる(UE4)

Pocket
email this

 UE4で家や会場を造ったりしていると一番困ることは「オブジェクトのスケールを変更すると、テクスチャのスケールも変わっちゃう」という点。
 私が使っていたCGのソフトは、オブジェクトのスケールは全然関係なくて、マテリアルプロパティの[幅][高さ]の値で全てが決まる設定になっていました。要はリピート(WRAP)かフィット(CLAMP)が選択できて、
  ・リピート時は[幅][高さ]は何cm毎にリピートする(UV=0→1は何cm)かを指示して
  ・フィット時はCLAMPで面に対してピッタリ貼られます
っていうUIでした。だからキューブのスケールを変えようともテクスチャのスケールはずっと同じでした。
 建築関連なんかは、例えば外壁パネルとか屋根瓦などなどの製品の幅高さは商品ごとに決められていますからこの手法の方が適している。と思います。
 ビジュアライゼーションだったら見栄えがそれなりであればOKなのかもしれません(?)が、CADとか見積、積算アプリと連携しているとそうもいかない。30cm角タイルを施工予定であればCGの世界でも30cmで表現してもらわないと困るわけです。建設会社vs施主のトラブルの元です。訴訟問題まで発展することはさすがに聞きませんが、顧客満足度的な部分が微妙に落ちます。(施主様は直接文句は言ってこないものの、心の中ではモヤモヤが残る意味で。)これ、意外とあります。

 『基本オブジェクト(CubeやSphere)のみでゴリゴリSpeed Buildするとき』なんかは便利です。

 UE4公式ドキュメントにはAbsolute World Position()ノードを使おうってのは載っていますが、これはXY平面にしか効かないので(?)、あまり有効ではない手法です。(確認:これ、合っていますよね?)

 ではでは、UE4でもオブジェクトのスケールに依存せずに自分が決めたUV値だけに従うマテリアル設定をしてみましょう。3次元的に。



やってみよう

 ブループリントで完結します。

Absolute World Positionで設定する

 Absolute World Positionでやれば、すべてのオブジェクトにおいて完全にマテリアルで指示したUVに従います。

 質問:これの処理負荷ってどうなんでしょうか?



オブジェクトに元々設定しているUVには従ってほしいけど、スケールには従ってほしくない場合

 そんなときは以下のようにすればOKです。ObjectScale()というノードがありますので同じことをしてあげればよいです。
 こっちの用途は「このオブジェクトに対してこのテクスチャでこのUVです、っていうのは決まっているんだけど、UE4エディタ上でハマらないからスケール変更が必要だわ・・・。」って場合に楽。



完成

 いかがでしょうか。これでSpeed Build動画製作もはかどります。



参考サイト

WTF Is? Material – World Position in Unreal Engine 4 ( UE4 ) – YouTube
Coordinates 表現式 – Unreal Engine 4 Documentation

コメントを残す