Created on | Updated on

GAME JAM STARTER KIT:WFC LEVEL(WaveFunctionCollapse レベル)

概要

mceclip41.png

本記事では、SideFXが公開している GAME JAM STARTER KIT から WFC LEVEL(WaveFunctionCollapse レベル)を Unreal Engine を使って解説します。

GAME JAM STARTER KIT のダウンロードはこちらから:
https://www.sidefx.com/ja/tutorials/game-jam-starter-kit/

このツールは WaveFunctionCollapse アルゴリズムを使用して、外部画像をドライバとして使用し、ゲームレベルを生成します。 ゲームエディタでシェイプを使用して結果に影響を与えたり、ツールによって生成されたスペース全体に要素を自動的に散布したりすることもできます。

以下のリンクから、WaveFunctionCollapse アルゴリズム(波動関数の崩壊)によるダンジョン生成のチュートリアルを確認できます:
https://www.sidefx.com/ja/tutorials/wfc-dungeon-generator/

 

ツールの使い方

mceclip2.png
最初にツールをロードすると、シーンに何も表示されない可能性がありますが、問題はありません。
デフォルトのパラメータが展開されているのが確認できます。

Overall Scale の値はデフォルトで 1.0 に設定されています。

mceclip6.pngmceclip4.png
値を上げてスケールさせると、レベルマップ全体のサイズを変えることができます。

mceclip8.png
パラメータの最後にある矢印のマークをクリックすると、デフォルトの値に戻すこともできます。

mceclip22.png
このツールは四つのタブを持ちます。

Input では、立方体などから自分でエリアを作り、レベルマップを構築することができます。
WFC で PNG ファイルなどの画像を読み込み、それをベースにレベルを構築することもできます。
Scatter から、マップに散乱するオブジェクトの制御をします。
Instance Models を使って、自分で用意したモデルを使ってマップを構成できます。

 

WFC

mceclip10.pngmceclip11.png
Enable WFC のチェックを外し、何も表示させないようにできます。
Input タブなどで別のマップを制作する際はシーンを初期化できます。

WFCを機能させるには、ベースとなる入力画像が必要です。
基本的には低解像度で、その画像から特定のパターンを複製し、レベルマップを構成します。

mceclip12.png
例として上を入力画像とします。解像度が低くなっているのが確認できます。
1K のテクスチャを用意するのではなく、あくまで 30x30 のような低解像度で、最低限レベルの基本となるテクスチャを用意します。

mceclip13.png
Texture Pattern(img)にファイルへのパスを入力し、Enable WFC にチェックが入っていることを確認します。

mceclip15.png
レベルマップが構築されたのが確認できるはずです。

mceclip16.png
Row and Columns でマップのサイズを調整します。

mceclip17.pngmceclip18.png
Overall Scale はマップをそのまま拡大するのに対して、ここではマップの規模を調整します。

mceclip19.png
値を 100 にすれば巨大なレベルマップを制作することもできます。
どこまで拡大しても、ルートや空間のベースになっているのは入力画像です。

mceclip20.png
Seed WFC でマップの構造に乱数を加えます。

他にもいくつか便利なオプションがあり、マップを調整する機能を持ちます。

 

Input

mceclip21.png
デフォルトではシーンに何も表示されていません。
もし WFC タブなどで既にマップを作っていた場合、あらかじめ Enable WFC のチェックを外してシーンをリセットしておきます。

mceclip23.png
シーンに Cube をドラッグして、レベルを作っていきます。

mceclip24.png
マップを作り終えたら、土台(灰色の部分)を選択した状態でパラメータの Custom area から World Outliner Input を選択します。

mceclip25.png
Start Selection をクリックし、

mceclip26.png
作ったマップをすべて選択し、

mceclip27.png
Use Current Selection をクリックします。

mceclip29.png
シーンを確認すると、Cube を配置した部分にレベルが構築されたのが確認できます。

mceclip30.pngmceclip31.png
Cube がマップを制御しているため、Cube を移動させるとマップも更新されます。

Input では手作業で立方体を配置してレベルを制作し、WFC では入力画像からランダム性を持った大規模なレベルを用意できます。

また、この二つのレベルを同時に出力することもできます。
Input タブでレベルを作った状態で WFC タブの Enable WFC をチェックすると、

mceclip32.pngmceclip17.pngmceclip34.png
二つのマップを重ねて一つとして出力されたのが確認できます。

mceclip36.pngmceclip37.png
Input から Cube を引き継いでいるため、Cube を移動させるとマップを変化します。

mceclip38.pngmceclip40.png
マップに最低限必要な部屋や通路を立方体で用意し、それ以外を WFC でランダムに表現するなど、ゲームレベルを作成するうえで非常に柔軟かつ便利な手法です。

 

Scatter

mceclip42.png
Scatter タブのパラメータを操作して、マップ内の空間に散乱するオブジェクトを制御することができます。

mceclip43.pngmceclip44.png
Method について、Random だとオブジェクトがランダムに配置されます。
Grid に変更すると、整列させることができます。

Seed の調整で、オブジェクトの配置に乱数を加えます。
オブジェクト量やランダム具合は変えずに配置を変えたいときなどに使えます。

mceclip45.png
Density random を変更すると、オブジェクト間の密度を調整できます。

mceclip46.png
他にも、回転や最小値と最大値の指定などのオプションが用意されています。

 

Instance Models

mceclip47.png
タブを選択すると、Game engine が None になっているのみで他のパラメータは表示されません。
ここを unreal に変更(Unity での開発であれば Unity に)すると、

mceclip48.png
その下に「Piece NR 1」「Piece NR 5」... とパラメータが展開されたのが確認できます。

本ツールの Instance ではタイルセットでマップを構築していきます。

Unreal のタイルセットの解説はこちら:
https://docs.unrealengine.com/ja/Engine/Paper2D/TileMaps/index.html

そのため、空欄になった各ピースに、Unreal で用意したモデルを適用させる必要があります。

mceclip49.png
ダウンロードしたプロジェクトファイルの中には複数のモデルが用意されています。

mceclip52.pngmceclip53.png
これらを、それぞれ数字が対応するパラメータに当てはめていきます。

mceclip54.png
もしモデルの大きさがマップに合わないなど、モデルのサイズを変更する必要が出た場合には、
Scale instance を変更して調整します。

mceclip55.png
今回はパッケージに用意されたモデルを使いましたが、Blender, Maya, 3dsMax などで独自で作ったモデルを利用して、ダンジョンだけでなく、洞窟や建物などを作ることができます。
また、隣接するモデル同士の接続などの問題は Houdini が自動的に解決してくれます。

mceclip56.png
マップを構成するモデルを任意で設定できるなら、当然散乱するオブジェクトにも任意のモデルを指定できます。

問題が解決しない場合は、Born Digital サポートまでお問い合わせ下さい。

サポート問い合わせ