UE4建築コンテンツを制作する際に困ったこと、どう対応したか --02 オブジェクトの複製編--

※例のごとく建築関係者向け、超初心者向けの内容です(ぼくがなんもわからんの状態なので…)、根本的な内容等はUE4の公式ドキュメントやラーニングをご参照下さい。

 

今回はオブジェクトの複製についてです。

建築コンテンツはご存知の通り、柱や各種支柱、ルーバーなど同一規格を頻繁に利用した意匠や構造がよく現れます。

いちいち1つ1つ配置するのは手間ですよね、UE4で効率的に配置、設定してみましょう。

 

 

○複製されるオブジェクト位置、ローテーション、スケールをそれぞれ指定する複製

 

今回はわかりやすく参照として現在作成中のUE4サヴォア邸で使用した事例を追って説明します。

サヴォア邸、建築界隈の皆様ならご存知でしょう。1階ピロティー部分は4850mm間隔に配置された円柱で車路の部分が持ち上げられていますね。

f:id:momomo_moz:20190113030228p:plain

 

この円柱をBP(ブループリント)内のInstanced Static Meshで複製しました。

ではサンプルを制作して実際にやっていきましょう。

 

まず空のBPを作成します。

コンテンツブラウザの任意の位置で右クリック → ブループリントクラス → Actor

を選択して空のブループリントアクターを作成しましょう。名前もつけて下さい。(任意)

f:id:momomo_moz:20190113030341p:plain

作成された空のブループリントアクターをダブルクリックしてBPエディターを開きます。

 

1.左上欄『コンポーネントを追加』を押下して”Instanced Static Mesh”を選択します。

 

 

2.追加された”Instanced Static Mesh”をクリックし

f:id:momomo_moz:20190113052834p:plain


て選択状態にし、右側”詳細”タブ内の"Static Mesh"欄に複製したいオブジェクトを入れます。

(※画像ではキューブを選択しています。)
そしてコンパイルを押しましょう。

f:id:momomo_moz:20190113052854p:plain
…エディターにはなにも表示されませんね、これは"詳細タブ"の"Instance"欄を設定していないからです。

 

3."Instance"欄の+を押してメンバー(複製を作りたい数)を増やしましょう。

とりあえずキューブを5つ複製したいので「0~4」のメンバーを作りましょう。

それぞれの複製したい位置を入力してコンパイルを押し、ブループリントアクターをエディターに配置すれば複製配置完了です。

f:id:momomo_moz:20190113052917p:plain

 

f:id:momomo_moz:20190113031559p:plain

ある程度本数が決まっているような柱や梁ならこれをつかえば効率的ですね。

ブループリントを編集すればあとから配置も変えられます。

 

 

よ~し複製簡単にできるな、他に複製するものは…

 

ちょっとまて、こういうのは全部パラメータ打つのか?

f:id:momomo_moz:20190113032358p:plain

 ご安心ください、ここからがブループリントの真骨頂です。(かつ本題です)

 

 

 

○Instanced Static Meshを用いた複製(本題)

 

せっかくなので建築らしく、サンプルとしてサヴォア邸に枠組足場をかけると想定してご説明していきましょう。

枠組足場建枠(900枠)はざっくりこんな感じですね、これを1つ1つ配置したり、先程の方法で複製するのは骨が折れます。 

f:id:momomo_moz:20190113052725p:plain

 

途中までは同じ、空のブループリントクラスを作成してInstanced Static Meshをコンポーネントに追加しましょう、複製したいオブジェクトを選択して"Construction script"タブを開きます。

f:id:momomo_moz:20190113052948p:plain


とりあえず、大量複製できる、かつ間隔と数量を簡単に調整可能なブループリントを制作します、ゴールのノードはこうです。

ブループリントエディタの基本的な操作方法は公式ドキュメント等をご参照下さい。 

f:id:momomo_moz:20190113053152p:plain

順を追って解説します、

 

①複製したい対象は先程作成して枠組足場を割り当てた”Instanced Static Mesh”なので、Add Instance関数を配置します。(targetのInstanced Static Meshがいなければコンポーネントタブからドラッグドロップして下さい。)

 

②複製するInstanced Static Meshのn番目の位置を決めるためにMake TransformとMake Vectorを図のように配置しピンをつなぎます。

f:id:momomo_moz:20190113053036p:plain


③複製数と複製間隔を設定する変数ピンを作成します。

左側マイブループリントタブの変数欄+を押下して新規変数を作ります。

f:id:momomo_moz:20190113053050p:plain
※赤い記号はブーリアンを表します、こちらも詳しくは解説しませんので公式ドキュメントをご参照下さい。

 

今回複製の仕組みを作成するために欲しい変数は

○複製数を指定する「Integer(整数)」

○複製間隔を指定する「float(浮動少数)」

です。画像の通りに2つ制作して一旦コンパイルしましょう。

f:id:momomo_moz:20190113053107p:plain

f:id:momomo_moz:20190113053137p:plain


次は下記の画像のようにそれぞれ作成し、ピンをつなぎます。

f:id:momomo_moz:20190113053207p:plain
ForLoopを用いることで"num"回 add instanceする、ということです。

また、"num"と"position"を掛け合わせた値が、複製のnum番目の位置になる、という構造です。コンパイルしてエディターにおいてみましょう。

 

作成したブループリントを配置して右側詳細タブ内をみると"num"と"position"パラメータがありますね、これは先程変数を制作し、変数の”目”アイコンを開いたことで外部参照が可能になった為です。

わざわざブループリントを開いて調整しに行かなくていいので大変便利ですね。

 

こんな感じで挙動します。 

youtu.be

 

大変便利です、これなら手すり子やルーバーの制作も捗りそうですね。

 

 

 

ちょっと応用でYとZのnum、positionを追加してMake Vector とMake Transformのreturn valueピン、locationピンをそれぞれ構造体ピンを分割して次のようなノードにするとXYZ軸複製もできるので足場制作に大変便利!!(違

f:id:momomo_moz:20190113053220p:plain



youtu.be


是非やってみて下さい。