ここでは、Houdini を使った Wave Function Collapse について簡単に紹介する。
これは「第2回Houdini勉強会(オンライン)」で発表した内容です。
使用したビルド: Houdini 18.0.487
Unreal 4.25.1 Windows 10
1. 概要
Wave Function Collapse に関する概要
- Github WaveFunctionCollapse
- Oskar Stålberg (twitter)
- EPC2018 - Oskar Stalberg - Wave Function Collapse in Bad North (youtube) 37分40秒
- Élie Michel (twitter)
- SideFX
- WFC Teaser (twitter)
- WaveFunctionCollapse Supercharged with PDG for Level Generation | Paul Ambrosiussen | HOUDINI HIVE GAMEDEV (Vimeo) 59分18秒
- WFC によるダンジョン生成 (チュートリアル)
- wfc_dungeon_project_files.zip (以下 Simon のファイル) 14.4MB
- WFC Level Generation (Content Library)
- wfc_project_files.zip (以下 Paul A のファイル) 206KB
- HoudiniでのWaveFunctionCollapseの使い方。 Qiita @amateras 氏
- 日本語による非常に分かり易い説明。
- SharkJets 3D Wang Tileset
- Unity で WFC を使った YouTube チュートリアル。アセットのダウンロードが可能。
2. インストールおよび設定
Houdini で WFC を使うには SideFX Labs のインストールが必須。
- SideFX Labs がインストールされていないのであればインストールする。インストール方法はこちら。
- 上記の Simon のファイルと Paul A のファイルをダウンロードする。
- Paul A のファイルのうち、WFC_In_Engine.hda を自分の HDA パス (例: ~/houdini18.0/otls) に置く。
- Simon のファイルのうち、WFC_Dungeon_General_Demo.hda と UE_WFC_Level_Generator.hda も自分の HDA パスに置く。
- Unreal も使うのであれば 4.24 以降をインストール。UE4 インストール後に、Houdini をインストールし Houdini Engine のプラグインもインストールすれば、確実に正しい場所にインストールされる。
3. Paul A のファイル
- Houdini を起動し、Paul A の .hip ファイル WFC_Engine.hip を開く。
- WFC_In_Engine.hda がパスにあることが必須。あれば WFC の計算が行われ、ファイルが開くまでに20秒ぐらい。
- Seed、Size、Pattern Search Size の値を変更すればマップが自動計算される。
- サクサク動かすには Size を低めにしてから。
Size を大きくすればそれだけ計算に時間がかかる。 - Sample Level Image を入れ替えればまた別のマップになる。
4. Simon のファイル
File->New をしたと仮定し
- Geometry ノードを配置し、その中に入り、TAB->WFC Dungeon General Demo を実行。
- Paul A のファイル同様、パラメータを変更すればレベルの配置が自動的に変わる。
- UE4 を起動し、WFC_Dungeon_General_Demo.hda をロードすれば、同じ配置が確認できる。
5. 自分で作る
以下、自分で作る場合の方法を紹介する。現段階でわかる範囲で一番良いのは、「WFC によるダンジョン生成」チュートリアルに沿って行くこと。
- (していなければ File->New 、) Geometry ノードを作成し、中に入る。
- TAB->Labs WFC Initialize Grid を作成する。
- wfc_initialize1 が出来る。
- wfc_initialize1 で From Texture トグルをクリックし、テクスチャを読み込む。ここでは、Simon のファイル以下の Source_files/Grid_Demo_03.jpg を使う。
Simon のチュートリアルと見た目が違うのは、Simon のアセットはカスタマイズされているため。 - Labs WFC Initialize Grid をもう一つ作成 (wfc_initialize2)し、From Texture を使わずに、Rows と columns を 30x30 に変更。
- こちらが出力の大きさを定義する。
- TAB-> Labs 2D WaveFunctionCollapse (2d_wavefunctioncollapse1) を作成。
- 一番目 (左) の入力に wfc_initialize2、二番目 (右) の入力に wfc_initialize1 を接続。
- Find Wrapping Input Patterns をオンにする。
- 各ノードとそのパラメータの説明はこちらに非常に良いのがある。
- Seed の値を変えれば、パターンも変更される。ここでは 300。
- 一番目 (左) の入力に wfc_initialize2、二番目 (右) の入力に wfc_initialize1 を接続。
- Labs Wang Tiles Decorder を作成 (wang_tiles_decoder1)し、 2d_wavefunctioncollapse1 の出力をこの入力に接続。
- Labs Wang Tiles Sample (wang_tiles_sample1) と Copy To Points (copytopoints1) し、 copytopoints1 の左の入力に wang_tiles_sample1 を、右に wang_tiles_decoder1 を接続。
- copytopoints1 の Piece Attributes トグルをオンにし、アトリビュート名を name に設定。するとこのようにビューポートに現れる(はず)。
6. Wang Tile
上の手順の最後で行った Wang タイルの挙動を簡単に説明すると、
- Labs Wang Tiles Sample ノードには、このページで Blob tileset として表示されているタイル集の 3D 版が収められている。
wang_tiles_sample1 に表示フラグを設定し、Align and Distribute パラメータをオンにすれば、壁と隅がパターン化されているのがわかる。 - これが、Labs Wang Tiles Decorder の結果を元に Copy To Points ノード経由でインスタンスされている。
- このパターンをゲームアセット置き換えていくのが Simon のチュートリアルとなっている。
- HoudiniでのWaveFunctionCollapseの使い方。 AMATERAS/H.Teruyama さん (Qiita)
- 作成
- T4LLY さんによる例 (X)
- ichinose.rs さんによる例 (X)
最終更新: 2024-04-23
0 件のコメント:
コメントを投稿