【CG】複写配列するブループリントクラス。加えて相対回転とランダムスケールも添える【UE4】
和風建築の美しさと魅力のひとつに「同じパーツの規則的な配列や繰り返し」があると思います。
例えばルーバーやパネル、和柄が挙げられますが、これらを作るには3DSMAXやBlenderのモデラだとArray(複製配列)があるので全然楽ですが、UE4には基本はありません。
ルーバーなどはArrayでいいでしょうが、石畳の路とかになると、石ひとつひとつに表情(=多少のランダムさ)も求められてくるのでできればリアルな表現ができるUE4でも実現したいものです。
四角い石を作れば、基本的には4通りの表情をもたせることができますから、90度ずつ回転するだけでも結構印象が変わります。
ということでやってみましょう。
やり方
要求事項は2つになるでしょうか。
1.Array(複製配列)ができること。
2.ただし同じメッシュを並べているだけなのにランダムさがあるように見えること。
要求2は以下の2つで実現することにします。
2-1.特定範囲値でランダムに拡大縮小する。
2-2.一定量で回転する。
今回はランダムにしません。石畳などの90度回転するだけで表情が変わって見えるメッシュに有効だと思います。
ランダムでいいんじゃない? と思うかもしれませんが、そこまでランダムさを求めるならばもうランドスケープでいいんじゃないかな。と考えました。
1.ブループリントクラスを作成
名前を決めます。「ArrayMesh」とかでいいと思います。
2.ブループリントクラスを編集
ArrayMeshをダブルクリックします。1つ1つやっていきましょう。
2-1.コンポーネントを追加
2-1.コンポーネントを追加
左上の[コンポーネントを追加]を選択して、[Instanced Static Mesh]を選択します。
するとこんな感じにコンポーネントに増えます。
2-2.変数を追加
次に変数です。
配列、回転、拡大縮小の3つを全部やりたいときは画像の変数を全部作ります。
右側に目玉のマークがついているものは、パブリック変数を示しています。
NumMesh int型 複製するメッシュの数
Margin vector型 複製する方向
・回転させたいならこの変数が必要です。今回は、順次この角度で回転するルールとします
Rotate Rotation型 回転角度
Current Rotate Rotation型 最新の回転角度。内部的に使用します
・拡大縮小させたいならばこれが必要。ランダムじゃなくていいのであれば1つでもOK。
ScaleMin float型 ランダムスケールの最小値
ScaleMax float型 ランダムスケールの最大値
なお変数は名前をつけておくと便利です。
作ったすべての変数について[詳細]の[カテゴリ]に好きな名前を付けておきます。今回は[アレイ]としてみました。
4-3.ノードを編集
・[For Loop]に[Num Mesh]がくっついていますが、これは「Num Mesh回だけ繰り返す」ことを示していますね。
・[Add Instance]で[ターゲット]のメッシュを生成します。つまり[Instanced Static Mesh]で指定したメッシュを生成します。
・[Instance Transform]に複雑なノードがくっついています。これは、
次のメッシュを[Margin]の値だけ離した位置にメッシュを生成することを示しています。
例えばArrayMeshのLocation=(100, 200, 300)で、Margin=(300, 0, 0)だと、
1個めのメッシュのLocation=(100, 200, 300)。2個目は(400, 200, 300)、3個目は(700, 200, 300)、・・・となります。
ここについては、今回は特定の方向に複写するだけでいいです。というのであれば[Make Transform]のLocationだけ作ればよかったりします。組み合わせ自由。
これで終わりです。
完成
できましたので早速石畳を作ってみましょう。
手順的には2ステップです。
1.メッシュを指定
コンテンツブラウザから[ArrayMesh]を選択し、ビューポートに置きます。
コンポーネントのところに[Instanced Static Mesh]があるので選択して、[Static Mesh]で好きなメッシュを選びます
2.アレイの調整
次にコンポーネント最上位の[ArrayMesh]を選択。
すると[アレイ]という括りが出てきますね。ここで色々調整します。