rarilog

主にゲーム制作に関することを書いていきます

2015/11/15 : UnrealEngine

UE4 の Construction Script でメンガーのスポンジを作る

メンガーのスポンジ を生成する Blueprint Class “BP_MengerSponge” を作ったので、処理の内容をお見せしたいと思います。Construction Script にて Mesh の生成処理を行っているため、変数 N の値を変更することで、穴を空ける処理を N 回行ったメンガーのスポンジをエディタ上ですぐに確認することができます。

これは少し前に Twitter で公開したネタなんですが、UE4 AnswerHub にて ピンポイントな質問 があったため、記事として残しておきます。


はじめに

以下の画像からわかるとおり、Static Mesh の Cube を大量生成して形を作るアルゴリズムを採用しているため、処理がかなり重いです。再帰処理の学習のために作ったもので、ゲーム内で利用することは想定していません。本来は Procedural Mesh 生成でやるものだと思います。

また、あまり時間が取れないため、解説は少なめにします。「見て写せば動く」程度にスクリーンショットを提供するので、処理の内容はご自身で追ってください。

処理の内容

BP_MengerSponge のコンポーネント・関数・変数の一覧です。const_CubeSize の値は、利用する Static Mesh の Cube の大きさに合わせて 100.0 に設定されています。

const_CubePositionVector の配列で、値は以下のとおりです。

メンガーのスポンジにおける「穴を空ける処理」は、一辺の長さが L である Cube を、一辺の長さが L/3 である Cube 20 個に置き換える処理であるとみなすことができます。const_CubePosition は、その 20 個の Cube それぞれの位置を決定するために使用します。

関数 CreateMengerSponge の概要がこちら。

1 では、引数のローカル変数への格納と、再帰の終了条件判定を行っています。

終了条件を満たした場合、2 で Static Mesh Component の生成を行います。Set Static Mesh ノードの New Mesh に設定されている Cube は、エンジンコンテンツにある 100x100x100 のものです1

続いて 3 で Dynamic Material を作成し、Cube の Static Mesh Component に設定しています。単なる色替え処理なので必須ではないです。個々の Cube において位置に応じて色が変わるようにしているので、メンガーのスポンジ全体ではグラデーションがかかった見た目になります。

終了条件を満たさなかった場合は 4 で再帰させます。上の方で述べた、「一辺の長さが L である Cube を、一辺の長さが L/3 である Cube 20 個に置き換える処理」に該当するのがこの部分です。

このようにしてできた関数 CreateMengerSponge を Construction Script にて呼び出しています。

これで以上です。BP_MengerSponge をレベルに配置して、変数 N の値を変更してみてください。

  1. エンジンコンテンツが表示されていない場合は、コンテンツブラウザ右下の「表示メニュー」をクリックし、「エンジンのコンテンツを表示」にチェックを入れます。