Houdiniで迷路生成。(Houdini:迷路ジェネレータ02へ)
調べたところ、迷路生成の手法はいろいろあるらしいことが分かりました。
ここではおおよそ次のような手順で作成しました。穴掘り方と言うらしいです。
- 図のようなグリッドで考える。まず、任意の点をマスをスタート地点とする。
- 上下左右のマスをランダムに選び、そこが通路でなければ通路にして、そのマスに移動する。
- 移動した先のマスで、「2」を繰り返す。
- 四方に通路を作成出来るマスがない場合、一つ前のマスに戻る。
- 戻った先でも、通路作成可能なマスが無ければさらにもう一つマスを戻る。通路作成可能なマスがくるまで戻る。
- 通路作成可能なマスがあったら「2」の工程を行い、新しく通路を掘り進める。全マス処理されれば完了
アニメーションさせるとこんな感じ。
赤色が先頭、青が通ったマスで、緑が引き返したマス。
開始点や乱数のシード値を変えると、別な迷路が出来上がります。
以下はシーンのキャプチャ。迷路生成機能のほとんどはwrangleノードで実装しています。
実はネットで検索するとHoudiniのチュートリアルが見つかったのです。
見たら負けだとおもって見てない・・・・・・ちょっとしか。
・・・・・・
ウソです。何回も見た上、大部分参考にしました。
見て真似すればデキルヨ。
とはいえ、そのまま同じ作り方をするのも勉強にならないので、結構変えて作ってます。
Houdiniのwrangleはポイントやプリミティブ別にコントロール出来て非常に強力なのだけれど、逆にそのポイントやプリミティブの縛りで作り辛いと感じることもあるなと、やってて思いました。
VEXコードは恥ずかしいので晒しません。シーンファイルも晒しません。
以下、個々で使ったVexメモ
npointsgroup | ・・・ | グループ内のポイント数を返す |
inpointgroup | ・・・ | 指定ポイントがグループにあるか否か |
expandpointgroup | ・・・ | 指定ポイントグループのリストを返す |
nearpoints | ・・・ | 近接ポイントのリストを返す(グループを指定が強力で印象的) |
push | ・・・ | 配列に追加 |
pop | ・・・ | 配列の最後のエレメントを削除して、それを返す |
setpointattrib | ・・・ | ポイントアトリビュートをセットする |
setpointgroup | ・・・ | ポイントグループをセットする |
「参考」
コメント