UE4 の Construction Script でメンガーのスポンジを作る
メンガーのスポンジ を生成する Blueprint Class “BP_MengerSponge
” を作ったので、処理の内容をお見せしたいと思います。Construction Script にて Mesh の生成処理を行っているため、変数 N
の値を変更することで、穴を空ける処理を N
回行ったメンガーのスポンジをエディタ上ですぐに確認することができます。
これは少し前に Twitter で公開したネタなんですが、UE4 AnswerHub にて ピンポイントな質問 があったため、記事として残しておきます。
UE4 にて Construction Script でフラクタル図形の生成をやってみた。メンガーのスポンジ。こういうのは再帰処理の勉強になってよいです。 #UE4 #UE4Study pic.twitter.com/NuWEG4A407
— らりほま (@rarihoma) September 3, 2015
はじめに
以下の画像からわかるとおり、Static Mesh の Cube を大量生成して形を作るアルゴリズムを採用しているため、処理がかなり重いです。再帰処理の学習のために作ったもので、ゲーム内で利用することは想定していません。本来は Procedural Mesh 生成でやるものだと思います。
また、あまり時間が取れないため、解説は少なめにします。「見て写せば動く」程度にスクリーンショットを提供するので、処理の内容はご自身で追ってください。
処理の内容
BP_MengerSponge
のコンポーネント・関数・変数の一覧です。const_CubeSize
の値は、利用する Static Mesh の Cube の大きさに合わせて 100.0
に設定されています。
const_CubePosition
は Vector
の配列で、値は以下のとおりです。
メンガーのスポンジにおける「穴を空ける処理」は、一辺の長さが 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
の値を変更してみてください。
- エンジンコンテンツが表示されていない場合は、コンテンツブラウザ右下の「表示メニュー」をクリックし、「エンジンのコンテンツを表示」にチェックを入れます。 ↩